JJ_MKVMaker/lib/ui/home/move_to_target.dart

49 lines
2.0 KiB
Dart

/// 약속: MKV 목록의 동영상을 이동 버튼 폴더로 옮긴다 (확인 · 결과 알림).
library;
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:path/path.dart' as p;
import '../../app/app_controller.dart';
import '../../core/models.dart';
import '../../app/settings.dart' show MoveTarget;
import '../folder_picker.dart';
import '../confirm_dialog.dart';
import '../../l10n/tr.dart';
/// 동영상을 이동 버튼의 폴더로 옮긴다 (세부 정보의 이동 버튼 · 세 번 누르기). [target] 이 없으면 첫 번째 버튼,
/// 이동 버튼이 하나도 없으면 폴더를 골라 하나 만든다 (표시 이름은 폴더 이름).
/// [confirm]: 옮기기 전에 묻는다 (세 번 누르기 - 47)
Future<void> moveToTarget(BuildContext context, AppController c, List<VideoItem> videos,
{MoveTarget? target, bool confirm = false}) async {
if (videos.isEmpty) return;
final messenger = ScaffoldMessenger.maybeOf(context);
var t = target ?? c.settings.mkv.moveTargets.firstOrNull;
if (t == null) {
final d = await pickFolder(context, tr('이동 폴더 (환경 설정에서 바꿀 수 있음)'));
if (d == null) return;
t = MoveTarget(p.basename(d).isEmpty ? tr('이동') : p.basename(d), d);
final add = t;
await c.updateSettings((x) => x.mkv.moveTargets = [...x.mkv.moveTargets, add]);
} else if (confirm && context.mounted) {
final ok = await confirmAction(
context,
title: tr('파일 옮기기'),
body: '${trf('"{0}" 을(를) "{1}" 폴더로 옮길까요?', [videos.length == 1 ? videos.single.fileName : trf('{0}개', [videos.length]), t.name])}'
'\n${t.dir}\n\n${tr('(동영상을 세 번 누르면 옮깁니다)')}',
ok: tr('옮기기'),
danger: false,
);
if (!ok) return;
}
final (moved, errors) = await c.moveVideos(videos, t.dir);
messenger?.showSnackBar(SnackBar(
content: Text([
if (moved > 0) trf('{0}개를 옮겼습니다 → {1} ({2})', [moved, t.name, t.dir]),
...errors,
].join('\n')),
));
}