2022-12-19 15:59:14 -08:00
|
|
|
import { useAuthStore } from '/@/renderer/store';
|
2023-05-08 03:34:15 -07:00
|
|
|
import { toast } from '/@/renderer/components/toast/index';
|
2022-12-19 15:59:14 -08:00
|
|
|
import type {
|
|
|
|
|
AlbumDetailArgs,
|
|
|
|
|
AlbumListArgs,
|
|
|
|
|
SongListArgs,
|
|
|
|
|
SongDetailArgs,
|
|
|
|
|
AlbumArtistDetailArgs,
|
|
|
|
|
AlbumArtistListArgs,
|
2023-04-27 20:34:28 -07:00
|
|
|
SetRatingArgs,
|
2022-12-19 15:59:14 -08:00
|
|
|
GenreListArgs,
|
|
|
|
|
CreatePlaylistArgs,
|
|
|
|
|
DeletePlaylistArgs,
|
|
|
|
|
PlaylistDetailArgs,
|
|
|
|
|
PlaylistListArgs,
|
|
|
|
|
MusicFolderListArgs,
|
|
|
|
|
PlaylistSongListArgs,
|
|
|
|
|
ArtistListArgs,
|
2022-12-31 12:40:11 -08:00
|
|
|
UpdatePlaylistArgs,
|
2023-01-04 18:33:49 -08:00
|
|
|
UserListArgs,
|
2023-01-07 16:09:40 -08:00
|
|
|
FavoriteArgs,
|
2023-01-12 18:43:25 -08:00
|
|
|
TopSongListArgs,
|
2023-01-29 18:40:26 -08:00
|
|
|
AddToPlaylistArgs,
|
2023-04-24 01:22:58 -07:00
|
|
|
AddToPlaylistResponse,
|
2023-01-29 18:40:26 -08:00
|
|
|
RemoveFromPlaylistArgs,
|
2023-04-24 01:22:58 -07:00
|
|
|
RemoveFromPlaylistResponse,
|
2023-01-30 20:01:57 -08:00
|
|
|
ScrobbleArgs,
|
2023-04-24 01:22:58 -07:00
|
|
|
ScrobbleResponse,
|
|
|
|
|
AlbumArtistDetailResponse,
|
|
|
|
|
FavoriteResponse,
|
|
|
|
|
CreatePlaylistResponse,
|
|
|
|
|
AlbumArtistListResponse,
|
|
|
|
|
AlbumDetailResponse,
|
|
|
|
|
AlbumListResponse,
|
|
|
|
|
ArtistListResponse,
|
|
|
|
|
GenreListResponse,
|
|
|
|
|
MusicFolderListResponse,
|
|
|
|
|
PlaylistDetailResponse,
|
|
|
|
|
PlaylistListResponse,
|
|
|
|
|
RatingResponse,
|
|
|
|
|
SongDetailResponse,
|
|
|
|
|
SongListResponse,
|
|
|
|
|
TopSongListResponse,
|
|
|
|
|
UpdatePlaylistResponse,
|
|
|
|
|
UserListResponse,
|
2023-05-09 05:48:11 -07:00
|
|
|
AuthenticationResponse,
|
2023-05-19 00:14:41 -07:00
|
|
|
SearchArgs,
|
|
|
|
|
SearchResponse,
|
2023-06-02 23:54:34 -07:00
|
|
|
LyricsArgs,
|
|
|
|
|
SynchronizedLyricsArray,
|
2022-12-19 15:59:14 -08:00
|
|
|
} from '/@/renderer/api/types';
|
2023-05-09 05:48:11 -07:00
|
|
|
import { ServerType } from '/@/renderer/types';
|
2023-05-21 07:30:28 -07:00
|
|
|
import { DeletePlaylistResponse, RandomSongListArgs } from './types';
|
2023-04-24 01:22:58 -07:00
|
|
|
import { ndController } from '/@/renderer/api/navidrome/navidrome-controller';
|
|
|
|
|
import { ssController } from '/@/renderer/api/subsonic/subsonic-controller';
|
2023-05-08 03:34:15 -07:00
|
|
|
import { jfController } from '/@/renderer/api/jellyfin/jellyfin-controller';
|
2022-12-19 15:59:14 -08:00
|
|
|
|
|
|
|
|
export type ControllerEndpoint = Partial<{
|
2023-04-24 01:22:58 -07:00
|
|
|
addToPlaylist: (args: AddToPlaylistArgs) => Promise<AddToPlaylistResponse>;
|
2023-05-09 05:48:11 -07:00
|
|
|
authenticate: (
|
|
|
|
|
url: string,
|
|
|
|
|
body: { password: string; username: string },
|
|
|
|
|
) => Promise<AuthenticationResponse>;
|
2022-12-19 15:59:14 -08:00
|
|
|
clearPlaylist: () => void;
|
2023-04-24 01:22:58 -07:00
|
|
|
createFavorite: (args: FavoriteArgs) => Promise<FavoriteResponse>;
|
|
|
|
|
createPlaylist: (args: CreatePlaylistArgs) => Promise<CreatePlaylistResponse>;
|
|
|
|
|
deleteFavorite: (args: FavoriteArgs) => Promise<FavoriteResponse>;
|
|
|
|
|
deletePlaylist: (args: DeletePlaylistArgs) => Promise<DeletePlaylistResponse>;
|
|
|
|
|
getAlbumArtistDetail: (args: AlbumArtistDetailArgs) => Promise<AlbumArtistDetailResponse>;
|
|
|
|
|
getAlbumArtistList: (args: AlbumArtistListArgs) => Promise<AlbumArtistListResponse>;
|
|
|
|
|
getAlbumDetail: (args: AlbumDetailArgs) => Promise<AlbumDetailResponse>;
|
|
|
|
|
getAlbumList: (args: AlbumListArgs) => Promise<AlbumListResponse>;
|
2022-12-19 15:59:14 -08:00
|
|
|
getArtistDetail: () => void;
|
2023-01-12 18:43:25 -08:00
|
|
|
getArtistInfo: (args: any) => void;
|
2023-04-24 01:22:58 -07:00
|
|
|
getArtistList: (args: ArtistListArgs) => Promise<ArtistListResponse>;
|
2022-12-19 15:59:14 -08:00
|
|
|
getFavoritesList: () => void;
|
|
|
|
|
getFolderItemList: () => void;
|
|
|
|
|
getFolderList: () => void;
|
|
|
|
|
getFolderSongs: () => void;
|
2023-04-24 01:22:58 -07:00
|
|
|
getGenreList: (args: GenreListArgs) => Promise<GenreListResponse>;
|
2023-06-02 23:54:34 -07:00
|
|
|
getLyrics: (args: LyricsArgs) => Promise<SynchronizedLyricsArray>;
|
2023-04-24 01:22:58 -07:00
|
|
|
getMusicFolderList: (args: MusicFolderListArgs) => Promise<MusicFolderListResponse>;
|
|
|
|
|
getPlaylistDetail: (args: PlaylistDetailArgs) => Promise<PlaylistDetailResponse>;
|
|
|
|
|
getPlaylistList: (args: PlaylistListArgs) => Promise<PlaylistListResponse>;
|
|
|
|
|
getPlaylistSongList: (args: PlaylistSongListArgs) => Promise<SongListResponse>;
|
2023-05-21 07:30:28 -07:00
|
|
|
getRandomSongList: (args: RandomSongListArgs) => Promise<SongListResponse>;
|
2023-04-24 01:22:58 -07:00
|
|
|
getSongDetail: (args: SongDetailArgs) => Promise<SongDetailResponse>;
|
|
|
|
|
getSongList: (args: SongListArgs) => Promise<SongListResponse>;
|
|
|
|
|
getTopSongs: (args: TopSongListArgs) => Promise<TopSongListResponse>;
|
|
|
|
|
getUserList: (args: UserListArgs) => Promise<UserListResponse>;
|
|
|
|
|
removeFromPlaylist: (args: RemoveFromPlaylistArgs) => Promise<RemoveFromPlaylistResponse>;
|
|
|
|
|
scrobble: (args: ScrobbleArgs) => Promise<ScrobbleResponse>;
|
2023-05-19 00:14:41 -07:00
|
|
|
search: (args: SearchArgs) => Promise<SearchResponse>;
|
2023-04-27 20:34:28 -07:00
|
|
|
setRating: (args: SetRatingArgs) => Promise<RatingResponse>;
|
2023-04-24 01:22:58 -07:00
|
|
|
updatePlaylist: (args: UpdatePlaylistArgs) => Promise<UpdatePlaylistResponse>;
|
2022-12-19 15:59:14 -08:00
|
|
|
}>;
|
|
|
|
|
|
|
|
|
|
type ApiController = {
|
|
|
|
|
jellyfin: ControllerEndpoint;
|
|
|
|
|
navidrome: ControllerEndpoint;
|
|
|
|
|
subsonic: ControllerEndpoint;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const endpoints: ApiController = {
|
|
|
|
|
jellyfin: {
|
2023-05-08 03:34:15 -07:00
|
|
|
addToPlaylist: jfController.addToPlaylist,
|
2023-05-09 05:48:11 -07:00
|
|
|
authenticate: jfController.authenticate,
|
2022-12-19 15:59:14 -08:00
|
|
|
clearPlaylist: undefined,
|
2023-05-08 03:34:15 -07:00
|
|
|
createFavorite: jfController.createFavorite,
|
|
|
|
|
createPlaylist: jfController.createPlaylist,
|
|
|
|
|
deleteFavorite: jfController.deleteFavorite,
|
|
|
|
|
deletePlaylist: jfController.deletePlaylist,
|
|
|
|
|
getAlbumArtistDetail: jfController.getAlbumArtistDetail,
|
|
|
|
|
getAlbumArtistList: jfController.getAlbumArtistList,
|
|
|
|
|
getAlbumDetail: jfController.getAlbumDetail,
|
|
|
|
|
getAlbumList: jfController.getAlbumList,
|
2022-12-19 15:59:14 -08:00
|
|
|
getArtistDetail: undefined,
|
2023-01-12 18:43:25 -08:00
|
|
|
getArtistInfo: undefined,
|
2023-05-08 03:34:15 -07:00
|
|
|
getArtistList: undefined,
|
2022-12-19 15:59:14 -08:00
|
|
|
getFavoritesList: undefined,
|
|
|
|
|
getFolderItemList: undefined,
|
|
|
|
|
getFolderList: undefined,
|
|
|
|
|
getFolderSongs: undefined,
|
2023-05-08 03:34:15 -07:00
|
|
|
getGenreList: jfController.getGenreList,
|
2023-06-02 23:54:34 -07:00
|
|
|
getLyrics: jfController.getLyrics,
|
2023-05-08 03:34:15 -07:00
|
|
|
getMusicFolderList: jfController.getMusicFolderList,
|
|
|
|
|
getPlaylistDetail: jfController.getPlaylistDetail,
|
|
|
|
|
getPlaylistList: jfController.getPlaylistList,
|
|
|
|
|
getPlaylistSongList: jfController.getPlaylistSongList,
|
2023-05-21 07:30:28 -07:00
|
|
|
getRandomSongList: jfController.getRandomSongList,
|
2022-12-19 15:59:14 -08:00
|
|
|
getSongDetail: undefined,
|
2023-05-08 03:34:15 -07:00
|
|
|
getSongList: jfController.getSongList,
|
|
|
|
|
getTopSongs: jfController.getTopSongList,
|
2023-01-04 18:33:49 -08:00
|
|
|
getUserList: undefined,
|
2023-05-08 03:34:15 -07:00
|
|
|
removeFromPlaylist: jfController.removeFromPlaylist,
|
|
|
|
|
scrobble: jfController.scrobble,
|
2023-05-19 02:06:58 -07:00
|
|
|
search: jfController.search,
|
2023-04-27 20:34:28 -07:00
|
|
|
setRating: undefined,
|
2023-05-08 03:34:15 -07:00
|
|
|
updatePlaylist: jfController.updatePlaylist,
|
2022-12-19 15:59:14 -08:00
|
|
|
},
|
|
|
|
|
navidrome: {
|
2023-04-24 01:22:58 -07:00
|
|
|
addToPlaylist: ndController.addToPlaylist,
|
2023-05-09 05:48:11 -07:00
|
|
|
authenticate: ndController.authenticate,
|
2022-12-19 15:59:14 -08:00
|
|
|
clearPlaylist: undefined,
|
2023-04-24 01:22:58 -07:00
|
|
|
createFavorite: ssController.createFavorite,
|
|
|
|
|
createPlaylist: ndController.createPlaylist,
|
|
|
|
|
deleteFavorite: ssController.removeFavorite,
|
|
|
|
|
deletePlaylist: ndController.deletePlaylist,
|
|
|
|
|
getAlbumArtistDetail: ndController.getAlbumArtistDetail,
|
|
|
|
|
getAlbumArtistList: ndController.getAlbumArtistList,
|
|
|
|
|
getAlbumDetail: ndController.getAlbumDetail,
|
|
|
|
|
getAlbumList: ndController.getAlbumList,
|
2022-12-19 15:59:14 -08:00
|
|
|
getArtistDetail: undefined,
|
2023-01-12 18:43:25 -08:00
|
|
|
getArtistInfo: undefined,
|
2022-12-19 15:59:14 -08:00
|
|
|
getArtistList: undefined,
|
|
|
|
|
getFavoritesList: undefined,
|
|
|
|
|
getFolderItemList: undefined,
|
|
|
|
|
getFolderList: undefined,
|
|
|
|
|
getFolderSongs: undefined,
|
2023-04-24 01:22:58 -07:00
|
|
|
getGenreList: ndController.getGenreList,
|
2023-06-02 23:54:34 -07:00
|
|
|
getLyrics: undefined,
|
2023-04-24 01:22:58 -07:00
|
|
|
getMusicFolderList: ssController.getMusicFolderList,
|
|
|
|
|
getPlaylistDetail: ndController.getPlaylistDetail,
|
|
|
|
|
getPlaylistList: ndController.getPlaylistList,
|
|
|
|
|
getPlaylistSongList: ndController.getPlaylistSongList,
|
2023-05-21 07:30:28 -07:00
|
|
|
getRandomSongList: ssController.getRandomSongList,
|
2023-04-24 01:22:58 -07:00
|
|
|
getSongDetail: ndController.getSongDetail,
|
|
|
|
|
getSongList: ndController.getSongList,
|
|
|
|
|
getTopSongs: ssController.getTopSongList,
|
|
|
|
|
getUserList: ndController.getUserList,
|
|
|
|
|
removeFromPlaylist: ndController.removeFromPlaylist,
|
|
|
|
|
scrobble: ssController.scrobble,
|
2023-05-19 00:14:41 -07:00
|
|
|
search: ssController.search3,
|
2023-04-27 20:34:28 -07:00
|
|
|
setRating: ssController.setRating,
|
2023-04-24 01:22:58 -07:00
|
|
|
updatePlaylist: ndController.updatePlaylist,
|
2022-12-19 15:59:14 -08:00
|
|
|
},
|
|
|
|
|
subsonic: {
|
2023-05-09 05:48:11 -07:00
|
|
|
authenticate: ssController.authenticate,
|
2022-12-19 15:59:14 -08:00
|
|
|
clearPlaylist: undefined,
|
2023-04-24 01:22:58 -07:00
|
|
|
createFavorite: ssController.createFavorite,
|
2022-12-19 15:59:14 -08:00
|
|
|
createPlaylist: undefined,
|
2023-04-24 01:22:58 -07:00
|
|
|
deleteFavorite: ssController.removeFavorite,
|
2022-12-19 15:59:14 -08:00
|
|
|
deletePlaylist: undefined,
|
2023-04-24 01:22:58 -07:00
|
|
|
getAlbumArtistDetail: undefined,
|
|
|
|
|
getAlbumArtistList: undefined,
|
|
|
|
|
getAlbumDetail: undefined,
|
|
|
|
|
getAlbumList: undefined,
|
2022-12-19 15:59:14 -08:00
|
|
|
getArtistDetail: undefined,
|
2023-01-12 18:43:25 -08:00
|
|
|
getArtistInfo: undefined,
|
2022-12-19 15:59:14 -08:00
|
|
|
getArtistList: undefined,
|
|
|
|
|
getFavoritesList: undefined,
|
|
|
|
|
getFolderItemList: undefined,
|
|
|
|
|
getFolderList: undefined,
|
|
|
|
|
getFolderSongs: undefined,
|
|
|
|
|
getGenreList: undefined,
|
2023-06-02 23:54:34 -07:00
|
|
|
getLyrics: undefined,
|
2023-04-24 01:22:58 -07:00
|
|
|
getMusicFolderList: ssController.getMusicFolderList,
|
2022-12-19 15:59:14 -08:00
|
|
|
getPlaylistDetail: undefined,
|
|
|
|
|
getPlaylistList: undefined,
|
|
|
|
|
getSongDetail: undefined,
|
|
|
|
|
getSongList: undefined,
|
2023-04-24 01:22:58 -07:00
|
|
|
getTopSongs: ssController.getTopSongList,
|
2023-01-04 18:33:49 -08:00
|
|
|
getUserList: undefined,
|
2023-04-24 01:22:58 -07:00
|
|
|
scrobble: ssController.scrobble,
|
2023-05-19 00:14:41 -07:00
|
|
|
search: ssController.search3,
|
2023-04-27 20:34:28 -07:00
|
|
|
setRating: undefined,
|
2022-12-19 15:59:14 -08:00
|
|
|
updatePlaylist: undefined,
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
2023-05-09 05:48:11 -07:00
|
|
|
const apiController = (endpoint: keyof ControllerEndpoint, type?: ServerType) => {
|
|
|
|
|
const serverType = type || useAuthStore.getState().currentServer?.type;
|
2022-12-19 15:59:14 -08:00
|
|
|
|
|
|
|
|
if (!serverType) {
|
|
|
|
|
toast.error({ message: 'No server selected', title: 'Unable to route request' });
|
2023-05-19 00:14:41 -07:00
|
|
|
throw new Error(`No server selected`);
|
2022-12-19 15:59:14 -08:00
|
|
|
}
|
|
|
|
|
|
2023-05-19 00:14:41 -07:00
|
|
|
const controllerFn = endpoints?.[serverType]?.[endpoint];
|
2022-12-19 15:59:14 -08:00
|
|
|
|
|
|
|
|
if (typeof controllerFn !== 'function') {
|
|
|
|
|
toast.error({
|
|
|
|
|
message: `Endpoint ${endpoint} is not implemented for ${serverType}`,
|
|
|
|
|
title: 'Unable to route request',
|
|
|
|
|
});
|
2023-05-19 00:14:41 -07:00
|
|
|
|
|
|
|
|
throw new Error(`Endpoint ${endpoint} is not implemented for ${serverType}`);
|
2022-12-19 15:59:14 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return endpoints[serverType][endpoint];
|
|
|
|
|
};
|
|
|
|
|
|
2023-05-09 05:48:11 -07:00
|
|
|
const authenticate = async (
|
|
|
|
|
url: string,
|
|
|
|
|
body: { legacy?: boolean; password: string; username: string },
|
|
|
|
|
type: ServerType,
|
|
|
|
|
) => {
|
|
|
|
|
return (apiController('authenticate', type) as ControllerEndpoint['authenticate'])?.(url, body);
|
|
|
|
|
};
|
|
|
|
|
|
2022-12-19 15:59:14 -08:00
|
|
|
const getAlbumList = async (args: AlbumListArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'getAlbumList',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['getAlbumList']
|
|
|
|
|
)?.(args);
|
2022-12-19 15:59:14 -08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const getAlbumDetail = async (args: AlbumDetailArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'getAlbumDetail',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['getAlbumDetail']
|
|
|
|
|
)?.(args);
|
2022-12-19 15:59:14 -08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const getSongList = async (args: SongListArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'getSongList',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['getSongList']
|
|
|
|
|
)?.(args);
|
2022-12-19 15:59:14 -08:00
|
|
|
};
|
|
|
|
|
|
2023-05-19 22:20:32 -07:00
|
|
|
const getSongDetail = async (args: SongDetailArgs) => {
|
|
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'getSongDetail',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['getSongDetail']
|
|
|
|
|
)?.(args);
|
|
|
|
|
};
|
|
|
|
|
|
2022-12-20 19:11:33 -08:00
|
|
|
const getMusicFolderList = async (args: MusicFolderListArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'getMusicFolderList',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['getMusicFolderList']
|
|
|
|
|
)?.(args);
|
2022-12-20 19:11:33 -08:00
|
|
|
};
|
|
|
|
|
|
2022-12-22 01:56:59 -08:00
|
|
|
const getGenreList = async (args: GenreListArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'getGenreList',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['getGenreList']
|
|
|
|
|
)?.(args);
|
2022-12-22 01:56:59 -08:00
|
|
|
};
|
|
|
|
|
|
2023-01-08 20:45:38 -08:00
|
|
|
const getAlbumArtistDetail = async (args: AlbumArtistDetailArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'getAlbumArtistDetail',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['getAlbumArtistDetail']
|
|
|
|
|
)?.(args);
|
2023-01-08 20:45:38 -08:00
|
|
|
};
|
|
|
|
|
|
2022-12-30 21:04:06 -08:00
|
|
|
const getAlbumArtistList = async (args: AlbumArtistListArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'getAlbumArtistList',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['getAlbumArtistList']
|
|
|
|
|
)?.(args);
|
2022-12-30 21:04:06 -08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const getArtistList = async (args: ArtistListArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'getArtistList',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['getArtistList']
|
|
|
|
|
)?.(args);
|
2022-12-30 21:04:06 -08:00
|
|
|
};
|
|
|
|
|
|
2022-12-31 03:46:12 -08:00
|
|
|
const getPlaylistList = async (args: PlaylistListArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'getPlaylistList',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['getPlaylistList']
|
|
|
|
|
)?.(args);
|
2022-12-31 03:46:12 -08:00
|
|
|
};
|
|
|
|
|
|
2022-12-31 12:40:11 -08:00
|
|
|
const createPlaylist = async (args: CreatePlaylistArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'createPlaylist',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['createPlaylist']
|
|
|
|
|
)?.(args);
|
2022-12-31 12:40:11 -08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const updatePlaylist = async (args: UpdatePlaylistArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'updatePlaylist',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['updatePlaylist']
|
|
|
|
|
)?.(args);
|
2022-12-31 12:40:11 -08:00
|
|
|
};
|
|
|
|
|
|
2023-01-03 00:28:09 -08:00
|
|
|
const deletePlaylist = async (args: DeletePlaylistArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'deletePlaylist',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['deletePlaylist']
|
|
|
|
|
)?.(args);
|
2023-01-03 00:28:09 -08:00
|
|
|
};
|
|
|
|
|
|
2023-01-29 18:40:26 -08:00
|
|
|
const addToPlaylist = async (args: AddToPlaylistArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'addToPlaylist',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['addToPlaylist']
|
|
|
|
|
)?.(args);
|
2023-01-29 18:40:26 -08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const removeFromPlaylist = async (args: RemoveFromPlaylistArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'removeFromPlaylist',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['removeFromPlaylist']
|
|
|
|
|
)?.(args);
|
2023-01-29 18:40:26 -08:00
|
|
|
};
|
|
|
|
|
|
2022-12-31 18:03:26 -08:00
|
|
|
const getPlaylistDetail = async (args: PlaylistDetailArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'getPlaylistDetail',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['getPlaylistDetail']
|
|
|
|
|
)?.(args);
|
2022-12-31 18:03:26 -08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const getPlaylistSongList = async (args: PlaylistSongListArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'getPlaylistSongList',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['getPlaylistSongList']
|
|
|
|
|
)?.(args);
|
2022-12-31 18:03:26 -08:00
|
|
|
};
|
|
|
|
|
|
2023-01-04 18:33:49 -08:00
|
|
|
const getUserList = async (args: UserListArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'getUserList',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['getUserList']
|
|
|
|
|
)?.(args);
|
2023-01-04 18:33:49 -08:00
|
|
|
};
|
|
|
|
|
|
2023-01-07 16:09:40 -08:00
|
|
|
const createFavorite = async (args: FavoriteArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'createFavorite',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['createFavorite']
|
|
|
|
|
)?.(args);
|
2023-01-07 16:09:40 -08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const deleteFavorite = async (args: FavoriteArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'deleteFavorite',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['deleteFavorite']
|
|
|
|
|
)?.(args);
|
2023-01-07 16:09:40 -08:00
|
|
|
};
|
|
|
|
|
|
2023-04-27 20:34:28 -07:00
|
|
|
const updateRating = async (args: SetRatingArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController('setRating', args.apiClientProps.server?.type) as ControllerEndpoint['setRating']
|
|
|
|
|
)?.(args);
|
2023-01-07 16:09:40 -08:00
|
|
|
};
|
|
|
|
|
|
2023-01-12 18:43:25 -08:00
|
|
|
const getTopSongList = async (args: TopSongListArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'getTopSongs',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['getTopSongs']
|
|
|
|
|
)?.(args);
|
2023-01-12 18:43:25 -08:00
|
|
|
};
|
|
|
|
|
|
2023-01-30 20:01:57 -08:00
|
|
|
const scrobble = async (args: ScrobbleArgs) => {
|
2023-05-09 05:49:05 -07:00
|
|
|
return (
|
|
|
|
|
apiController('scrobble', args.apiClientProps.server?.type) as ControllerEndpoint['scrobble']
|
|
|
|
|
)?.(args);
|
2023-01-30 20:01:57 -08:00
|
|
|
};
|
|
|
|
|
|
2023-05-19 00:14:41 -07:00
|
|
|
const search = async (args: SearchArgs) => {
|
|
|
|
|
return (
|
|
|
|
|
apiController('search', args.apiClientProps.server?.type) as ControllerEndpoint['search']
|
|
|
|
|
)?.(args);
|
|
|
|
|
};
|
|
|
|
|
|
2023-05-21 07:30:28 -07:00
|
|
|
const getRandomSongList = async (args: RandomSongListArgs) => {
|
|
|
|
|
return (
|
|
|
|
|
apiController(
|
|
|
|
|
'getRandomSongList',
|
|
|
|
|
args.apiClientProps.server?.type,
|
|
|
|
|
) as ControllerEndpoint['getRandomSongList']
|
|
|
|
|
)?.(args);
|
|
|
|
|
};
|
|
|
|
|
|
2023-06-02 23:54:34 -07:00
|
|
|
const getLyrics = async (args: LyricsArgs) => {
|
|
|
|
|
return (
|
|
|
|
|
apiController('getLyrics', args.apiClientProps.server?.type) as ControllerEndpoint['getLyrics']
|
|
|
|
|
)?.(args);
|
|
|
|
|
};
|
|
|
|
|
|
2022-12-19 15:59:14 -08:00
|
|
|
export const controller = {
|
2023-01-29 18:40:26 -08:00
|
|
|
addToPlaylist,
|
2023-05-09 05:48:11 -07:00
|
|
|
authenticate,
|
2023-01-07 16:09:40 -08:00
|
|
|
createFavorite,
|
2022-12-31 12:40:11 -08:00
|
|
|
createPlaylist,
|
2023-01-07 16:09:40 -08:00
|
|
|
deleteFavorite,
|
2023-01-03 00:28:09 -08:00
|
|
|
deletePlaylist,
|
2023-01-08 20:45:38 -08:00
|
|
|
getAlbumArtistDetail,
|
2022-12-30 21:04:06 -08:00
|
|
|
getAlbumArtistList,
|
2022-12-19 15:59:14 -08:00
|
|
|
getAlbumDetail,
|
|
|
|
|
getAlbumList,
|
2022-12-30 21:04:06 -08:00
|
|
|
getArtistList,
|
2022-12-22 01:56:59 -08:00
|
|
|
getGenreList,
|
2023-06-02 23:54:34 -07:00
|
|
|
getLyrics,
|
2022-12-20 19:11:33 -08:00
|
|
|
getMusicFolderList,
|
2022-12-31 18:03:26 -08:00
|
|
|
getPlaylistDetail,
|
2022-12-31 03:46:12 -08:00
|
|
|
getPlaylistList,
|
2022-12-31 18:03:26 -08:00
|
|
|
getPlaylistSongList,
|
2023-05-21 07:30:28 -07:00
|
|
|
getRandomSongList,
|
2023-05-19 22:20:32 -07:00
|
|
|
getSongDetail,
|
2022-12-19 15:59:14 -08:00
|
|
|
getSongList,
|
2023-01-12 18:43:25 -08:00
|
|
|
getTopSongList,
|
2023-01-04 18:33:49 -08:00
|
|
|
getUserList,
|
2023-01-29 18:40:26 -08:00
|
|
|
removeFromPlaylist,
|
2023-01-30 20:01:57 -08:00
|
|
|
scrobble,
|
2023-05-19 00:14:41 -07:00
|
|
|
search,
|
2022-12-31 12:40:11 -08:00
|
|
|
updatePlaylist,
|
2023-01-07 16:09:40 -08:00
|
|
|
updateRating,
|
2022-12-19 15:59:14 -08:00
|
|
|
};
|