import 'package:hetu_script/hetu_script.dart'; import 'package:hetu_script/values.dart'; import 'package:spotube/models/metadata/metadata.dart'; class MetadataPluginArtistEndpoint { final Hetu hetu; MetadataPluginArtistEndpoint(this.hetu); HTInstance get hetuMetadataArtist => (hetu.fetch("metadataPlugin") as HTInstance).memberGet("artist") as HTInstance; Future getArtist(String id) async { final raw = await hetuMetadataArtist .invoke("getArtist", positionalArgs: [id]) as Map; return SpotubeFullArtistObject.fromJson( raw.cast(), ); } Future> topTracks( String id, { int? offset, int? limit, }) async { final raw = await hetuMetadataArtist.invoke( "topTracks", positionalArgs: [id], namedArgs: { "offset": offset, "limit": limit, }..removeWhere((key, value) => value == null), ) as Map; return SpotubePaginationResponseObject.fromJson( raw.cast(), (Map json) => SpotubeFullTrackObject.fromJson( json.cast(), ), ); } Future> albums( String id, { int? offset, int? limit, }) async { final raw = await hetuMetadataArtist.invoke( "albums", positionalArgs: [id], namedArgs: { "offset": offset, "limit": limit, }..removeWhere((key, value) => value == null), ) as Map; return SpotubePaginationResponseObject.fromJson( raw.cast(), (Map json) => SpotubeSimpleAlbumObject.fromJson( json.cast(), ), ); } Future save(List ids) async { await hetuMetadataArtist.invoke( "save", positionalArgs: [ids], ); } Future unsave(List ids) async { await hetuMetadataArtist.invoke( "unsave", positionalArgs: [ids], ); } Future> related( String id, { int? offset, int? limit, }) async { final raw = await hetuMetadataArtist.invoke( "related", positionalArgs: [id], namedArgs: { "offset": offset, "limit": limit ?? 20, }..removeWhere((key, value) => value == null), ) as Map; return SpotubePaginationResponseObject.fromJson( raw.cast(), (Map json) => SpotubeFullArtistObject.fromJson( json.cast(), ), ); } }