From b55c08b99bfe80450cd7c6701bbe361ff15fcdb7 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Sat, 25 May 2024 19:03:54 +0800 Subject: [PATCH] Add new settings dlUseAvgSpeed --- lib/dialog/task_page.dart | 18 +++++++++++++++--- lib/l10n/app_en.arb | 3 ++- lib/l10n/app_zh.arb | 3 ++- lib/settings.dart | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 53 insertions(+), 5 deletions(-) diff --git a/lib/dialog/task_page.dart b/lib/dialog/task_page.dart index e36da5e..370da69 100644 --- a/lib/dialog/task_page.dart +++ b/lib/dialog/task_page.dart @@ -137,8 +137,14 @@ class _TaskPage extends State { return Text(i18n.fetchingMetadata); } double speed = 0; - for (final e in p.details) { - speed += e.speed; + final dlUseAvgSpeed = prefs.getBool("dlUseAvgSpeed") ?? false; + if (dlUseAvgSpeed) { + final now = DateTime.now().millisecondsSinceEpoch; + if (now > p.started) speed = p.downloadedBytes / (now - p.started); + } else { + for (final e in p.details) { + speed += e.speed; + } } if (p.failedPage == 0) { final percent = p.downloadedPage / p.totalPage; @@ -221,6 +227,7 @@ class _TaskPage extends State { final p = task.progress as TaskDownloadProgess; if (p.details.isEmpty) return SliverToBoxAdapter(child: Container()); final i18n = AppLocalizations.of(context)!; + final dlUseAvgSpeed = prefs.getBool("dlUseAvgSpeed") ?? false; return SliverList.builder( itemCount: p.details.length, itemBuilder: (context, index) { @@ -235,6 +242,11 @@ class _TaskPage extends State { final eta = d.total == 0 ? double.infinity : (d.total - d.downloaded) / avgSpeed; + final speed = dlUseAvgSpeed + ? d.total == 0 + ? 0.0 + : avgSpeed + : d.speed; return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ SelectableText("${d.name}(${d.width}x${d.height})"), LinearPercentIndicator( @@ -254,7 +266,7 @@ class _TaskPage extends State { child: Text( "${getFileSize(d.downloaded)}/${getFileSize(d.total)}")), Text( - "${getFileSize((d.speed * 1000).toInt())}/s${i18n.comma}${fmtDuration(context, eta)}"), + "${getFileSize((speed * 1000).toInt())}/s${i18n.comma}${fmtDuration(context, eta)}"), ]), ]); }, diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 0ef015b..4961030 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -191,5 +191,6 @@ } }, "category": "Category", - "uploader": "Uploader" + "uploader": "Uploader", + "dlUseAvgSpeed": "Show average speed in task details." } diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index 159d818..73dfa1f 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -191,5 +191,6 @@ } }, "category": "分类", - "uploader": "上传者" + "uploader": "上传者", + "dlUseAvgSpeed": "在任务详情中显示平均速度。" } diff --git a/lib/settings.dart b/lib/settings.dart index dbce931..d38f23b 100644 --- a/lib/settings.dart +++ b/lib/settings.dart @@ -24,12 +24,14 @@ class _SettingsPage extends State with ThemeModeWidget { bool _oriShowNsfw = false; bool _oriShowTranslatedTag = false; bool _oriUseTitleJpn = false; + bool _oriDlUseAvgSpeed = false; bool _displayAd = false; Lang _lang = Lang.system; bool _preventScreenCapture = false; bool _showNsfw = false; bool _showTranslatedTag = false; bool _useTitleJpn = false; + bool _dlUseAvgSpeed = false; @override void initState() { super.initState(); @@ -82,6 +84,14 @@ class _SettingsPage extends State with ThemeModeWidget { _oriPreventScreenCapture = false; _preventScreenCapture = false; } + try { + _oriDlUseAvgSpeed = prefs.getBool("dlUseAvgSpeed") ?? false; + _dlUseAvgSpeed = _oriDlUseAvgSpeed; + } catch (e) { + _log.warning("Failed to get dlUseAvgSpeed:", e); + _oriDlUseAvgSpeed = false; + _dlUseAvgSpeed = false; + } } void fallback(BuildContext context) { @@ -99,6 +109,7 @@ class _SettingsPage extends State with ThemeModeWidget { _displayAd = false; _showTranslatedTag = _oriLang.toLocale().languageCode == "zh"; _preventScreenCapture = false; + _dlUseAvgSpeed = false; }); } @@ -159,6 +170,14 @@ class _SettingsPage extends State with ThemeModeWidget { } } } + if (_dlUseAvgSpeed != _oriDlUseAvgSpeed) { + if (!await prefs.setBool("dlUseAvgSpeed", _dlUseAvgSpeed)) { + re = false; + _log.warning("Failed to save dlUseAvgSpeed."); + } else { + _oriDlUseAvgSpeed = _dlUseAvgSpeed; + } + } return re; } @@ -297,6 +316,21 @@ class _SettingsPage extends State with ThemeModeWidget { ), ) : Container(), + Container( + padding: const EdgeInsets.symmetric(vertical: 8), + child: CheckboxMenuButton( + value: _dlUseAvgSpeed, + onChanged: (bool? value) { + if (value != null) { + setState(() { + _dlUseAvgSpeed = value; + }); + } + }, + child: Text(AppLocalizations.of(context)! + .dlUseAvgSpeed), + ), + ), Row( mainAxisAlignment: MainAxisAlignment.center, children: [