Skip to content

Commit

Permalink
🐛 Bug fixes on cross source track fetching
Browse files Browse the repository at this point in the history
  • Loading branch information
LittleSheep2Code committed Sep 11, 2024
1 parent d860936 commit 1913a7e
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 4 deletions.
15 changes: 15 additions & 0 deletions lib/services/sourced_track/sourced_track.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
7 changes: 6 additions & 1 deletion lib/services/sourced_track/sources/kugou.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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(
Expand Down
8 changes: 7 additions & 1 deletion lib/services/sourced_track/sources/netease.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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);
Expand Down
8 changes: 8 additions & 0 deletions lib/services/sourced_track/sources/piped.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
7 changes: 6 additions & 1 deletion lib/services/sourced_track/sources/youtube.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 1913a7e

Please sign in to comment.