From 5e19178bc0b49d324a1730063d9f3c5ef13d0bb9 Mon Sep 17 00:00:00 2001 From: zarzet Date: Mon, 2 Feb 2026 07:13:03 +0700 Subject: [PATCH] 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 --- CHANGELOG.md | 15 +++ lib/constants/app_info.dart | 4 +- lib/l10n/app_localizations.dart | 24 ++++ lib/l10n/app_localizations_de.dart | 13 +++ lib/l10n/app_localizations_en.dart | 13 +++ lib/l10n/app_localizations_es.dart | 13 +++ lib/l10n/app_localizations_fr.dart | 13 +++ lib/l10n/app_localizations_hi.dart | 13 +++ lib/l10n/app_localizations_id.dart | 13 +++ lib/l10n/app_localizations_ja.dart | 13 +++ lib/l10n/app_localizations_ko.dart | 13 +++ lib/l10n/app_localizations_nl.dart | 13 +++ lib/l10n/app_localizations_pt.dart | 13 +++ lib/l10n/app_localizations_ru.dart | 13 +++ lib/l10n/app_localizations_tr.dart | 13 +++ lib/l10n/app_localizations_zh.dart | 13 +++ lib/l10n/arb/app_en.arb | 10 ++ lib/models/settings.dart | 4 + lib/models/settings.g.dart | 2 + lib/providers/download_queue_provider.dart | 15 ++- lib/providers/settings_provider.dart | 5 + .../settings/download_settings_page.dart | 105 ++++++++++++++++++ pubspec.lock | 24 ++++ pubspec.yaml | 5 +- 24 files changed, 377 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2fff3c19..d392bb00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## [3.3.6] - 2026-02-02 + +### Added + +- **WiFi-Only Download Mode**: Option to pause downloads when not connected to WiFi + - New setting in Settings > Download > Download Network + - Choose between "WiFi + Mobile Data" or "WiFi Only" + - Downloads automatically pause on mobile data and resume on WiFi + +### Dependencies + +- Added `connectivity_plus: ^6.0.3` for network state detection + +--- + ## [3.3.5] - 2026-02-01 Same as 3.3.1 but fixes crash issues caused by FFmpeg. diff --git a/lib/constants/app_info.dart b/lib/constants/app_info.dart index 30df8638..ac6debde 100644 --- a/lib/constants/app_info.dart +++ b/lib/constants/app_info.dart @@ -1,8 +1,8 @@ /// App version and info constants /// Update version here only - all other files will reference this class AppInfo { -static const String version = '3.3.5'; - static const String buildNumber = '70'; + static const String version = '3.3.6'; + static const String buildNumber = '71'; static const String fullVersion = '$version+$buildNumber'; diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index a69ed000..7f3e5315 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -3688,6 +3688,30 @@ abstract class AppLocalizations { /// **'Save failed downloads to TXT file automatically'** String get settingsAutoExportFailedSubtitle; + /// Setting for network type preference + /// + /// In en, this message translates to: + /// **'Download Network'** + String get settingsDownloadNetwork; + + /// Network option - use any connection + /// + /// In en, this message translates to: + /// **'WiFi + Mobile Data'** + String get settingsDownloadNetworkAny; + + /// Network option - only use WiFi + /// + /// In en, this message translates to: + /// **'WiFi Only'** + String get settingsDownloadNetworkWifiOnly; + + /// Subtitle explaining network preference + /// + /// In en, this message translates to: + /// **'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'** + String get settingsDownloadNetworkSubtitle; + /// Empty queue state title /// /// In en, this message translates to: diff --git a/lib/l10n/app_localizations_de.dart b/lib/l10n/app_localizations_de.dart index f8d52093..c9eccb74 100644 --- a/lib/l10n/app_localizations_de.dart +++ b/lib/l10n/app_localizations_de.dart @@ -2025,6 +2025,19 @@ class AppLocalizationsDe extends AppLocalizations { String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; + @override + String get settingsDownloadNetwork => 'Download Network'; + + @override + String get settingsDownloadNetworkAny => 'WiFi + Mobile Data'; + + @override + String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; + + @override + String get settingsDownloadNetworkSubtitle => + 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; + @override String get queueEmpty => 'No downloads in queue'; diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index f6ad0c59..112afdcd 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -2010,6 +2010,19 @@ class AppLocalizationsEn extends AppLocalizations { String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; + @override + String get settingsDownloadNetwork => 'Download Network'; + + @override + String get settingsDownloadNetworkAny => 'WiFi + Mobile Data'; + + @override + String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; + + @override + String get settingsDownloadNetworkSubtitle => + 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; + @override String get queueEmpty => 'No downloads in queue'; diff --git a/lib/l10n/app_localizations_es.dart b/lib/l10n/app_localizations_es.dart index 19c5cc9e..48e4537c 100644 --- a/lib/l10n/app_localizations_es.dart +++ b/lib/l10n/app_localizations_es.dart @@ -2010,6 +2010,19 @@ class AppLocalizationsEs extends AppLocalizations { String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; + @override + String get settingsDownloadNetwork => 'Download Network'; + + @override + String get settingsDownloadNetworkAny => 'WiFi + Mobile Data'; + + @override + String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; + + @override + String get settingsDownloadNetworkSubtitle => + 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; + @override String get queueEmpty => 'No downloads in queue'; diff --git a/lib/l10n/app_localizations_fr.dart b/lib/l10n/app_localizations_fr.dart index a3842abb..d7b052bc 100644 --- a/lib/l10n/app_localizations_fr.dart +++ b/lib/l10n/app_localizations_fr.dart @@ -2010,6 +2010,19 @@ class AppLocalizationsFr extends AppLocalizations { String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; + @override + String get settingsDownloadNetwork => 'Download Network'; + + @override + String get settingsDownloadNetworkAny => 'WiFi + Mobile Data'; + + @override + String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; + + @override + String get settingsDownloadNetworkSubtitle => + 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; + @override String get queueEmpty => 'No downloads in queue'; diff --git a/lib/l10n/app_localizations_hi.dart b/lib/l10n/app_localizations_hi.dart index c35c0698..18d197f1 100644 --- a/lib/l10n/app_localizations_hi.dart +++ b/lib/l10n/app_localizations_hi.dart @@ -2010,6 +2010,19 @@ class AppLocalizationsHi extends AppLocalizations { String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; + @override + String get settingsDownloadNetwork => 'Download Network'; + + @override + String get settingsDownloadNetworkAny => 'WiFi + Mobile Data'; + + @override + String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; + + @override + String get settingsDownloadNetworkSubtitle => + 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; + @override String get queueEmpty => 'No downloads in queue'; diff --git a/lib/l10n/app_localizations_id.dart b/lib/l10n/app_localizations_id.dart index 33a2bb57..07c320b4 100644 --- a/lib/l10n/app_localizations_id.dart +++ b/lib/l10n/app_localizations_id.dart @@ -2023,6 +2023,19 @@ class AppLocalizationsId extends AppLocalizations { String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; + @override + String get settingsDownloadNetwork => 'Download Network'; + + @override + String get settingsDownloadNetworkAny => 'WiFi + Mobile Data'; + + @override + String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; + + @override + String get settingsDownloadNetworkSubtitle => + 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; + @override String get queueEmpty => 'Tidak ada unduhan dalam antrian'; diff --git a/lib/l10n/app_localizations_ja.dart b/lib/l10n/app_localizations_ja.dart index 68ef482a..329dd155 100644 --- a/lib/l10n/app_localizations_ja.dart +++ b/lib/l10n/app_localizations_ja.dart @@ -1997,6 +1997,19 @@ class AppLocalizationsJa extends AppLocalizations { String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; + @override + String get settingsDownloadNetwork => 'Download Network'; + + @override + String get settingsDownloadNetworkAny => 'WiFi + Mobile Data'; + + @override + String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; + + @override + String get settingsDownloadNetworkSubtitle => + 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; + @override String get queueEmpty => 'キューにダウンロードがありません'; diff --git a/lib/l10n/app_localizations_ko.dart b/lib/l10n/app_localizations_ko.dart index 5c2d7441..28ac404a 100644 --- a/lib/l10n/app_localizations_ko.dart +++ b/lib/l10n/app_localizations_ko.dart @@ -2010,6 +2010,19 @@ class AppLocalizationsKo extends AppLocalizations { String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; + @override + String get settingsDownloadNetwork => 'Download Network'; + + @override + String get settingsDownloadNetworkAny => 'WiFi + Mobile Data'; + + @override + String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; + + @override + String get settingsDownloadNetworkSubtitle => + 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; + @override String get queueEmpty => 'No downloads in queue'; diff --git a/lib/l10n/app_localizations_nl.dart b/lib/l10n/app_localizations_nl.dart index dd263eb2..c49a41c8 100644 --- a/lib/l10n/app_localizations_nl.dart +++ b/lib/l10n/app_localizations_nl.dart @@ -2010,6 +2010,19 @@ class AppLocalizationsNl extends AppLocalizations { String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; + @override + String get settingsDownloadNetwork => 'Download Network'; + + @override + String get settingsDownloadNetworkAny => 'WiFi + Mobile Data'; + + @override + String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; + + @override + String get settingsDownloadNetworkSubtitle => + 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; + @override String get queueEmpty => 'No downloads in queue'; diff --git a/lib/l10n/app_localizations_pt.dart b/lib/l10n/app_localizations_pt.dart index a4a5a947..e5af1901 100644 --- a/lib/l10n/app_localizations_pt.dart +++ b/lib/l10n/app_localizations_pt.dart @@ -2010,6 +2010,19 @@ class AppLocalizationsPt extends AppLocalizations { String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; + @override + String get settingsDownloadNetwork => 'Download Network'; + + @override + String get settingsDownloadNetworkAny => 'WiFi + Mobile Data'; + + @override + String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; + + @override + String get settingsDownloadNetworkSubtitle => + 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; + @override String get queueEmpty => 'No downloads in queue'; diff --git a/lib/l10n/app_localizations_ru.dart b/lib/l10n/app_localizations_ru.dart index fb5e8cab..2ce3cb22 100644 --- a/lib/l10n/app_localizations_ru.dart +++ b/lib/l10n/app_localizations_ru.dart @@ -2049,6 +2049,19 @@ class AppLocalizationsRu extends AppLocalizations { String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; + @override + String get settingsDownloadNetwork => 'Download Network'; + + @override + String get settingsDownloadNetworkAny => 'WiFi + Mobile Data'; + + @override + String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; + + @override + String get settingsDownloadNetworkSubtitle => + 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; + @override String get queueEmpty => 'Нет загрузок в очереди'; diff --git a/lib/l10n/app_localizations_tr.dart b/lib/l10n/app_localizations_tr.dart index 17130ffd..cd339afa 100644 --- a/lib/l10n/app_localizations_tr.dart +++ b/lib/l10n/app_localizations_tr.dart @@ -2025,6 +2025,19 @@ class AppLocalizationsTr extends AppLocalizations { String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; + @override + String get settingsDownloadNetwork => 'Download Network'; + + @override + String get settingsDownloadNetworkAny => 'WiFi + Mobile Data'; + + @override + String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; + + @override + String get settingsDownloadNetworkSubtitle => + 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; + @override String get queueEmpty => 'No downloads in queue'; diff --git a/lib/l10n/app_localizations_zh.dart b/lib/l10n/app_localizations_zh.dart index 33367ed3..4f29acfa 100644 --- a/lib/l10n/app_localizations_zh.dart +++ b/lib/l10n/app_localizations_zh.dart @@ -2010,6 +2010,19 @@ class AppLocalizationsZh extends AppLocalizations { String get settingsAutoExportFailedSubtitle => 'Save failed downloads to TXT file automatically'; + @override + String get settingsDownloadNetwork => 'Download Network'; + + @override + String get settingsDownloadNetworkAny => 'WiFi + Mobile Data'; + + @override + String get settingsDownloadNetworkWifiOnly => 'WiFi Only'; + + @override + String get settingsDownloadNetworkSubtitle => + 'Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.'; + @override String get queueEmpty => 'No downloads in queue'; diff --git a/lib/l10n/arb/app_en.arb b/lib/l10n/arb/app_en.arb index 0972cd49..02130603 100644 --- a/lib/l10n/arb/app_en.arb +++ b/lib/l10n/arb/app_en.arb @@ -1476,6 +1476,16 @@ "@settingsAutoExportFailed": {"description": "Setting toggle for auto-export"}, "settingsAutoExportFailedSubtitle": "Save failed downloads to TXT file automatically", "@settingsAutoExportFailedSubtitle": {"description": "Subtitle for auto-export setting"}, + + "settingsDownloadNetwork": "Download Network", + "@settingsDownloadNetwork": {"description": "Setting for network type preference"}, + "settingsDownloadNetworkAny": "WiFi + Mobile Data", + "@settingsDownloadNetworkAny": {"description": "Network option - use any connection"}, + "settingsDownloadNetworkWifiOnly": "WiFi Only", + "@settingsDownloadNetworkWifiOnly": {"description": "Network option - only use WiFi"}, + "settingsDownloadNetworkSubtitle": "Choose which network to use for downloads. When set to WiFi Only, downloads will pause on mobile data.", + "@settingsDownloadNetworkSubtitle": {"description": "Subtitle explaining network preference"}, + "queueEmpty": "No downloads in queue", "@queueEmpty": {"description": "Empty queue state title"}, "queueEmptySubtitle": "Add tracks from the home screen", diff --git a/lib/models/settings.dart b/lib/models/settings.dart index 426c1b57..8287b694 100644 --- a/lib/models/settings.dart +++ b/lib/models/settings.dart @@ -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, ); } diff --git a/lib/models/settings.g.dart b/lib/models/settings.g.dart index 69da84bb..c66fbf90 100644 --- a/lib/models/settings.g.dart +++ b/lib/models/settings.g.dart @@ -41,6 +41,7 @@ AppSettings _$AppSettingsFromJson(Map json) => AppSettings( useAllFilesAccess: json['useAllFilesAccess'] as bool? ?? false, autoExportFailedDownloads: json['autoExportFailedDownloads'] as bool? ?? false, + downloadNetworkMode: json['downloadNetworkMode'] as String? ?? 'any', ); Map _$AppSettingsToJson(AppSettings instance) => @@ -76,4 +77,5 @@ Map _$AppSettingsToJson(AppSettings instance) => 'tidalHighFormat': instance.tidalHighFormat, 'useAllFilesAccess': instance.useAllFilesAccess, 'autoExportFailedDownloads': instance.autoExportFailedDownloads, + 'downloadNetworkMode': instance.downloadNetworkMode, }; diff --git a/lib/providers/download_queue_provider.dart b/lib/providers/download_queue_provider.dart index caac069e..acd9b87b 100644 --- a/lib/providers/download_queue_provider.dart +++ b/lib/providers/download_queue_provider.dart @@ -5,6 +5,7 @@ import 'dart:io'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:path_provider/path_provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:spotiflac_android/models/download_item.dart'; import 'package:spotiflac_android/models/settings.dart'; import 'package:spotiflac_android/models/track.dart'; @@ -1597,9 +1598,21 @@ void removeItem(String id) { } } - Future _processQueue() async { +Future _processQueue() async { if (state.isProcessing) return; + // Check network connectivity before starting + final settings = ref.read(settingsProvider); + if (settings.downloadNetworkMode == 'wifi_only') { + final connectivityResult = await Connectivity().checkConnectivity(); + final hasWifi = connectivityResult.contains(ConnectivityResult.wifi); + if (!hasWifi) { + _log.w('WiFi-only mode enabled but no WiFi connection. Queue paused.'); + state = state.copyWith(isProcessing: false, isPaused: true); + return; + } + } + state = state.copyWith(isProcessing: true); _log.i('Starting queue processing...'); diff --git a/lib/providers/settings_provider.dart b/lib/providers/settings_provider.dart index 7e2ec0d0..1cd5b16c 100644 --- a/lib/providers/settings_provider.dart +++ b/lib/providers/settings_provider.dart @@ -245,6 +245,11 @@ void setUseAllFilesAccess(bool enabled) { state = state.copyWith(autoExportFailedDownloads: enabled); _saveSettings(); } + + void setDownloadNetworkMode(String mode) { + state = state.copyWith(downloadNetworkMode: mode); + _saveSettings(); + } } final settingsProvider = NotifierProvider( diff --git a/lib/screens/settings/download_settings_page.dart b/lib/screens/settings/download_settings_page.dart index 0d8c0a44..1821370e 100644 --- a/lib/screens/settings/download_settings_page.dart +++ b/lib/screens/settings/download_settings_page.dart @@ -407,6 +407,49 @@ class _DownloadSettingsPageState extends ConsumerState { ), ), + const SliverToBoxAdapter(child: SizedBox(height: 16)), + + // Download Network Mode + SliverToBoxAdapter( + child: SettingsGroup( + children: [ + SettingsItem( + icon: Icons.wifi, + title: context.l10n.settingsDownloadNetwork, + subtitle: settings.downloadNetworkMode == 'wifi_only' + ? context.l10n.settingsDownloadNetworkWifiOnly + : context.l10n.settingsDownloadNetworkAny, + onTap: () => _showNetworkModePicker(context, ref, settings.downloadNetworkMode), + showDivider: false, + ), + ], + ), + ), + SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.fromLTRB(16, 8, 16, 0), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon( + Icons.info_outline, + size: 16, + color: colorScheme.onSurfaceVariant, + ), + const SizedBox(width: 8), + Expanded( + child: Text( + context.l10n.settingsDownloadNetworkSubtitle, + style: Theme.of(context).textTheme.bodySmall?.copyWith( + color: colorScheme.onSurfaceVariant, + ), + ), + ), + ], + ), + ), + ), + const SliverToBoxAdapter(child: SizedBox(height: 32)), ], ), @@ -959,6 +1002,68 @@ ListTile( ); } + void _showNetworkModePicker( + BuildContext context, + WidgetRef ref, + String current, + ) { + final colorScheme = Theme.of(context).colorScheme; + showModalBottomSheet( + context: context, + backgroundColor: colorScheme.surfaceContainerHigh, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.vertical(top: Radius.circular(28)), + ), + builder: (context) => SafeArea( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(24, 24, 24, 8), + child: Text( + context.l10n.settingsDownloadNetwork, + style: Theme.of( + context, + ).textTheme.titleLarge?.copyWith(fontWeight: FontWeight.bold), + ), + ), + Padding( + padding: const EdgeInsets.fromLTRB(24, 0, 24, 16), + child: Text( + context.l10n.settingsDownloadNetworkSubtitle, + style: Theme.of(context).textTheme.bodyMedium?.copyWith( + color: colorScheme.onSurfaceVariant, + ), + ), + ), + ListTile( + leading: const Icon(Icons.signal_cellular_alt), + title: Text(context.l10n.settingsDownloadNetworkAny), + subtitle: const Text('WiFi + Mobile Data'), + trailing: current == 'any' ? Icon(Icons.check, color: colorScheme.primary) : null, + onTap: () { + ref.read(settingsProvider.notifier).setDownloadNetworkMode('any'); + Navigator.pop(context); + }, + ), + ListTile( + leading: const Icon(Icons.wifi), + title: Text(context.l10n.settingsDownloadNetworkWifiOnly), + subtitle: const Text('Pause downloads on mobile data'), + trailing: current == 'wifi_only' ? Icon(Icons.check, color: colorScheme.primary) : null, + onTap: () { + ref.read(settingsProvider.notifier).setDownloadNetworkMode('wifi_only'); + Navigator.pop(context); + }, + ), + const SizedBox(height: 16), + ], + ), + ), + ); + } + void _showFolderOrganizationPicker( BuildContext context, WidgetRef ref, diff --git a/pubspec.lock b/pubspec.lock index e08f6ee5..54c7c1a4 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -185,6 +185,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.19.1" + connectivity_plus: + dependency: "direct main" + description: + name: connectivity_plus + sha256: b5e72753cf63becce2c61fd04dfe0f1c430cc5278b53a1342dc5ad839eab29ec + url: "https://pub.dev" + source: hosted + version: "6.1.5" + connectivity_plus_platform_interface: + dependency: transitive + description: + name: connectivity_plus_platform_interface + sha256: "42657c1715d48b167930d5f34d00222ac100475f73d10162ddf43e714932f204" + url: "https://pub.dev" + source: hosted + version: "2.0.1" convert: dependency: transitive description: @@ -637,6 +653,14 @@ packages: url: "https://pub.dev" source: hosted version: "5.6.1" + nm: + dependency: transitive + description: + name: nm + sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" + url: "https://pub.dev" + source: hosted + version: "0.5.0" node_preamble: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index a8ea5b0a..6b803abe 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: spotiflac_android description: Download Spotify tracks in FLAC from Tidal, Qobuz & Amazon Music publish_to: "none" -version: 3.3.5+70 +version: 3.3.6+71 environment: sdk: ^3.10.0 @@ -28,9 +28,10 @@ dependencies: path: ^1.9.0 sqflite: ^2.4.1 - # HTTP & Network +# HTTP & Network http: ^1.6.0 dio: ^5.8.0 + connectivity_plus: ^6.0.3 # UI Components cupertino_icons: ^1.0.8