Add new settings dlUseAvgSpeed

This commit is contained in:
2024-05-25 19:03:54 +08:00
parent e392246424
commit b55c08b99b
4 changed files with 53 additions and 5 deletions

View File

@@ -137,8 +137,14 @@ class _TaskPage extends State<TaskPage> {
return Text(i18n.fetchingMetadata); return Text(i18n.fetchingMetadata);
} }
double speed = 0; double speed = 0;
for (final e in p.details) { final dlUseAvgSpeed = prefs.getBool("dlUseAvgSpeed") ?? false;
speed += e.speed; 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) { if (p.failedPage == 0) {
final percent = p.downloadedPage / p.totalPage; final percent = p.downloadedPage / p.totalPage;
@@ -221,6 +227,7 @@ class _TaskPage extends State<TaskPage> {
final p = task.progress as TaskDownloadProgess; final p = task.progress as TaskDownloadProgess;
if (p.details.isEmpty) return SliverToBoxAdapter(child: Container()); if (p.details.isEmpty) return SliverToBoxAdapter(child: Container());
final i18n = AppLocalizations.of(context)!; final i18n = AppLocalizations.of(context)!;
final dlUseAvgSpeed = prefs.getBool("dlUseAvgSpeed") ?? false;
return SliverList.builder( return SliverList.builder(
itemCount: p.details.length, itemCount: p.details.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
@@ -235,6 +242,11 @@ class _TaskPage extends State<TaskPage> {
final eta = d.total == 0 final eta = d.total == 0
? double.infinity ? double.infinity
: (d.total - d.downloaded) / avgSpeed; : (d.total - d.downloaded) / avgSpeed;
final speed = dlUseAvgSpeed
? d.total == 0
? 0.0
: avgSpeed
: d.speed;
return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
SelectableText("${d.name}(${d.width}x${d.height})"), SelectableText("${d.name}(${d.width}x${d.height})"),
LinearPercentIndicator( LinearPercentIndicator(
@@ -254,7 +266,7 @@ class _TaskPage extends State<TaskPage> {
child: Text( child: Text(
"${getFileSize(d.downloaded)}/${getFileSize(d.total)}")), "${getFileSize(d.downloaded)}/${getFileSize(d.total)}")),
Text( Text(
"${getFileSize((d.speed * 1000).toInt())}/s${i18n.comma}${fmtDuration(context, eta)}"), "${getFileSize((speed * 1000).toInt())}/s${i18n.comma}${fmtDuration(context, eta)}"),
]), ]),
]); ]);
}, },

View File

@@ -191,5 +191,6 @@
} }
}, },
"category": "Category", "category": "Category",
"uploader": "Uploader" "uploader": "Uploader",
"dlUseAvgSpeed": "Show average speed in task details."
} }

View File

@@ -191,5 +191,6 @@
} }
}, },
"category": "分类", "category": "分类",
"uploader": "上传者" "uploader": "上传者",
"dlUseAvgSpeed": "在任务详情中显示平均速度。"
} }

View File

@@ -24,12 +24,14 @@ class _SettingsPage extends State<SettingsPage> with ThemeModeWidget {
bool _oriShowNsfw = false; bool _oriShowNsfw = false;
bool _oriShowTranslatedTag = false; bool _oriShowTranslatedTag = false;
bool _oriUseTitleJpn = false; bool _oriUseTitleJpn = false;
bool _oriDlUseAvgSpeed = false;
bool _displayAd = false; bool _displayAd = false;
Lang _lang = Lang.system; Lang _lang = Lang.system;
bool _preventScreenCapture = false; bool _preventScreenCapture = false;
bool _showNsfw = false; bool _showNsfw = false;
bool _showTranslatedTag = false; bool _showTranslatedTag = false;
bool _useTitleJpn = false; bool _useTitleJpn = false;
bool _dlUseAvgSpeed = false;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@@ -82,6 +84,14 @@ class _SettingsPage extends State<SettingsPage> with ThemeModeWidget {
_oriPreventScreenCapture = false; _oriPreventScreenCapture = false;
_preventScreenCapture = 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) { void fallback(BuildContext context) {
@@ -99,6 +109,7 @@ class _SettingsPage extends State<SettingsPage> with ThemeModeWidget {
_displayAd = false; _displayAd = false;
_showTranslatedTag = _oriLang.toLocale().languageCode == "zh"; _showTranslatedTag = _oriLang.toLocale().languageCode == "zh";
_preventScreenCapture = false; _preventScreenCapture = false;
_dlUseAvgSpeed = false;
}); });
} }
@@ -159,6 +170,14 @@ class _SettingsPage extends State<SettingsPage> with ThemeModeWidget {
} }
} }
} }
if (_dlUseAvgSpeed != _oriDlUseAvgSpeed) {
if (!await prefs.setBool("dlUseAvgSpeed", _dlUseAvgSpeed)) {
re = false;
_log.warning("Failed to save dlUseAvgSpeed.");
} else {
_oriDlUseAvgSpeed = _dlUseAvgSpeed;
}
}
return re; return re;
} }
@@ -297,6 +316,21 @@ class _SettingsPage extends State<SettingsPage> with ThemeModeWidget {
), ),
) )
: Container(), : 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( Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [