diff --git a/lib/pages/library/local_folder.dart b/lib/pages/library/local_folder.dart index 16891bc1..ad1d5d82 100644 --- a/lib/pages/library/local_folder.dart +++ b/lib/pages/library/local_folder.dart @@ -37,9 +37,10 @@ class LocalLibraryPage extends HookConsumerWidget { currentTrack ??= tracks.first; final isPlaylistPlaying = playlist.containsTracks(tracks); if (!isPlaylistPlaying) { + var indexWhere = tracks.indexWhere((s) => s.id == currentTrack?.id); await playback.load( tracks, - initialIndex: tracks.indexWhere((s) => s.id == currentTrack?.id), + initialIndex: indexWhere, autoPlay: true, ); } else if (isPlaylistPlaying && diff --git a/lib/provider/audio_player/audio_player.dart b/lib/provider/audio_player/audio_player.dart index 437b666e..3bc71942 100644 --- a/lib/provider/audio_player/audio_player.dart +++ b/lib/provider/audio_player/audio_player.dart @@ -1,5 +1,6 @@ import 'dart:math'; +import 'package:collection/collection.dart'; import 'package:drift/drift.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:media_kit/media_kit.dart' hide Track; @@ -11,6 +12,7 @@ import 'package:spotube/provider/audio_player/state.dart'; import 'package:spotube/provider/blacklist_provider.dart'; import 'package:spotube/provider/database/database.dart'; import 'package:spotube/provider/discord_provider.dart'; +import 'package:spotube/provider/local_tracks/local_tracks_provider.dart'; import 'package:spotube/provider/server/sourced_track.dart'; import 'package:spotube/services/audio_player/audio_player.dart'; @@ -283,7 +285,7 @@ class AudioPlayerNotifier extends Notifier { // Giving the initial track a boost so MediaKit won't skip // because of timeout final intendedActiveTrack = medias.elementAt(initialIndex); - if (intendedActiveTrack is! LocalTrack) { + if (intendedActiveTrack.track is! LocalTrack) { await ref.read(sourcedTrackProvider(intendedActiveTrack).future); } @@ -292,7 +294,7 @@ class AudioPlayerNotifier extends Notifier { await removeCollections(state.collections); await audioPlayer.openPlaylist( - medias, + medias.map((s) => s as Media).toList(), initialIndex: initialIndex, autoPlay: autoPlay, ); diff --git a/lib/services/audio_player/audio_player.dart b/lib/services/audio_player/audio_player.dart index 7915dc3b..4febecdf 100644 --- a/lib/services/audio_player/audio_player.dart +++ b/lib/services/audio_player/audio_player.dart @@ -41,9 +41,16 @@ class SpotubeMedia extends mk.Media { ); @override - String get uri => track is LocalTrack - ? (track as LocalTrack).path - : "http://${kIsWindows ? "localhost" : InternetAddress.anyIPv4.address}:$serverPort/stream/${track.id}"; + String get uri { + return switch (track) { + /// [super.uri] must be used instead of [track.path] to prevent wrong + /// path format exceptions in Windows causing [extras] to be null + LocalTrack() => super.uri, + _ => + "http://${kIsWindows ? "localhost" : InternetAddress.anyIPv4.address}:" + "$serverPort/stream/${track.id}", + }; + } factory SpotubeMedia.fromMedia(mk.Media media) { final track = media.uri.startsWith("http") @@ -56,20 +63,20 @@ class SpotubeMedia extends mk.Media { ); } - @override - operator ==(Object other) { - if (other is! SpotubeMedia) return false; + // @override + // operator ==(Object other) { + // if (other is! SpotubeMedia) return false; - final isLocal = track is LocalTrack && other.track is LocalTrack; - return isLocal - ? (other.track as LocalTrack).path == (track as LocalTrack).path - : other.track.id == track.id; - } + // final isLocal = track is LocalTrack && other.track is LocalTrack; + // return isLocal + // ? (other.track as LocalTrack).path == (track as LocalTrack).path + // : other.track.id == track.id; + // } - @override - int get hashCode => track is LocalTrack - ? (track as LocalTrack).path.hashCode - : track.id.hashCode; + // @override + // int get hashCode => track is LocalTrack + // ? (track as LocalTrack).path.hashCode + // : track.id.hashCode; } abstract class AudioPlayerInterface { diff --git a/lib/services/audio_player/audio_players_streams_mixin.dart b/lib/services/audio_player/audio_players_streams_mixin.dart index 03ce0d5d..6b9616fa 100644 --- a/lib/services/audio_player/audio_players_streams_mixin.dart +++ b/lib/services/audio_player/audio_players_streams_mixin.dart @@ -149,5 +149,8 @@ mixin SpotubeAudioPlayersStreams on AudioPlayerInterface { Stream get errorStream => _mkPlayer.stream.error; - Stream get playlistStream => _mkPlayer.stream.playlist; + Stream get playlistStream => _mkPlayer.stream.playlist.map((s){ + print("[Stream Playlist]: $s"); + return s; + }); } diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 5550ed22..0f93d754 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -15,7 +15,6 @@ #include #include #include -#include #include #include #include @@ -48,9 +47,6 @@ void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) system_theme_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "SystemThemePlugin"); system_theme_plugin_register_with_registrar(system_theme_registrar); - g_autoptr(FlPluginRegistrar) system_tray_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "SystemTrayPlugin"); - system_tray_plugin_register_with_registrar(system_tray_registrar); g_autoptr(FlPluginRegistrar) tray_manager_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "TrayManagerPlugin"); tray_manager_plugin_register_with_registrar(tray_manager_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 93bf6bc0..ff642696 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -12,7 +12,6 @@ list(APPEND FLUTTER_PLUGIN_LIST screen_retriever sqlite3_flutter_libs system_theme - system_tray tray_manager url_launcher_linux window_manager diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 8a65bb53..ea94bf6d 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -23,7 +23,6 @@ import shared_preferences_foundation import sqflite import sqlite3_flutter_libs import system_theme -import system_tray import tray_manager import url_launcher_macos import window_manager @@ -47,7 +46,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { SqflitePlugin.register(with: registry.registrar(forPlugin: "SqflitePlugin")) Sqlite3FlutterLibsPlugin.register(with: registry.registrar(forPlugin: "Sqlite3FlutterLibsPlugin")) SystemThemePlugin.register(with: registry.registrar(forPlugin: "SystemThemePlugin")) - SystemTrayPlugin.register(with: registry.registrar(forPlugin: "SystemTrayPlugin")) TrayManagerPlugin.register(with: registry.registrar(forPlugin: "TrayManagerPlugin")) UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) WindowManagerPlugin.register(with: registry.registrar(forPlugin: "WindowManagerPlugin")) diff --git a/pubspec.lock b/pubspec.lock index bd0ab415..d1d9c780 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -717,7 +717,7 @@ packages: description: path: "packages/flutter_discord_rpc" ref: cargokit - resolved-ref: "7ca0bbb786d8ce0e4bf8341b673b6c709ba69146" + resolved-ref: ed8d0d67fae7a23acc9b58c84f01d02abd8d8515 url: "https://github.com/KRTirtho/frb_plugins.git" source: git version: "0.1.0+1" @@ -1484,7 +1484,7 @@ packages: description: path: "packages/metadata_god" ref: cargokit - resolved-ref: "7ca0bbb786d8ce0e4bf8341b673b6c709ba69146" + resolved-ref: ed8d0d67fae7a23acc9b58c84f01d02abd8d8515 url: "https://github.com/KRTirtho/frb_plugins.git" source: git version: "0.5.3" @@ -1987,7 +1987,7 @@ packages: description: path: "packages/smtc_windows" ref: cargokit - resolved-ref: "7ca0bbb786d8ce0e4bf8341b673b6c709ba69146" + resolved-ref: ed8d0d67fae7a23acc9b58c84f01d02abd8d8515 url: "https://github.com/KRTirtho/frb_plugins.git" source: git version: "0.1.3" @@ -2151,15 +2151,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.0.2" - system_tray: - dependency: "direct overridden" - description: - path: "." - ref: dc7ef410d5cfec897edf060c1c4baff69f7c181c - resolved-ref: dc7ef410d5cfec897edf060c1c4baff69f7c181c - url: "https://github.com/antler119/system_tray" - source: git - version: "2.0.2" term_glyph: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 983d4001..e4b72df4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -164,17 +164,6 @@ dev_dependencies: dependency_overrides: uuid: ^4.4.0 - system_tray: - # TODO: remove this when flutter_desktop_tools gets updated - # to use [MenuItemBase] instead of [MenuItem] - git: - url: https://github.com/antler119/system_tray - ref: dc7ef410d5cfec897edf060c1c4baff69f7c181c - # media_kit_native_event_loop: # to fix "macro name must be an identifier" - # git: - # url: https://github.com/media-kit/media-kit - # path: media_kit_native_event_loop - # ref: main flutter: generate: true diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 217a7cb4..f2d60e21 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include @@ -45,8 +44,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { registry->GetRegistrarForPlugin("Sqlite3FlutterLibsPlugin")); SystemThemePluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("SystemThemePlugin")); - SystemTrayPluginRegisterWithRegistrar( - registry->GetRegistrarForPlugin("SystemTrayPlugin")); TrayManagerPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("TrayManagerPlugin")); UrlLauncherWindowsRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index cbbd2acc..bea4d801 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -14,7 +14,6 @@ list(APPEND FLUTTER_PLUGIN_LIST screen_retriever sqlite3_flutter_libs system_theme - system_tray tray_manager url_launcher_windows window_manager