diff --git a/lib/provider/download_manager_provider.dart b/lib/provider/download_manager_provider.dart index dba35e02..db443082 100644 --- a/lib/provider/download_manager_provider.dart +++ b/lib/provider/download_manager_provider.dart @@ -33,6 +33,7 @@ class DownloadManagerProvider extends ChangeNotifier { // related to onFileExists final oldFile = File("$savePath.old"); + // if download failed and old file exists, rename it back if ((status == DownloadStatus.failed || status == DownloadStatus.canceled) && await oldFile.exists()) { @@ -84,7 +85,7 @@ class DownloadManagerProvider extends ChangeNotifier { final Ref ref; - YoutubeEndpoints get yt => ref.read(youtubeProvider); + YoutubeEndpoints get yt => ref.read(downloadYoutubeProvider); String get downloadDirectory => ref.read(userPreferencesProvider.select((s) => s.downloadLocation)); @@ -196,7 +197,7 @@ class DownloadManagerProvider extends ChangeNotifier { await addToQueue(track); } else { await Future.delayed( - const Duration(seconds: 5), + const Duration(seconds: 1), () => addToQueue(track), ); } @@ -230,6 +231,7 @@ class DownloadManagerProvider extends ChangeNotifier { void cancelAll() { for (final download in dl.getAllDownloads()) { + if (download.status.value == DownloadStatus.completed) continue; dl.cancelDownload(download.request.url); } } diff --git a/lib/provider/user_preferences_provider.dart b/lib/provider/user_preferences_provider.dart index 3a46b8f4..2a4efae2 100644 --- a/lib/provider/user_preferences_provider.dart +++ b/lib/provider/user_preferences_provider.dart @@ -281,6 +281,45 @@ class UserPreferences extends PersistedChangeNotifier { "youtubeApiType": youtubeApiType.name, }; } + + UserPreferences copyWith({ + ThemeMode? themeMode, + SpotubeColor? accentColorScheme, + bool? albumColorSync, + bool? checkUpdate, + AudioQuality? audioQuality, + String? downloadLocation, + LayoutMode? layoutMode, + CloseBehavior? closeBehavior, + bool? showSystemTrayIcon, + Locale? locale, + String? pipedInstance, + SearchMode? searchMode, + bool? skipNonMusic, + YoutubeApiType? youtubeApiType, + String? recommendationMarket, + bool? saveTrackLyrics, + }) { + return UserPreferences( + ref, + themeMode: themeMode ?? this.themeMode, + accentColorScheme: accentColorScheme ?? this.accentColorScheme, + albumColorSync: albumColorSync ?? this.albumColorSync, + checkUpdate: checkUpdate ?? this.checkUpdate, + audioQuality: audioQuality ?? this.audioQuality, + downloadLocation: downloadLocation ?? this.downloadLocation, + layoutMode: layoutMode ?? this.layoutMode, + closeBehavior: closeBehavior ?? this.closeBehavior, + showSystemTrayIcon: showSystemTrayIcon ?? this.showSystemTrayIcon, + locale: locale ?? this.locale, + pipedInstance: pipedInstance ?? this.pipedInstance, + searchMode: searchMode ?? this.searchMode, + skipNonMusic: skipNonMusic ?? this.skipNonMusic, + youtubeApiType: youtubeApiType ?? this.youtubeApiType, + recommendationMarket: recommendationMarket ?? this.recommendationMarket, + saveTrackLyrics: saveTrackLyrics ?? this.saveTrackLyrics, + ); + } } final userPreferencesProvider = ChangeNotifierProvider( diff --git a/lib/provider/youtube_provider.dart b/lib/provider/youtube_provider.dart index 0e7b7d0e..20b5ba2b 100644 --- a/lib/provider/youtube_provider.dart +++ b/lib/provider/youtube_provider.dart @@ -6,3 +6,13 @@ final youtubeProvider = Provider((ref) { final preferences = ref.watch(userPreferencesProvider); return YoutubeEndpoints(preferences); }); + +// this provider overrides the API provider to use piped.video for downloading +final downloadYoutubeProvider = Provider((ref) { + final preferences = ref.watch(userPreferencesProvider); + return YoutubeEndpoints( + preferences.copyWith( + youtubeApiType: YoutubeApiType.piped, + ), + ); +});