feat: update models to match hetu_spotube_plugin signature

This commit is contained in:
Kingkor Roy Tirtho 2025-06-14 19:18:32 +06:00
parent 7a6821f28d
commit 3306f21860
11 changed files with 3132 additions and 981 deletions

View File

@ -3,20 +3,40 @@ part of 'metadata.dart';
enum SpotubeAlbumType { enum SpotubeAlbumType {
album, album,
single, single,
compilation,
} }
@freezed @freezed
class SpotubeAlbumObject with _$SpotubeAlbumObject { class SpotubeFullAlbumObject with _$SpotubeFullAlbumObject {
factory SpotubeAlbumObject({ factory SpotubeFullAlbumObject({
required final String uid, required String id,
required final String title, required String name,
required final SpotubeArtistObject artist, required List<SpotubeSimpleArtistObject> artists,
@Default([]) final List<SpotubeImageObject> images, @Default([]) List<SpotubeImageObject> images,
required final String releaseDate, required String releaseDate,
required final String externalUrl, required String externalUri,
required final SpotubeAlbumType type, required int totalTracks,
}) = _SpotubeAlbumObject; required SpotubeAlbumType albumType,
String? recordLabel,
List<String>? genres,
}) = _SpotubeFullAlbumObject;
factory SpotubeAlbumObject.fromJson(Map<String, dynamic> json) => factory SpotubeFullAlbumObject.fromJson(Map<String, dynamic> json) =>
_$SpotubeAlbumObjectFromJson(json); _$SpotubeFullAlbumObjectFromJson(json);
}
@freezed
class SpotubeSimpleAlbumObject with _$SpotubeSimpleAlbumObject {
factory SpotubeSimpleAlbumObject({
required String id,
required String name,
required String externalUri,
required List<SpotubeSimpleArtistObject> artists,
@Default([]) List<SpotubeImageObject> images,
required String releaseDate,
required SpotubeAlbumType albumType,
}) = _SpotubeSimpleAlbumObject;
factory SpotubeSimpleAlbumObject.fromJson(Map<String, dynamic> json) =>
_$SpotubeSimpleAlbumObjectFromJson(json);
} }

View File

@ -1,14 +1,28 @@
part of 'metadata.dart'; part of 'metadata.dart';
@freezed @freezed
class SpotubeArtistObject with _$SpotubeArtistObject { class SpotubeFullArtistObject with _$SpotubeFullArtistObject {
factory SpotubeArtistObject({ factory SpotubeFullArtistObject({
required final String uid, required String id,
required final String name, required String name,
@Default([]) final List<SpotubeImageObject> images, required String externalUri,
required final String externalUrl, @Default([]) List<SpotubeImageObject> images,
}) = _SpotubeArtistObject; List<String>? genres,
int? followers,
}) = _SpotubeFullArtistObject;
factory SpotubeArtistObject.fromJson(Map<String, dynamic> json) => factory SpotubeFullArtistObject.fromJson(Map<String, dynamic> json) =>
_$SpotubeArtistObjectFromJson(json); _$SpotubeFullArtistObjectFromJson(json);
}
@freezed
class SpotubeSimpleArtistObject with _$SpotubeSimpleArtistObject {
factory SpotubeSimpleArtistObject({
required String id,
required String name,
required String externalUri,
}) = _SpotubeSimpleArtistObject;
factory SpotubeSimpleArtistObject.fromJson(Map<String, dynamic> json) =>
_$SpotubeSimpleArtistObjectFromJson(json);
} }

View File

@ -0,0 +1,43 @@
part of 'metadata.dart';
enum SectionItemType {
@JsonValue("Playlist")
playlist,
@JsonValue("Album")
album,
@JsonValue("Artist")
artist
}
@Freezed(unionKey: "itemType")
class SpotubeBrowseSectionObject with _$SpotubeBrowseSectionObject {
@FreezedUnionValue("Album")
factory SpotubeBrowseSectionObject.album({
required String id,
required String title,
required String externalUri,
required SectionItemType itemType,
required List<SpotubeSimpleAlbumObject> items,
}) = SpotubeBrowseAlbumSectionObject;
@FreezedUnionValue("Artist")
factory SpotubeBrowseSectionObject.artist({
required String id,
required String title,
required String externalUri,
required SectionItemType itemType,
required List<SpotubeSimpleArtistObject> items,
}) = SpotubeBrowseArtistSectionObject;
@FreezedUnionValue("Playlist")
factory SpotubeBrowseSectionObject.playlist({
required String id,
required String title,
required String externalUri,
required SectionItemType itemType,
required List<SpotubeSimplePlaylistObject> items,
}) = SpotubeBrowsePlaylistSectionObject;
factory SpotubeBrowseSectionObject.fromJson(Map<String, Object?> json) =>
_$SpotubeBrowseSectionObjectFromJson(json);
}

View File

@ -1,14 +0,0 @@
part of 'metadata.dart';
@freezed
class SpotubeFeedObject with _$SpotubeFeedObject {
factory SpotubeFeedObject({
required final String uid,
required final String name,
required final String externalUrl,
@Default([]) final List<SpotubeImageObject> images,
}) = _SpotubeFeedObject;
factory SpotubeFeedObject.fromJson(Map<String, dynamic> json) =>
_$SpotubeFeedObjectFromJson(json);
}

View File

@ -7,7 +7,7 @@ part 'metadata.freezed.dart';
part 'album.dart'; part 'album.dart';
part 'artist.dart'; part 'artist.dart';
part 'feed.dart'; part 'browse.dart';
part 'image.dart'; part 'image.dart';
part 'pagination.dart'; part 'pagination.dart';
part 'playlist.dart'; part 'playlist.dart';

File diff suppressed because it is too large Load Diff

View File

@ -6,79 +6,196 @@ part of 'metadata.dart';
// JsonSerializableGenerator // JsonSerializableGenerator
// ************************************************************************** // **************************************************************************
_$SpotubeAlbumObjectImpl _$$SpotubeAlbumObjectImplFromJson(Map json) => _$SpotubeFullAlbumObjectImpl _$$SpotubeFullAlbumObjectImplFromJson(Map json) =>
_$SpotubeAlbumObjectImpl( _$SpotubeFullAlbumObjectImpl(
uid: json['uid'] as String, id: json['id'] as String,
title: json['title'] as String, name: json['name'] as String,
artist: SpotubeArtistObject.fromJson( artists: (json['artists'] as List<dynamic>)
Map<String, dynamic>.from(json['artist'] as Map)), .map((e) => SpotubeSimpleArtistObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList(),
images: (json['images'] as List<dynamic>?) images: (json['images'] as List<dynamic>?)
?.map((e) => SpotubeImageObject.fromJson( ?.map((e) => SpotubeImageObject.fromJson(
Map<String, dynamic>.from(e as Map))) Map<String, dynamic>.from(e as Map)))
.toList() ?? .toList() ??
const [], const [],
releaseDate: json['releaseDate'] as String, releaseDate: json['releaseDate'] as String,
externalUrl: json['externalUrl'] as String, externalUri: json['externalUri'] as String,
type: $enumDecode(_$SpotubeAlbumTypeEnumMap, json['type']), totalTracks: (json['totalTracks'] as num).toInt(),
albumType: $enumDecode(_$SpotubeAlbumTypeEnumMap, json['albumType']),
recordLabel: json['recordLabel'] as String?,
genres:
(json['genres'] as List<dynamic>?)?.map((e) => e as String).toList(),
); );
Map<String, dynamic> _$$SpotubeAlbumObjectImplToJson( Map<String, dynamic> _$$SpotubeFullAlbumObjectImplToJson(
_$SpotubeAlbumObjectImpl instance) => _$SpotubeFullAlbumObjectImpl instance) =>
<String, dynamic>{ <String, dynamic>{
'uid': instance.uid, 'id': instance.id,
'title': instance.title, 'name': instance.name,
'artist': instance.artist.toJson(), 'artists': instance.artists.map((e) => e.toJson()).toList(),
'images': instance.images.map((e) => e.toJson()).toList(), 'images': instance.images.map((e) => e.toJson()).toList(),
'releaseDate': instance.releaseDate, 'releaseDate': instance.releaseDate,
'externalUrl': instance.externalUrl, 'externalUri': instance.externalUri,
'type': _$SpotubeAlbumTypeEnumMap[instance.type]!, 'totalTracks': instance.totalTracks,
'albumType': _$SpotubeAlbumTypeEnumMap[instance.albumType]!,
'recordLabel': instance.recordLabel,
'genres': instance.genres,
}; };
const _$SpotubeAlbumTypeEnumMap = { const _$SpotubeAlbumTypeEnumMap = {
SpotubeAlbumType.album: 'album', SpotubeAlbumType.album: 'album',
SpotubeAlbumType.single: 'single', SpotubeAlbumType.single: 'single',
SpotubeAlbumType.compilation: 'compilation',
}; };
_$SpotubeArtistObjectImpl _$$SpotubeArtistObjectImplFromJson(Map json) => _$SpotubeSimpleAlbumObjectImpl _$$SpotubeSimpleAlbumObjectImplFromJson(
_$SpotubeArtistObjectImpl( Map json) =>
uid: json['uid'] as String, _$SpotubeSimpleAlbumObjectImpl(
id: json['id'] as String,
name: json['name'] as String, name: json['name'] as String,
externalUri: json['externalUri'] as String,
artists: (json['artists'] as List<dynamic>)
.map((e) => SpotubeSimpleArtistObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList(),
images: (json['images'] as List<dynamic>?) images: (json['images'] as List<dynamic>?)
?.map((e) => SpotubeImageObject.fromJson( ?.map((e) => SpotubeImageObject.fromJson(
Map<String, dynamic>.from(e as Map))) Map<String, dynamic>.from(e as Map)))
.toList() ?? .toList() ??
const [], const [],
externalUrl: json['externalUrl'] as String, releaseDate: json['releaseDate'] as String,
albumType: $enumDecode(_$SpotubeAlbumTypeEnumMap, json['albumType']),
); );
Map<String, dynamic> _$$SpotubeArtistObjectImplToJson( Map<String, dynamic> _$$SpotubeSimpleAlbumObjectImplToJson(
_$SpotubeArtistObjectImpl instance) => _$SpotubeSimpleAlbumObjectImpl instance) =>
<String, dynamic>{ <String, dynamic>{
'uid': instance.uid, 'id': instance.id,
'name': instance.name, 'name': instance.name,
'externalUri': instance.externalUri,
'artists': instance.artists.map((e) => e.toJson()).toList(),
'images': instance.images.map((e) => e.toJson()).toList(), 'images': instance.images.map((e) => e.toJson()).toList(),
'externalUrl': instance.externalUrl, 'releaseDate': instance.releaseDate,
'albumType': _$SpotubeAlbumTypeEnumMap[instance.albumType]!,
}; };
_$SpotubeFeedObjectImpl _$$SpotubeFeedObjectImplFromJson(Map json) => _$SpotubeFullArtistObjectImpl _$$SpotubeFullArtistObjectImplFromJson(
_$SpotubeFeedObjectImpl( Map json) =>
uid: json['uid'] as String, _$SpotubeFullArtistObjectImpl(
id: json['id'] as String,
name: json['name'] as String, name: json['name'] as String,
externalUrl: json['externalUrl'] as String, externalUri: json['externalUri'] as String,
images: (json['images'] as List<dynamic>?) images: (json['images'] as List<dynamic>?)
?.map((e) => SpotubeImageObject.fromJson( ?.map((e) => SpotubeImageObject.fromJson(
Map<String, dynamic>.from(e as Map))) Map<String, dynamic>.from(e as Map)))
.toList() ?? .toList() ??
const [], const [],
genres:
(json['genres'] as List<dynamic>?)?.map((e) => e as String).toList(),
followers: (json['followers'] as num?)?.toInt(),
); );
Map<String, dynamic> _$$SpotubeFeedObjectImplToJson( Map<String, dynamic> _$$SpotubeFullArtistObjectImplToJson(
_$SpotubeFeedObjectImpl instance) => _$SpotubeFullArtistObjectImpl instance) =>
<String, dynamic>{ <String, dynamic>{
'uid': instance.uid, 'id': instance.id,
'name': instance.name, 'name': instance.name,
'externalUrl': instance.externalUrl, 'externalUri': instance.externalUri,
'images': instance.images.map((e) => e.toJson()).toList(), 'images': instance.images.map((e) => e.toJson()).toList(),
'genres': instance.genres,
'followers': instance.followers,
};
_$SpotubeSimpleArtistObjectImpl _$$SpotubeSimpleArtistObjectImplFromJson(
Map json) =>
_$SpotubeSimpleArtistObjectImpl(
id: json['id'] as String,
name: json['name'] as String,
externalUri: json['externalUri'] as String,
);
Map<String, dynamic> _$$SpotubeSimpleArtistObjectImplToJson(
_$SpotubeSimpleArtistObjectImpl instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'externalUri': instance.externalUri,
};
_$SpotubeBrowseAlbumSectionObjectImpl
_$$SpotubeBrowseAlbumSectionObjectImplFromJson(Map json) =>
_$SpotubeBrowseAlbumSectionObjectImpl(
id: json['id'] as String,
title: json['title'] as String,
externalUri: json['externalUri'] as String,
itemType: $enumDecode(_$SectionItemTypeEnumMap, json['itemType']),
items: (json['items'] as List<dynamic>)
.map((e) => SpotubeSimpleAlbumObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList(),
);
Map<String, dynamic> _$$SpotubeBrowseAlbumSectionObjectImplToJson(
_$SpotubeBrowseAlbumSectionObjectImpl instance) =>
<String, dynamic>{
'id': instance.id,
'title': instance.title,
'externalUri': instance.externalUri,
'itemType': _$SectionItemTypeEnumMap[instance.itemType]!,
'items': instance.items.map((e) => e.toJson()).toList(),
};
const _$SectionItemTypeEnumMap = {
SectionItemType.playlist: 'Playlist',
SectionItemType.album: 'Album',
SectionItemType.artist: 'Artist',
};
_$SpotubeBrowseArtistSectionObjectImpl
_$$SpotubeBrowseArtistSectionObjectImplFromJson(Map json) =>
_$SpotubeBrowseArtistSectionObjectImpl(
id: json['id'] as String,
title: json['title'] as String,
externalUri: json['externalUri'] as String,
itemType: $enumDecode(_$SectionItemTypeEnumMap, json['itemType']),
items: (json['items'] as List<dynamic>)
.map((e) => SpotubeSimpleArtistObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList(),
);
Map<String, dynamic> _$$SpotubeBrowseArtistSectionObjectImplToJson(
_$SpotubeBrowseArtistSectionObjectImpl instance) =>
<String, dynamic>{
'id': instance.id,
'title': instance.title,
'externalUri': instance.externalUri,
'itemType': _$SectionItemTypeEnumMap[instance.itemType]!,
'items': instance.items.map((e) => e.toJson()).toList(),
};
_$SpotubeBrowsePlaylistSectionObjectImpl
_$$SpotubeBrowsePlaylistSectionObjectImplFromJson(Map json) =>
_$SpotubeBrowsePlaylistSectionObjectImpl(
id: json['id'] as String,
title: json['title'] as String,
externalUri: json['externalUri'] as String,
itemType: $enumDecode(_$SectionItemTypeEnumMap, json['itemType']),
items: (json['items'] as List<dynamic>)
.map((e) => SpotubeSimplePlaylistObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList(),
);
Map<String, dynamic> _$$SpotubeBrowsePlaylistSectionObjectImplToJson(
_$SpotubeBrowsePlaylistSectionObjectImpl instance) =>
<String, dynamic>{
'id': instance.id,
'title': instance.title,
'externalUri': instance.externalUri,
'itemType': _$SectionItemTypeEnumMap[instance.itemType]!,
'items': instance.items.map((e) => e.toJson()).toList(),
}; };
_$SpotubeImageObjectImpl _$$SpotubeImageObjectImplFromJson(Map json) => _$SpotubeImageObjectImpl _$$SpotubeImageObjectImplFromJson(Map json) =>
@ -102,9 +219,9 @@ _$SpotubePaginationResponseObjectImpl<T>
T Function(Object? json) fromJsonT, T Function(Object? json) fromJsonT,
) => ) =>
_$SpotubePaginationResponseObjectImpl<T>( _$SpotubePaginationResponseObjectImpl<T>(
limit: (json['limit'] as num).toInt(),
nextOffset: (json['nextOffset'] as num?)?.toInt(),
total: (json['total'] as num).toInt(), total: (json['total'] as num).toInt(),
nextCursor: json['nextCursor'] as String?,
limit: json['limit'] as String,
hasMore: json['hasMore'] as bool, hasMore: json['hasMore'] as bool,
items: (json['items'] as List<dynamic>).map(fromJsonT).toList(), items: (json['items'] as List<dynamic>).map(fromJsonT).toList(),
); );
@ -114,91 +231,166 @@ Map<String, dynamic> _$$SpotubePaginationResponseObjectImplToJson<T>(
Object? Function(T value) toJsonT, Object? Function(T value) toJsonT,
) => ) =>
<String, dynamic>{ <String, dynamic>{
'total': instance.total,
'nextCursor': instance.nextCursor,
'limit': instance.limit, 'limit': instance.limit,
'nextOffset': instance.nextOffset,
'total': instance.total,
'hasMore': instance.hasMore, 'hasMore': instance.hasMore,
'items': instance.items.map(toJsonT).toList(), 'items': instance.items.map(toJsonT).toList(),
}; };
_$SpotubePlaylistObjectImpl _$$SpotubePlaylistObjectImplFromJson(Map json) => _$SpotubeFullPlaylistObjectImpl _$$SpotubeFullPlaylistObjectImplFromJson(
_$SpotubePlaylistObjectImpl( Map json) =>
uid: json['uid'] as String, _$SpotubeFullPlaylistObjectImpl(
id: json['id'] as String,
name: json['name'] as String, name: json['name'] as String,
description: json['description'] as String,
externalUri: json['externalUri'] as String,
owner: SpotubeUserObject.fromJson(
Map<String, dynamic>.from(json['owner'] as Map)),
images: (json['images'] as List<dynamic>?) images: (json['images'] as List<dynamic>?)
?.map((e) => SpotubeImageObject.fromJson( ?.map((e) => SpotubeImageObject.fromJson(
Map<String, dynamic>.from(e as Map))) Map<String, dynamic>.from(e as Map)))
.toList() ?? .toList() ??
const [], const [],
description: json['description'] as String,
externalUrl: json['externalUrl'] as String,
owner: SpotubeUserObject.fromJson(
Map<String, dynamic>.from(json['owner'] as Map)),
collaborators: (json['collaborators'] as List<dynamic>?) collaborators: (json['collaborators'] as List<dynamic>?)
?.map((e) => SpotubeUserObject.fromJson( ?.map((e) => SpotubeUserObject.fromJson(
Map<String, dynamic>.from(e as Map))) Map<String, dynamic>.from(e as Map)))
.toList() ?? .toList() ??
const [], const [],
collaborative: json['collaborative'] as bool? ?? false,
public: json['public'] as bool? ?? false,
); );
Map<String, dynamic> _$$SpotubePlaylistObjectImplToJson( Map<String, dynamic> _$$SpotubeFullPlaylistObjectImplToJson(
_$SpotubePlaylistObjectImpl instance) => _$SpotubeFullPlaylistObjectImpl instance) =>
<String, dynamic>{ <String, dynamic>{
'uid': instance.uid, 'id': instance.id,
'name': instance.name, 'name': instance.name,
'images': instance.images.map((e) => e.toJson()).toList(),
'description': instance.description, 'description': instance.description,
'externalUrl': instance.externalUrl, 'externalUri': instance.externalUri,
'owner': instance.owner.toJson(), 'owner': instance.owner.toJson(),
'images': instance.images.map((e) => e.toJson()).toList(),
'collaborators': instance.collaborators.map((e) => e.toJson()).toList(), 'collaborators': instance.collaborators.map((e) => e.toJson()).toList(),
'collaborative': instance.collaborative,
'public': instance.public,
};
_$SpotubeSimplePlaylistObjectImpl _$$SpotubeSimplePlaylistObjectImplFromJson(
Map json) =>
_$SpotubeSimplePlaylistObjectImpl(
id: json['id'] as String,
name: json['name'] as String,
description: json['description'] as String,
externalUri: json['externalUri'] as String,
owner: SpotubeUserObject.fromJson(
Map<String, dynamic>.from(json['owner'] as Map)),
images: (json['images'] as List<dynamic>?)
?.map((e) => SpotubeImageObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList() ??
const [],
);
Map<String, dynamic> _$$SpotubeSimplePlaylistObjectImplToJson(
_$SpotubeSimplePlaylistObjectImpl instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'description': instance.description,
'externalUri': instance.externalUri,
'owner': instance.owner.toJson(),
'images': instance.images.map((e) => e.toJson()).toList(),
}; };
_$SpotubeSearchResponseObjectImpl _$$SpotubeSearchResponseObjectImplFromJson( _$SpotubeSearchResponseObjectImpl _$$SpotubeSearchResponseObjectImplFromJson(
Map json) => Map json) =>
_$SpotubeSearchResponseObjectImpl( _$SpotubeSearchResponseObjectImpl(
tracks: _paginationTracksFromJson(json['tracks'] as Map<String, dynamic>), albums: (json['albums'] as List<dynamic>)
albums: _paginationAlbumsFromJson(json['albums'] as Map<String, dynamic>), .map((e) => SpotubeSimpleAlbumObject.fromJson(
artists: Map<String, dynamic>.from(e as Map)))
_paginationArtistsFromJson(json['artists'] as Map<String, dynamic>), .toList(),
playlists: _paginationPlaylistsFromJson( artists: (json['artists'] as List<dynamic>)
json['playlists'] as Map<String, dynamic>), .map((e) => SpotubeSimpleArtistObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList(),
playlists: (json['playlists'] as List<dynamic>)
.map((e) => SpotubeSimplePlaylistObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList(),
tracks: (json['tracks'] as List<dynamic>)
.map((e) => SpotubeSimpleTrackObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList(),
); );
Map<String, dynamic> _$$SpotubeSearchResponseObjectImplToJson( Map<String, dynamic> _$$SpotubeSearchResponseObjectImplToJson(
_$SpotubeSearchResponseObjectImpl instance) => _$SpotubeSearchResponseObjectImpl instance) =>
<String, dynamic>{ <String, dynamic>{
'tracks': _paginationToJson(instance.tracks), 'albums': instance.albums.map((e) => e.toJson()).toList(),
'albums': _paginationToJson(instance.albums), 'artists': instance.artists.map((e) => e.toJson()).toList(),
'artists': _paginationToJson(instance.artists), 'playlists': instance.playlists.map((e) => e.toJson()).toList(),
'playlists': _paginationToJson(instance.playlists), 'tracks': instance.tracks.map((e) => e.toJson()).toList(),
}; };
_$SpotubeTrackObjectImpl _$$SpotubeTrackObjectImplFromJson(Map json) => _$SpotubeFullTrackObjectImpl _$$SpotubeFullTrackObjectImplFromJson(Map json) =>
_$SpotubeTrackObjectImpl( _$SpotubeFullTrackObjectImpl(
uid: json['uid'] as String, id: json['id'] as String,
title: json['title'] as String, name: json['name'] as String,
externalUri: json['externalUri'] as String,
artists: (json['artists'] as List<dynamic>?) artists: (json['artists'] as List<dynamic>?)
?.map((e) => SpotubeArtistObject.fromJson( ?.map((e) => SpotubeSimpleArtistObject.fromJson(
Map<String, dynamic>.from(e as Map))) Map<String, dynamic>.from(e as Map)))
.toList() ?? .toList() ??
const [], const [],
album: SpotubeAlbumObject.fromJson( album: SpotubeSimpleAlbumObject.fromJson(
Map<String, dynamic>.from(json['album'] as Map)), Map<String, dynamic>.from(json['album'] as Map)),
durationMs: (json['durationMs'] as num).toInt(), durationMs: (json['durationMs'] as num).toInt(),
isrc: json['isrc'] as String, isrc: json['isrc'] as String,
externalUrl: json['externalUrl'] as String, explicit: json['explicit'] as bool,
); );
Map<String, dynamic> _$$SpotubeTrackObjectImplToJson( Map<String, dynamic> _$$SpotubeFullTrackObjectImplToJson(
_$SpotubeTrackObjectImpl instance) => _$SpotubeFullTrackObjectImpl instance) =>
<String, dynamic>{ <String, dynamic>{
'uid': instance.uid, 'id': instance.id,
'title': instance.title, 'name': instance.name,
'externalUri': instance.externalUri,
'artists': instance.artists.map((e) => e.toJson()).toList(), 'artists': instance.artists.map((e) => e.toJson()).toList(),
'album': instance.album.toJson(), 'album': instance.album.toJson(),
'durationMs': instance.durationMs, 'durationMs': instance.durationMs,
'isrc': instance.isrc, 'isrc': instance.isrc,
'externalUrl': instance.externalUrl, 'explicit': instance.explicit,
};
_$SpotubeSimpleTrackObjectImpl _$$SpotubeSimpleTrackObjectImplFromJson(
Map json) =>
_$SpotubeSimpleTrackObjectImpl(
id: json['id'] as String,
name: json['name'] as String,
externalUri: json['externalUri'] as String,
durationMs: (json['durationMs'] as num).toInt(),
explicit: json['explicit'] as bool,
artists: (json['artists'] as List<dynamic>?)
?.map((e) => SpotubeSimpleArtistObject.fromJson(
Map<String, dynamic>.from(e as Map)))
.toList() ??
const [],
album: json['album'] == null
? null
: SpotubeSimpleAlbumObject.fromJson(
Map<String, dynamic>.from(json['album'] as Map)),
);
Map<String, dynamic> _$$SpotubeSimpleTrackObjectImplToJson(
_$SpotubeSimpleTrackObjectImpl instance) =>
<String, dynamic>{
'id': instance.id,
'name': instance.name,
'externalUri': instance.externalUri,
'durationMs': instance.durationMs,
'explicit': instance.explicit,
'artists': instance.artists.map((e) => e.toJson()).toList(),
'album': instance.album?.toJson(),
}; };
_$SpotubeUserObjectImpl _$$SpotubeUserObjectImplFromJson(Map json) => _$SpotubeUserObjectImpl _$$SpotubeUserObjectImplFromJson(Map json) =>

View File

@ -4,9 +4,9 @@ part of 'metadata.dart';
class SpotubePaginationResponseObject<T> class SpotubePaginationResponseObject<T>
with _$SpotubePaginationResponseObject { with _$SpotubePaginationResponseObject {
factory SpotubePaginationResponseObject({ factory SpotubePaginationResponseObject({
required int limit,
required int? nextOffset,
required int total, required int total,
required String? nextCursor,
required String limit,
required bool hasMore, required bool hasMore,
required List<T> items, required List<T> items,
}) = _SpotubePaginationResponseObject; }) = _SpotubePaginationResponseObject;

View File

@ -1,17 +1,34 @@
part of 'metadata.dart'; part of 'metadata.dart';
@freezed @freezed
class SpotubePlaylistObject with _$SpotubePlaylistObject { class SpotubeFullPlaylistObject with _$SpotubeFullPlaylistObject {
factory SpotubePlaylistObject({ factory SpotubeFullPlaylistObject({
required final String uid, required String id,
required final String name, required String name,
@Default([]) final List<SpotubeImageObject> images, required String description,
required final String description, required String externalUri,
required final String externalUrl, required SpotubeUserObject owner,
required final SpotubeUserObject owner, @Default([]) List<SpotubeImageObject> images,
@Default([]) final List<SpotubeUserObject> collaborators, @Default([]) List<SpotubeUserObject> collaborators,
}) = _SpotubePlaylistObject; @Default(false) bool collaborative,
@Default(false) bool public,
}) = _SpotubeFullPlaylistObject;
factory SpotubePlaylistObject.fromJson(Map<String, dynamic> json) => factory SpotubeFullPlaylistObject.fromJson(Map<String, dynamic> json) =>
_$SpotubePlaylistObjectFromJson(json); _$SpotubeFullPlaylistObjectFromJson(json);
}
@freezed
class SpotubeSimplePlaylistObject with _$SpotubeSimplePlaylistObject {
factory SpotubeSimplePlaylistObject({
required String id,
required String name,
required String description,
required String externalUri,
required SpotubeUserObject owner,
@Default([]) List<SpotubeImageObject> images,
}) = _SpotubeSimplePlaylistObject;
factory SpotubeSimplePlaylistObject.fromJson(Map<String, dynamic> json) =>
_$SpotubeSimplePlaylistObjectFromJson(json);
} }

View File

@ -1,71 +1,12 @@
part of 'metadata.dart'; part of 'metadata.dart';
SpotubePaginationResponseObject<SpotubeTrackObject> _paginationTracksFromJson(
Map<String, dynamic> json,
) {
return SpotubePaginationResponseObject<SpotubeTrackObject>.fromJson(
json,
(json) => SpotubeTrackObject.fromJson(json),
);
}
SpotubePaginationResponseObject<SpotubeAlbumObject> _paginationAlbumsFromJson(
Map<String, dynamic> json,
) {
return SpotubePaginationResponseObject<SpotubeAlbumObject>.fromJson(
json,
(json) => SpotubeAlbumObject.fromJson(json),
);
}
SpotubePaginationResponseObject<SpotubeArtistObject> _paginationArtistsFromJson(
Map<String, dynamic> json,
) {
return SpotubePaginationResponseObject<SpotubeArtistObject>.fromJson(
json,
(json) => SpotubeArtistObject.fromJson(json),
);
}
SpotubePaginationResponseObject<SpotubePlaylistObject>
_paginationPlaylistsFromJson(
Map<String, dynamic> json,
) {
return SpotubePaginationResponseObject<SpotubePlaylistObject>.fromJson(
json,
(json) => SpotubePlaylistObject.fromJson(json),
);
}
Map<String, dynamic>? _paginationToJson(
SpotubePaginationResponseObject? instance,
) {
return instance?.toJson((item) => item.toJson());
}
@freezed @freezed
class SpotubeSearchResponseObject with _$SpotubeSearchResponseObject { class SpotubeSearchResponseObject with _$SpotubeSearchResponseObject {
factory SpotubeSearchResponseObject({ factory SpotubeSearchResponseObject({
@JsonKey( required List<SpotubeSimpleAlbumObject> albums,
fromJson: _paginationTracksFromJson, required List<SpotubeSimpleArtistObject> artists,
toJson: _paginationToJson, required List<SpotubeSimplePlaylistObject> playlists,
) required List<SpotubeSimpleTrackObject> tracks,
final SpotubePaginationResponseObject<SpotubeTrackObject>? tracks,
@JsonKey(
fromJson: _paginationAlbumsFromJson,
toJson: _paginationToJson,
)
final SpotubePaginationResponseObject<SpotubeAlbumObject>? albums,
@JsonKey(
fromJson: _paginationArtistsFromJson,
toJson: _paginationToJson,
)
final SpotubePaginationResponseObject<SpotubeArtistObject>? artists,
@JsonKey(
fromJson: _paginationPlaylistsFromJson,
toJson: _paginationToJson,
)
final SpotubePaginationResponseObject<SpotubePlaylistObject>? playlists,
}) = _SpotubeSearchResponseObject; }) = _SpotubeSearchResponseObject;
factory SpotubeSearchResponseObject.fromJson(Map<String, dynamic> json) => factory SpotubeSearchResponseObject.fromJson(Map<String, dynamic> json) =>

View File

@ -1,17 +1,34 @@
part of 'metadata.dart'; part of 'metadata.dart';
@freezed @freezed
class SpotubeTrackObject with _$SpotubeTrackObject { class SpotubeFullTrackObject with _$SpotubeFullTrackObject {
factory SpotubeTrackObject({ factory SpotubeFullTrackObject({
required final String uid, required String id,
required final String title, required String name,
@Default([]) final List<SpotubeArtistObject> artists, required String externalUri,
required final SpotubeAlbumObject album, @Default([]) List<SpotubeSimpleArtistObject> artists,
required final int durationMs, required SpotubeSimpleAlbumObject album,
required final String isrc, required int durationMs,
required final String externalUrl, required String isrc,
}) = _SpotubeTrackObject; required bool explicit,
}) = _SpotubeFullTrackObject;
factory SpotubeTrackObject.fromJson(Map<String, dynamic> json) => factory SpotubeFullTrackObject.fromJson(Map<String, dynamic> json) =>
_$SpotubeTrackObjectFromJson(json); _$SpotubeFullTrackObjectFromJson(json);
}
@freezed
class SpotubeSimpleTrackObject with _$SpotubeSimpleTrackObject {
factory SpotubeSimpleTrackObject({
required String id,
required String name,
required String externalUri,
required int durationMs,
required bool explicit,
@Default([]) List<SpotubeSimpleArtistObject> artists,
SpotubeSimpleAlbumObject? album,
}) = _SpotubeSimpleTrackObject;
factory SpotubeSimpleTrackObject.fromJson(Map<String, dynamic> json) =>
_$SpotubeSimpleTrackObjectFromJson(json);
} }