diff --git a/lib/ui/home/downloads/downloads_ui.dart b/lib/ui/home/downloads/downloads_ui.dart index a200860..633a616 100644 --- a/lib/ui/home/downloads/downloads_ui.dart +++ b/lib/ui/home/downloads/downloads_ui.dart @@ -14,6 +14,34 @@ class DownloadsUI extends BaseUI { content: Column( children: [ const SizedBox(height: 12), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + for (final item in , String>{ + if (model.tasks.isNotEmpty) + const MapEntry("pause_all", FluentIcons.pause): "暂停全部" + else + const MapEntry("resume_all", FluentIcons.download): "恢复全部", + const MapEntry("cancel_all", FluentIcons.cancel): "取消全部", + }.entries) + Padding( + padding: const EdgeInsets.only(left: 6, right: 6), + child: Button( + child: Padding( + padding: const EdgeInsets.all(4), + child: Row( + children: [ + Icon(item.key.value), + const SizedBox(width: 6), + Text(item.value), + ], + ), + ), + onPressed: () => model.onTapButton(item.key.key)), + ), + const SizedBox(width: 12), + ], + ), Expanded( child: ListView.builder( itemBuilder: (BuildContext context, int index) { @@ -26,8 +54,11 @@ class DownloadsUI extends BaseUI { Column( children: [ Container( - padding: const EdgeInsets.only( - left: 24, right: 24, top: 12, bottom: 12), + padding: EdgeInsets.only( + left: 24, + right: 24, + top: index == 0 ? 0 : 12, + bottom: 12), margin: const EdgeInsets.only(top: 6, bottom: 6), child: Row( children: [ @@ -150,8 +181,7 @@ class DownloadsUI extends BaseUI { size: 14, ), text: const Text('打开文件夹'), - onPressed: () => - model.openFolder(task)), + onPressed: () => model.openFolder(task)), ], ), const SizedBox(width: 12), diff --git a/lib/ui/home/downloads/downloads_ui_model.dart b/lib/ui/home/downloads/downloads_ui_model.dart index 3877eb4..d540a85 100644 --- a/lib/ui/home/downloads/downloads_ui_model.dart +++ b/lib/ui/home/downloads/downloads_ui_model.dart @@ -31,7 +31,29 @@ class DownloadsUIModel extends BaseUIModel { _listenDownloader(); } - onTapButton(String key) {} + onTapButton(String key) async { + switch (key) { + case "pause_all": + await Aria2cManager.aria2c.pauseAll(); + return; + case "resume_all": + await Aria2cManager.aria2c.unpauseAll(); + return; + case "cancel_all": + final userOK = await showConfirmDialogs( + context!, "确认取消全部任务?", const Text("如果文件不再需要,你可能需要手动删除下载文件。")); + if (userOK == true) { + try { + for (var value in [...tasks, ...waitingTasks]) { + await Aria2cManager.aria2c.remove(value.gid!); + } + } catch (e) { + dPrint("DownloadsUIModel cancel_all Error: $e"); + } + } + return; + } + } _listenDownloader() async { try { @@ -122,7 +144,7 @@ class DownloadsUIModel extends BaseUIModel { await Future.delayed(const Duration(milliseconds: 300)); if (gid != null) { final ok = await showConfirmDialogs( - context!, "确认取消下载?", const Text("你可能需要手动删除下载文件。")); + context!, "确认取消下载?", const Text("如果文件不再需要,你可能需要手动删除下载文件。")); if (ok == true) { await Aria2cManager.aria2c.remove(gid); } diff --git a/lib/ui/tools/tools_ui_model.dart b/lib/ui/tools/tools_ui_model.dart index 2b6c498..d020277 100644 --- a/lib/ui/tools/tools_ui_model.dart +++ b/lib/ui/tools/tools_ui_model.dart @@ -384,13 +384,11 @@ class ToolsUIModel extends BaseUIModel { try { final b64Str = base64Encode(btData.data!); - dPrint(b64Str); final gid = await Aria2cManager.aria2c .addTorrent(b64Str, extraParams: {"dir": savePath}); _working = false; dPrint("Aria2cManager.aria2c.addUri resp === $gid"); await Aria2cManager.aria2c.saveSession(); - await showToast(context!, "创建下载任务成功!"); BaseUIContainer( uiCreate: () => DownloadsUI(), modelCreate: () => DownloadsUIModel()).push(context!);