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);
}
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<TaskPage> {
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<TaskPage> {
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<TaskPage> {
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)}"),
]),
]);
},

View File

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

View File

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

View File

@@ -24,12 +24,14 @@ class _SettingsPage extends State<SettingsPage> 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<SettingsPage> 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<SettingsPage> with ThemeModeWidget {
_displayAd = false;
_showTranslatedTag = _oriLang.toLocale().languageCode == "zh";
_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;
}
@@ -297,6 +316,21 @@ class _SettingsPage extends State<SettingsPage> 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: [