/// 약속: 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.dart'; import '../../l10n/tr.dart'; /// 동영상을 이동 버튼의 폴더로 옮긴다 (세부 정보의 이동 버튼 · 세 번 누르기). [target] 이 없으면 첫 번째 버튼, /// 이동 버튼이 하나도 없으면 폴더를 골라 하나 만든다 (표시 이름은 폴더 이름). /// [confirm]: 옮기기 전에 묻는다 (세 번 누르기 - 47) Future moveToTarget(BuildContext context, AppController c, List 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')), )); }