import 'package:hetu_script/hetu_script.dart'; import 'package:hetu_script/values.dart'; import 'package:spotube/models/metadata/metadata.dart'; class MetadataPluginAlbumEndpoint { final Hetu hetu; MetadataPluginAlbumEndpoint(this.hetu); HTInstance get hetuMetadataAlbum => (hetu.fetch("metadataPlugin") as HTInstance).memberGet("album") as HTInstance; Future getAlbum(String id) async { final raw = await hetuMetadataAlbum.invoke("getAlbum", positionalArgs: [id]) as Map; return SpotubeFullAlbumObject.fromJson( raw.cast(), ); } Future> tracks( String id, { int? offset, int? limit, }) async { final raw = await hetuMetadataAlbum.invoke( "tracks", 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> releases({ int? offset, int? limit, }) async { final raw = await hetuMetadataAlbum.invoke( "releases", 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 hetuMetadataAlbum.invoke( "save", positionalArgs: [ids], ); } Future unsave(List ids) async { await hetuMetadataAlbum.invoke( "unsave", positionalArgs: [ids], ); } }