aves_mio100/lib/widgets/collection/actions/entry_action_utils.dart
2026-07-06 14:52:45 +02:00

99 lines
2.8 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:aves/model/entry/entry.dart';
import 'package:aves/services/common/services.dart';
import 'package:aves/widgets/dialogs/aves_confirmation_dialog.dart';
/// Funzioni di utilità per le azioni sugli entry.
/// Versione ultraottimizzata, senza album, senza grouping, senza filter_grids.
class EntryActionUtils {
// ------------------------------------------------------------
// COPY
// ------------------------------------------------------------
static Future<void> copyEntries(
BuildContext context,
List<AvesEntry> entries,
) async {
if (entries.isEmpty) return;
final targetDir = await _pickTargetDirectory(context);
if (targetDir == null) return;
for (final entry in entries) {
try {
await mediaEditService.copyEntry(entry, targetDir);
} catch (e) {
_show(context, 'Errore copia: $e');
}
}
_show(context, 'Copia completata');
}
// ------------------------------------------------------------
// MOVE
// ------------------------------------------------------------
static Future<void> moveEntries(
BuildContext context,
List<AvesEntry> entries,
) async {
if (entries.isEmpty) return;
final targetDir = await _pickTargetDirectory(context);
if (targetDir == null) return;
for (final entry in entries) {
try {
await mediaEditService.moveEntry(entry, targetDir);
} catch (e) {
_show(context, 'Errore spostamento: $e');
}
}
_show(context, 'Spostamento completato');
}
// ------------------------------------------------------------
// DIRECTORY PICKER (semplice e moderno)
// ------------------------------------------------------------
static Future<String?> _pickTargetDirectory(BuildContext context) async {
try {
final dir = await appService.pickDirectory();
return dir;
} catch (e) {
_show(context, 'Errore selezione cartella: $e');
return null;
}
}
// ------------------------------------------------------------
// DELETE CONFIRMATION (usato anche da altri handler)
// ------------------------------------------------------------
static Future<bool> confirmDelete(
BuildContext context,
int count,
) async {
final result = await showDialog<bool>(
context: context,
builder: (_) => AvesConfirmationDialog(
title: 'Elimina',
message: 'Vuoi eliminare $count elementi?',
),
);
return result == true;
}
// ------------------------------------------------------------
// UTILS
// ------------------------------------------------------------
static void _show(BuildContext context, String msg) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(msg)),
);
}
}