diff --git a/assets/images/logos/dab-music.png b/assets/images/logos/dab-music.png new file mode 100644 index 00000000..e09d3410 Binary files /dev/null and b/assets/images/logos/dab-music.png differ diff --git a/lib/collections/assets.gen.dart b/lib/collections/assets.gen.dart index 31fb54b8..7fa75e1d 100644 --- a/lib/collections/assets.gen.dart +++ b/lib/collections/assets.gen.dart @@ -1,3 +1,5 @@ +// dart format width=80 + /// GENERATED CODE - DO NOT MODIFY BY HAND /// ***************************************************** /// FlutterGen @@ -5,7 +7,7 @@ // coverage:ignore-file // ignore_for_file: type=lint -// ignore_for_file: directives_ordering,unnecessary_import,implicit_dynamic_list_literal,deprecated_member_use +// ignore_for_file: deprecated_member_use,directives_ordering,implicit_dynamic_list_literal,unnecessary_import import 'package:flutter/widgets.dart'; @@ -67,6 +69,10 @@ class $AssetsImagesGen { class $AssetsImagesLogosGen { const $AssetsImagesLogosGen(); + /// File path: assets/images/logos/dab-music.png + AssetGenImage get dabMusic => + const AssetGenImage('assets/images/logos/dab-music.png'); + /// File path: assets/images/logos/invidious.jpg AssetGenImage get invidious => const AssetGenImage('assets/images/logos/invidious.jpg'); @@ -80,11 +86,12 @@ class $AssetsImagesLogosGen { const AssetGenImage('assets/images/logos/songlink-transparent.png'); /// List of all assets - List get values => [invidious, jiosaavn, songlinkTransparent]; + List get values => + [dabMusic, invidious, jiosaavn, songlinkTransparent]; } class Assets { - Assets._(); + const Assets._(); static const String license = 'LICENSE'; static const $AssetsBrandingGen branding = $AssetsBrandingGen(); @@ -99,12 +106,14 @@ class AssetGenImage { this._assetName, { this.size, this.flavors = const {}, + this.animation, }); final String _assetName; final Size? size; final Set flavors; + final AssetGenImageAnimation? animation; Image image({ Key? key, @@ -127,7 +136,7 @@ class AssetGenImage { bool gaplessPlayback = true, bool isAntiAlias = false, String? package, - FilterQuality filterQuality = FilterQuality.low, + FilterQuality filterQuality = FilterQuality.medium, int? cacheWidth, int? cacheHeight, }) { @@ -174,3 +183,15 @@ class AssetGenImage { String get keyName => _assetName; } + +class AssetGenImageAnimation { + const AssetGenImageAnimation({ + required this.isAnimation, + required this.duration, + required this.frames, + }); + + final bool isAnimation; + final Duration duration; + final int frames; +} diff --git a/lib/collections/fonts.gen.dart b/lib/collections/fonts.gen.dart index 16cc6e82..d2c68231 100644 --- a/lib/collections/fonts.gen.dart +++ b/lib/collections/fonts.gen.dart @@ -1,3 +1,4 @@ +// dart format width=80 /// GENERATED CODE - DO NOT MODIFY BY HAND /// ***************************************************** /// FlutterGen @@ -5,7 +6,7 @@ // coverage:ignore-file // ignore_for_file: type=lint -// ignore_for_file: directives_ordering,unnecessary_import,implicit_dynamic_list_literal,deprecated_member_use +// ignore_for_file: deprecated_member_use,directives_ordering,implicit_dynamic_list_literal,unnecessary_import class FontFamily { FontFamily._(); diff --git a/lib/collections/routes.gr.dart b/lib/collections/routes.gr.dart index e039abb9..f5ff24bf 100644 --- a/lib/collections/routes.gr.dart +++ b/lib/collections/routes.gr.dart @@ -1,3 +1,4 @@ +// dart format width=80 // GENERATED CODE - DO NOT MODIFY BY HAND // ************************************************************************** @@ -59,10 +60,7 @@ import 'package:spotube/pages/track/track.dart' as _i35; /// [_i1.AboutSpotubePage] class AboutSpotubeRoute extends _i41.PageRouteInfo { const AboutSpotubeRoute({List<_i41.PageRouteInfo>? children}) - : super( - AboutSpotubeRoute.name, - initialChildren: children, - ); + : super(AboutSpotubeRoute.name, initialChildren: children); static const String name = 'AboutSpotubeRoute'; @@ -83,15 +81,11 @@ class AlbumRoute extends _i41.PageRouteInfo { required _i43.SpotubeSimpleAlbumObject album, List<_i41.PageRouteInfo>? children, }) : super( - AlbumRoute.name, - args: AlbumRouteArgs( - key: key, - id: id, - album: album, - ), - rawPathParams: {'id': id}, - initialChildren: children, - ); + AlbumRoute.name, + args: AlbumRouteArgs(key: key, id: id, album: album), + rawPathParams: {'id': id}, + initialChildren: children, + ); static const String name = 'AlbumRoute'; @@ -99,21 +93,13 @@ class AlbumRoute extends _i41.PageRouteInfo { name, builder: (data) { final args = data.argsAs(); - return _i2.AlbumPage( - key: args.key, - id: args.id, - album: args.album, - ); + return _i2.AlbumPage(key: args.key, id: args.id, album: args.album); }, ); } class AlbumRouteArgs { - const AlbumRouteArgs({ - this.key, - required this.id, - required this.album, - }); + const AlbumRouteArgs({this.key, required this.id, required this.album}); final _i42.Key? key; @@ -135,14 +121,11 @@ class ArtistRoute extends _i41.PageRouteInfo { _i42.Key? key, List<_i41.PageRouteInfo>? children, }) : super( - ArtistRoute.name, - args: ArtistRouteArgs( - artistId: artistId, - key: key, - ), - rawPathParams: {'id': artistId}, - initialChildren: children, - ); + ArtistRoute.name, + args: ArtistRouteArgs(artistId: artistId, key: key), + rawPathParams: {'id': artistId}, + initialChildren: children, + ); static const String name = 'ArtistRoute'; @@ -151,20 +134,15 @@ class ArtistRoute extends _i41.PageRouteInfo { builder: (data) { final pathParams = data.inheritedPathParams; final args = data.argsAs( - orElse: () => ArtistRouteArgs(artistId: pathParams.getString('id'))); - return _i3.ArtistPage( - args.artistId, - key: args.key, + orElse: () => ArtistRouteArgs(artistId: pathParams.getString('id')), ); + return _i3.ArtistPage(args.artistId, key: args.key); }, ); } class ArtistRouteArgs { - const ArtistRouteArgs({ - required this.artistId, - this.key, - }); + const ArtistRouteArgs({required this.artistId, this.key}); final String artistId; @@ -180,10 +158,7 @@ class ArtistRouteArgs { /// [_i4.BlackListPage] class BlackListRoute extends _i41.PageRouteInfo { const BlackListRoute({List<_i41.PageRouteInfo>? children}) - : super( - BlackListRoute.name, - initialChildren: children, - ); + : super(BlackListRoute.name, initialChildren: children); static const String name = 'BlackListRoute'; @@ -199,10 +174,7 @@ class BlackListRoute extends _i41.PageRouteInfo { /// [_i5.ConnectControlPage] class ConnectControlRoute extends _i41.PageRouteInfo { const ConnectControlRoute({List<_i41.PageRouteInfo>? children}) - : super( - ConnectControlRoute.name, - initialChildren: children, - ); + : super(ConnectControlRoute.name, initialChildren: children); static const String name = 'ConnectControlRoute'; @@ -218,10 +190,7 @@ class ConnectControlRoute extends _i41.PageRouteInfo { /// [_i6.ConnectPage] class ConnectRoute extends _i41.PageRouteInfo { const ConnectRoute({List<_i41.PageRouteInfo>? children}) - : super( - ConnectRoute.name, - initialChildren: children, - ); + : super(ConnectRoute.name, initialChildren: children); static const String name = 'ConnectRoute'; @@ -237,10 +206,7 @@ class ConnectRoute extends _i41.PageRouteInfo { /// [_i7.GettingStartedPage] class GettingStartedRoute extends _i41.PageRouteInfo { const GettingStartedRoute({List<_i41.PageRouteInfo>? children}) - : super( - GettingStartedRoute.name, - initialChildren: children, - ); + : super(GettingStartedRoute.name, initialChildren: children); static const String name = 'GettingStartedRoute'; @@ -262,15 +228,15 @@ class HomeBrowseSectionItemsRoute required _i43.SpotubeBrowseSectionObject section, List<_i41.PageRouteInfo>? children, }) : super( - HomeBrowseSectionItemsRoute.name, - args: HomeBrowseSectionItemsRouteArgs( - key: key, - sectionId: sectionId, - section: section, - ), - rawPathParams: {'sectionId': sectionId}, - initialChildren: children, - ); + HomeBrowseSectionItemsRoute.name, + args: HomeBrowseSectionItemsRouteArgs( + key: key, + sectionId: sectionId, + section: section, + ), + rawPathParams: {'sectionId': sectionId}, + initialChildren: children, + ); static const String name = 'HomeBrowseSectionItemsRoute'; @@ -310,10 +276,7 @@ class HomeBrowseSectionItemsRouteArgs { /// [_i9.HomePage] class HomeRoute extends _i41.PageRouteInfo { const HomeRoute({List<_i41.PageRouteInfo>? children}) - : super( - HomeRoute.name, - initialChildren: children, - ); + : super(HomeRoute.name, initialChildren: children); static const String name = 'HomeRoute'; @@ -329,10 +292,7 @@ class HomeRoute extends _i41.PageRouteInfo { /// [_i10.LastFMLoginPage] class LastFMLoginRoute extends _i41.PageRouteInfo { const LastFMLoginRoute({List<_i41.PageRouteInfo>? children}) - : super( - LastFMLoginRoute.name, - initialChildren: children, - ); + : super(LastFMLoginRoute.name, initialChildren: children); static const String name = 'LastFMLoginRoute'; @@ -348,10 +308,7 @@ class LastFMLoginRoute extends _i41.PageRouteInfo { /// [_i11.LibraryPage] class LibraryRoute extends _i41.PageRouteInfo { const LibraryRoute({List<_i41.PageRouteInfo>? children}) - : super( - LibraryRoute.name, - initialChildren: children, - ); + : super(LibraryRoute.name, initialChildren: children); static const String name = 'LibraryRoute'; @@ -371,13 +328,10 @@ class LikedPlaylistRoute extends _i41.PageRouteInfo { required _i43.SpotubeSimplePlaylistObject playlist, List<_i41.PageRouteInfo>? children, }) : super( - LikedPlaylistRoute.name, - args: LikedPlaylistRouteArgs( - key: key, - playlist: playlist, - ), - initialChildren: children, - ); + LikedPlaylistRoute.name, + args: LikedPlaylistRouteArgs(key: key, playlist: playlist), + initialChildren: children, + ); static const String name = 'LikedPlaylistRoute'; @@ -385,19 +339,13 @@ class LikedPlaylistRoute extends _i41.PageRouteInfo { name, builder: (data) { final args = data.argsAs(); - return _i12.LikedPlaylistPage( - key: args.key, - playlist: args.playlist, - ); + return _i12.LikedPlaylistPage(key: args.key, playlist: args.playlist); }, ); } class LikedPlaylistRouteArgs { - const LikedPlaylistRouteArgs({ - this.key, - required this.playlist, - }); + const LikedPlaylistRouteArgs({this.key, required this.playlist}); final _i42.Key? key; @@ -419,15 +367,15 @@ class LocalLibraryRoute extends _i41.PageRouteInfo { bool isCache = false, List<_i41.PageRouteInfo>? children, }) : super( - LocalLibraryRoute.name, - args: LocalLibraryRouteArgs( - location: location, - key: key, - isDownloads: isDownloads, - isCache: isCache, - ), - initialChildren: children, - ); + LocalLibraryRoute.name, + args: LocalLibraryRouteArgs( + location: location, + key: key, + isDownloads: isDownloads, + isCache: isCache, + ), + initialChildren: children, + ); static const String name = 'LocalLibraryRoute'; @@ -471,10 +419,7 @@ class LocalLibraryRouteArgs { /// [_i14.LogsPage] class LogsRoute extends _i41.PageRouteInfo { const LogsRoute({List<_i41.PageRouteInfo>? children}) - : super( - LogsRoute.name, - initialChildren: children, - ); + : super(LogsRoute.name, initialChildren: children); static const String name = 'LogsRoute'; @@ -490,10 +435,7 @@ class LogsRoute extends _i41.PageRouteInfo { /// [_i15.LyricsPage] class LyricsRoute extends _i41.PageRouteInfo { const LyricsRoute({List<_i41.PageRouteInfo>? children}) - : super( - LyricsRoute.name, - initialChildren: children, - ); + : super(LyricsRoute.name, initialChildren: children); static const String name = 'LyricsRoute'; @@ -513,13 +455,10 @@ class MiniLyricsRoute extends _i41.PageRouteInfo { required _i44.Size prevSize, List<_i41.PageRouteInfo>? children, }) : super( - MiniLyricsRoute.name, - args: MiniLyricsRouteArgs( - key: key, - prevSize: prevSize, - ), - initialChildren: children, - ); + MiniLyricsRoute.name, + args: MiniLyricsRouteArgs(key: key, prevSize: prevSize), + initialChildren: children, + ); static const String name = 'MiniLyricsRoute'; @@ -527,19 +466,13 @@ class MiniLyricsRoute extends _i41.PageRouteInfo { name, builder: (data) { final args = data.argsAs(); - return _i16.MiniLyricsPage( - key: args.key, - prevSize: args.prevSize, - ); + return _i16.MiniLyricsPage(key: args.key, prevSize: args.prevSize); }, ); } class MiniLyricsRouteArgs { - const MiniLyricsRouteArgs({ - this.key, - required this.prevSize, - }); + const MiniLyricsRouteArgs({this.key, required this.prevSize}); final _i44.Key? key; @@ -555,10 +488,7 @@ class MiniLyricsRouteArgs { /// [_i17.PlayerLyricsPage] class PlayerLyricsRoute extends _i41.PageRouteInfo { const PlayerLyricsRoute({List<_i41.PageRouteInfo>? children}) - : super( - PlayerLyricsRoute.name, - initialChildren: children, - ); + : super(PlayerLyricsRoute.name, initialChildren: children); static const String name = 'PlayerLyricsRoute'; @@ -574,10 +504,7 @@ class PlayerLyricsRoute extends _i41.PageRouteInfo { /// [_i18.PlayerQueuePage] class PlayerQueueRoute extends _i41.PageRouteInfo { const PlayerQueueRoute({List<_i41.PageRouteInfo>? children}) - : super( - PlayerQueueRoute.name, - initialChildren: children, - ); + : super(PlayerQueueRoute.name, initialChildren: children); static const String name = 'PlayerQueueRoute'; @@ -593,10 +520,7 @@ class PlayerQueueRoute extends _i41.PageRouteInfo { /// [_i19.PlayerTrackSourcesPage] class PlayerTrackSourcesRoute extends _i41.PageRouteInfo { const PlayerTrackSourcesRoute({List<_i41.PageRouteInfo>? children}) - : super( - PlayerTrackSourcesRoute.name, - initialChildren: children, - ); + : super(PlayerTrackSourcesRoute.name, initialChildren: children); static const String name = 'PlayerTrackSourcesRoute'; @@ -617,15 +541,11 @@ class PlaylistRoute extends _i41.PageRouteInfo { required _i43.SpotubeSimplePlaylistObject playlist, List<_i41.PageRouteInfo>? children, }) : super( - PlaylistRoute.name, - args: PlaylistRouteArgs( - key: key, - id: id, - playlist: playlist, - ), - rawPathParams: {'id': id}, - initialChildren: children, - ); + PlaylistRoute.name, + args: PlaylistRouteArgs(key: key, id: id, playlist: playlist), + rawPathParams: {'id': id}, + initialChildren: children, + ); static const String name = 'PlaylistRoute'; @@ -643,11 +563,7 @@ class PlaylistRoute extends _i41.PageRouteInfo { } class PlaylistRouteArgs { - const PlaylistRouteArgs({ - this.key, - required this.id, - required this.playlist, - }); + const PlaylistRouteArgs({this.key, required this.id, required this.playlist}); final _i42.Key? key; @@ -665,10 +581,7 @@ class PlaylistRouteArgs { /// [_i21.ProfilePage] class ProfileRoute extends _i41.PageRouteInfo { const ProfileRoute({List<_i41.PageRouteInfo>? children}) - : super( - ProfileRoute.name, - initialChildren: children, - ); + : super(ProfileRoute.name, initialChildren: children); static const String name = 'ProfileRoute'; @@ -684,10 +597,7 @@ class ProfileRoute extends _i41.PageRouteInfo { /// [_i22.RootAppPage] class RootAppRoute extends _i41.PageRouteInfo { const RootAppRoute({List<_i41.PageRouteInfo>? children}) - : super( - RootAppRoute.name, - initialChildren: children, - ); + : super(RootAppRoute.name, initialChildren: children); static const String name = 'RootAppRoute'; @@ -703,10 +613,7 @@ class RootAppRoute extends _i41.PageRouteInfo { /// [_i23.SearchPage] class SearchRoute extends _i41.PageRouteInfo { const SearchRoute({List<_i41.PageRouteInfo>? children}) - : super( - SearchRoute.name, - initialChildren: children, - ); + : super(SearchRoute.name, initialChildren: children); static const String name = 'SearchRoute'; @@ -728,14 +635,14 @@ class SettingsMetadataProviderFormRoute required List<_i43.MetadataFormFieldObject> fields, List<_i41.PageRouteInfo>? children, }) : super( - SettingsMetadataProviderFormRoute.name, - args: SettingsMetadataProviderFormRouteArgs( - key: key, - title: title, - fields: fields, - ), - initialChildren: children, - ); + SettingsMetadataProviderFormRoute.name, + args: SettingsMetadataProviderFormRouteArgs( + key: key, + title: title, + fields: fields, + ), + initialChildren: children, + ); static const String name = 'SettingsMetadataProviderFormRoute'; @@ -775,10 +682,7 @@ class SettingsMetadataProviderFormRouteArgs { /// [_i25.SettingsMetadataProviderPage] class SettingsMetadataProviderRoute extends _i41.PageRouteInfo { const SettingsMetadataProviderRoute({List<_i41.PageRouteInfo>? children}) - : super( - SettingsMetadataProviderRoute.name, - initialChildren: children, - ); + : super(SettingsMetadataProviderRoute.name, initialChildren: children); static const String name = 'SettingsMetadataProviderRoute'; @@ -794,10 +698,7 @@ class SettingsMetadataProviderRoute extends _i41.PageRouteInfo { /// [_i26.SettingsPage] class SettingsRoute extends _i41.PageRouteInfo { const SettingsRoute({List<_i41.PageRouteInfo>? children}) - : super( - SettingsRoute.name, - initialChildren: children, - ); + : super(SettingsRoute.name, initialChildren: children); static const String name = 'SettingsRoute'; @@ -813,10 +714,7 @@ class SettingsRoute extends _i41.PageRouteInfo { /// [_i27.SettingsScrobblingPage] class SettingsScrobblingRoute extends _i41.PageRouteInfo { const SettingsScrobblingRoute({List<_i41.PageRouteInfo>? children}) - : super( - SettingsScrobblingRoute.name, - initialChildren: children, - ); + : super(SettingsScrobblingRoute.name, initialChildren: children); static const String name = 'SettingsScrobblingRoute'; @@ -832,10 +730,7 @@ class SettingsScrobblingRoute extends _i41.PageRouteInfo { /// [_i28.StatsAlbumsPage] class StatsAlbumsRoute extends _i41.PageRouteInfo { const StatsAlbumsRoute({List<_i41.PageRouteInfo>? children}) - : super( - StatsAlbumsRoute.name, - initialChildren: children, - ); + : super(StatsAlbumsRoute.name, initialChildren: children); static const String name = 'StatsAlbumsRoute'; @@ -851,10 +746,7 @@ class StatsAlbumsRoute extends _i41.PageRouteInfo { /// [_i29.StatsArtistsPage] class StatsArtistsRoute extends _i41.PageRouteInfo { const StatsArtistsRoute({List<_i41.PageRouteInfo>? children}) - : super( - StatsArtistsRoute.name, - initialChildren: children, - ); + : super(StatsArtistsRoute.name, initialChildren: children); static const String name = 'StatsArtistsRoute'; @@ -870,10 +762,7 @@ class StatsArtistsRoute extends _i41.PageRouteInfo { /// [_i30.StatsMinutesPage] class StatsMinutesRoute extends _i41.PageRouteInfo { const StatsMinutesRoute({List<_i41.PageRouteInfo>? children}) - : super( - StatsMinutesRoute.name, - initialChildren: children, - ); + : super(StatsMinutesRoute.name, initialChildren: children); static const String name = 'StatsMinutesRoute'; @@ -889,10 +778,7 @@ class StatsMinutesRoute extends _i41.PageRouteInfo { /// [_i31.StatsPage] class StatsRoute extends _i41.PageRouteInfo { const StatsRoute({List<_i41.PageRouteInfo>? children}) - : super( - StatsRoute.name, - initialChildren: children, - ); + : super(StatsRoute.name, initialChildren: children); static const String name = 'StatsRoute'; @@ -908,10 +794,7 @@ class StatsRoute extends _i41.PageRouteInfo { /// [_i32.StatsPlaylistsPage] class StatsPlaylistsRoute extends _i41.PageRouteInfo { const StatsPlaylistsRoute({List<_i41.PageRouteInfo>? children}) - : super( - StatsPlaylistsRoute.name, - initialChildren: children, - ); + : super(StatsPlaylistsRoute.name, initialChildren: children); static const String name = 'StatsPlaylistsRoute'; @@ -927,10 +810,7 @@ class StatsPlaylistsRoute extends _i41.PageRouteInfo { /// [_i33.StatsStreamFeesPage] class StatsStreamFeesRoute extends _i41.PageRouteInfo { const StatsStreamFeesRoute({List<_i41.PageRouteInfo>? children}) - : super( - StatsStreamFeesRoute.name, - initialChildren: children, - ); + : super(StatsStreamFeesRoute.name, initialChildren: children); static const String name = 'StatsStreamFeesRoute'; @@ -946,10 +826,7 @@ class StatsStreamFeesRoute extends _i41.PageRouteInfo { /// [_i34.StatsStreamsPage] class StatsStreamsRoute extends _i41.PageRouteInfo { const StatsStreamsRoute({List<_i41.PageRouteInfo>? children}) - : super( - StatsStreamsRoute.name, - initialChildren: children, - ); + : super(StatsStreamsRoute.name, initialChildren: children); static const String name = 'StatsStreamsRoute'; @@ -969,14 +846,11 @@ class TrackRoute extends _i41.PageRouteInfo { required String trackId, List<_i41.PageRouteInfo>? children, }) : super( - TrackRoute.name, - args: TrackRouteArgs( - key: key, - trackId: trackId, - ), - rawPathParams: {'id': trackId}, - initialChildren: children, - ); + TrackRoute.name, + args: TrackRouteArgs(key: key, trackId: trackId), + rawPathParams: {'id': trackId}, + initialChildren: children, + ); static const String name = 'TrackRoute'; @@ -985,20 +859,15 @@ class TrackRoute extends _i41.PageRouteInfo { builder: (data) { final pathParams = data.inheritedPathParams; final args = data.argsAs( - orElse: () => TrackRouteArgs(trackId: pathParams.getString('id'))); - return _i35.TrackPage( - key: args.key, - trackId: args.trackId, + orElse: () => TrackRouteArgs(trackId: pathParams.getString('id')), ); + return _i35.TrackPage(key: args.key, trackId: args.trackId); }, ); } class TrackRouteArgs { - const TrackRouteArgs({ - this.key, - required this.trackId, - }); + const TrackRouteArgs({this.key, required this.trackId}); final _i44.Key? key; @@ -1014,10 +883,7 @@ class TrackRouteArgs { /// [_i36.UserAlbumsPage] class UserAlbumsRoute extends _i41.PageRouteInfo { const UserAlbumsRoute({List<_i41.PageRouteInfo>? children}) - : super( - UserAlbumsRoute.name, - initialChildren: children, - ); + : super(UserAlbumsRoute.name, initialChildren: children); static const String name = 'UserAlbumsRoute'; @@ -1033,10 +899,7 @@ class UserAlbumsRoute extends _i41.PageRouteInfo { /// [_i37.UserArtistsPage] class UserArtistsRoute extends _i41.PageRouteInfo { const UserArtistsRoute({List<_i41.PageRouteInfo>? children}) - : super( - UserArtistsRoute.name, - initialChildren: children, - ); + : super(UserArtistsRoute.name, initialChildren: children); static const String name = 'UserArtistsRoute'; @@ -1052,10 +915,7 @@ class UserArtistsRoute extends _i41.PageRouteInfo { /// [_i38.UserDownloadsPage] class UserDownloadsRoute extends _i41.PageRouteInfo { const UserDownloadsRoute({List<_i41.PageRouteInfo>? children}) - : super( - UserDownloadsRoute.name, - initialChildren: children, - ); + : super(UserDownloadsRoute.name, initialChildren: children); static const String name = 'UserDownloadsRoute'; @@ -1071,10 +931,7 @@ class UserDownloadsRoute extends _i41.PageRouteInfo { /// [_i39.UserLocalLibraryPage] class UserLocalLibraryRoute extends _i41.PageRouteInfo { const UserLocalLibraryRoute({List<_i41.PageRouteInfo>? children}) - : super( - UserLocalLibraryRoute.name, - initialChildren: children, - ); + : super(UserLocalLibraryRoute.name, initialChildren: children); static const String name = 'UserLocalLibraryRoute'; @@ -1090,10 +947,7 @@ class UserLocalLibraryRoute extends _i41.PageRouteInfo { /// [_i40.UserPlaylistsPage] class UserPlaylistsRoute extends _i41.PageRouteInfo { const UserPlaylistsRoute({List<_i41.PageRouteInfo>? children}) - : super( - UserPlaylistsRoute.name, - initialChildren: children, - ); + : super(UserPlaylistsRoute.name, initialChildren: children); static const String name = 'UserPlaylistsRoute'; diff --git a/lib/collections/spotube_icons.dart b/lib/collections/spotube_icons.dart index b10ef7e3..21cf4176 100644 --- a/lib/collections/spotube_icons.dart +++ b/lib/collections/spotube_icons.dart @@ -80,6 +80,7 @@ abstract class SpotubeIcons { static const hoverOff = Icons.back_hand_outlined; static const dragHandle = Icons.drag_indicator; static const lightning = Icons.flash_on_rounded; + static const lightningOutlined = FeatherIcons.zap; static const colorSync = FeatherIcons.activity; static const language = FeatherIcons.globe; static const error = FeatherIcons.alertTriangle; diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 228e24b1..833fa724 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -463,5 +463,6 @@ "audio_scrobblers": "Audio Scrobblers", "scrobbling": "Scrobbling", "source": "Source: ", - "uncompressed": "Uncompressed" + "uncompressed": "Uncompressed", + "dab_music_source_description": "For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching." } diff --git a/lib/l10n/generated/app_localizations.dart b/lib/l10n/generated/app_localizations.dart index b2c94dc1..d3124728 100644 --- a/lib/l10n/generated/app_localizations.dart +++ b/lib/l10n/generated/app_localizations.dart @@ -2942,6 +2942,12 @@ abstract class AppLocalizations { /// In en, this message translates to: /// **'Uncompressed'** String get uncompressed; + + /// No description provided for @dab_music_source_description. + /// + /// In en, this message translates to: + /// **'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'** + String get dab_music_source_description; } class _AppLocalizationsDelegate diff --git a/lib/l10n/generated/app_localizations_ar.dart b/lib/l10n/generated/app_localizations_ar.dart index cd2bc7e9..b974d2e4 100644 --- a/lib/l10n/generated/app_localizations_ar.dart +++ b/lib/l10n/generated/app_localizations_ar.dart @@ -1543,4 +1543,8 @@ class AppLocalizationsAr extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_bn.dart b/lib/l10n/generated/app_localizations_bn.dart index 2246c64c..a193c26f 100644 --- a/lib/l10n/generated/app_localizations_bn.dart +++ b/lib/l10n/generated/app_localizations_bn.dart @@ -1544,4 +1544,8 @@ class AppLocalizationsBn extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_ca.dart b/lib/l10n/generated/app_localizations_ca.dart index c0d55c75..694aa2c7 100644 --- a/lib/l10n/generated/app_localizations_ca.dart +++ b/lib/l10n/generated/app_localizations_ca.dart @@ -1554,4 +1554,8 @@ class AppLocalizationsCa extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_cs.dart b/lib/l10n/generated/app_localizations_cs.dart index 2c1e4dfa..8ef0e6a9 100644 --- a/lib/l10n/generated/app_localizations_cs.dart +++ b/lib/l10n/generated/app_localizations_cs.dart @@ -1544,4 +1544,8 @@ class AppLocalizationsCs extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_de.dart b/lib/l10n/generated/app_localizations_de.dart index 12ce5e81..870dd76d 100644 --- a/lib/l10n/generated/app_localizations_de.dart +++ b/lib/l10n/generated/app_localizations_de.dart @@ -1556,4 +1556,8 @@ class AppLocalizationsDe extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_en.dart b/lib/l10n/generated/app_localizations_en.dart index fdafac30..23d379c7 100644 --- a/lib/l10n/generated/app_localizations_en.dart +++ b/lib/l10n/generated/app_localizations_en.dart @@ -1542,4 +1542,8 @@ class AppLocalizationsEn extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_es.dart b/lib/l10n/generated/app_localizations_es.dart index b9d2bb5a..f06c9399 100644 --- a/lib/l10n/generated/app_localizations_es.dart +++ b/lib/l10n/generated/app_localizations_es.dart @@ -1557,4 +1557,8 @@ class AppLocalizationsEs extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_eu.dart b/lib/l10n/generated/app_localizations_eu.dart index 0ac13ddc..296c50ed 100644 --- a/lib/l10n/generated/app_localizations_eu.dart +++ b/lib/l10n/generated/app_localizations_eu.dart @@ -1554,4 +1554,8 @@ class AppLocalizationsEu extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_fa.dart b/lib/l10n/generated/app_localizations_fa.dart index 140077c2..a1203c57 100644 --- a/lib/l10n/generated/app_localizations_fa.dart +++ b/lib/l10n/generated/app_localizations_fa.dart @@ -1542,4 +1542,8 @@ class AppLocalizationsFa extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_fi.dart b/lib/l10n/generated/app_localizations_fi.dart index b1d13d8e..b9ee4de6 100644 --- a/lib/l10n/generated/app_localizations_fi.dart +++ b/lib/l10n/generated/app_localizations_fi.dart @@ -1542,4 +1542,8 @@ class AppLocalizationsFi extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_fr.dart b/lib/l10n/generated/app_localizations_fr.dart index 6a7e51cb..daee5667 100644 --- a/lib/l10n/generated/app_localizations_fr.dart +++ b/lib/l10n/generated/app_localizations_fr.dart @@ -1562,4 +1562,8 @@ class AppLocalizationsFr extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_hi.dart b/lib/l10n/generated/app_localizations_hi.dart index 1be49d24..65279d70 100644 --- a/lib/l10n/generated/app_localizations_hi.dart +++ b/lib/l10n/generated/app_localizations_hi.dart @@ -1548,4 +1548,8 @@ class AppLocalizationsHi extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_id.dart b/lib/l10n/generated/app_localizations_id.dart index 225fb9a5..1e0b9f9f 100644 --- a/lib/l10n/generated/app_localizations_id.dart +++ b/lib/l10n/generated/app_localizations_id.dart @@ -1550,4 +1550,8 @@ class AppLocalizationsId extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_it.dart b/lib/l10n/generated/app_localizations_it.dart index 88128c6c..f92eae63 100644 --- a/lib/l10n/generated/app_localizations_it.dart +++ b/lib/l10n/generated/app_localizations_it.dart @@ -1549,4 +1549,8 @@ class AppLocalizationsIt extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_ja.dart b/lib/l10n/generated/app_localizations_ja.dart index f444e4e4..0e3d98ab 100644 --- a/lib/l10n/generated/app_localizations_ja.dart +++ b/lib/l10n/generated/app_localizations_ja.dart @@ -1513,4 +1513,8 @@ class AppLocalizationsJa extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_ka.dart b/lib/l10n/generated/app_localizations_ka.dart index a9efb949..22d3246f 100644 --- a/lib/l10n/generated/app_localizations_ka.dart +++ b/lib/l10n/generated/app_localizations_ka.dart @@ -1551,4 +1551,8 @@ class AppLocalizationsKa extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_ko.dart b/lib/l10n/generated/app_localizations_ko.dart index c6cc39c8..19b7e544 100644 --- a/lib/l10n/generated/app_localizations_ko.dart +++ b/lib/l10n/generated/app_localizations_ko.dart @@ -1517,4 +1517,8 @@ class AppLocalizationsKo extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_ne.dart b/lib/l10n/generated/app_localizations_ne.dart index 6bd1214e..53bcb184 100644 --- a/lib/l10n/generated/app_localizations_ne.dart +++ b/lib/l10n/generated/app_localizations_ne.dart @@ -1554,4 +1554,8 @@ class AppLocalizationsNe extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_nl.dart b/lib/l10n/generated/app_localizations_nl.dart index e7d6ee40..dd73f907 100644 --- a/lib/l10n/generated/app_localizations_nl.dart +++ b/lib/l10n/generated/app_localizations_nl.dart @@ -1548,4 +1548,8 @@ class AppLocalizationsNl extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_pl.dart b/lib/l10n/generated/app_localizations_pl.dart index fe0493c0..095242bc 100644 --- a/lib/l10n/generated/app_localizations_pl.dart +++ b/lib/l10n/generated/app_localizations_pl.dart @@ -1550,4 +1550,8 @@ class AppLocalizationsPl extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_pt.dart b/lib/l10n/generated/app_localizations_pt.dart index 082817ae..4b1fd2bc 100644 --- a/lib/l10n/generated/app_localizations_pt.dart +++ b/lib/l10n/generated/app_localizations_pt.dart @@ -1547,4 +1547,8 @@ class AppLocalizationsPt extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_ru.dart b/lib/l10n/generated/app_localizations_ru.dart index 6645d9ff..9cd091e7 100644 --- a/lib/l10n/generated/app_localizations_ru.dart +++ b/lib/l10n/generated/app_localizations_ru.dart @@ -1550,4 +1550,8 @@ class AppLocalizationsRu extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_ta.dart b/lib/l10n/generated/app_localizations_ta.dart index 98cff256..204832b2 100644 --- a/lib/l10n/generated/app_localizations_ta.dart +++ b/lib/l10n/generated/app_localizations_ta.dart @@ -1556,4 +1556,8 @@ class AppLocalizationsTa extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_th.dart b/lib/l10n/generated/app_localizations_th.dart index 0156180e..5ea104a7 100644 --- a/lib/l10n/generated/app_localizations_th.dart +++ b/lib/l10n/generated/app_localizations_th.dart @@ -1539,4 +1539,8 @@ class AppLocalizationsTh extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_tl.dart b/lib/l10n/generated/app_localizations_tl.dart index ddecd3cf..de1916e5 100644 --- a/lib/l10n/generated/app_localizations_tl.dart +++ b/lib/l10n/generated/app_localizations_tl.dart @@ -1557,4 +1557,8 @@ class AppLocalizationsTl extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_tr.dart b/lib/l10n/generated/app_localizations_tr.dart index 6e9e36f2..e6740bb3 100644 --- a/lib/l10n/generated/app_localizations_tr.dart +++ b/lib/l10n/generated/app_localizations_tr.dart @@ -1550,4 +1550,8 @@ class AppLocalizationsTr extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_uk.dart b/lib/l10n/generated/app_localizations_uk.dart index 6d8e44b1..aba38ac3 100644 --- a/lib/l10n/generated/app_localizations_uk.dart +++ b/lib/l10n/generated/app_localizations_uk.dart @@ -1546,4 +1546,8 @@ class AppLocalizationsUk extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_vi.dart b/lib/l10n/generated/app_localizations_vi.dart index fcf545ae..ec449549 100644 --- a/lib/l10n/generated/app_localizations_vi.dart +++ b/lib/l10n/generated/app_localizations_vi.dart @@ -1552,4 +1552,8 @@ class AppLocalizationsVi extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } diff --git a/lib/l10n/generated/app_localizations_zh.dart b/lib/l10n/generated/app_localizations_zh.dart index ec8a4e4b..c9e18e72 100644 --- a/lib/l10n/generated/app_localizations_zh.dart +++ b/lib/l10n/generated/app_localizations_zh.dart @@ -1506,6 +1506,10 @@ class AppLocalizationsZh extends AppLocalizations { @override String get uncompressed => 'Uncompressed'; + + @override + String get dab_music_source_description => + 'For audiophiles. Provides high-quality/lossless audio streams. Accurate ISRC based track matching.'; } /// The translations for Chinese, as used in Taiwan (`zh_TW`). diff --git a/lib/models/connect/connect.freezed.dart b/lib/models/connect/connect.freezed.dart index 9f9b558b..157d0911 100644 --- a/lib/models/connect/connect.freezed.dart +++ b/lib/models/connect/connect.freezed.dart @@ -112,8 +112,13 @@ mixin _$WebSocketLoadEventData { required TResult orElse(), }) => throw _privateConstructorUsedError; + + /// Serializes this WebSocketLoadEventData to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of WebSocketLoadEventData + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $WebSocketLoadEventDataCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -142,6 +147,8 @@ class _$WebSocketLoadEventDataCopyWithImpl<$Res, // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of WebSocketLoadEventData + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -190,6 +197,8 @@ class __$$WebSocketLoadEventDataPlaylistImplCopyWithImpl<$Res> $Res Function(_$WebSocketLoadEventDataPlaylistImpl) _then) : super(_value, _then); + /// Create a copy of WebSocketLoadEventData + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -213,6 +222,8 @@ class __$$WebSocketLoadEventDataPlaylistImplCopyWithImpl<$Res> )); } + /// Create a copy of WebSocketLoadEventData + /// with the given fields replaced by the non-null parameter values. @override @pragma('vm:prefer-inline') $SpotubeSimplePlaylistObjectCopyWith<$Res>? get collection { @@ -281,12 +292,14 @@ class _$WebSocketLoadEventDataPlaylistImpl other.initialIndex == initialIndex)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash(runtimeType, const DeepCollectionEquality().hash(_tracks), collection, initialIndex); - @JsonKey(ignore: true) + /// Create a copy of WebSocketLoadEventData + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$WebSocketLoadEventDataPlaylistImplCopyWith< @@ -420,8 +433,11 @@ abstract class WebSocketLoadEventDataPlaylist extends WebSocketLoadEventData { SpotubeSimplePlaylistObject? get collection; @override int? get initialIndex; + + /// Create a copy of WebSocketLoadEventData + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$WebSocketLoadEventDataPlaylistImplCopyWith< _$WebSocketLoadEventDataPlaylistImpl> get copyWith => throw _privateConstructorUsedError; @@ -456,6 +472,8 @@ class __$$WebSocketLoadEventDataAlbumImplCopyWithImpl<$Res> $Res Function(_$WebSocketLoadEventDataAlbumImpl) _then) : super(_value, _then); + /// Create a copy of WebSocketLoadEventData + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -479,6 +497,8 @@ class __$$WebSocketLoadEventDataAlbumImplCopyWithImpl<$Res> )); } + /// Create a copy of WebSocketLoadEventData + /// with the given fields replaced by the non-null parameter values. @override @pragma('vm:prefer-inline') $SpotubeSimpleAlbumObjectCopyWith<$Res>? get collection { @@ -545,12 +565,14 @@ class _$WebSocketLoadEventDataAlbumImpl extends WebSocketLoadEventDataAlbum { other.initialIndex == initialIndex)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash(runtimeType, const DeepCollectionEquality().hash(_tracks), collection, initialIndex); - @JsonKey(ignore: true) + /// Create a copy of WebSocketLoadEventData + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$WebSocketLoadEventDataAlbumImplCopyWith<_$WebSocketLoadEventDataAlbumImpl> @@ -683,8 +705,11 @@ abstract class WebSocketLoadEventDataAlbum extends WebSocketLoadEventData { SpotubeSimpleAlbumObject? get collection; @override int? get initialIndex; + + /// Create a copy of WebSocketLoadEventData + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$WebSocketLoadEventDataAlbumImplCopyWith<_$WebSocketLoadEventDataAlbumImpl> get copyWith => throw _privateConstructorUsedError; } diff --git a/lib/models/database/database.g.dart b/lib/models/database/database.g.dart index ba24c037..8c4def7c 100644 --- a/lib/models/database/database.g.dart +++ b/lib/models/database/database.g.dart @@ -18,15 +18,12 @@ class $AuthenticationTableTable extends AuthenticationTable requiredDuringInsert: false, defaultConstraints: GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT')); - static const VerificationMeta _cookieMeta = const VerificationMeta('cookie'); @override late final GeneratedColumnWithTypeConverter cookie = GeneratedColumn('cookie', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true) .withConverter( $AuthenticationTableTable.$convertercookie); - static const VerificationMeta _accessTokenMeta = - const VerificationMeta('accessToken'); @override late final GeneratedColumnWithTypeConverter accessToken = GeneratedColumn('access_token', aliasedName, false, @@ -55,8 +52,6 @@ class $AuthenticationTableTable extends AuthenticationTable if (data.containsKey('id')) { context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); } - context.handle(_cookieMeta, const VerificationResult.success()); - context.handle(_accessTokenMeta, const VerificationResult.success()); if (data.containsKey('expiration')) { context.handle( _expirationMeta, @@ -301,8 +296,6 @@ class $BlacklistTableTable extends BlacklistTable late final GeneratedColumn name = GeneratedColumn( 'name', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true); - static const VerificationMeta _elementTypeMeta = - const VerificationMeta('elementType'); @override late final GeneratedColumnWithTypeConverter elementType = GeneratedColumn('element_type', aliasedName, false, @@ -336,7 +329,6 @@ class $BlacklistTableTable extends BlacklistTable } else if (isInserting) { context.missing(_nameMeta); } - context.handle(_elementTypeMeta, const VerificationResult.success()); if (data.containsKey('element_id')) { context.handle(_elementIdMeta, elementId.isAcceptableOrUnknown(data['element_id']!, _elementIdMeta)); @@ -566,8 +558,6 @@ class $PreferencesTableTable extends PreferencesTable requiredDuringInsert: false, defaultConstraints: GeneratedColumn.constraintIsAlways('PRIMARY KEY AUTOINCREMENT')); - static const VerificationMeta _audioQualityMeta = - const VerificationMeta('audioQuality'); @override late final GeneratedColumnWithTypeConverter audioQuality = GeneratedColumn( @@ -647,8 +637,6 @@ class $PreferencesTableTable extends PreferencesTable defaultConstraints: GeneratedColumn.constraintIsAlways( 'CHECK ("skip_non_music" IN (0, 1))'), defaultValue: const Constant(false)); - static const VerificationMeta _closeBehaviorMeta = - const VerificationMeta('closeBehavior'); @override late final GeneratedColumnWithTypeConverter closeBehavior = GeneratedColumn( @@ -658,8 +646,6 @@ class $PreferencesTableTable extends PreferencesTable defaultValue: Constant(CloseBehavior.close.name)) .withConverter( $PreferencesTableTable.$convertercloseBehavior); - static const VerificationMeta _accentColorSchemeMeta = - const VerificationMeta('accentColorScheme'); @override late final GeneratedColumnWithTypeConverter accentColorScheme = GeneratedColumn( @@ -669,8 +655,6 @@ class $PreferencesTableTable extends PreferencesTable defaultValue: const Constant("Slate:0xff64748b")) .withConverter( $PreferencesTableTable.$converteraccentColorScheme); - static const VerificationMeta _layoutModeMeta = - const VerificationMeta('layoutMode'); @override late final GeneratedColumnWithTypeConverter layoutMode = GeneratedColumn('layout_mode', aliasedName, false, @@ -679,7 +663,6 @@ class $PreferencesTableTable extends PreferencesTable defaultValue: Constant(LayoutMode.adaptive.name)) .withConverter( $PreferencesTableTable.$converterlayoutMode); - static const VerificationMeta _localeMeta = const VerificationMeta('locale'); @override late final GeneratedColumnWithTypeConverter locale = GeneratedColumn('locale', aliasedName, false, @@ -688,7 +671,6 @@ class $PreferencesTableTable extends PreferencesTable defaultValue: const Constant( '{"languageCode":"system","countryCode":"system"}')) .withConverter($PreferencesTableTable.$converterlocale); - static const VerificationMeta _marketMeta = const VerificationMeta('market'); @override late final GeneratedColumnWithTypeConverter market = GeneratedColumn('market', aliasedName, false, @@ -696,8 +678,6 @@ class $PreferencesTableTable extends PreferencesTable requiredDuringInsert: false, defaultValue: Constant(Market.US.name)) .withConverter($PreferencesTableTable.$convertermarket); - static const VerificationMeta _searchModeMeta = - const VerificationMeta('searchMode'); @override late final GeneratedColumnWithTypeConverter searchMode = GeneratedColumn('search_mode', aliasedName, false, @@ -714,8 +694,6 @@ class $PreferencesTableTable extends PreferencesTable type: DriftSqlType.string, requiredDuringInsert: false, defaultValue: const Constant("")); - static const VerificationMeta _localLibraryLocationMeta = - const VerificationMeta('localLibraryLocation'); @override late final GeneratedColumnWithTypeConverter, String> localLibraryLocation = GeneratedColumn( @@ -741,8 +719,6 @@ class $PreferencesTableTable extends PreferencesTable type: DriftSqlType.string, requiredDuringInsert: false, defaultValue: const Constant("https://inv.nadeko.net")); - static const VerificationMeta _themeModeMeta = - const VerificationMeta('themeMode'); @override late final GeneratedColumnWithTypeConverter themeMode = GeneratedColumn('theme_mode', aliasedName, false, @@ -750,8 +726,6 @@ class $PreferencesTableTable extends PreferencesTable requiredDuringInsert: false, defaultValue: Constant(ThemeMode.system.name)) .withConverter($PreferencesTableTable.$converterthemeMode); - static const VerificationMeta _audioSourceMeta = - const VerificationMeta('audioSource'); @override late final GeneratedColumnWithTypeConverter audioSource = GeneratedColumn('audio_source', aliasedName, false, @@ -760,8 +734,6 @@ class $PreferencesTableTable extends PreferencesTable defaultValue: Constant(AudioSource.youtube.name)) .withConverter( $PreferencesTableTable.$converteraudioSource); - static const VerificationMeta _youtubeClientEngineMeta = - const VerificationMeta('youtubeClientEngine'); @override late final GeneratedColumnWithTypeConverter youtubeClientEngine = GeneratedColumn( @@ -771,8 +743,6 @@ class $PreferencesTableTable extends PreferencesTable defaultValue: Constant(YoutubeClientEngine.youtubeExplode.name)) .withConverter( $PreferencesTableTable.$converteryoutubeClientEngine); - static const VerificationMeta _streamMusicCodecMeta = - const VerificationMeta('streamMusicCodec'); @override late final GeneratedColumnWithTypeConverter streamMusicCodec = GeneratedColumn( @@ -782,8 +752,6 @@ class $PreferencesTableTable extends PreferencesTable defaultValue: Constant(SourceCodecs.weba.name)) .withConverter( $PreferencesTableTable.$converterstreamMusicCodec); - static const VerificationMeta _downloadMusicCodecMeta = - const VerificationMeta('downloadMusicCodec'); @override late final GeneratedColumnWithTypeConverter downloadMusicCodec = GeneratedColumn( @@ -887,7 +855,6 @@ class $PreferencesTableTable extends PreferencesTable if (data.containsKey('id')) { context.handle(_idMeta, id.isAcceptableOrUnknown(data['id']!, _idMeta)); } - context.handle(_audioQualityMeta, const VerificationResult.success()); if (data.containsKey('album_color_sync')) { context.handle( _albumColorSyncMeta, @@ -930,20 +897,12 @@ class $PreferencesTableTable extends PreferencesTable skipNonMusic.isAcceptableOrUnknown( data['skip_non_music']!, _skipNonMusicMeta)); } - context.handle(_closeBehaviorMeta, const VerificationResult.success()); - context.handle(_accentColorSchemeMeta, const VerificationResult.success()); - context.handle(_layoutModeMeta, const VerificationResult.success()); - context.handle(_localeMeta, const VerificationResult.success()); - context.handle(_marketMeta, const VerificationResult.success()); - context.handle(_searchModeMeta, const VerificationResult.success()); if (data.containsKey('download_location')) { context.handle( _downloadLocationMeta, downloadLocation.isAcceptableOrUnknown( data['download_location']!, _downloadLocationMeta)); } - context.handle( - _localLibraryLocationMeta, const VerificationResult.success()); if (data.containsKey('piped_instance')) { context.handle( _pipedInstanceMeta, @@ -956,12 +915,6 @@ class $PreferencesTableTable extends PreferencesTable invidiousInstance.isAcceptableOrUnknown( data['invidious_instance']!, _invidiousInstanceMeta)); } - context.handle(_themeModeMeta, const VerificationResult.success()); - context.handle(_audioSourceMeta, const VerificationResult.success()); - context.handle( - _youtubeClientEngineMeta, const VerificationResult.success()); - context.handle(_streamMusicCodecMeta, const VerificationResult.success()); - context.handle(_downloadMusicCodecMeta, const VerificationResult.success()); if (data.containsKey('discord_presence')) { context.handle( _discordPresenceMeta, @@ -2030,8 +1983,6 @@ class $ScrobblerTableTable extends ScrobblerTable late final GeneratedColumn username = GeneratedColumn( 'username', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true); - static const VerificationMeta _passwordHashMeta = - const VerificationMeta('passwordHash'); @override late final GeneratedColumnWithTypeConverter passwordHash = GeneratedColumn( @@ -2064,7 +2015,6 @@ class $ScrobblerTableTable extends ScrobblerTable } else if (isInserting) { context.missing(_usernameMeta); } - context.handle(_passwordHashMeta, const VerificationResult.success()); return context; } @@ -2595,8 +2545,6 @@ class $SourceMatchTableTable extends SourceMatchTable late final GeneratedColumn sourceId = GeneratedColumn( 'source_id', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true); - static const VerificationMeta _sourceTypeMeta = - const VerificationMeta('sourceType'); @override late final GeneratedColumnWithTypeConverter sourceType = GeneratedColumn('source_type', aliasedName, false, @@ -2642,7 +2590,6 @@ class $SourceMatchTableTable extends SourceMatchTable } else if (isInserting) { context.missing(_sourceIdMeta); } - context.handle(_sourceTypeMeta, const VerificationResult.success()); if (data.containsKey('created_at')) { context.handle(_createdAtMeta, createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); @@ -2901,8 +2848,6 @@ class $AudioPlayerStateTableTable extends AudioPlayerStateTable requiredDuringInsert: true, defaultConstraints: GeneratedColumn.constraintIsAlways('CHECK ("playing" IN (0, 1))')); - static const VerificationMeta _loopModeMeta = - const VerificationMeta('loopMode'); @override late final GeneratedColumnWithTypeConverter loopMode = GeneratedColumn('loop_mode', aliasedName, false, @@ -2918,15 +2863,12 @@ class $AudioPlayerStateTableTable extends AudioPlayerStateTable requiredDuringInsert: true, defaultConstraints: GeneratedColumn.constraintIsAlways('CHECK ("shuffled" IN (0, 1))')); - static const VerificationMeta _collectionsMeta = - const VerificationMeta('collections'); @override late final GeneratedColumnWithTypeConverter, String> collections = GeneratedColumn('collections', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true) .withConverter>( $AudioPlayerStateTableTable.$convertercollections); - static const VerificationMeta _tracksMeta = const VerificationMeta('tracks'); @override late final GeneratedColumnWithTypeConverter, String> tracks = GeneratedColumn('tracks', aliasedName, false, @@ -2966,15 +2908,12 @@ class $AudioPlayerStateTableTable extends AudioPlayerStateTable } else if (isInserting) { context.missing(_playingMeta); } - context.handle(_loopModeMeta, const VerificationResult.success()); if (data.containsKey('shuffled')) { context.handle(_shuffledMeta, shuffled.isAcceptableOrUnknown(data['shuffled']!, _shuffledMeta)); } else if (isInserting) { context.missing(_shuffledMeta); } - context.handle(_collectionsMeta, const VerificationResult.success()); - context.handle(_tracksMeta, const VerificationResult.success()); if (data.containsKey('current_index')) { context.handle( _currentIndexMeta, @@ -3305,7 +3244,6 @@ class $HistoryTableTable extends HistoryTable type: DriftSqlType.dateTime, requiredDuringInsert: false, defaultValue: currentDateAndTime); - static const VerificationMeta _typeMeta = const VerificationMeta('type'); @override late final GeneratedColumnWithTypeConverter type = GeneratedColumn('type', aliasedName, false, @@ -3316,7 +3254,6 @@ class $HistoryTableTable extends HistoryTable late final GeneratedColumn itemId = GeneratedColumn( 'item_id', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true); - static const VerificationMeta _dataMeta = const VerificationMeta('data'); @override late final GeneratedColumnWithTypeConverter, String> data = GeneratedColumn('data', aliasedName, false, @@ -3342,14 +3279,12 @@ class $HistoryTableTable extends HistoryTable context.handle(_createdAtMeta, createdAt.isAcceptableOrUnknown(data['created_at']!, _createdAtMeta)); } - context.handle(_typeMeta, const VerificationResult.success()); if (data.containsKey('item_id')) { context.handle(_itemIdMeta, itemId.isAcceptableOrUnknown(data['item_id']!, _itemIdMeta)); } else if (isInserting) { context.missing(_itemIdMeta); } - context.handle(_dataMeta, const VerificationResult.success()); return context; } @@ -3608,7 +3543,6 @@ class $LyricsTableTable extends LyricsTable late final GeneratedColumn trackId = GeneratedColumn( 'track_id', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true); - static const VerificationMeta _dataMeta = const VerificationMeta('data'); @override late final GeneratedColumnWithTypeConverter data = GeneratedColumn('data', aliasedName, false, @@ -3635,7 +3569,6 @@ class $LyricsTableTable extends LyricsTable } else if (isInserting) { context.missing(_trackIdMeta); } - context.handle(_dataMeta, const VerificationResult.success()); return context; } @@ -3853,15 +3786,12 @@ class $MetadataPluginsTableTable extends MetadataPluginsTable late final GeneratedColumn entryPoint = GeneratedColumn( 'entry_point', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true); - static const VerificationMeta _apisMeta = const VerificationMeta('apis'); @override late final GeneratedColumnWithTypeConverter, String> apis = GeneratedColumn('apis', aliasedName, false, type: DriftSqlType.string, requiredDuringInsert: true) .withConverter>( $MetadataPluginsTableTable.$converterapis); - static const VerificationMeta _abilitiesMeta = - const VerificationMeta('abilities'); @override late final GeneratedColumnWithTypeConverter, String> abilities = GeneratedColumn('abilities', aliasedName, false, @@ -3954,8 +3884,6 @@ class $MetadataPluginsTableTable extends MetadataPluginsTable } else if (isInserting) { context.missing(_entryPointMeta); } - context.handle(_apisMeta, const VerificationResult.success()); - context.handle(_abilitiesMeta, const VerificationResult.success()); if (data.containsKey('selected')) { context.handle(_selectedMeta, selected.isAcceptableOrUnknown(data['selected']!, _selectedMeta)); diff --git a/lib/models/metadata/metadata.freezed.dart b/lib/models/metadata/metadata.freezed.dart index 54fd452a..bb4cf3f8 100644 --- a/lib/models/metadata/metadata.freezed.dart +++ b/lib/models/metadata/metadata.freezed.dart @@ -33,8 +33,12 @@ mixin _$SpotubeFullAlbumObject { String? get recordLabel => throw _privateConstructorUsedError; List? get genres => throw _privateConstructorUsedError; + /// Serializes this SpotubeFullAlbumObject to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of SpotubeFullAlbumObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $SpotubeFullAlbumObjectCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -69,6 +73,8 @@ class _$SpotubeFullAlbumObjectCopyWithImpl<$Res, // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of SpotubeFullAlbumObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -160,6 +166,8 @@ class __$$SpotubeFullAlbumObjectImplCopyWithImpl<$Res> $Res Function(_$SpotubeFullAlbumObjectImpl) _then) : super(_value, _then); + /// Create a copy of SpotubeFullAlbumObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -308,7 +316,7 @@ class _$SpotubeFullAlbumObjectImpl implements _SpotubeFullAlbumObject { const DeepCollectionEquality().equals(other._genres, _genres)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash( runtimeType, @@ -323,7 +331,9 @@ class _$SpotubeFullAlbumObjectImpl implements _SpotubeFullAlbumObject { recordLabel, const DeepCollectionEquality().hash(_genres)); - @JsonKey(ignore: true) + /// Create a copy of SpotubeFullAlbumObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$SpotubeFullAlbumObjectImplCopyWith<_$SpotubeFullAlbumObjectImpl> @@ -374,8 +384,11 @@ abstract class _SpotubeFullAlbumObject implements SpotubeFullAlbumObject { String? get recordLabel; @override List? get genres; + + /// Create a copy of SpotubeFullAlbumObject + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$SpotubeFullAlbumObjectImplCopyWith<_$SpotubeFullAlbumObjectImpl> get copyWith => throw _privateConstructorUsedError; } @@ -396,8 +409,12 @@ mixin _$SpotubeSimpleAlbumObject { SpotubeAlbumType get albumType => throw _privateConstructorUsedError; String? get releaseDate => throw _privateConstructorUsedError; + /// Serializes this SpotubeSimpleAlbumObject to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of SpotubeSimpleAlbumObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $SpotubeSimpleAlbumObjectCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -429,6 +446,8 @@ class _$SpotubeSimpleAlbumObjectCopyWithImpl<$Res, // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of SpotubeSimpleAlbumObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -502,6 +521,8 @@ class __$$SpotubeSimpleAlbumObjectImplCopyWithImpl<$Res> $Res Function(_$SpotubeSimpleAlbumObjectImpl) _then) : super(_value, _then); + /// Create a copy of SpotubeSimpleAlbumObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -613,7 +634,7 @@ class _$SpotubeSimpleAlbumObjectImpl implements _SpotubeSimpleAlbumObject { other.releaseDate == releaseDate)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash( runtimeType, @@ -625,7 +646,9 @@ class _$SpotubeSimpleAlbumObjectImpl implements _SpotubeSimpleAlbumObject { albumType, releaseDate); - @JsonKey(ignore: true) + /// Create a copy of SpotubeSimpleAlbumObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$SpotubeSimpleAlbumObjectImplCopyWith<_$SpotubeSimpleAlbumObjectImpl> @@ -667,8 +690,11 @@ abstract class _SpotubeSimpleAlbumObject implements SpotubeSimpleAlbumObject { SpotubeAlbumType get albumType; @override String? get releaseDate; + + /// Create a copy of SpotubeSimpleAlbumObject + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$SpotubeSimpleAlbumObjectImplCopyWith<_$SpotubeSimpleAlbumObjectImpl> get copyWith => throw _privateConstructorUsedError; } @@ -687,8 +713,12 @@ mixin _$SpotubeFullArtistObject { List? get genres => throw _privateConstructorUsedError; int? get followers => throw _privateConstructorUsedError; + /// Serializes this SpotubeFullArtistObject to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of SpotubeFullArtistObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $SpotubeFullArtistObjectCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -719,6 +749,8 @@ class _$SpotubeFullArtistObjectCopyWithImpl<$Res, // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of SpotubeFullArtistObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -786,6 +818,8 @@ class __$$SpotubeFullArtistObjectImplCopyWithImpl<$Res> $Res Function(_$SpotubeFullArtistObjectImpl) _then) : super(_value, _then); + /// Create a copy of SpotubeFullArtistObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -889,7 +923,7 @@ class _$SpotubeFullArtistObjectImpl implements _SpotubeFullArtistObject { other.followers == followers)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash( runtimeType, @@ -900,7 +934,9 @@ class _$SpotubeFullArtistObjectImpl implements _SpotubeFullArtistObject { const DeepCollectionEquality().hash(_genres), followers); - @JsonKey(ignore: true) + /// Create a copy of SpotubeFullArtistObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$SpotubeFullArtistObjectImplCopyWith<_$SpotubeFullArtistObjectImpl> @@ -939,8 +975,11 @@ abstract class _SpotubeFullArtistObject implements SpotubeFullArtistObject { List? get genres; @override int? get followers; + + /// Create a copy of SpotubeFullArtistObject + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$SpotubeFullArtistObjectImplCopyWith<_$SpotubeFullArtistObjectImpl> get copyWith => throw _privateConstructorUsedError; } @@ -957,8 +996,12 @@ mixin _$SpotubeSimpleArtistObject { String get externalUri => throw _privateConstructorUsedError; List? get images => throw _privateConstructorUsedError; + /// Serializes this SpotubeSimpleArtistObject to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of SpotubeSimpleArtistObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $SpotubeSimpleArtistObjectCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -987,6 +1030,8 @@ class _$SpotubeSimpleArtistObjectCopyWithImpl<$Res, // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of SpotubeSimpleArtistObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -1042,6 +1087,8 @@ class __$$SpotubeSimpleArtistObjectImplCopyWithImpl<$Res> $Res Function(_$SpotubeSimpleArtistObjectImpl) _then) : super(_value, _then); + /// Create a copy of SpotubeSimpleArtistObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -1117,12 +1164,14 @@ class _$SpotubeSimpleArtistObjectImpl implements _SpotubeSimpleArtistObject { const DeepCollectionEquality().equals(other._images, _images)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash(runtimeType, id, name, externalUri, const DeepCollectionEquality().hash(_images)); - @JsonKey(ignore: true) + /// Create a copy of SpotubeSimpleArtistObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$SpotubeSimpleArtistObjectImplCopyWith<_$SpotubeSimpleArtistObjectImpl> @@ -1156,8 +1205,11 @@ abstract class _SpotubeSimpleArtistObject implements SpotubeSimpleArtistObject { String get externalUri; @override List? get images; + + /// Create a copy of SpotubeSimpleArtistObject + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$SpotubeSimpleArtistObjectImplCopyWith<_$SpotubeSimpleArtistObjectImpl> get copyWith => throw _privateConstructorUsedError; } @@ -1175,9 +1227,13 @@ mixin _$SpotubeBrowseSectionObject { bool get browseMore => throw _privateConstructorUsedError; List get items => throw _privateConstructorUsedError; + /// Serializes this SpotubeBrowseSectionObject to a JSON map. Map toJson(Object? Function(T) toJsonT) => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of SpotubeBrowseSectionObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $SpotubeBrowseSectionObjectCopyWith> get copyWith => throw _privateConstructorUsedError; } @@ -1209,6 +1265,8 @@ class _$SpotubeBrowseSectionObjectCopyWithImpl $Res Function(_$SpotubeBrowseSectionObjectImpl) _then) : super(_value, _then); + /// Create a copy of SpotubeBrowseSectionObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -1355,12 +1415,14 @@ class _$SpotubeBrowseSectionObjectImpl const DeepCollectionEquality().equals(other._items, _items)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash(runtimeType, id, title, externalUri, browseMore, const DeepCollectionEquality().hash(_items)); - @JsonKey(ignore: true) + /// Create a copy of SpotubeBrowseSectionObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$SpotubeBrowseSectionObjectImplCopyWith bool get browseMore; @override List get items; + + /// Create a copy of SpotubeBrowseSectionObject + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$SpotubeBrowseSectionObjectImplCopyWith> get copyWith => throw _privateConstructorUsedError; @@ -1486,8 +1551,13 @@ mixin _$MetadataFormFieldObject { required TResult orElse(), }) => throw _privateConstructorUsedError; + + /// Serializes this MetadataFormFieldObject to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of MetadataFormFieldObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $MetadataFormFieldObjectCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -1512,6 +1582,8 @@ class _$MetadataFormFieldObjectCopyWithImpl<$Res, // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of MetadataFormFieldObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -1555,6 +1627,8 @@ class __$$MetadataFormFieldInputObjectImplCopyWithImpl<$Res> $Res Function(_$MetadataFormFieldInputObjectImpl) _then) : super(_value, _then); + /// Create a copy of MetadataFormFieldObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -1655,12 +1729,14 @@ class _$MetadataFormFieldInputObjectImpl (identical(other.regex, regex) || other.regex == regex)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash(runtimeType, objectType, id, variant, placeholder, defaultValue, required, regex); - @JsonKey(ignore: true) + /// Create a copy of MetadataFormFieldObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$MetadataFormFieldInputObjectImplCopyWith< @@ -1786,8 +1862,11 @@ abstract class MetadataFormFieldInputObject implements MetadataFormFieldObject { String? get defaultValue; bool? get required; String? get regex; + + /// Create a copy of MetadataFormFieldObject + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$MetadataFormFieldInputObjectImplCopyWith< _$MetadataFormFieldInputObjectImpl> get copyWith => throw _privateConstructorUsedError; @@ -1815,6 +1894,8 @@ class __$$MetadataFormFieldTextObjectImplCopyWithImpl<$Res> $Res Function(_$MetadataFormFieldTextObjectImpl) _then) : super(_value, _then); + /// Create a copy of MetadataFormFieldObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -1864,11 +1945,13 @@ class _$MetadataFormFieldTextObjectImpl implements MetadataFormFieldTextObject { (identical(other.text, text) || other.text == text)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash(runtimeType, objectType, text); - @JsonKey(ignore: true) + /// Create a copy of MetadataFormFieldObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$MetadataFormFieldTextObjectImplCopyWith<_$MetadataFormFieldTextObjectImpl> @@ -1980,8 +2063,11 @@ abstract class MetadataFormFieldTextObject implements MetadataFormFieldObject { @override String get objectType; String get text; + + /// Create a copy of MetadataFormFieldObject + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$MetadataFormFieldTextObjectImplCopyWith<_$MetadataFormFieldTextObjectImpl> get copyWith => throw _privateConstructorUsedError; } @@ -1996,8 +2082,12 @@ mixin _$SpotubeImageObject { int? get width => throw _privateConstructorUsedError; int? get height => throw _privateConstructorUsedError; + /// Serializes this SpotubeImageObject to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of SpotubeImageObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $SpotubeImageObjectCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -2021,6 +2111,8 @@ class _$SpotubeImageObjectCopyWithImpl<$Res, $Val extends SpotubeImageObject> // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of SpotubeImageObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -2064,6 +2156,8 @@ class __$$SpotubeImageObjectImplCopyWithImpl<$Res> $Res Function(_$SpotubeImageObjectImpl) _then) : super(_value, _then); + /// Create a copy of SpotubeImageObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -2118,11 +2212,13 @@ class _$SpotubeImageObjectImpl implements _SpotubeImageObject { (identical(other.height, height) || other.height == height)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash(runtimeType, url, width, height); - @JsonKey(ignore: true) + /// Create a copy of SpotubeImageObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$SpotubeImageObjectImplCopyWith<_$SpotubeImageObjectImpl> get copyWith => @@ -2152,8 +2248,11 @@ abstract class _SpotubeImageObject implements SpotubeImageObject { int? get width; @override int? get height; + + /// Create a copy of SpotubeImageObject + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$SpotubeImageObjectImplCopyWith<_$SpotubeImageObjectImpl> get copyWith => throw _privateConstructorUsedError; } @@ -2171,9 +2270,13 @@ mixin _$SpotubePaginationResponseObject { bool get hasMore => throw _privateConstructorUsedError; List get items => throw _privateConstructorUsedError; + /// Serializes this SpotubePaginationResponseObject to a JSON map. Map toJson(Object? Function(T) toJsonT) => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of SpotubePaginationResponseObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $SpotubePaginationResponseObjectCopyWith> get copyWith => throw _privateConstructorUsedError; @@ -2202,6 +2305,8 @@ class _$SpotubePaginationResponseObjectCopyWithImpl $Res Function(_$SpotubePaginationResponseObjectImpl) _then) : super(_value, _then); + /// Create a copy of SpotubePaginationResponseObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -2343,12 +2450,14 @@ class _$SpotubePaginationResponseObjectImpl const DeepCollectionEquality().equals(other._items, _items)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash(runtimeType, limit, nextOffset, total, hasMore, const DeepCollectionEquality().hash(_items)); - @JsonKey(ignore: true) + /// Create a copy of SpotubePaginationResponseObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$SpotubePaginationResponseObjectImplCopyWith bool get hasMore; @override List get items; + + /// Create a copy of SpotubePaginationResponseObject + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$SpotubePaginationResponseObjectImplCopyWith> get copyWith => throw _privateConstructorUsedError; @@ -2410,8 +2522,12 @@ mixin _$SpotubeFullPlaylistObject { bool get collaborative => throw _privateConstructorUsedError; bool get public => throw _privateConstructorUsedError; + /// Serializes this SpotubeFullPlaylistObject to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of SpotubeFullPlaylistObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $SpotubeFullPlaylistObjectCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -2447,6 +2563,8 @@ class _$SpotubeFullPlaylistObjectCopyWithImpl<$Res, // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of SpotubeFullPlaylistObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -2500,6 +2618,8 @@ class _$SpotubeFullPlaylistObjectCopyWithImpl<$Res, ) as $Val); } + /// Create a copy of SpotubeFullPlaylistObject + /// with the given fields replaced by the non-null parameter values. @override @pragma('vm:prefer-inline') $SpotubeUserObjectCopyWith<$Res> get owner { @@ -2543,6 +2663,8 @@ class __$$SpotubeFullPlaylistObjectImplCopyWithImpl<$Res> $Res Function(_$SpotubeFullPlaylistObjectImpl) _then) : super(_value, _then); + /// Create a copy of SpotubeFullPlaylistObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -2676,7 +2798,7 @@ class _$SpotubeFullPlaylistObjectImpl implements _SpotubeFullPlaylistObject { (identical(other.public, public) || other.public == public)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash( runtimeType, @@ -2690,7 +2812,9 @@ class _$SpotubeFullPlaylistObjectImpl implements _SpotubeFullPlaylistObject { collaborative, public); - @JsonKey(ignore: true) + /// Create a copy of SpotubeFullPlaylistObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$SpotubeFullPlaylistObjectImplCopyWith<_$SpotubeFullPlaylistObjectImpl> @@ -2738,8 +2862,11 @@ abstract class _SpotubeFullPlaylistObject implements SpotubeFullPlaylistObject { bool get collaborative; @override bool get public; + + /// Create a copy of SpotubeFullPlaylistObject + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$SpotubeFullPlaylistObjectImplCopyWith<_$SpotubeFullPlaylistObjectImpl> get copyWith => throw _privateConstructorUsedError; } @@ -2758,8 +2885,12 @@ mixin _$SpotubeSimplePlaylistObject { SpotubeUserObject get owner => throw _privateConstructorUsedError; List get images => throw _privateConstructorUsedError; + /// Serializes this SpotubeSimplePlaylistObject to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of SpotubeSimplePlaylistObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $SpotubeSimplePlaylistObjectCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -2794,6 +2925,8 @@ class _$SpotubeSimplePlaylistObjectCopyWithImpl<$Res, // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of SpotubeSimplePlaylistObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -2832,6 +2965,8 @@ class _$SpotubeSimplePlaylistObjectCopyWithImpl<$Res, ) as $Val); } + /// Create a copy of SpotubeSimplePlaylistObject + /// with the given fields replaced by the non-null parameter values. @override @pragma('vm:prefer-inline') $SpotubeUserObjectCopyWith<$Res> get owner { @@ -2872,6 +3007,8 @@ class __$$SpotubeSimplePlaylistObjectImplCopyWithImpl<$Res> $Res Function(_$SpotubeSimplePlaylistObjectImpl) _then) : super(_value, _then); + /// Create a copy of SpotubeSimplePlaylistObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -2967,12 +3104,14 @@ class _$SpotubeSimplePlaylistObjectImpl const DeepCollectionEquality().equals(other._images, _images)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash(runtimeType, id, name, description, externalUri, owner, const DeepCollectionEquality().hash(_images)); - @JsonKey(ignore: true) + /// Create a copy of SpotubeSimplePlaylistObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$SpotubeSimplePlaylistObjectImplCopyWith<_$SpotubeSimplePlaylistObjectImpl> @@ -3013,8 +3152,11 @@ abstract class _SpotubeSimplePlaylistObject SpotubeUserObject get owner; @override List get images; + + /// Create a copy of SpotubeSimplePlaylistObject + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$SpotubeSimplePlaylistObjectImplCopyWith<_$SpotubeSimplePlaylistObjectImpl> get copyWith => throw _privateConstructorUsedError; } @@ -3034,8 +3176,12 @@ mixin _$SpotubeSearchResponseObject { throw _privateConstructorUsedError; List get tracks => throw _privateConstructorUsedError; + /// Serializes this SpotubeSearchResponseObject to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of SpotubeSearchResponseObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $SpotubeSearchResponseObjectCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -3066,6 +3212,8 @@ class _$SpotubeSearchResponseObjectCopyWithImpl<$Res, // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of SpotubeSearchResponseObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -3121,6 +3269,8 @@ class __$$SpotubeSearchResponseObjectImplCopyWithImpl<$Res> $Res Function(_$SpotubeSearchResponseObjectImpl) _then) : super(_value, _then); + /// Create a copy of SpotubeSearchResponseObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -3217,7 +3367,7 @@ class _$SpotubeSearchResponseObjectImpl const DeepCollectionEquality().equals(other._tracks, _tracks)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash( runtimeType, @@ -3226,7 +3376,9 @@ class _$SpotubeSearchResponseObjectImpl const DeepCollectionEquality().hash(_playlists), const DeepCollectionEquality().hash(_tracks)); - @JsonKey(ignore: true) + /// Create a copy of SpotubeSearchResponseObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$SpotubeSearchResponseObjectImplCopyWith<_$SpotubeSearchResponseObjectImpl> @@ -3261,8 +3413,11 @@ abstract class _SpotubeSearchResponseObject List get playlists; @override List get tracks; + + /// Create a copy of SpotubeSearchResponseObject + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$SpotubeSearchResponseObjectImplCopyWith<_$SpotubeSearchResponseObjectImpl> get copyWith => throw _privateConstructorUsedError; } @@ -3378,8 +3533,13 @@ mixin _$SpotubeTrackObject { required TResult orElse(), }) => throw _privateConstructorUsedError; + + /// Serializes this SpotubeTrackObject to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of SpotubeTrackObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $SpotubeTrackObjectCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -3411,6 +3571,8 @@ class _$SpotubeTrackObjectCopyWithImpl<$Res, $Val extends SpotubeTrackObject> // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of SpotubeTrackObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -3449,6 +3611,8 @@ class _$SpotubeTrackObjectCopyWithImpl<$Res, $Val extends SpotubeTrackObject> ) as $Val); } + /// Create a copy of SpotubeTrackObject + /// with the given fields replaced by the non-null parameter values. @override @pragma('vm:prefer-inline') $SpotubeSimpleAlbumObjectCopyWith<$Res> get album { @@ -3490,6 +3654,8 @@ class __$$SpotubeLocalTrackObjectImplCopyWithImpl<$Res> $Res Function(_$SpotubeLocalTrackObjectImpl) _then) : super(_value, _then); + /// Create a copy of SpotubeTrackObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -3598,12 +3764,14 @@ class _$SpotubeLocalTrackObjectImpl implements SpotubeLocalTrackObject { (identical(other.path, path) || other.path == path)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash(runtimeType, id, name, externalUri, const DeepCollectionEquality().hash(_artists), album, durationMs, path); - @JsonKey(ignore: true) + /// Create a copy of SpotubeTrackObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$SpotubeLocalTrackObjectImplCopyWith<_$SpotubeLocalTrackObjectImpl> @@ -3757,8 +3925,11 @@ abstract class SpotubeLocalTrackObject implements SpotubeTrackObject { @override int get durationMs; String get path; + + /// Create a copy of SpotubeTrackObject + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$SpotubeLocalTrackObjectImplCopyWith<_$SpotubeLocalTrackObjectImpl> get copyWith => throw _privateConstructorUsedError; } @@ -3795,6 +3966,8 @@ class __$$SpotubeFullTrackObjectImplCopyWithImpl<$Res> $Res Function(_$SpotubeFullTrackObjectImpl) _then) : super(_value, _then); + /// Create a copy of SpotubeTrackObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -3913,7 +4086,7 @@ class _$SpotubeFullTrackObjectImpl implements SpotubeFullTrackObject { other.explicit == explicit)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash( runtimeType, @@ -3926,7 +4099,9 @@ class _$SpotubeFullTrackObjectImpl implements SpotubeFullTrackObject { isrc, explicit); - @JsonKey(ignore: true) + /// Create a copy of SpotubeTrackObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$SpotubeFullTrackObjectImplCopyWith<_$SpotubeFullTrackObjectImpl> @@ -4085,8 +4260,11 @@ abstract class SpotubeFullTrackObject implements SpotubeTrackObject { int get durationMs; String get isrc; bool get explicit; + + /// Create a copy of SpotubeTrackObject + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$SpotubeFullTrackObjectImplCopyWith<_$SpotubeFullTrackObjectImpl> get copyWith => throw _privateConstructorUsedError; } @@ -4102,8 +4280,12 @@ mixin _$SpotubeUserObject { List get images => throw _privateConstructorUsedError; String get externalUri => throw _privateConstructorUsedError; + /// Serializes this SpotubeUserObject to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of SpotubeUserObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $SpotubeUserObjectCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -4131,6 +4313,8 @@ class _$SpotubeUserObjectCopyWithImpl<$Res, $Val extends SpotubeUserObject> // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of SpotubeUserObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -4183,6 +4367,8 @@ class __$$SpotubeUserObjectImplCopyWithImpl<$Res> $Res Function(_$SpotubeUserObjectImpl) _then) : super(_value, _then); + /// Create a copy of SpotubeUserObject + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -4258,12 +4444,14 @@ class _$SpotubeUserObjectImpl implements _SpotubeUserObject { other.externalUri == externalUri)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash(runtimeType, id, name, const DeepCollectionEquality().hash(_images), externalUri); - @JsonKey(ignore: true) + /// Create a copy of SpotubeUserObject + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$SpotubeUserObjectImplCopyWith<_$SpotubeUserObjectImpl> get copyWith => @@ -4296,8 +4484,11 @@ abstract class _SpotubeUserObject implements SpotubeUserObject { List get images; @override String get externalUri; + + /// Create a copy of SpotubeUserObject + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$SpotubeUserObjectImplCopyWith<_$SpotubeUserObjectImpl> get copyWith => throw _privateConstructorUsedError; } @@ -4319,8 +4510,12 @@ mixin _$PluginConfiguration { List get abilities => throw _privateConstructorUsedError; String? get repository => throw _privateConstructorUsedError; + /// Serializes this PluginConfiguration to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of PluginConfiguration + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $PluginConfigurationCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -4354,6 +4549,8 @@ class _$PluginConfigurationCopyWithImpl<$Res, $Val extends PluginConfiguration> // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of PluginConfiguration + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -4442,6 +4639,8 @@ class __$$PluginConfigurationImplCopyWithImpl<$Res> $Res Function(_$PluginConfigurationImpl) _then) : super(_value, _then); + /// Create a copy of PluginConfiguration + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -4584,7 +4783,7 @@ class _$PluginConfigurationImpl extends _PluginConfiguration { other.repository == repository)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash( runtimeType, @@ -4599,7 +4798,9 @@ class _$PluginConfigurationImpl extends _PluginConfiguration { const DeepCollectionEquality().hash(_abilities), repository); - @JsonKey(ignore: true) + /// Create a copy of PluginConfiguration + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$PluginConfigurationImplCopyWith<_$PluginConfigurationImpl> get copyWith => @@ -4651,8 +4852,11 @@ abstract class _PluginConfiguration extends PluginConfiguration { List get abilities; @override String? get repository; + + /// Create a copy of PluginConfiguration + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$PluginConfigurationImplCopyWith<_$PluginConfigurationImpl> get copyWith => throw _privateConstructorUsedError; } @@ -4668,8 +4872,12 @@ mixin _$PluginUpdateAvailable { String get version => throw _privateConstructorUsedError; String? get changelog => throw _privateConstructorUsedError; + /// Serializes this PluginUpdateAvailable to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of PluginUpdateAvailable + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $PluginUpdateAvailableCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -4694,6 +4902,8 @@ class _$PluginUpdateAvailableCopyWithImpl<$Res, // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of PluginUpdateAvailable + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -4739,6 +4949,8 @@ class __$$PluginUpdateAvailableImplCopyWithImpl<$Res> $Res Function(_$PluginUpdateAvailableImpl) _then) : super(_value, _then); + /// Create a copy of PluginUpdateAvailable + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -4796,11 +5008,13 @@ class _$PluginUpdateAvailableImpl implements _PluginUpdateAvailable { other.changelog == changelog)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash(runtimeType, downloadUrl, version, changelog); - @JsonKey(ignore: true) + /// Create a copy of PluginUpdateAvailable + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$PluginUpdateAvailableImplCopyWith<_$PluginUpdateAvailableImpl> @@ -4830,8 +5044,11 @@ abstract class _PluginUpdateAvailable implements PluginUpdateAvailable { String get version; @override String? get changelog; + + /// Create a copy of PluginUpdateAvailable + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$PluginUpdateAvailableImplCopyWith<_$PluginUpdateAvailableImpl> get copyWith => throw _privateConstructorUsedError; } @@ -4848,8 +5065,12 @@ mixin _$MetadataPluginRepository { String get description => throw _privateConstructorUsedError; String get repoUrl => throw _privateConstructorUsedError; + /// Serializes this MetadataPluginRepository to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of MetadataPluginRepository + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $MetadataPluginRepositoryCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -4874,6 +5095,8 @@ class _$MetadataPluginRepositoryCopyWithImpl<$Res, // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of MetadataPluginRepository + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -4925,6 +5148,8 @@ class __$$MetadataPluginRepositoryImplCopyWithImpl<$Res> $Res Function(_$MetadataPluginRepositoryImpl) _then) : super(_value, _then); + /// Create a copy of MetadataPluginRepository + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -4992,12 +5217,14 @@ class _$MetadataPluginRepositoryImpl implements _MetadataPluginRepository { (identical(other.repoUrl, repoUrl) || other.repoUrl == repoUrl)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash(runtimeType, name, owner, description, repoUrl); - @JsonKey(ignore: true) + /// Create a copy of MetadataPluginRepository + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$MetadataPluginRepositoryImplCopyWith<_$MetadataPluginRepositoryImpl> @@ -5030,8 +5257,11 @@ abstract class _MetadataPluginRepository implements MetadataPluginRepository { String get description; @override String get repoUrl; + + /// Create a copy of MetadataPluginRepository + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$MetadataPluginRepositoryImplCopyWith<_$MetadataPluginRepositoryImpl> get copyWith => throw _privateConstructorUsedError; } diff --git a/lib/models/playback/track_sources.dart b/lib/models/playback/track_sources.dart index c9d089a6..1666609c 100644 --- a/lib/models/playback/track_sources.dart +++ b/lib/models/playback/track_sources.dart @@ -103,6 +103,7 @@ class TrackSource with _$TrackSource { required SourceQualities quality, required SourceCodecs codec, required String bitrate, + required String qualityLabel, }) = _TrackSource; factory TrackSource.fromJson(Map json) => diff --git a/lib/models/playback/track_sources.freezed.dart b/lib/models/playback/track_sources.freezed.dart index 760037d8..09ceb399 100644 --- a/lib/models/playback/track_sources.freezed.dart +++ b/lib/models/playback/track_sources.freezed.dart @@ -28,8 +28,12 @@ mixin _$TrackSourceQuery { String get isrc => throw _privateConstructorUsedError; bool get explicit => throw _privateConstructorUsedError; + /// Serializes this TrackSourceQuery to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of TrackSourceQuery + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $TrackSourceQueryCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -60,6 +64,8 @@ class _$TrackSourceQueryCopyWithImpl<$Res, $Val extends TrackSourceQuery> // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of TrackSourceQuery + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -130,6 +136,8 @@ class __$$TrackSourceQueryImplCopyWithImpl<$Res> $Res Function(_$TrackSourceQueryImpl) _then) : super(_value, _then); + /// Create a copy of TrackSourceQuery + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -233,7 +241,7 @@ class _$TrackSourceQueryImpl extends _TrackSourceQuery { other.explicit == explicit)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash( runtimeType, @@ -245,7 +253,9 @@ class _$TrackSourceQueryImpl extends _TrackSourceQuery { isrc, explicit); - @JsonKey(ignore: true) + /// Create a copy of TrackSourceQuery + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$TrackSourceQueryImplCopyWith<_$TrackSourceQueryImpl> get copyWith => @@ -288,8 +298,11 @@ abstract class _TrackSourceQuery extends TrackSourceQuery { String get isrc; @override bool get explicit; + + /// Create a copy of TrackSourceQuery + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$TrackSourceQueryImplCopyWith<_$TrackSourceQueryImpl> get copyWith => throw _privateConstructorUsedError; } @@ -307,8 +320,12 @@ mixin _$TrackSourceInfo { String get pageUrl => throw _privateConstructorUsedError; int get durationMs => throw _privateConstructorUsedError; + /// Serializes this TrackSourceInfo to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of TrackSourceInfo + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $TrackSourceInfoCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -338,6 +355,8 @@ class _$TrackSourceInfoCopyWithImpl<$Res, $Val extends TrackSourceInfo> // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of TrackSourceInfo + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -402,6 +421,8 @@ class __$$TrackSourceInfoImplCopyWithImpl<$Res> _$TrackSourceInfoImpl _value, $Res Function(_$TrackSourceInfoImpl) _then) : super(_value, _then); + /// Create a copy of TrackSourceInfo + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -488,12 +509,14 @@ class _$TrackSourceInfoImpl implements _TrackSourceInfo { other.durationMs == durationMs)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash( runtimeType, id, title, artists, thumbnail, pageUrl, durationMs); - @JsonKey(ignore: true) + /// Create a copy of TrackSourceInfo + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$TrackSourceInfoImplCopyWith<_$TrackSourceInfoImpl> get copyWith => @@ -532,8 +555,11 @@ abstract class _TrackSourceInfo implements TrackSourceInfo { String get pageUrl; @override int get durationMs; + + /// Create a copy of TrackSourceInfo + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$TrackSourceInfoImplCopyWith<_$TrackSourceInfoImpl> get copyWith => throw _privateConstructorUsedError; } @@ -548,9 +574,14 @@ mixin _$TrackSource { SourceQualities get quality => throw _privateConstructorUsedError; SourceCodecs get codec => throw _privateConstructorUsedError; String get bitrate => throw _privateConstructorUsedError; + String get qualityLabel => throw _privateConstructorUsedError; + /// Serializes this TrackSource to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of TrackSource + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $TrackSourceCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -565,7 +596,8 @@ abstract class $TrackSourceCopyWith<$Res> { {String url, SourceQualities quality, SourceCodecs codec, - String bitrate}); + String bitrate, + String qualityLabel}); } /// @nodoc @@ -578,6 +610,8 @@ class _$TrackSourceCopyWithImpl<$Res, $Val extends TrackSource> // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of TrackSource + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -585,6 +619,7 @@ class _$TrackSourceCopyWithImpl<$Res, $Val extends TrackSource> Object? quality = null, Object? codec = null, Object? bitrate = null, + Object? qualityLabel = null, }) { return _then(_value.copyWith( url: null == url @@ -603,6 +638,10 @@ class _$TrackSourceCopyWithImpl<$Res, $Val extends TrackSource> ? _value.bitrate : bitrate // ignore: cast_nullable_to_non_nullable as String, + qualityLabel: null == qualityLabel + ? _value.qualityLabel + : qualityLabel // ignore: cast_nullable_to_non_nullable + as String, ) as $Val); } } @@ -619,7 +658,8 @@ abstract class _$$TrackSourceImplCopyWith<$Res> {String url, SourceQualities quality, SourceCodecs codec, - String bitrate}); + String bitrate, + String qualityLabel}); } /// @nodoc @@ -630,6 +670,8 @@ class __$$TrackSourceImplCopyWithImpl<$Res> _$TrackSourceImpl _value, $Res Function(_$TrackSourceImpl) _then) : super(_value, _then); + /// Create a copy of TrackSource + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -637,6 +679,7 @@ class __$$TrackSourceImplCopyWithImpl<$Res> Object? quality = null, Object? codec = null, Object? bitrate = null, + Object? qualityLabel = null, }) { return _then(_$TrackSourceImpl( url: null == url @@ -655,6 +698,10 @@ class __$$TrackSourceImplCopyWithImpl<$Res> ? _value.bitrate : bitrate // ignore: cast_nullable_to_non_nullable as String, + qualityLabel: null == qualityLabel + ? _value.qualityLabel + : qualityLabel // ignore: cast_nullable_to_non_nullable + as String, )); } } @@ -666,7 +713,8 @@ class _$TrackSourceImpl implements _TrackSource { {required this.url, required this.quality, required this.codec, - required this.bitrate}); + required this.bitrate, + required this.qualityLabel}); factory _$TrackSourceImpl.fromJson(Map json) => _$$TrackSourceImplFromJson(json); @@ -679,10 +727,12 @@ class _$TrackSourceImpl implements _TrackSource { final SourceCodecs codec; @override final String bitrate; + @override + final String qualityLabel; @override String toString() { - return 'TrackSource(url: $url, quality: $quality, codec: $codec, bitrate: $bitrate)'; + return 'TrackSource(url: $url, quality: $quality, codec: $codec, bitrate: $bitrate, qualityLabel: $qualityLabel)'; } @override @@ -693,14 +743,19 @@ class _$TrackSourceImpl implements _TrackSource { (identical(other.url, url) || other.url == url) && (identical(other.quality, quality) || other.quality == quality) && (identical(other.codec, codec) || other.codec == codec) && - (identical(other.bitrate, bitrate) || other.bitrate == bitrate)); + (identical(other.bitrate, bitrate) || other.bitrate == bitrate) && + (identical(other.qualityLabel, qualityLabel) || + other.qualityLabel == qualityLabel)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override - int get hashCode => Object.hash(runtimeType, url, quality, codec, bitrate); + int get hashCode => + Object.hash(runtimeType, url, quality, codec, bitrate, qualityLabel); - @JsonKey(ignore: true) + /// Create a copy of TrackSource + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$TrackSourceImplCopyWith<_$TrackSourceImpl> get copyWith => @@ -719,7 +774,8 @@ abstract class _TrackSource implements TrackSource { {required final String url, required final SourceQualities quality, required final SourceCodecs codec, - required final String bitrate}) = _$TrackSourceImpl; + required final String bitrate, + required final String qualityLabel}) = _$TrackSourceImpl; factory _TrackSource.fromJson(Map json) = _$TrackSourceImpl.fromJson; @@ -733,7 +789,12 @@ abstract class _TrackSource implements TrackSource { @override String get bitrate; @override - @JsonKey(ignore: true) + String get qualityLabel; + + /// Create a copy of TrackSource + /// with the given fields replaced by the non-null parameter values. + @override + @JsonKey(includeFromJson: false, includeToJson: false) _$$TrackSourceImplCopyWith<_$TrackSourceImpl> get copyWith => throw _privateConstructorUsedError; } diff --git a/lib/models/playback/track_sources.g.dart b/lib/models/playback/track_sources.g.dart index 4676490d..dd63aebb 100644 --- a/lib/models/playback/track_sources.g.dart +++ b/lib/models/playback/track_sources.g.dart @@ -36,6 +36,7 @@ const _$AudioSourceEnumMap = { AudioSource.piped: 'piped', AudioSource.jiosaavn: 'jiosaavn', AudioSource.invidious: 'invidious', + AudioSource.dabMusic: 'dabMusic', }; _$TrackSourceQueryImpl _$$TrackSourceQueryImplFromJson(Map json) => @@ -88,6 +89,7 @@ _$TrackSourceImpl _$$TrackSourceImplFromJson(Map json) => _$TrackSourceImpl( quality: $enumDecode(_$SourceQualitiesEnumMap, json['quality']), codec: $enumDecode(_$SourceCodecsEnumMap, json['codec']), bitrate: json['bitrate'] as String, + qualityLabel: json['qualityLabel'] as String, ); Map _$$TrackSourceImplToJson(_$TrackSourceImpl instance) => @@ -96,9 +98,11 @@ Map _$$TrackSourceImplToJson(_$TrackSourceImpl instance) => 'quality': _$SourceQualitiesEnumMap[instance.quality]!, 'codec': _$SourceCodecsEnumMap[instance.codec]!, 'bitrate': instance.bitrate, + 'qualityLabel': instance.qualityLabel, }; const _$SourceQualitiesEnumMap = { + SourceQualities.uncompressed: 'uncompressed', SourceQualities.high: 'high', SourceQualities.medium: 'medium', SourceQualities.low: 'low', @@ -107,4 +111,6 @@ const _$SourceQualitiesEnumMap = { const _$SourceCodecsEnumMap = { SourceCodecs.m4a: 'm4a', SourceCodecs.weba: 'weba', + SourceCodecs.mp3: 'mp3', + SourceCodecs.flac: 'flac', }; diff --git a/lib/modules/metadata_plugins/installed_plugin.dart b/lib/modules/metadata_plugins/installed_plugin.dart index 4d050afc..ea8cbf29 100644 --- a/lib/modules/metadata_plugins/installed_plugin.dart +++ b/lib/modules/metadata_plugins/installed_plugin.dart @@ -91,10 +91,27 @@ class MetadataInstalledPluginItem extends HookConsumerWidget { ) else ...[ Text(context.l10n.author_name(plugin.author)), - DestructiveBadge( - leading: const Icon(SpotubeIcons.warning), - child: Text(context.l10n.third_party), - ) + Container( + padding: const EdgeInsets.symmetric( + horizontal: 6, + vertical: 2, + ), + decoration: BoxDecoration( + color: Colors.blue, + borderRadius: BorderRadius.circular(6), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + spacing: 4, + children: [ + const Icon(SpotubeIcons.warning, size: 14), + Text( + context.l10n.third_party, + style: const TextStyle(color: Colors.white), + ).xSmall + ], + ), + ), ], SecondaryBadge( leading: const Icon(SpotubeIcons.connect), diff --git a/lib/modules/metadata_plugins/plugin_repository.dart b/lib/modules/metadata_plugins/plugin_repository.dart index 295aed53..c303c46b 100644 --- a/lib/modules/metadata_plugins/plugin_repository.dart +++ b/lib/modules/metadata_plugins/plugin_repository.dart @@ -65,8 +65,9 @@ class MetadataPluginRepositoryItem extends HookConsumerWidget { .join("\n\n"); return AlertDialog( - title: Text(context - .l10n.do_you_want_to_install_this_plugin), + title: Text( + context.l10n.do_you_want_to_install_this_plugin, + ), content: Column( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.start, @@ -185,9 +186,26 @@ class MetadataPluginRepositoryItem extends HookConsumerWidget { context.l10n.author_name(pluginRepo.owner), style: context.theme.typography.xSmall, ), - DestructiveBadge( - leading: const Icon(SpotubeIcons.warning), - child: Text(context.l10n.third_party), + Container( + padding: const EdgeInsets.symmetric( + horizontal: 6, + vertical: 2, + ), + decoration: BoxDecoration( + color: Colors.blue, + borderRadius: BorderRadius.circular(6), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + spacing: 4, + children: [ + const Icon(SpotubeIcons.warning, size: 14), + Text( + context.l10n.third_party, + style: const TextStyle(color: Colors.white), + ).xSmall + ], + ), ), ], SecondaryBadge( diff --git a/lib/modules/player/player.dart b/lib/modules/player/player.dart index ec903aab..4250e153 100644 --- a/lib/modules/player/player.dart +++ b/lib/modules/player/player.dart @@ -46,6 +46,14 @@ class PlayerView extends HookConsumerWidget { final isLocalTrack = currentActiveTrack is SpotubeLocalTrackObject; final mediaQuery = MediaQuery.sizeOf(context); + final activeSourceCodec = useMemoized( + () { + return currentActiveTrackSource + ?.getSourceOfCodec(currentActiveTrackSource.codec); + }, + [currentActiveTrackSource?.sources, currentActiveTrackSource?.codec], + ); + final shouldHide = useState(true); ref.listen(navigationPanelHeight, (_, height) { @@ -267,6 +275,21 @@ class PlayerView extends HookConsumerWidget { ); }), ), + const Gap(25), + if (activeSourceCodec != null) + OutlineBadge( + style: const ButtonStyle.outline( + size: ButtonSize.normal, + density: ButtonDensity.dense, + shape: ButtonShape.rectangle, + ).copyWith( + textStyle: (context, states, value) { + return value.copyWith(fontWeight: FontWeight.w500); + }, + ), + leading: const Icon(SpotubeIcons.lightningOutlined), + child: Text(activeSourceCodec.qualityLabel), + ) ], ), ), diff --git a/lib/pages/getting_started/sections/playback.dart b/lib/pages/getting_started/sections/playback.dart index 43ff2c8e..6e1a29f4 100644 --- a/lib/pages/getting_started/sections/playback.dart +++ b/lib/pages/getting_started/sections/playback.dart @@ -7,7 +7,6 @@ import 'package:spotube/components/ui/button_tile.dart'; import 'package:spotube/models/database/database.dart'; import 'package:spotube/modules/getting_started/blur_card.dart'; import 'package:spotube/extensions/context.dart'; -import 'package:spotube/extensions/string.dart'; import 'package:spotube/provider/user_preferences/user_preferences_provider.dart'; final audioSourceToIconMap = { @@ -23,6 +22,8 @@ final audioSourceToIconMap = { ), AudioSource.jiosaavn: Assets.images.logos.jiosaavn.image(width: 20, height: 20), + AudioSource.dabMusic: + Assets.images.logos.dabMusic.image(width: 20, height: 20), }; class GettingStartedPagePlaybackSection extends HookConsumerWidget { @@ -47,8 +48,10 @@ class GettingStartedPagePlaybackSection extends HookConsumerWidget { AudioSource.piped: context.l10n.piped_source_description, AudioSource.jiosaavn: "${context.l10n.jiosaavn_source_description}\n" - "${context.l10n.highest_quality("320kbps mp")}", + "${context.l10n.highest_quality("320kbps mp4")}", AudioSource.invidious: context.l10n.invidious_source_description, + AudioSource.dabMusic: "${context.l10n.dab_music_source_description}\n" + "${context.l10n.highest_quality("320kbps mp3, HI-RES 24bit 44.1kHz-96kHz flac")}", }, []); @@ -70,43 +73,28 @@ class GettingStartedPagePlaybackSection extends HookConsumerWidget { child: Text(context.l10n.select_audio_source).semiBold().large(), ), const Gap(16), - Select( + RadioGroup( value: preferences.audioSource, onChanged: (value) { - if (value == null) return; preferencesNotifier.setAudioSource(value); }, - placeholder: Text(preferences.audioSource.name.capitalize()), - itemBuilder: (context, value) => Row( - mainAxisSize: MainAxisSize.min, + child: Wrap( spacing: 6, + runSpacing: 6, children: [ - audioSourceToIconMap[value]!, - Text(value.name.capitalize()), + for (final source in AudioSource.values) + RadioCard( + value: source, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + audioSourceToIconMap[source]!, + Text(source.label), + ], + ), + ), ], ), - popup: (context) { - return SelectPopup( - items: SelectItemBuilder( - childCount: AudioSource.values.length, - builder: (context, index) { - final source = AudioSource.values[index]; - - return SelectItemButton( - value: source, - child: Row( - mainAxisSize: MainAxisSize.min, - spacing: 6, - children: [ - audioSourceToIconMap[source]!, - Text(source.name.capitalize()), - ], - ), - ); - }, - ), - ); - }, ), const Gap(16), Text( diff --git a/lib/pages/settings/sections/playback.dart b/lib/pages/settings/sections/playback.dart index 2d128742..6d0b5dc3 100644 --- a/lib/pages/settings/sections/playback.dart +++ b/lib/pages/settings/sections/playback.dart @@ -53,14 +53,16 @@ class SettingsPlaybackSection extends HookConsumerWidget { value: SourceQualities.high, child: Text(context.l10n.high), ), - SelectItemButton( - value: SourceQualities.medium, - child: Text(context.l10n.medium), - ), - SelectItemButton( - value: SourceQualities.low, - child: Text(context.l10n.low), - ), + if (preferences.audioSource != AudioSource.dabMusic) ...[ + SelectItemButton( + value: SourceQualities.medium, + child: Text(context.l10n.medium), + ), + SelectItemButton( + value: SourceQualities.low, + child: Text(context.l10n.low), + ), + ] ], onChanged: (value) { if (value != null) { diff --git a/lib/provider/audio_player/state.freezed.dart b/lib/provider/audio_player/state.freezed.dart index 146b0541..0299cd2f 100644 --- a/lib/provider/audio_player/state.freezed.dart +++ b/lib/provider/audio_player/state.freezed.dart @@ -27,8 +27,12 @@ mixin _$AudioPlayerState { int get currentIndex => throw _privateConstructorUsedError; List get tracks => throw _privateConstructorUsedError; + /// Serializes this AudioPlayerState to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of AudioPlayerState + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $AudioPlayerStateCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -58,6 +62,8 @@ class _$AudioPlayerStateCopyWithImpl<$Res, $Val extends AudioPlayerState> // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of AudioPlayerState + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -122,6 +128,8 @@ class __$$AudioPlayerStateImplCopyWithImpl<$Res> $Res Function(_$AudioPlayerStateImpl) _then) : super(_value, _then); + /// Create a copy of AudioPlayerState + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -226,7 +234,7 @@ class _$AudioPlayerStateImpl extends _AudioPlayerState { const DeepCollectionEquality().equals(other._tracks, _tracks)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash( runtimeType, @@ -237,7 +245,9 @@ class _$AudioPlayerStateImpl extends _AudioPlayerState { currentIndex, const DeepCollectionEquality().hash(_tracks)); - @JsonKey(ignore: true) + /// Create a copy of AudioPlayerState + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$AudioPlayerStateImplCopyWith<_$AudioPlayerStateImpl> get copyWith => @@ -277,8 +287,11 @@ abstract class _AudioPlayerState extends AudioPlayerState { int get currentIndex; @override List get tracks; + + /// Create a copy of AudioPlayerState + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$AudioPlayerStateImplCopyWith<_$AudioPlayerStateImpl> get copyWith => throw _privateConstructorUsedError; } diff --git a/lib/provider/user_preferences/user_preferences_provider.dart b/lib/provider/user_preferences/user_preferences_provider.dart index 8e8da561..8e72727c 100644 --- a/lib/provider/user_preferences/user_preferences_provider.dart +++ b/lib/provider/user_preferences/user_preferences_provider.dart @@ -224,11 +224,23 @@ class UserPreferencesNotifier extends Notifier { } void setAudioSource(AudioSource type) { - // Only allow uncompressed quality for DAB Music - if (type != AudioSource.dabMusic && - state.audioQuality == SourceQualities.uncompressed) { - setAudioQuality(SourceQualities.high); + switch ((type, state.audioQuality)) { + // DAB music only supports high quality/uncompressed streams + case ( + AudioSource.dabMusic, + SourceQualities.low || SourceQualities.medium + ): + setAudioQuality(SourceQualities.high); + break; + // If the user switches from DAB music to other sources and has + // uncompressed quality selected, downgrade to high quality + case (!= AudioSource.dabMusic, SourceQualities.uncompressed): + setAudioQuality(SourceQualities.high); + break; + default: + break; } + setData(PreferencesTableCompanion(audioSource: Value(type))); } diff --git a/lib/services/song_link/song_link.freezed.dart b/lib/services/song_link/song_link.freezed.dart index 0a1af8a9..c704cde3 100644 --- a/lib/services/song_link/song_link.freezed.dart +++ b/lib/services/song_link/song_link.freezed.dart @@ -30,8 +30,12 @@ mixin _$SongLink { String? get nativeAppUriMobile => throw _privateConstructorUsedError; String? get nativeAppUriDesktop => throw _privateConstructorUsedError; + /// Serializes this SongLink to a JSON map. Map toJson() => throw _privateConstructorUsedError; - @JsonKey(ignore: true) + + /// Create a copy of SongLink + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) $SongLinkCopyWith get copyWith => throw _privateConstructorUsedError; } @@ -63,6 +67,8 @@ class _$SongLinkCopyWithImpl<$Res, $Val extends SongLink> // ignore: unused_field final $Res Function($Val) _then; + /// Create a copy of SongLink + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -145,6 +151,8 @@ class __$$SongLinkImplCopyWithImpl<$Res> _$SongLinkImpl _value, $Res Function(_$SongLinkImpl) _then) : super(_value, _then); + /// Create a copy of SongLink + /// with the given fields replaced by the non-null parameter values. @pragma('vm:prefer-inline') @override $Res call({ @@ -261,12 +269,14 @@ class _$SongLinkImpl implements _SongLink { other.nativeAppUriDesktop == nativeAppUriDesktop)); } - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) @override int get hashCode => Object.hash(runtimeType, displayName, linkId, platform, show, uniqueId, country, url, nativeAppUriMobile, nativeAppUriDesktop); - @JsonKey(ignore: true) + /// Create a copy of SongLink + /// with the given fields replaced by the non-null parameter values. + @JsonKey(includeFromJson: false, includeToJson: false) @override @pragma('vm:prefer-inline') _$$SongLinkImplCopyWith<_$SongLinkImpl> get copyWith => @@ -313,8 +323,11 @@ abstract class _SongLink implements SongLink { String? get nativeAppUriMobile; @override String? get nativeAppUriDesktop; + + /// Create a copy of SongLink + /// with the given fields replaced by the non-null parameter values. @override - @JsonKey(ignore: true) + @JsonKey(includeFromJson: false, includeToJson: false) _$$SongLinkImplCopyWith<_$SongLinkImpl> get copyWith => throw _privateConstructorUsedError; } diff --git a/lib/services/sourced_track/sourced_track.dart b/lib/services/sourced_track/sourced_track.dart index a6abdb20..a5b2ae93 100644 --- a/lib/services/sourced_track/sourced_track.dart +++ b/lib/services/sourced_track/sourced_track.dart @@ -170,7 +170,7 @@ abstract class SourcedTrack extends BasicSourcedTrack { /// /// If no sources match the codec, it will return the first or last source /// based on the user's audio quality preference. - String? getUrlOfCodec(SourceCodecs codec) { + TrackSource? getSourceOfCodec(SourceCodecs codec) { final preferences = ref.read(userPreferencesProvider); final exactMatch = sources.firstWhereOrNull( @@ -179,7 +179,7 @@ abstract class SourcedTrack extends BasicSourcedTrack { ); if (exactMatch != null) { - return exactMatch.url; + return exactMatch; } final sameCodecSources = sources @@ -193,8 +193,8 @@ abstract class SourcedTrack extends BasicSourcedTrack { if (sameCodecSources.isNotEmpty) { return preferences.audioQuality > SourceQualities.low - ? sameCodecSources.first.url - : sameCodecSources.last.url; + ? sameCodecSources.first + : sameCodecSources.last; } final fallbackSource = sources.sorted((a, b) { @@ -204,8 +204,12 @@ abstract class SourcedTrack extends BasicSourcedTrack { }); return preferences.audioQuality > SourceQualities.low - ? fallbackSource.firstOrNull?.url - : fallbackSource.lastOrNull?.url; + ? fallbackSource.firstOrNull + : fallbackSource.lastOrNull; + } + + String? getUrlOfCodec(SourceCodecs codec) { + return getSourceOfCodec(codec)?.url; } SourceCodecs get codec { @@ -220,12 +224,4 @@ abstract class SourcedTrack extends BasicSourcedTrack { _ => preferences.streamMusicCodec }; } - - TrackSource get activeTrackSource { - final audioQuality = ref.read(userPreferencesProvider).audioQuality; - return sources.firstWhereOrNull( - (source) => source.codec == codec && source.quality == audioQuality, - ) ?? - sources.first; - } } diff --git a/lib/services/sourced_track/sources/dab_music.dart b/lib/services/sourced_track/sources/dab_music.dart index 93293bd3..6873d8f0 100644 --- a/lib/services/sourced_track/sources/dab_music.dart +++ b/lib/services/sourced_track/sources/dab_music.dart @@ -54,6 +54,7 @@ class DABMusicSourcedTrack extends SourcedTrack { static Future> fetchSources( String id, SourceQualities quality, + AudioQuality trackMaximumQuality, ) async { try { final isUncompressed = quality == SourceQualities.uncompressed; @@ -64,14 +65,26 @@ class DABMusicSourcedTrack extends SourcedTrack { if (streamResponse.url == null) { throw Exception("No stream URL found for track ID: $id"); } + + // kbps = (bitDepth * sampleRate * channels) / 1000 + final uncompressedBitrate = !isUncompressed + ? 0 + : ((trackMaximumQuality.maximumBitDepth ?? 0) * + ((trackMaximumQuality.maximumSamplingRate ?? 0) * 1000) * + 2) / + 1000; return [ TrackSource( url: streamResponse.url!, quality: isUncompressed ? SourceQualities.uncompressed : SourceQualities.high, - bitrate: isUncompressed ? "2998kbps" : "320kbps", + bitrate: + isUncompressed ? "${uncompressedBitrate.floor()}kbps" : "320kbps", codec: isUncompressed ? SourceCodecs.flac : SourceCodecs.mp3, + qualityLabel: isUncompressed + ? "${trackMaximumQuality.maximumBitDepth}bit • ${trackMaximumQuality.maximumSamplingRate}kHz • FLAC • Stereo" + : "MP3 • 320kbps • mp3 • Stereo", ), ]; } catch (e, stackTrace) { @@ -91,6 +104,7 @@ class DABMusicSourcedTrack extends SourcedTrack { source = await fetchSources( result.id.toString(), ref.read(userPreferencesProvider).audioQuality, + result.audioQuality!, ); } @@ -186,6 +200,11 @@ class DABMusicSourcedTrack extends SourcedTrack { final source = await fetchSources( sibling.id, ref.read(userPreferencesProvider).audioQuality, + const AudioQuality( + isHiRes: true, + maximumBitDepth: 16, + maximumSamplingRate: 44.1, + ), ); return DABMusicSourcedTrack( diff --git a/lib/services/sourced_track/sources/invidious.dart b/lib/services/sourced_track/sources/invidious.dart index 82e001f5..c5421355 100644 --- a/lib/services/sourced_track/sources/invidious.dart +++ b/lib/services/sourced_track/sources/invidious.dart @@ -94,6 +94,7 @@ class InvidiousSourcedTrack extends SourcedTrack { static List toSources(InvidiousVideoResponse manifest) { return manifest.adaptiveFormats.map((stream) { + var isWebm = stream.type.contains("audio/webm"); return TrackSource( url: stream.url.toString(), quality: switch (stream.qualityLabel) { @@ -101,10 +102,11 @@ class InvidiousSourcedTrack extends SourcedTrack { "medium" => SourceQualities.medium, _ => SourceQualities.low, }, - codec: stream.type.contains("audio/webm") - ? SourceCodecs.weba - : SourceCodecs.m4a, + codec: isWebm ? SourceCodecs.weba : SourceCodecs.m4a, bitrate: stream.bitrate, + qualityLabel: + "${isWebm ? "Opus" : "AAC"} • ${stream.bitrate.replaceAll("kbps", "")}kbps " + "• ${isWebm ? "weba" : "m4a"} • Stereo", ); }).toList(); } diff --git a/lib/services/sourced_track/sources/jiosaavn.dart b/lib/services/sourced_track/sources/jiosaavn.dart index 02e97479..be78be25 100644 --- a/lib/services/sourced_track/sources/jiosaavn.dart +++ b/lib/services/sourced_track/sources/jiosaavn.dart @@ -104,6 +104,7 @@ class JioSaavnSourcedTrack extends SourcedTrack { : SourceQualities.low, codec: SourceCodecs.m4a, bitrate: link.quality, + qualityLabel: "AAC • ${link.quality} • MP4 • Stereo", ); }).toList() ); diff --git a/lib/services/sourced_track/sources/piped.dart b/lib/services/sourced_track/sources/piped.dart index 78beda10..fca6c623 100644 --- a/lib/services/sourced_track/sources/piped.dart +++ b/lib/services/sourced_track/sources/piped.dart @@ -98,6 +98,7 @@ class PipedSourcedTrack extends SourcedTrack { static List toSources(PipedStreamResponse manifest) { return manifest.audioStreams.map((audio) { + final isMp4 = audio.format == PipedAudioStreamFormat.m4a; return TrackSource( url: audio.url.toString(), quality: switch (audio.quality) { @@ -105,10 +106,11 @@ class PipedSourcedTrack extends SourcedTrack { "medium" => SourceQualities.medium, _ => SourceQualities.low, }, - codec: audio.format == PipedAudioStreamFormat.m4a - ? SourceCodecs.m4a - : SourceCodecs.weba, + codec: isMp4 ? SourceCodecs.m4a : SourceCodecs.weba, bitrate: audio.bitrate.toString(), + qualityLabel: + "${isMp4 ? "AAC" : "Opus"} • ${(audio.bitrate / 1000).floor()}kbps " + "• ${isMp4 ? "m4a" : "weba"} • Stereo", ); }).toList(); } diff --git a/lib/services/sourced_track/sources/youtube.dart b/lib/services/sourced_track/sources/youtube.dart index 399d5e10..e3e9dd39 100644 --- a/lib/services/sourced_track/sources/youtube.dart +++ b/lib/services/sourced_track/sources/youtube.dart @@ -98,6 +98,7 @@ class YoutubeSourcedTrack extends SourcedTrack { static List toTrackSources(StreamManifest manifest) { return manifest.audioOnly.map((streamInfo) { + var isWebm = streamInfo.codec.mimeType == "audio/webm"; return TrackSource( url: streamInfo.url.toString(), quality: switch (streamInfo.qualityLabel) { @@ -106,10 +107,11 @@ class YoutubeSourcedTrack extends SourcedTrack { "low" => SourceQualities.low, _ => SourceQualities.high, }, - codec: streamInfo.codec.mimeType == "audio/webm" - ? SourceCodecs.weba - : SourceCodecs.m4a, + codec: isWebm ? SourceCodecs.weba : SourceCodecs.m4a, bitrate: streamInfo.bitrate.bitsPerSecond.toString(), + qualityLabel: + "${isWebm ? "Opus" : "AAC"} • ${(streamInfo.bitrate.kiloBitsPerSecond).floor()}kbps " + "• ${isWebm ? "weba" : "m4a"} • Stereo", ); }).toList(); } diff --git a/untranslated_messages.json b/untranslated_messages.json index 2334c1b3..ba110540 100644 --- a/untranslated_messages.json +++ b/untranslated_messages.json @@ -1,147 +1,176 @@ { "ar": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "bn": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "ca": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "cs": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "de": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "es": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "eu": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "fa": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "fi": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "fr": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "hi": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "id": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "it": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "ja": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "ka": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "ko": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "ne": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "nl": [ "audio_source", "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "pl": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "pt": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "ru": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "ta": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "th": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "tl": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "tr": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "uk": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "vi": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "zh": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ], "zh_TW": [ "source", - "uncompressed" + "uncompressed", + "dab_music_source_description" ] }