From 0eb78d14ca4da02d29e180d13569b950462ab088 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Thu, 1 Aug 2024 14:15:40 +0600 Subject: [PATCH 01/11] chore: use frb based plugins from git --- .github/workflows/spotube-release-binary.yml | 4 + lib/main.dart | 5 + lib/provider/download_manager_provider.dart | 2 +- .../local_tracks/local_tracks_provider.dart | 96 +++--- .../audio_services/smtc_windows_web.dart | 276 ------------------ .../audio_services/windows_audio_service.dart | 10 +- macos/Podfile.lock | 10 +- pubspec.lock | 92 ++---- pubspec.yaml | 23 +- 9 files changed, 118 insertions(+), 400 deletions(-) delete mode 100644 lib/services/audio_services/smtc_windows_web.dart diff --git a/.github/workflows/spotube-release-binary.yml b/.github/workflows/spotube-release-binary.yml index a67e9c135..8fcf228ab 100644 --- a/.github/workflows/spotube-release-binary.yml +++ b/.github/workflows/spotube-release-binary.yml @@ -82,6 +82,10 @@ jobs: - name: Set up Docker Buildx if: ${{matrix.platform == 'linux_arm'}} uses: docker/setup-buildx-action@v3 + - name: Setup Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + toolchain: stable - name: Install ${{matrix.platform}} dependencies run: | diff --git a/lib/main.dart b/lib/main.dart index d1f19d7a6..64710f47c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -12,6 +12,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:local_notifier/local_notifier.dart'; import 'package:media_kit/media_kit.dart'; import 'package:metadata_god/metadata_god.dart'; +import 'package:smtc_windows/smtc_windows.dart'; import 'package:spotube/collections/env.dart'; import 'package:spotube/collections/initializers.dart'; import 'package:spotube/collections/routes.dart'; @@ -91,6 +92,10 @@ Future main(List rawArgs) async { await FlutterDiscordRPC.initialize(Env.discordAppId); } + if(kIsWindows){ + await SMTCWindows.initialize(); + } + await KVStoreService.initialize(); await EncryptedKvStoreService.initialize(); diff --git a/lib/provider/download_manager_provider.dart b/lib/provider/download_manager_provider.dart index 0e80d729b..ec6ffc184 100644 --- a/lib/provider/download_manager_provider.dart +++ b/lib/provider/download_manager_provider.dart @@ -70,7 +70,7 @@ class DownloadManagerProvider extends ChangeNotifier { trackNumber: track.trackNumber, discNumber: track.discNumber, durationMs: track.durationMs?.toDouble() ?? 0.0, - fileSize: await file.length(), + fileSize: BigInt.from(await file.length()), trackTotal: track.album?.tracks?.length ?? 0, picture: imageBytes != null ? Picture( diff --git a/lib/provider/local_tracks/local_tracks_provider.dart b/lib/provider/local_tracks/local_tracks_provider.dart index c739722bd..ca22d8419 100644 --- a/lib/provider/local_tracks/local_tracks_provider.dart +++ b/lib/provider/local_tracks/local_tracks_provider.dart @@ -14,7 +14,7 @@ import 'package:spotube/extensions/track.dart'; import 'package:spotube/models/local_track.dart'; import 'package:spotube/provider/user_preferences/user_preferences_provider.dart'; // ignore: depend_on_referenced_packages -import 'package:flutter_rust_bridge/flutter_rust_bridge.dart' show FfiException; +import 'package:flutter_rust_bridge/flutter_rust_bridge.dart' show FrbException; const supportedAudioTypes = [ "audio/webm", @@ -37,7 +37,7 @@ final localTracksProvider = FutureProvider>>((ref) async { try { if (kIsWeb) return {}; - final Map> tracks = {}; + final Map> libraryToTracks = {}; final downloadLocation = ref.watch( userPreferencesProvider.select((s) => s.downloadLocation), @@ -52,59 +52,61 @@ final localTracksProvider = for (final location in [downloadLocation, ...localLibraryLocations]) { if (location.isEmpty) continue; - final entities = []; + final entities = []; if (await Directory(location).exists()) { try { - entities.addAll(Directory(location).listSync(recursive: true)); + final dirEntities = + await Directory(location).list(recursive: true).toList(); + + entities.addAll( + dirEntities + .where( + (e) => + e is File && + supportedAudioTypes.contains(lookupMimeType(e.path)), + ) + .cast(), + ); } catch (e, stack) { AppLogger.reportError(e, stack); } } - final filesWithMetadata = (await Future.wait( - entities.map((e) => File(e.path)).where((file) { - final mimetype = lookupMimeType(file.path); - return mimetype != null && supportedAudioTypes.contains(mimetype); - }).map( - (file) async { - try { - final metadata = await MetadataGod.readMetadata(file: file.path) - .timeout(const Duration(seconds: 10)); + final List> filesWithMetadata = []; - final imageFile = File(join( - (await getTemporaryDirectory()).path, - "spotube", - basenameWithoutExtension(file.path) + - imgMimeToExt[metadata.picture?.mimeType ?? "image/jpeg"]!, - )); - if (!await imageFile.exists() && metadata.picture != null) { - await imageFile.create(recursive: true); - await imageFile.writeAsBytes( - metadata.picture?.data ?? [], - mode: FileMode.writeOnly, - ); - } + for (final file in entities) { + try { + final metadata = await MetadataGod.readMetadata(file: file.path); - return { - "metadata": metadata, - "file": file, - "art": imageFile.path - }; - } catch (e, stack) { - if (e case FfiException() || TimeoutException()) { - return {"file": file}; - } - AppLogger.reportError(e, stack); - return {}; - } - }, - ), - )) - .where((e) => e.isNotEmpty) - .toList(); + await Future.delayed(const Duration(milliseconds: 50)); + + final imageFile = File(join( + (await getTemporaryDirectory()).path, + "spotube", + basenameWithoutExtension(file.path) + + imgMimeToExt[metadata.picture?.mimeType ?? "image/jpeg"]!, + )); + if (!await imageFile.exists() && metadata.picture != null) { + await imageFile.create(recursive: true); + await imageFile.writeAsBytes( + metadata.picture?.data ?? [], + mode: FileMode.writeOnly, + ); + } + + filesWithMetadata.add( + {"metadata": metadata, "file": file, "art": imageFile.path}, + ); + } catch (e, stack) { + if (e case FrbException() || TimeoutException()) { + filesWithMetadata.add({"file": file}); + } + AppLogger.reportError(e, stack); + continue; + } + } - // ignore: no_leading_underscores_for_local_identifiers - final _tracks = filesWithMetadata + final tracksFromMetadata = filesWithMetadata .map( (fileWithMetadata) => LocalTrack.fromTrack( track: Track().fromFile( @@ -117,9 +119,9 @@ final localTracksProvider = ) .toList(); - tracks[location] = _tracks; + libraryToTracks[location] = tracksFromMetadata; } - return tracks; + return libraryToTracks; } catch (e, stack) { AppLogger.reportError(e, stack); return {}; diff --git a/lib/services/audio_services/smtc_windows_web.dart b/lib/services/audio_services/smtc_windows_web.dart deleted file mode 100644 index 055d43be1..000000000 --- a/lib/services/audio_services/smtc_windows_web.dart +++ /dev/null @@ -1,276 +0,0 @@ -// ignore_for_file: constant_identifier_names - -class MusicMetadata { - final String? title; - final String? artist; - final String? album; - final String? albumArtist; - final String? thumbnail; - - const MusicMetadata({ - this.title, - this.artist, - this.album, - this.albumArtist, - this.thumbnail, - }); -} - -enum PlaybackStatus { - Closed, - Changing, - Stopped, - Playing, - Paused, -} - -enum PressedButton { - play, - pause, - next, - previous, - fastForward, - rewind, - stop, - record, - channelUp, - channelDown; - - static PressedButton fromString(String button) { - switch (button) { - case 'play': - return PressedButton.play; - case 'pause': - return PressedButton.pause; - case 'next': - return PressedButton.next; - case 'previous': - return PressedButton.previous; - case 'fast_forward': - return PressedButton.fastForward; - case 'rewind': - return PressedButton.rewind; - case 'stop': - return PressedButton.stop; - case 'record': - return PressedButton.record; - case 'channel_up': - return PressedButton.channelUp; - case 'channel_down': - return PressedButton.channelDown; - default: - throw Exception('Unknown button: $button'); - } - } -} - -class SMTCConfig { - final bool playEnabled; - final bool pauseEnabled; - final bool stopEnabled; - final bool nextEnabled; - final bool prevEnabled; - final bool fastForwardEnabled; - final bool rewindEnabled; - - const SMTCConfig({ - required this.playEnabled, - required this.pauseEnabled, - required this.stopEnabled, - required this.nextEnabled, - required this.prevEnabled, - required this.fastForwardEnabled, - required this.rewindEnabled, - }); -} - -enum RepeatMode { - none, - track, - list; - - static RepeatMode fromString(String value) { - switch (value) { - case 'none': - return none; - case 'track': - return track; - case 'list': - return list; - default: - throw Exception('Unknown repeat mode: $value'); - } - } - - String get asString => toString().split('.').last; -} - -class PlaybackTimeline { - final int startTimeMs; - final int endTimeMs; - final int positionMs; - final int? minSeekTimeMs; - final int? maxSeekTimeMs; - - const PlaybackTimeline({ - required this.startTimeMs, - required this.endTimeMs, - required this.positionMs, - this.minSeekTimeMs, - this.maxSeekTimeMs, - }); -} - -class SMTCWindows { - SMTCWindows({ - SMTCConfig? config, - PlaybackTimeline? timeline, - MusicMetadata? metadata, - PlaybackStatus? status, - bool? shuffleEnabled, - RepeatMode? repeatMode, - bool? enabled, - }); - - SMTCConfig get config => throw UnimplementedError(); - PlaybackTimeline get timeline => throw UnimplementedError(); - MusicMetadata get metadata => throw UnimplementedError(); - PlaybackStatus? get status => throw UnimplementedError(); - Stream get buttonPressStream => throw UnimplementedError(); - Stream get shuffleChangeStream => throw UnimplementedError(); - Stream get repeatModeChangeStream => throw UnimplementedError(); - - bool get isPlayEnabled => config.playEnabled; - bool get isPauseEnabled => config.pauseEnabled; - bool get isStopEnabled => config.stopEnabled; - bool get isNextEnabled => config.nextEnabled; - bool get isPrevEnabled => config.prevEnabled; - bool get isFastForwardEnabled => config.fastForwardEnabled; - bool get isRewindEnabled => config.rewindEnabled; - - bool get isShuffleEnabled => throw UnimplementedError(); - RepeatMode get repeatMode => throw UnimplementedError(); - bool get enabled => throw UnimplementedError(); - - Duration? get startTime => Duration(milliseconds: timeline.startTimeMs); - Duration? get endTime => Duration(milliseconds: timeline.endTimeMs); - Duration? get position => Duration(milliseconds: timeline.positionMs); - Duration? get minSeekTime => timeline.minSeekTimeMs == null - ? null - : Duration(milliseconds: timeline.minSeekTimeMs!); - Duration? get maxSeekTime => timeline.maxSeekTimeMs == null - ? null - : Duration(milliseconds: timeline.maxSeekTimeMs!); - - Future updateConfig(SMTCConfig config) { - throw UnimplementedError(); - } - - Future updateTimeline(PlaybackTimeline timeline) { - throw UnimplementedError(); - } - - Future updateMetadata(MusicMetadata metadata) { - throw UnimplementedError(); - } - - Future clearMetadata() { - throw UnimplementedError(); - } - - Future dispose() async { - throw UnimplementedError(); - } - - Future disableSmtc() { - throw UnimplementedError(); - } - - Future enableSmtc() { - throw UnimplementedError(); - } - - Future setPlaybackStatus(PlaybackStatus status) async { - throw UnimplementedError(); - } - - Future setIsPlayEnabled(bool enabled) { - throw UnimplementedError(); - } - - Future setIsPauseEnabled(bool enabled) { - throw UnimplementedError(); - } - - Future setIsStopEnabled(bool enabled) { - throw UnimplementedError(); - } - - Future setIsNextEnabled(bool enabled) { - throw UnimplementedError(); - } - - Future setIsPrevEnabled(bool enabled) { - throw UnimplementedError(); - } - - Future setIsFastForwardEnabled(bool enabled) { - throw UnimplementedError(); - } - - Future setIsRewindEnabled(bool enabled) { - throw UnimplementedError(); - } - - Future setTimeline(PlaybackTimeline timeline) { - return updateTimeline(timeline); - } - - Future setTitle(String title) { - throw UnimplementedError(); - } - - Future setArtist(String artist) { - throw UnimplementedError(); - } - - Future setAlbum(String album) { - throw UnimplementedError(); - } - - Future setAlbumArtist(String albumArtist) { - throw UnimplementedError(); - } - - Future setThumbnail(String thumbnail) { - throw UnimplementedError(); - } - - Future setPosition(Duration position) { - throw UnimplementedError(); - } - - Future setStartTime(Duration startTime) { - throw UnimplementedError(); - } - - Future setEndTime(Duration endTime) { - throw UnimplementedError(); - } - - Future setMaxSeekTime(Duration maxSeekTime) { - throw UnimplementedError(); - } - - Future setMinSeekTime(Duration minSeekTime) { - throw UnimplementedError(); - } - - Future setShuffleEnabled(bool enabled) { - throw UnimplementedError(); - } - - Future setRepeatMode(RepeatMode repeatMode) { - throw UnimplementedError(); - } -} diff --git a/lib/services/audio_services/windows_audio_service.dart b/lib/services/audio_services/windows_audio_service.dart index 0b3113fc3..8edc50696 100644 --- a/lib/services/audio_services/windows_audio_service.dart +++ b/lib/services/audio_services/windows_audio_service.dart @@ -18,7 +18,7 @@ class WindowsAudioService { WindowsAudioService(this.ref, this.audioPlayerNotifier) : smtc = SMTCWindows(enabled: false) { - smtc.setPlaybackStatus(PlaybackStatus.Stopped); + smtc.setPlaybackStatus(PlaybackStatus.stopped); final buttonStream = smtc.buttonPressStream.listen((event) { switch (event) { case PressedButton.play: @@ -45,16 +45,16 @@ class WindowsAudioService { audioPlayer.playerStateStream.listen((state) async { switch (state) { case AudioPlaybackState.playing: - await smtc.setPlaybackStatus(PlaybackStatus.Playing); + await smtc.setPlaybackStatus(PlaybackStatus.playing); break; case AudioPlaybackState.paused: - await smtc.setPlaybackStatus(PlaybackStatus.Paused); + await smtc.setPlaybackStatus(PlaybackStatus.paused); break; case AudioPlaybackState.stopped: - await smtc.setPlaybackStatus(PlaybackStatus.Stopped); + await smtc.setPlaybackStatus(PlaybackStatus.stopped); break; case AudioPlaybackState.completed: - await smtc.setPlaybackStatus(PlaybackStatus.Changing); + await smtc.setPlaybackStatus(PlaybackStatus.changing); break; default: break; diff --git a/macos/Podfile.lock b/macos/Podfile.lock index b3bed710b..9b122cbeb 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -14,7 +14,8 @@ PODS: - FlutterMacOS - file_selector_macos (0.0.1): - FlutterMacOS - - flutter_discord_rpc (0.0.1) + - flutter_discord_rpc (0.0.1): + - FlutterMacOS - flutter_inappwebview_macos (0.0.1): - FlutterMacOS - OrderedSet (~> 5.0) @@ -27,7 +28,8 @@ PODS: - FlutterMacOS - media_kit_native_event_loop (1.0.0): - FlutterMacOS - - metadata_god (0.0.1) + - metadata_god (0.0.1): + - FlutterMacOS - OrderedSet (5.0.0) - package_info_plus (0.0.1): - FlutterMacOS @@ -163,14 +165,14 @@ SPEC CHECKSUMS: desktop_webview_window: 89bb3d691f4c80314a10be312f4cd35db93a9d5a device_info_plus: ce1b7762849d3ec103d0e0517299f2db7ad60720 file_selector_macos: 468fb6b81fac7c0e88d71317f3eec34c3b008ff9 - flutter_discord_rpc: 53b006f68ef620a99fe1b3ba7e83513f3ae95b4c + flutter_discord_rpc: 67a7c10ea24d9d3bf35d01af643f48fbcfa7c24f flutter_inappwebview_macos: 9600c9df9fdb346aaa8933812009f8d94304203d flutter_secure_storage_macos: d56e2d218c1130b262bef8b4a7d64f88d7f9c9ea FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 local_notifier: e9506bc66fc70311e8bc7291fb70f743c081e4ff media_kit_libs_macos_audio: 3871782a4f3f84c77f04d7666c87800a781c24da media_kit_native_event_loop: 7321675377cb9ae8596a29bddf3a3d2b5e8792c5 - metadata_god: eceae399d0020475069a5cebc35943ce8562b5d7 + metadata_god: 829f61208b44ac1173e7cd32ab740d8776be5435 OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c diff --git a/pubspec.lock b/pubspec.lock index 716f5d228..b21c0091f 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -715,10 +715,9 @@ packages: flutter_discord_rpc: dependency: "direct main" description: - name: flutter_discord_rpc - sha256: "290c0d91c8ef24c3acb84cb6fcc5c5fed652fe4871b59896c8d180d5eae5d647" - url: "https://pub.dev" - source: hosted + path: "../frb_plugins/packages/flutter_discord_rpc" + relative: true + source: path version: "0.1.0+1" flutter_displaymode: dependency: "direct main" @@ -918,10 +917,10 @@ packages: dependency: transitive description: name: flutter_rust_bridge - sha256: "02720226035257ad0b571c1256f43df3e1556a499f6bcb004849a0faaa0e87f0" + sha256: fac14d2dd67eeba29a20e5d99fac0d4d9fcd552cdf6bf4f8945f7679c6b07b1d url: "https://pub.dev" source: hosted - version: "1.82.6" + version: "2.1.0" flutter_secure_storage: dependency: "direct main" description: @@ -1266,10 +1265,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" introduction_screen: dependency: "direct main" description: @@ -1322,26 +1321,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" url: "https://pub.dev" source: hosted - version: "10.0.0" + version: "10.0.4" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.3" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" lints: dependency: transitive description: @@ -1474,18 +1473,17 @@ packages: dependency: transitive description: name: meta - sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.12.0" metadata_god: dependency: "direct main" description: - name: metadata_god - sha256: cf13931c39eba0b9443d16e8940afdabee125bf08945f18d4c0d02bcae2a3317 - url: "https://pub.dev" - source: hosted - version: "0.5.2+1" + path: "../frb_plugins/packages/metadata_god" + relative: true + source: path + version: "0.5.3" mime: dependency: "direct main" description: @@ -1766,14 +1764,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.3" - puppeteer: - dependency: transitive - description: - name: puppeteer - sha256: "6833edca01b1e9dcdd9a6e41bad84b706dfba4366d095c4edff64b00c02ac472" - url: "https://pub.dev" - source: hosted - version: "3.8.0" quiver: dependency: transitive description: @@ -1935,14 +1925,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.4" - shelf_static: - dependency: transitive - description: - name: shelf_static - sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e - url: "https://pub.dev" - source: hosted - version: "1.1.2" shelf_web_socket: dependency: "direct main" description: @@ -1999,10 +1981,9 @@ packages: smtc_windows: dependency: "direct main" description: - name: smtc_windows - sha256: "0fd64d0c6a0c8ea4ea7908d31195eadc8f6d45d5245159fc67259e9e8704100f" - url: "https://pub.dev" - source: hosted + path: "../frb_plugins/packages/smtc_windows" + relative: true + source: path version: "0.1.3" source_gen: dependency: transitive @@ -2031,12 +2012,11 @@ packages: spotify: dependency: "direct main" description: - path: "." - ref: "fix/explicit-to-json" - resolved-ref: c4b37c599413ac7bfd78993e416a56105c62b634 - url: "https://github.com/KRTirtho/spotify-dart.git" - source: git - version: "0.13.6" + name: spotify + sha256: "705f09a457a893973451c15f4072670ac4783d67e42c35c080c55a48dee3a01f" + url: "https://pub.dev" + source: hosted + version: "0.13.7" sprintf: dependency: transitive description: @@ -2186,10 +2166,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" time: dependency: transitive description: @@ -2230,14 +2210,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.2" - tuple: - dependency: transitive - description: - name: tuple - sha256: a97ce2013f240b2f3807bcbaf218765b6f301c3eff91092bcfa23a039e7dd151 - url: "https://pub.dev" - source: hosted - version: "2.0.2" type_plus: dependency: transitive description: @@ -2394,10 +2366,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: @@ -2495,5 +2467,5 @@ packages: source: hosted version: "2.2.1" sdks: - dart: ">=3.3.0 <4.0.0" + dart: ">=3.4.0 <4.0.0" flutter: ">=3.19.2" diff --git a/pubspec.yaml b/pubspec.yaml index 58c8c55f7..983d4001e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -65,7 +65,11 @@ dependencies: logger: ^2.0.2 media_kit: ^1.1.10+1 media_kit_libs_audio: ^1.0.4 - metadata_god: ^0.5.2+1 + metadata_god: + git: + url: https://github.com/KRTirtho/frb_plugins.git + path: packages/metadata_god + ref: cargokit mime: ^1.0.2 package_info_plus: ^6.0.0 palette_generator: ^0.3.3 @@ -81,7 +85,11 @@ dependencies: scroll_to_index: ^3.0.1 sidebarx: ^0.17.1 shared_preferences: ^2.2.3 - smtc_windows: ^0.1.3 + smtc_windows: + git: + url: https://github.com/KRTirtho/frb_plugins.git + path: packages/smtc_windows + ref: cargokit stroke_text: ^0.0.2 system_theme: ^2.1.0 titlebar_buttons: ^1.0.0 @@ -100,7 +108,11 @@ dependencies: very_good_infinite_list: ^0.7.1 gap: ^3.0.1 sliver_tools: ^0.2.12 - flutter_discord_rpc: ^0.1.0+1 + flutter_discord_rpc: + git: + url: https://github.com/KRTirtho/frb_plugins.git + path: packages/flutter_discord_rpc + ref: cargokit html_unescape: ^2.0.0 wikipedia_api: ^0.1.0 skeletonizer: ^1.1.1 @@ -109,10 +121,7 @@ dependencies: flutter_sharing_intent: ^1.1.0 flutter_broadcasts: ^0.4.0 freezed_annotation: ^2.4.1 - spotify: - git: - url: https://github.com/KRTirtho/spotify-dart.git - ref: fix/explicit-to-json + spotify: ^0.13.7 bonsoir: ^5.1.9 shelf: ^1.4.1 shelf_router: ^1.1.4 From d515f3d3be9c6a50faadfbe6d3b6b12064d070f1 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Thu, 1 Aug 2024 16:46:26 +0600 Subject: [PATCH 02/11] cd: fix rustup target failing for ios --- .github/Dockerfile | 2 +- .github/Dockerfile.flutter_distributor | 23 ----------------------- cli/commands/install-dependencies.dart | 5 +++++ 3 files changed, 6 insertions(+), 24 deletions(-) delete mode 100644 .github/Dockerfile.flutter_distributor diff --git a/.github/Dockerfile b/.github/Dockerfile index 2e3934499..4d0645d1b 100644 --- a/.github/Dockerfile +++ b/.github/Dockerfile @@ -1,6 +1,6 @@ ARG FLUTTER_VERSION -FROM --platform=linux/arm64 krtirtho/flutter_distributor_arm64:${FLUTTER_VERSION} +FROM --platform=linux/arm64 krtirtho/flutter_distributor:${FLUTTER_VERSION} ARG BUILD_VERSION diff --git a/.github/Dockerfile.flutter_distributor b/.github/Dockerfile.flutter_distributor deleted file mode 100644 index d842e533f..000000000 --- a/.github/Dockerfile.flutter_distributor +++ /dev/null @@ -1,23 +0,0 @@ -FROM --platform=linux/arm64 ubuntu:22.04 - -ARG FLUTTER_VERSION - -RUN apt-get clean &&\ - apt-get update &&\ - apt-get install -y bash curl file git unzip xz-utils zip libglu1-mesa cmake tar clang ninja-build pkg-config libgtk-3-dev make python3-pip python3-setuptools desktop-file-utils libgdk-pixbuf2.0-dev fakeroot strace fuse libunwind-dev locate patchelf gir1.2-appindicator3-0.1 libappindicator3-1 libappindicator3-dev libsecret-1-0 libjsoncpp25 libsecret-1-dev libjsoncpp-dev libnotify-bin libnotify-dev mpv libmpv-dev rpm libwebkit2gtk-4.1-0 libwebkit2gtk-4.1-dev libsoup-3.0-0 libsoup-3.0-dev && \ - rm -rf /var/lib/apt/lists/* - -WORKDIR /home/flutter - -RUN git clone https://github.com/flutter/flutter.git -b ${FLUTTER_VERSION} --single-branch flutter-sdk - -RUN flutter-sdk/bin/flutter precache - -RUN flutter-sdk/bin/flutter config --no-analytics - -ENV PATH="$PATH:/home/flutter/flutter-sdk/bin" -ENV PATH="$PATH:/home/flutter/flutter-sdk/bin/cache/dart-sdk/bin" -ENV PATH="$PATH:/home/flutter/.pub-cache/bin" -ENV PUB_CACHE="/home/flutter/.pub-cache" - -RUN dart pub global activate flutter_distributor \ No newline at end of file diff --git a/cli/commands/install-dependencies.dart b/cli/commands/install-dependencies.dart index 6875e35fb..dc519cc61 100644 --- a/cli/commands/install-dependencies.dart +++ b/cli/commands/install-dependencies.dart @@ -58,6 +58,11 @@ class InstallDependenciesCommand extends Command { ); break; case "ios": + await shell.run( + """ + rustup target add aarch64-apple-ios + """, + ); break; case "android": await shell.run( From 0d537abab3dbadee3e9f3c1c6d91cedad500651a Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Thu, 1 Aug 2024 17:19:17 +0600 Subject: [PATCH 03/11] cd: disable arm64 --- .github/workflows/spotube-release-binary.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/spotube-release-binary.yml b/.github/workflows/spotube-release-binary.yml index 8fcf228ab..72f060414 100644 --- a/.github/workflows/spotube-release-binary.yml +++ b/.github/workflows/spotube-release-binary.yml @@ -36,11 +36,11 @@ jobs: dist/Spotube-linux-x86_64.deb dist/Spotube-linux-x86_64.rpm dist/spotube-linux-*-x86_64.tar.xz - - os: ubuntu-latest - platform: linux_arm - files: | - dist/Spotube-linux-aarch64.deb - dist/spotube-linux-*-aarch64.tar.xz + # - os: ubuntu-latest + # platform: linux_arm + # files: | + # dist/Spotube-linux-aarch64.deb + # dist/spotube-linux-*-aarch64.tar.xz - os: ubuntu-latest platform: android files: | From 4b65319879127e70a155af91217ac795e685e4f1 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Sun, 4 Aug 2024 10:27:05 +0600 Subject: [PATCH 04/11] chore: pubspec update --- pubspec.lock | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index b21c0091f..bd0ab415c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -715,9 +715,11 @@ packages: flutter_discord_rpc: dependency: "direct main" description: - path: "../frb_plugins/packages/flutter_discord_rpc" - relative: true - source: path + path: "packages/flutter_discord_rpc" + ref: cargokit + resolved-ref: "7ca0bbb786d8ce0e4bf8341b673b6c709ba69146" + url: "https://github.com/KRTirtho/frb_plugins.git" + source: git version: "0.1.0+1" flutter_displaymode: dependency: "direct main" @@ -1480,9 +1482,11 @@ packages: metadata_god: dependency: "direct main" description: - path: "../frb_plugins/packages/metadata_god" - relative: true - source: path + path: "packages/metadata_god" + ref: cargokit + resolved-ref: "7ca0bbb786d8ce0e4bf8341b673b6c709ba69146" + url: "https://github.com/KRTirtho/frb_plugins.git" + source: git version: "0.5.3" mime: dependency: "direct main" @@ -1981,9 +1985,11 @@ packages: smtc_windows: dependency: "direct main" description: - path: "../frb_plugins/packages/smtc_windows" - relative: true - source: path + path: "packages/smtc_windows" + ref: cargokit + resolved-ref: "7ca0bbb786d8ce0e4bf8341b673b6c709ba69146" + url: "https://github.com/KRTirtho/frb_plugins.git" + source: git version: "0.1.3" source_gen: dependency: transitive From 04650422640730537dfcb7347f31d697b85bfa65 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Sun, 4 Aug 2024 11:32:50 +0600 Subject: [PATCH 05/11] cd: re-enable arm --- .github/workflows/spotube-release-binary.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/spotube-release-binary.yml b/.github/workflows/spotube-release-binary.yml index 72f060414..3d8fee5a9 100644 --- a/.github/workflows/spotube-release-binary.yml +++ b/.github/workflows/spotube-release-binary.yml @@ -36,11 +36,11 @@ jobs: dist/Spotube-linux-x86_64.deb dist/Spotube-linux-x86_64.rpm dist/spotube-linux-*-x86_64.tar.xz - # - os: ubuntu-latest - # platform: linux_arm - # files: | - # dist/Spotube-linux-aarch64.deb - # dist/spotube-linux-*-aarch64.tar.xz + - os: ubuntu-latest + platform: linux_arm + files: | + dist/Spotube-linux-aarch64.deb + dist/spotube-linux-*-aarch64.tar.xz - os: ubuntu-latest platform: android files: | @@ -83,6 +83,7 @@ jobs: if: ${{matrix.platform == 'linux_arm'}} uses: docker/setup-buildx-action@v3 - name: Setup Rust toolchain + if: ${{matrix.platform != 'linux_arm'}} uses: dtolnay/rust-toolchain@stable with: toolchain: stable From b5f3894983b5a3579f53dddbd6859963c6ebc5a0 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Sun, 4 Aug 2024 12:03:48 +0600 Subject: [PATCH 06/11] cd: add aarch64-unknown-linux-gnu manually in dockerfile for linux arm --- .github/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/Dockerfile b/.github/Dockerfile index 4d0645d1b..f6a9f538a 100644 --- a/.github/Dockerfile +++ b/.github/Dockerfile @@ -10,6 +10,8 @@ COPY . . RUN chown -R $(whoami) /app +RUN rustup target add aarch64-unknown-linux-gnu + RUN flutter pub get RUN alias dpkg-deb="dpkg-deb --Zxz" &&\ From 1c66646798ecc6835df9e48d3b3923ee8690352a Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Wed, 7 Aug 2024 21:54:47 +0600 Subject: [PATCH 07/11] fix(windows): local tracks plays but disabled playback controls --- lib/pages/library/local_folder.dart | 3 +- lib/provider/audio_player/audio_player.dart | 6 ++- lib/services/audio_player/audio_player.dart | 37 +++++++++++-------- .../audio_players_streams_mixin.dart | 5 ++- linux/flutter/generated_plugin_registrant.cc | 4 -- linux/flutter/generated_plugins.cmake | 1 - macos/Flutter/GeneratedPluginRegistrant.swift | 2 - pubspec.lock | 15 ++------ pubspec.yaml | 11 ------ .../flutter/generated_plugin_registrant.cc | 3 -- windows/flutter/generated_plugins.cmake | 1 - 11 files changed, 35 insertions(+), 53 deletions(-) diff --git a/lib/pages/library/local_folder.dart b/lib/pages/library/local_folder.dart index 16891bc18..ad1d5d827 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 437b666e4..3bc719424 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 7915dc3bd..4febecdf1 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 03ce0d5d5..6b9616fa7 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 5550ed227..0f93d754d 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 93bf6bc0e..ff6426968 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 8a65bb53c..ea94bf6dd 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 bd0ab415c..d1d9c7809 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 983d4001e..e4b72df46 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 217a7cb4d..f2d60e211 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 cbbd2acc2..bea4d8017 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 From ce19ef1efd7af2506460cbbaf4dc32d96f350b73 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Wed, 7 Aug 2024 22:12:57 +0600 Subject: [PATCH 08/11] chore: upgrade plugin versions --- pubspec.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index d1d9c7809..5fce257fe 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -717,7 +717,7 @@ packages: description: path: "packages/flutter_discord_rpc" ref: cargokit - resolved-ref: ed8d0d67fae7a23acc9b58c84f01d02abd8d8515 + resolved-ref: "1b839bf02afd5dfa56b0dc25f60af04aa9bfc7c3" 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: ed8d0d67fae7a23acc9b58c84f01d02abd8d8515 + resolved-ref: "1b839bf02afd5dfa56b0dc25f60af04aa9bfc7c3" 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: ed8d0d67fae7a23acc9b58c84f01d02abd8d8515 + resolved-ref: "1b839bf02afd5dfa56b0dc25f60af04aa9bfc7c3" url: "https://github.com/KRTirtho/frb_plugins.git" source: git version: "0.1.3" From ebaf5615ad511867c46b567e6293d96360842b22 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Fri, 9 Aug 2024 13:13:11 +0600 Subject: [PATCH 09/11] cd: free up space for linux arm --- .github/workflows/spotube-release-binary.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/spotube-release-binary.yml b/.github/workflows/spotube-release-binary.yml index 3d8fee5a9..b103ea2e0 100644 --- a/.github/workflows/spotube-release-binary.yml +++ b/.github/workflows/spotube-release-binary.yml @@ -99,6 +99,11 @@ jobs: echo '${{ secrets.KEYSTORE }}' | base64 --decode > android/app/upload-keystore.jks echo '${{ secrets.KEY_PROPERTIES }}' > android/key.properties + - name: Unessary hosted tools + if: ${{matrix.platform == 'linux_arm'}} + run: | + sudo rm -rf /usr/share/dotnet + - name: Build ${{matrix.platform}} binaries run: dart cli/cli.dart build ${{matrix.platform}} env: From 1cc7882177203d345bb732714b742655eb8c494a Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Fri, 9 Aug 2024 19:55:56 +0600 Subject: [PATCH 10/11] fix(windows): app crashes when no internet --- pubspec.lock | 24 ++++++++++++------------ pubspec.yaml | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 5fce257fe..cd96e007e 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -125,50 +125,50 @@ packages: dependency: "direct main" description: name: bonsoir - sha256: "9703ca3ce201c7ab6cd278ae5a530a125959687f59c2b97822f88a8db5bef106" + sha256: b7697a954c772a6ddc68d52b3e4768947cc98613127f7720a05b14ed1e59d68b url: "https://pub.dev" source: hosted - version: "5.1.9" + version: "5.1.10" bonsoir_android: dependency: transitive description: name: bonsoir_android - sha256: "19583ae34a5e5743fa2c16619e4ec699b35ae5e6cece59b99b1cf21c1b4ed618" + sha256: a72d83a78780c1f238e3178d0585e5604fbd9f2503206293737cdfab899ce8d0 url: "https://pub.dev" source: hosted - version: "5.1.4" + version: "5.1.5" bonsoir_darwin: dependency: transitive description: name: bonsoir_darwin - sha256: "985c4c38b4cbfa57ed5870e724a7e17aa080ee7f49d03b43e6d08781511505c6" + sha256: "2d25c70f0d09260be1c2ab583b80dd89cbbfd59997579dadf789c5af00c7b2e4" url: "https://pub.dev" source: hosted - version: "5.1.2" + version: "5.1.3" bonsoir_linux: dependency: transitive description: name: bonsoir_linux - sha256: "65554b20bc169c68c311eb31fab46ccdd8ee3d3dd89a2d57c338f4cbf6ceb00d" + sha256: f2639aded6e15943a9822de98a663a1056f37cbfd0a74d72c9eaa941965945c2 url: "https://pub.dev" source: hosted - version: "5.1.2" + version: "5.1.3" bonsoir_platform_interface: dependency: transitive description: name: bonsoir_platform_interface - sha256: "4ee898bec0b5a63f04f82b06da9896ae8475f32a33b6fa395bea56399daeb9f0" + sha256: "08bb8b35d0198168b3bce87dbc718e4e510336cff1d97e43762e030c01636d45" url: "https://pub.dev" source: hosted - version: "5.1.2" + version: "5.1.3" bonsoir_windows: dependency: transitive description: name: bonsoir_windows - sha256: abbc90b73ac39e823b0c127da43b91d8906dcc530fc0cec4e169cf0d8c4404b1 + sha256: d4a0ca479d4f3679487a61f3174fb9fe1651e323c778b02dfa630490366be65d url: "https://pub.dev" source: hosted - version: "5.1.4" + version: "5.1.5" boolean_selector: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index e4b72df46..7f6f0f294 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -122,7 +122,7 @@ dependencies: flutter_broadcasts: ^0.4.0 freezed_annotation: ^2.4.1 spotify: ^0.13.7 - bonsoir: ^5.1.9 + bonsoir: ^5.1.10 shelf: ^1.4.1 shelf_router: ^1.1.4 shelf_web_socket: ^1.0.4 From 39ea7a701c3aaf3ba74d99d7778d97ecc92d7db5 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Fri, 9 Aug 2024 20:07:24 +0600 Subject: [PATCH 11/11] chore: remove unnecessary print statements --- lib/services/audio_player/audio_players_streams_mixin.dart | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/services/audio_player/audio_players_streams_mixin.dart b/lib/services/audio_player/audio_players_streams_mixin.dart index 6b9616fa7..3995acf77 100644 --- a/lib/services/audio_player/audio_players_streams_mixin.dart +++ b/lib/services/audio_player/audio_players_streams_mixin.dart @@ -149,8 +149,7 @@ mixin SpotubeAudioPlayersStreams on AudioPlayerInterface { Stream get errorStream => _mkPlayer.stream.error; - Stream get playlistStream => _mkPlayer.stream.playlist.map((s){ - print("[Stream Playlist]: $s"); + Stream get playlistStream => _mkPlayer.stream.playlist.map((s) { return s; - }); + }); }