diff --git a/.vscode/settings.json b/.vscode/settings.json index 3229a158..8ae9c74f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,6 +9,7 @@ "fuzzywuzzy", "gapless", "instrumentalness", + "isrc", "Mpris", "RGBO", "riverpod", diff --git a/lib/provider/server/routes/playback.dart b/lib/provider/server/routes/playback.dart index 1c7d0de7..88869cab 100644 --- a/lib/provider/server/routes/playback.dart +++ b/lib/provider/server/routes/playback.dart @@ -128,7 +128,10 @@ class ServerPlaybackRoutes { .read(sourcedTrackProvider(SpotubeMedia(track)).notifier) .refreshStreamingUrl(); - ref.read(activeSourcedTrackProvider.notifier).update(sourcedTrack); + if (playlist.activeTrack?.id == sourcedTrack?.id && + sourcedTrack != null) { + ref.read(activeSourcedTrackProvider.notifier).update(sourcedTrack); + } return await dio.get( sourcedTrack!.url, @@ -199,7 +202,10 @@ class ServerPlaybackRoutes { ? activeSourcedTrack : await ref.read(sourcedTrackProvider(SpotubeMedia(track)).future); - ref.read(activeSourcedTrackProvider.notifier).update(sourcedTrack); + if (playlist.activeTrack?.id == sourcedTrack?.id && + sourcedTrack != null) { + ref.read(activeSourcedTrackProvider.notifier).update(sourcedTrack); + } final (bytes: audioBytes, response: res) = await streamTrack(sourcedTrack!, request.headers); diff --git a/lib/services/sourced_track/sources/youtube.dart b/lib/services/sourced_track/sources/youtube.dart index 2dc0c815..12c0d885 100644 --- a/lib/services/sourced_track/sources/youtube.dart +++ b/lib/services/sourced_track/sources/youtube.dart @@ -238,32 +238,28 @@ class YoutubeSourcedTrack extends SourcedTrack { static Future> fetchFromIsrc({ required Track track, - required Provider provider, required Ref ref, }) async { final isrcResults = []; final isrc = track.externalIds?.isrc; if (isrc != null && isrc.isNotEmpty) { - final searchedVideos = await ref - .read(provider) - .searchVideos(isrc.toString()); + final searchedVideos = + await ref.read(youtubeEngineProvider).searchVideos(isrc.toString()); if (searchedVideos.isNotEmpty) { isrcResults.addAll(searchedVideos .map(YoutubeVideoInfo.fromVideo) .map((YoutubeVideoInfo videoInfo) { - final ytWords = - videoInfo.title - .toLowerCase() - .replaceAll(RegExp(r'[^a-zA-Z0-9\s]+'), '') - .split(RegExp(r'\s+')) - .where((item) => item.isNotEmpty); - final spWords = - track.name! - .toLowerCase() - .replaceAll(RegExp(r'\((.*)\)'), '') - .replaceAll(RegExp(r'[^a-zA-Z0-9\s]+'), '') - .split(RegExp(r'\s+')) - .where((item) => item.isNotEmpty); + final ytWords = videoInfo.title + .toLowerCase() + .replaceAll(RegExp(r'[^a-zA-Z0-9\s]+'), '') + .split(RegExp(r'\s+')) + .where((item) => item.isNotEmpty); + final spWords = track.name! + .toLowerCase() + .replaceAll(RegExp(r'\((.*)\)'), '') + .replaceAll(RegExp(r'[^a-zA-Z0-9\s]+'), '') + .split(RegExp(r'\s+')) + .where((item) => item.isNotEmpty); // Word match to filter out unrelated results final matchCount = ytWords.where((word) => spWords.contains(word)).length; @@ -271,8 +267,9 @@ class YoutubeSourcedTrack extends SourcedTrack { return videoInfo; } return null; - } - ).whereType().toList()); + }) + .whereType() + .toList()); } } return isrcResults; @@ -284,22 +281,31 @@ class YoutubeSourcedTrack extends SourcedTrack { }) async { final videoResults = []; - final isrcResults = await fetchFromIsrc(track: track, provider: youtubeEngineProvider, ref: ref); - videoResults.addAll(isrcResults); + if (track is! SourcedTrack) { + final isrcResults = await fetchFromIsrc( + track: track, + ref: ref, + ); - final links = await SongLinkService.links(track.id!); - final ytLink = links.firstWhereOrNull((link) => link.platform == "youtube"); + videoResults.addAll(isrcResults); - if (isrcResults.isEmpty && ytLink?.url != null) { - try { - videoResults.add( - YoutubeVideoInfo.fromVideo( - await ref.read(youtubeEngineProvider) - .getVideo(Uri.parse(ytLink!.url!).queryParameters["v"]!) - )); - } on VideoUnplayableException catch (e, stack) { - // Ignore this error and continue with the search - AppLogger.reportError(e, stack); + if (isrcResults.isEmpty) { + final links = await SongLinkService.links(track.id!); + final ytLink = links.firstWhereOrNull( + (link) => link.platform == "youtube", + ); + if (ytLink?.url != null) { + try { + videoResults.add( + YoutubeVideoInfo.fromVideo(await ref + .read(youtubeEngineProvider) + .getVideo(Uri.parse(ytLink!.url!).queryParameters["v"]!)), + ); + } on VideoUnplayableException catch (e, stack) { + // Ignore this error and continue with the search + AppLogger.reportError(e, stack); + } + } } } @@ -309,13 +315,12 @@ class YoutubeSourcedTrack extends SourcedTrack { await ref.read(youtubeEngineProvider).searchVideos(query); if (ServiceUtils.onlyContainsEnglish(query)) { - videoResults.addAll( - searchResults.map(YoutubeVideoInfo.fromVideo).toList() - ); + videoResults + .addAll(searchResults.map(YoutubeVideoInfo.fromVideo).toList()); } else { videoResults.addAll(rankResults( - searchResults.map(YoutubeVideoInfo.fromVideo).toList(), - track, + searchResults.map(YoutubeVideoInfo.fromVideo).toList(), + track, )); } diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt index 8f100774..194ef566 100644 --- a/linux/CMakeLists.txt +++ b/linux/CMakeLists.txt @@ -32,6 +32,7 @@ function(APPLY_STANDARD_SETTINGS TARGET) target_compile_options(${TARGET} PRIVATE -Wall -Werror) target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") + target_compile_options(${TARGET} PRIVATE -Wno-error=deprecated-declarations) endfunction() set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") diff --git a/pubspec.lock b/pubspec.lock index 8a9de0d0..311949d4 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -2449,10 +2449,10 @@ packages: dependency: "direct main" description: name: tray_manager - sha256: f231031c5c0eb4ad514e18ddaab27a912ddbe50335c594bc28fb0f9972ab6a84 + sha256: c2da0f0f1ddb455e721cf68d05d1281fec75cf5df0a1d3cb67b6ca0bdfd5709d url: "https://pub.dev" source: hosted - version: "0.3.1" + version: "0.4.0" type_plus: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index fd2cf9f6..01972e58 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -120,7 +120,7 @@ dependencies: test: ^1.25.7 timezone: ^0.10.0 titlebar_buttons: ^1.0.0 - tray_manager: ^0.3.0 + tray_manager: ^0.4.0 url_launcher: ^6.2.6 uuid: ^4.4.0 version: ^3.0.2