import 'package:hetu_script/hetu_script.dart'; import 'package:hetu_script/values.dart'; import 'package:spotube/models/metadata/metadata.dart'; class MetadataPluginUserEndpoint { final Hetu hetu; MetadataPluginUserEndpoint(this.hetu); HTInstance get hetuMetadataUser => (hetu.fetch("metadataPlugin") as HTInstance).memberGet("user") as HTInstance; Future me() async { final raw = await hetuMetadataUser.invoke("me") as Map; return SpotubeUserObject.fromJson( raw.cast(), ); } Future> savedTracks({ int? offset, int? limit, }) async { final raw = await hetuMetadataUser.invoke( "savedTracks", namedArgs: { "offset": offset, "limit": limit, }..removeWhere((key, value) => value == null), ) as Map; return SpotubePaginationResponseObject.fromJson( raw.cast(), (Map json) => SpotubeFullTrackObject.fromJson(json.cast()), ); } Future> savedPlaylists({ int? offset, int? limit, }) async { final raw = await hetuMetadataUser.invoke( "savedPlaylists", namedArgs: { "offset": offset, "limit": limit, }..removeWhere((key, value) => value == null), ) as Map; return SpotubePaginationResponseObject< SpotubeSimplePlaylistObject>.fromJson( raw.cast(), (Map json) => SpotubeSimplePlaylistObject.fromJson(json.cast()), ); } Future> savedAlbums({ int? offset, int? limit, }) async { final raw = await hetuMetadataUser.invoke( "savedAlbums", namedArgs: { "offset": offset, "limit": limit, }..removeWhere((key, value) => value == null), ) as Map; return SpotubePaginationResponseObject.fromJson( raw.cast(), (Map json) => SpotubeSimpleAlbumObject.fromJson(json.cast()), ); } Future> savedArtists({ int? offset, int? limit, }) async { final raw = await hetuMetadataUser.invoke( "savedArtists", namedArgs: { "offset": offset, "limit": limit, }..removeWhere((key, value) => value == null), ) as Map; return SpotubePaginationResponseObject.fromJson( raw.cast(), (Map json) => SpotubeFullArtistObject.fromJson(json.cast()), ); } Future isSavedPlaylist(String playlistId) async { return await hetuMetadataUser.invoke( "isSavedPlaylist", positionalArgs: [playlistId], ) as bool; } Future> isSavedTracks(List ids) async { return await hetuMetadataUser.invoke( "isSavedTracks", positionalArgs: [ids], ) as List; } Future> isSavedAlbums(List ids) async { return await hetuMetadataUser.invoke( "isSavedAlbums", positionalArgs: [ids], ) as List; } Future> isSavedArtists(List ids) async { return await hetuMetadataUser.invoke( "isSavedArtists", positionalArgs: [ids], ) as List; } }