feat: WiFi-only download mode

- Add network mode setting (any/wifi_only) in settings model
- Add connectivity check in download queue processor
- Downloads pause automatically when on mobile data (if wifi_only enabled)
- Add UI toggle in Download Settings page
- Add localization strings for network mode setting
- Bump version to 3.3.6+71
This commit is contained in:
zarzet
2026-02-02 07:13:03 +07:00
parent 107d9ca007
commit 5e19178bc0
24 changed files with 377 additions and 5 deletions
+4
View File
@@ -35,6 +35,7 @@ class AppSettings {
final String tidalHighFormat; // Format for Tidal HIGH quality: 'mp3_320' or 'opus_128'
final bool useAllFilesAccess; // Android 13+ only: enable MANAGE_EXTERNAL_STORAGE
final bool autoExportFailedDownloads; // Auto export failed downloads to TXT file
final String downloadNetworkMode; // 'any' = WiFi + Mobile, 'wifi_only' = WiFi only
const AppSettings({
this.defaultService = 'tidal',
@@ -68,6 +69,7 @@ class AppSettings {
this.tidalHighFormat = 'mp3_320',
this.useAllFilesAccess = false,
this.autoExportFailedDownloads = false,
this.downloadNetworkMode = 'any',
});
AppSettings copyWith({
@@ -103,6 +105,7 @@ class AppSettings {
String? tidalHighFormat,
bool? useAllFilesAccess,
bool? autoExportFailedDownloads,
String? downloadNetworkMode,
}) {
return AppSettings(
defaultService: defaultService ?? this.defaultService,
@@ -136,6 +139,7 @@ class AppSettings {
tidalHighFormat: tidalHighFormat ?? this.tidalHighFormat,
useAllFilesAccess: useAllFilesAccess ?? this.useAllFilesAccess,
autoExportFailedDownloads: autoExportFailedDownloads ?? this.autoExportFailedDownloads,
downloadNetworkMode: downloadNetworkMode ?? this.downloadNetworkMode,
);
}
+2
View File
@@ -41,6 +41,7 @@ AppSettings _$AppSettingsFromJson(Map<String, dynamic> json) => AppSettings(
useAllFilesAccess: json['useAllFilesAccess'] as bool? ?? false,
autoExportFailedDownloads:
json['autoExportFailedDownloads'] as bool? ?? false,
downloadNetworkMode: json['downloadNetworkMode'] as String? ?? 'any',
);
Map<String, dynamic> _$AppSettingsToJson(AppSettings instance) =>
@@ -76,4 +77,5 @@ Map<String, dynamic> _$AppSettingsToJson(AppSettings instance) =>
'tidalHighFormat': instance.tidalHighFormat,
'useAllFilesAccess': instance.useAllFilesAccess,
'autoExportFailedDownloads': instance.autoExportFailedDownloads,
'downloadNetworkMode': instance.downloadNetworkMode,
};