🐛 Bug fixes on cross source track fetching
This commit is contained in:
		| @@ -82,6 +82,21 @@ abstract class SourcedTrack extends Track { | ||||
|     }; | ||||
|   } | ||||
|  | ||||
|   static Future<SourcedTrack?> reRoutineFetchFromTrack( | ||||
|       Track track, SourceMatchTableData cachedSource) { | ||||
|     final preferences = Get.find<UserPreferencesProvider>().state.value; | ||||
|     final ytOrPiped = preferences.audioSource == AudioSource.piped | ||||
|         ? PipedSourcedTrack.fetchFromTrack | ||||
|         : YoutubeSourcedTrack.fetchFromTrack; | ||||
|     final sourceInfoTrackMap = { | ||||
|       SourceType.youtube: ytOrPiped, | ||||
|       SourceType.youtubeMusic: ytOrPiped, | ||||
|       SourceType.netease: NeteaseSourcedTrack.fetchFromTrack, | ||||
|       SourceType.kugou: KugouSourcedTrack.fetchFromTrack, | ||||
|     }; | ||||
|     return sourceInfoTrackMap[cachedSource.sourceType]!(track: track); | ||||
|   } | ||||
|  | ||||
|   Future<SourcedTrack?> reRoutineSwapSiblings(SourceInfo info) { | ||||
|     final sourceInfoTrackMap = { | ||||
|       YoutubeSourceInfo: YoutubeSourcedTrack.fetchFromTrack, | ||||
|   | ||||
| @@ -51,7 +51,7 @@ class KugouSourcedTrack extends SourcedTrack { | ||||
|     return client; | ||||
|   } | ||||
|  | ||||
|   static Future<KugouSourcedTrack> fetchFromTrack({ | ||||
|   static Future<SourcedTrack> fetchFromTrack({ | ||||
|     required Track track, | ||||
|   }) async { | ||||
|     final DatabaseProvider db = Get.find(); | ||||
| @@ -86,6 +86,11 @@ class KugouSourcedTrack extends SourcedTrack { | ||||
|         sourceInfo: siblings.first.info, | ||||
|         track: track, | ||||
|       ); | ||||
|     } else if (cachedSource.sourceType != SourceType.kugou) { | ||||
|       final out = | ||||
|           await SourcedTrack.reRoutineFetchFromTrack(track, cachedSource); | ||||
|       if (out == null) throw TrackNotFoundError(track); | ||||
|       return out; | ||||
|     } | ||||
|  | ||||
|     return KugouSourcedTrack( | ||||
|   | ||||
| @@ -73,7 +73,7 @@ class NeteaseSourcedTrack extends SourcedTrack { | ||||
|     return _lookedUpRealIp!; | ||||
|   } | ||||
|  | ||||
|   static Future<NeteaseSourcedTrack> fetchFromTrack({ | ||||
|   static Future<SourcedTrack> fetchFromTrack({ | ||||
|     required Track track, | ||||
|   }) async { | ||||
|     final DatabaseProvider db = Get.find(); | ||||
| @@ -114,10 +114,16 @@ class NeteaseSourcedTrack extends SourcedTrack { | ||||
|         sourceInfo: siblings.first.info, | ||||
|         track: track, | ||||
|       ); | ||||
|     } else if (cachedSource.sourceType != SourceType.netease) { | ||||
|       final out = | ||||
|           await SourcedTrack.reRoutineFetchFromTrack(track, cachedSource); | ||||
|       if (out == null) throw TrackNotFoundError(track); | ||||
|       return out; | ||||
|     } | ||||
|  | ||||
|     final client = getClient(); | ||||
|     final resp = await client.get('/song/detail?ids=${cachedSource.sourceId}'); | ||||
|     if (resp.body?['songs'] == null) throw TrackNotFoundError(track); | ||||
|     final item = (resp.body['songs'] as List<dynamic>).firstOrNull; | ||||
|  | ||||
|     if (item == null) throw TrackNotFoundError(track); | ||||
|   | ||||
| @@ -57,6 +57,14 @@ class PipedSourcedTrack extends SourcedTrack { | ||||
|  | ||||
|     final preferences = Get.find<UserPreferencesProvider>().state.value; | ||||
|  | ||||
|     if (cachedSource?.sourceType != SourceType.youtube && | ||||
|         cachedSource?.sourceType != SourceType.youtubeMusic) { | ||||
|       final out = | ||||
|           await SourcedTrack.reRoutineFetchFromTrack(track, cachedSource!); | ||||
|       if (out == null) throw TrackNotFoundError(track); | ||||
|       return out; | ||||
|     } | ||||
|  | ||||
|     if (cachedSource == null) { | ||||
|       final siblings = await fetchSiblings(track: track); | ||||
|       if (siblings.isEmpty) { | ||||
|   | ||||
| @@ -43,7 +43,7 @@ class YoutubeSourcedTrack extends SourcedTrack { | ||||
|     required super.track, | ||||
|   }); | ||||
|  | ||||
|   static Future<YoutubeSourcedTrack> fetchFromTrack({ | ||||
|   static Future<SourcedTrack> fetchFromTrack({ | ||||
|     required Track track, | ||||
|   }) async { | ||||
|     final DatabaseProvider db = Get.find(); | ||||
| @@ -78,6 +78,11 @@ class YoutubeSourcedTrack extends SourcedTrack { | ||||
|         sourceInfo: siblings.first.info, | ||||
|         track: track, | ||||
|       ); | ||||
|     } else if (cachedSource.sourceType != SourceType.youtube) { | ||||
|       final out = | ||||
|           await SourcedTrack.reRoutineFetchFromTrack(track, cachedSource); | ||||
|       if (out == null) throw TrackNotFoundError(track); | ||||
|       return out; | ||||
|     } | ||||
|  | ||||
|     final item = await youtubeClient.videos.get(cachedSource.sourceId); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user