From 86e55f7a3dfe895f455ff34765e2df7972b44be1 Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Thu, 19 Jun 2025 15:52:05 +0600 Subject: [PATCH] chore: fix connect freezed model not working --- lib/models/connect/connect.freezed.dart | 204 ++++++++++++++++++------ lib/models/connect/connect.g.dart | 6 +- lib/models/connect/load.dart | 12 +- lib/models/playback/track_sources.dart | 2 +- lib/pages/library/user_playlists.dart | 29 ++-- pubspec.lock | 31 ++-- pubspec.yaml | 10 +- 7 files changed, 202 insertions(+), 92 deletions(-) diff --git a/lib/models/connect/connect.freezed.dart b/lib/models/connect/connect.freezed.dart index ead14cf8..157d0911 100644 --- a/lib/models/connect/connect.freezed.dart +++ b/lib/models/connect/connect.freezed.dart @@ -33,36 +33,62 @@ WebSocketLoadEventData _$WebSocketLoadEventDataFromJson( /// @nodoc mixin _$WebSocketLoadEventData { - List get tracks => throw _privateConstructorUsedError; + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List get tracks => throw _privateConstructorUsedError; Object? get collection => throw _privateConstructorUsedError; int? get initialIndex => throw _privateConstructorUsedError; @optionalTypeArgs TResult when({ - required TResult Function(List tracks, - SpotubeSimplePlaylistObject? collection, int? initialIndex) + required TResult Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimplePlaylistObject? collection, + int? initialIndex) playlist, - required TResult Function(List tracks, - SpotubeSimpleAlbumObject? collection, int? initialIndex) + required TResult Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimpleAlbumObject? collection, + int? initialIndex) album, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult? whenOrNull({ - TResult? Function(List tracks, - SpotubeSimplePlaylistObject? collection, int? initialIndex)? + TResult? Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimplePlaylistObject? collection, + int? initialIndex)? playlist, - TResult? Function(List tracks, - SpotubeSimpleAlbumObject? collection, int? initialIndex)? + TResult? Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimpleAlbumObject? collection, + int? initialIndex)? album, }) => throw _privateConstructorUsedError; @optionalTypeArgs TResult maybeWhen({ - TResult Function(List tracks, - SpotubeSimplePlaylistObject? collection, int? initialIndex)? + TResult Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimplePlaylistObject? collection, + int? initialIndex)? playlist, - TResult Function(List tracks, - SpotubeSimpleAlbumObject? collection, int? initialIndex)? + TResult Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimpleAlbumObject? collection, + int? initialIndex)? album, required TResult orElse(), }) => @@ -103,7 +129,11 @@ abstract class $WebSocketLoadEventDataCopyWith<$Res> { $Res Function(WebSocketLoadEventData) then) = _$WebSocketLoadEventDataCopyWithImpl<$Res, WebSocketLoadEventData>; @useResult - $Res call({List tracks, int? initialIndex}); + $Res call( + {@Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + int? initialIndex}); } /// @nodoc @@ -129,7 +159,7 @@ class _$WebSocketLoadEventDataCopyWithImpl<$Res, tracks: null == tracks ? _value.tracks : tracks // ignore: cast_nullable_to_non_nullable - as List, + as List, initialIndex: freezed == initialIndex ? _value.initialIndex : initialIndex // ignore: cast_nullable_to_non_nullable @@ -148,7 +178,9 @@ abstract class _$$WebSocketLoadEventDataPlaylistImplCopyWith<$Res> @override @useResult $Res call( - {List tracks, + {@Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, SpotubeSimplePlaylistObject? collection, int? initialIndex}); @@ -178,7 +210,7 @@ class __$$WebSocketLoadEventDataPlaylistImplCopyWithImpl<$Res> tracks: null == tracks ? _value._tracks : tracks // ignore: cast_nullable_to_non_nullable - as List, + as List, collection: freezed == collection ? _value.collection : collection // ignore: cast_nullable_to_non_nullable @@ -211,7 +243,9 @@ class __$$WebSocketLoadEventDataPlaylistImplCopyWithImpl<$Res> class _$WebSocketLoadEventDataPlaylistImpl extends WebSocketLoadEventDataPlaylist { _$WebSocketLoadEventDataPlaylistImpl( - {required final List tracks, + {@Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + required final List tracks, this.collection, this.initialIndex, final String? $type}) @@ -223,9 +257,11 @@ class _$WebSocketLoadEventDataPlaylistImpl Map json) => _$$WebSocketLoadEventDataPlaylistImplFromJson(json); - final List _tracks; + final List _tracks; @override - List get tracks { + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List get tracks { if (_tracks is EqualUnmodifiableListView) return _tracks; // ignore: implicit_dynamic_type return EqualUnmodifiableListView(_tracks); @@ -274,11 +310,19 @@ class _$WebSocketLoadEventDataPlaylistImpl @override @optionalTypeArgs TResult when({ - required TResult Function(List tracks, - SpotubeSimplePlaylistObject? collection, int? initialIndex) + required TResult Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimplePlaylistObject? collection, + int? initialIndex) playlist, - required TResult Function(List tracks, - SpotubeSimpleAlbumObject? collection, int? initialIndex) + required TResult Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimpleAlbumObject? collection, + int? initialIndex) album, }) { return playlist(tracks, collection, initialIndex); @@ -287,11 +331,19 @@ class _$WebSocketLoadEventDataPlaylistImpl @override @optionalTypeArgs TResult? whenOrNull({ - TResult? Function(List tracks, - SpotubeSimplePlaylistObject? collection, int? initialIndex)? + TResult? Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimplePlaylistObject? collection, + int? initialIndex)? playlist, - TResult? Function(List tracks, - SpotubeSimpleAlbumObject? collection, int? initialIndex)? + TResult? Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimpleAlbumObject? collection, + int? initialIndex)? album, }) { return playlist?.call(tracks, collection, initialIndex); @@ -300,11 +352,19 @@ class _$WebSocketLoadEventDataPlaylistImpl @override @optionalTypeArgs TResult maybeWhen({ - TResult Function(List tracks, - SpotubeSimplePlaylistObject? collection, int? initialIndex)? + TResult Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimplePlaylistObject? collection, + int? initialIndex)? playlist, - TResult Function(List tracks, - SpotubeSimpleAlbumObject? collection, int? initialIndex)? + TResult Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimpleAlbumObject? collection, + int? initialIndex)? album, required TResult orElse(), }) { @@ -355,7 +415,9 @@ class _$WebSocketLoadEventDataPlaylistImpl abstract class WebSocketLoadEventDataPlaylist extends WebSocketLoadEventData { factory WebSocketLoadEventDataPlaylist( - {required final List tracks, + {@Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + required final List tracks, final SpotubeSimplePlaylistObject? collection, final int? initialIndex}) = _$WebSocketLoadEventDataPlaylistImpl; WebSocketLoadEventDataPlaylist._() : super._(); @@ -364,7 +426,9 @@ abstract class WebSocketLoadEventDataPlaylist extends WebSocketLoadEventData { _$WebSocketLoadEventDataPlaylistImpl.fromJson; @override - List get tracks; + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List get tracks; @override SpotubeSimplePlaylistObject? get collection; @override @@ -389,7 +453,9 @@ abstract class _$$WebSocketLoadEventDataAlbumImplCopyWith<$Res> @override @useResult $Res call( - {List tracks, + {@Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, SpotubeSimpleAlbumObject? collection, int? initialIndex}); @@ -419,7 +485,7 @@ class __$$WebSocketLoadEventDataAlbumImplCopyWithImpl<$Res> tracks: null == tracks ? _value._tracks : tracks // ignore: cast_nullable_to_non_nullable - as List, + as List, collection: freezed == collection ? _value.collection : collection // ignore: cast_nullable_to_non_nullable @@ -450,7 +516,9 @@ class __$$WebSocketLoadEventDataAlbumImplCopyWithImpl<$Res> @JsonSerializable() class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum { _$WebSocketLoadEventDataAlbumImpl( - {required final List tracks, + {@Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + required final List tracks, this.collection, this.initialIndex, final String? $type}) @@ -462,9 +530,11 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum { Map json) => _$$WebSocketLoadEventDataAlbumImplFromJson(json); - final List _tracks; + final List _tracks; @override - List get tracks { + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List get tracks { if (_tracks is EqualUnmodifiableListView) return _tracks; // ignore: implicit_dynamic_type return EqualUnmodifiableListView(_tracks); @@ -512,11 +582,19 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum { @override @optionalTypeArgs TResult when({ - required TResult Function(List tracks, - SpotubeSimplePlaylistObject? collection, int? initialIndex) + required TResult Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimplePlaylistObject? collection, + int? initialIndex) playlist, - required TResult Function(List tracks, - SpotubeSimpleAlbumObject? collection, int? initialIndex) + required TResult Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimpleAlbumObject? collection, + int? initialIndex) album, }) { return album(tracks, collection, initialIndex); @@ -525,11 +603,19 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum { @override @optionalTypeArgs TResult? whenOrNull({ - TResult? Function(List tracks, - SpotubeSimplePlaylistObject? collection, int? initialIndex)? + TResult? Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimplePlaylistObject? collection, + int? initialIndex)? playlist, - TResult? Function(List tracks, - SpotubeSimpleAlbumObject? collection, int? initialIndex)? + TResult? Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimpleAlbumObject? collection, + int? initialIndex)? album, }) { return album?.call(tracks, collection, initialIndex); @@ -538,11 +624,19 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum { @override @optionalTypeArgs TResult maybeWhen({ - TResult Function(List tracks, - SpotubeSimplePlaylistObject? collection, int? initialIndex)? + TResult Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimplePlaylistObject? collection, + int? initialIndex)? playlist, - TResult Function(List tracks, - SpotubeSimpleAlbumObject? collection, int? initialIndex)? + TResult Function( + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List tracks, + SpotubeSimpleAlbumObject? collection, + int? initialIndex)? album, required TResult orElse(), }) { @@ -593,7 +687,9 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum { abstract class WebSocketLoadEventDataAlbum extends WebSocketLoadEventData { factory WebSocketLoadEventDataAlbum( - {required final List tracks, + {@Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + required final List tracks, final SpotubeSimpleAlbumObject? collection, final int? initialIndex}) = _$WebSocketLoadEventDataAlbumImpl; WebSocketLoadEventDataAlbum._() : super._(); @@ -602,7 +698,9 @@ abstract class WebSocketLoadEventDataAlbum extends WebSocketLoadEventData { _$WebSocketLoadEventDataAlbumImpl.fromJson; @override - List get tracks; + @Assert("tracks is List", + "tracks must be a list of SpotubeFullTrackObject") + List get tracks; @override SpotubeSimpleAlbumObject? get collection; @override diff --git a/lib/models/connect/connect.g.dart b/lib/models/connect/connect.g.dart index 465dc42e..2da8f9b0 100644 --- a/lib/models/connect/connect.g.dart +++ b/lib/models/connect/connect.g.dart @@ -10,7 +10,7 @@ _$WebSocketLoadEventDataPlaylistImpl _$$WebSocketLoadEventDataPlaylistImplFromJson(Map json) => _$WebSocketLoadEventDataPlaylistImpl( tracks: (json['tracks'] as List) - .map((e) => SpotubeFullTrackObject.fromJson( + .map((e) => SpotubeTrackObject.fromJson( Map.from(e as Map))) .toList(), collection: json['collection'] == null @@ -34,8 +34,8 @@ _$WebSocketLoadEventDataAlbumImpl _$$WebSocketLoadEventDataAlbumImplFromJson( Map json) => _$WebSocketLoadEventDataAlbumImpl( tracks: (json['tracks'] as List) - .map((e) => SpotubeFullTrackObject.fromJson( - Map.from(e as Map))) + .map((e) => + SpotubeTrackObject.fromJson(Map.from(e as Map))) .toList(), collection: json['collection'] == null ? null diff --git a/lib/models/connect/load.dart b/lib/models/connect/load.dart index 36d3c3ba..d61e0f1e 100644 --- a/lib/models/connect/load.dart +++ b/lib/models/connect/load.dart @@ -5,13 +5,21 @@ class WebSocketLoadEventData with _$WebSocketLoadEventData { const WebSocketLoadEventData._(); factory WebSocketLoadEventData.playlist({ - required List tracks, + @Assert( + "tracks is List", + "tracks must be a list of SpotubeFullTrackObject", + ) + required List tracks, SpotubeSimplePlaylistObject? collection, int? initialIndex, }) = WebSocketLoadEventDataPlaylist; factory WebSocketLoadEventData.album({ - required List tracks, + @Assert( + "tracks is List", + "tracks must be a list of SpotubeFullTrackObject", + ) + required List tracks, SpotubeSimpleAlbumObject? collection, int? initialIndex, }) = WebSocketLoadEventDataAlbum; diff --git a/lib/models/playback/track_sources.dart b/lib/models/playback/track_sources.dart index d894ff8b..1eb19a25 100644 --- a/lib/models/playback/track_sources.dart +++ b/lib/models/playback/track_sources.dart @@ -73,7 +73,7 @@ class TrackSource with _$TrackSource { } @JsonSerializable() -abstract class BasicSourcedTrack { +class BasicSourcedTrack { final TrackSourceQuery query; final AudioSource source; final TrackSourceInfo info; diff --git a/lib/pages/library/user_playlists.dart b/lib/pages/library/user_playlists.dart index d12c54b9..1963c7e8 100644 --- a/lib/pages/library/user_playlists.dart +++ b/lib/pages/library/user_playlists.dart @@ -7,7 +7,6 @@ import 'package:shadcn_flutter/shadcn_flutter.dart' hide Image; import 'package:shadcn_flutter/shadcn_flutter_extension.dart'; import 'package:spotube/collections/assets.gen.dart'; -import 'package:spotube/collections/routes.gr.dart'; import 'package:spotube/collections/spotube_icons.dart'; import 'package:spotube/components/playbutton_view/playbutton_view.dart'; import 'package:spotube/models/metadata/metadata.dart'; @@ -61,14 +60,12 @@ class UserPlaylistsPage extends HookConsumerWidget { if (searchText.value.isEmpty) { return [ if (likedTracksPlaylist != null) likedTracksPlaylist, - ...?playlistsQuery.asData?.value.items - as List?, + ...?playlistsQuery.asData?.value.items, ]; } return [ if (likedTracksPlaylist != null) likedTracksPlaylist, - ...?playlistsQuery.asData?.value.items - as List?, + ...?playlistsQuery.asData?.value.items, ] .map((e) => (weightedRatio(e.name, searchText.value), e)) .sorted((a, b) => b.$1.compareTo(a.$1)) @@ -116,19 +113,19 @@ class UserPlaylistsPage extends HookConsumerWidget { SliverPadding( padding: const EdgeInsets.symmetric(horizontal: 8), sliver: PlaybuttonView( - leading: Expanded( + leading: const Expanded( child: Row( children: [ - const PlaylistCreateDialogButton(), - const Gap(10), - Button.primary( - leading: const Icon(SpotubeIcons.magic), - child: Text(context.l10n.generate), - onPressed: () { - context.navigateTo(const PlaylistGeneratorRoute()); - }, - ), - const Gap(10), + PlaylistCreateDialogButton(), + // const Gap(10), + // Button.primary( + // leading: const Icon(SpotubeIcons.magic), + // child: Text(context.l10n.generate), + // onPressed: () { + // context.navigateTo(const PlaylistGeneratorRoute()); + // }, + // ), + // const Gap(10), ], ), ), diff --git a/pubspec.lock b/pubspec.lock index 909b8217..81c95843 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -983,34 +983,35 @@ packages: dependency: "direct main" description: name: flutter_secure_storage - sha256: "165164745e6afb5c0e3e3fcc72a012fb9e58496fb26ffb92cf22e16a821e85d0" + sha256: "9cad52d75ebc511adfae3d447d5d13da15a55a92c9410e50f67335b6d21d16ea" url: "https://pub.dev" source: hosted - version: "9.2.2" + version: "9.2.4" flutter_secure_storage_linux: - dependency: transitive + dependency: "direct overridden" description: - name: flutter_secure_storage_linux - sha256: "4d91bfc23047422cbcd73ac684bc169859ee766482517c22172c86596bf1464b" - url: "https://pub.dev" - source: hosted - version: "1.2.1" + path: flutter_secure_storage_linux + ref: patch-2 + resolved-ref: f076cbb65b075afd6e3b648122987a67306dc298 + url: "https://github.com/m-berto/flutter_secure_storage.git" + source: git + version: "2.0.1" flutter_secure_storage_macos: dependency: transitive description: name: flutter_secure_storage_macos - sha256: "1693ab11121a5f925bbea0be725abfcfbbcf36c1e29e571f84a0c0f436147a81" + sha256: "6c0a2795a2d1de26ae202a0d78527d163f4acbb11cde4c75c670f3a0fc064247" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "3.1.3" flutter_secure_storage_platform_interface: - dependency: transitive + dependency: "direct overridden" description: name: flutter_secure_storage_platform_interface - sha256: cf91ad32ce5adef6fba4d736a542baca9daf3beac4db2d04be350b87f69ac4a8 + sha256: b8337d3d52e429e6c0a7710e38cf9742a3bb05844bd927450eb94f80c11ef85d url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "2.0.0" flutter_secure_storage_web: dependency: transitive description: @@ -2516,10 +2517,10 @@ packages: dependency: "direct main" description: name: tray_manager - sha256: c2da0f0f1ddb455e721cf68d05d1281fec75cf5df0a1d3cb67b6ca0bdfd5709d + sha256: ad18c4cd73003097d182884bacb0578ad2865f3ab842a0ad00f6d043ed49eaf0 url: "https://pub.dev" source: hosted - version: "0.4.0" + version: "0.5.0" type_plus: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index e8cc7ef5..e0e2ee86 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -62,7 +62,7 @@ dependencies: sdk: flutter flutter_native_splash: ^2.4.6 flutter_riverpod: ^2.5.1 - flutter_secure_storage: ^9.0.0 + flutter_secure_storage: ^9.2.4 flutter_sharing_intent: ^1.1.0 flutter_undraw: ^0.2.1 form_builder_validators: ^11.1.1 @@ -119,7 +119,7 @@ dependencies: test: ^1.25.7 timezone: ^0.10.0 titlebar_buttons: ^1.0.0 - tray_manager: ^0.4.0 + tray_manager: ^0.5.0 url_launcher: ^6.2.6 uuid: ^4.4.0 version: ^3.0.2 @@ -187,6 +187,12 @@ dependency_overrides: flutter_svg: ^2.0.17 intl: any collection: any + flutter_secure_storage_linux: + git: + url: https://github.com/m-berto/flutter_secure_storage.git + ref: patch-2 + path: flutter_secure_storage_linux + flutter_secure_storage_platform_interface: 2.0.0 flutter: generate: true