mirror of
https://github.com/lifegpc/eh_downloader_flutter.git
synced 2026-07-08 01:30:28 +08:00
Add new settings dlUseAvgSpeed
This commit is contained in:
@@ -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)}"),
|
||||||
]),
|
]),
|
||||||
]);
|
]);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -191,5 +191,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"category": "Category",
|
"category": "Category",
|
||||||
"uploader": "Uploader"
|
"uploader": "Uploader",
|
||||||
|
"dlUseAvgSpeed": "Show average speed in task details."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -191,5 +191,6 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"category": "分类",
|
"category": "分类",
|
||||||
"uploader": "上传者"
|
"uploader": "上传者",
|
||||||
|
"dlUseAvgSpeed": "在任务详情中显示平均速度。"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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: [
|
||||||
|
|||||||
Reference in New Issue
Block a user