🐛 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); | ||||
|   | ||||
| @@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev | ||||
| # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html | ||||
| # In Windows, build-name is used as the major, minor, and patch parts | ||||
| # of the product and file versions while build-number is used as the build suffix. | ||||
| version: 1.0.0+17 | ||||
| version: 1.0.0+18 | ||||
|  | ||||
| environment: | ||||
|   sdk: ^3.5.0 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user