feat: always uses piped api for download to avoid IP block

This commit is contained in:
Kingkor Roy Tirtho 2023-08-07 16:40:15 +06:00
parent 27fcedc252
commit 869d063023
3 changed files with 53 additions and 2 deletions

View File

@ -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<DownloadManagerProvider> 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);
}
}

View File

@ -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(

View File

@ -6,3 +6,13 @@ final youtubeProvider = Provider<YoutubeEndpoints>((ref) {
final preferences = ref.watch(userPreferencesProvider);
return YoutubeEndpoints(preferences);
});
// this provider overrides the API provider to use piped.video for downloading
final downloadYoutubeProvider = Provider<YoutubeEndpoints>((ref) {
final preferences = ref.watch(userPreferencesProvider);
return YoutubeEndpoints(
preferences.copyWith(
youtubeApiType: YoutubeApiType.piped,
),
);
});