mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-08 21:10:12 +02:00
refactor api controller to internalize server fetch
This commit is contained in:
@@ -126,7 +126,7 @@ const getArtists = (
|
||||
|
||||
const normalizeSong = (
|
||||
item: z.infer<typeof ndType._response.playlistSong> | z.infer<typeof ndType._response.song>,
|
||||
server: null | ServerListItem,
|
||||
server?: null | ServerListItem,
|
||||
imageSize?: number,
|
||||
): Song => {
|
||||
let id;
|
||||
@@ -222,7 +222,7 @@ const normalizeAlbum = (
|
||||
item: z.infer<typeof ndType._response.album> & {
|
||||
songs?: z.infer<typeof ndType._response.songList>;
|
||||
},
|
||||
server: null | ServerListItem,
|
||||
server?: null | ServerListItem,
|
||||
imageSize?: number,
|
||||
): Album => {
|
||||
const imageUrl = getCoverArtUrl({
|
||||
@@ -293,7 +293,7 @@ const normalizeAlbumArtist = (
|
||||
item: z.infer<typeof ndType._response.albumArtist> & {
|
||||
similarArtists?: z.infer<typeof ssType._response.artistInfo>['artistInfo']['similarArtist'];
|
||||
},
|
||||
server: null | ServerListItem,
|
||||
server?: null | ServerListItem,
|
||||
): AlbumArtist => {
|
||||
let imageUrl = getImageUrl({ url: item?.largeImageUrl || null });
|
||||
|
||||
@@ -358,7 +358,7 @@ const normalizeAlbumArtist = (
|
||||
|
||||
const normalizePlaylist = (
|
||||
item: z.infer<typeof ndType._response.playlist>,
|
||||
server: null | ServerListItem,
|
||||
server?: null | ServerListItem,
|
||||
imageSize?: number,
|
||||
): Playlist => {
|
||||
const imageUrl = getCoverArtUrl({
|
||||
|
||||
@@ -11,7 +11,7 @@ import {
|
||||
Playlist,
|
||||
QueueSong,
|
||||
RelatedArtist,
|
||||
ServerListItem,
|
||||
ServerListItemWithCredential,
|
||||
ServerType,
|
||||
} from '/@/shared/types/domain-types';
|
||||
|
||||
@@ -117,7 +117,7 @@ const getGenres = (
|
||||
|
||||
const normalizeSong = (
|
||||
item: z.infer<typeof ssType._response.song>,
|
||||
server: null | ServerListItem,
|
||||
server?: null | ServerListItemWithCredential,
|
||||
size?: number,
|
||||
): QueueSong => {
|
||||
const imageUrl =
|
||||
@@ -200,7 +200,7 @@ const normalizeAlbumArtist = (
|
||||
item:
|
||||
| z.infer<typeof ssType._response.albumArtist>
|
||||
| z.infer<typeof ssType._response.artistListEntry>,
|
||||
server: null | ServerListItem,
|
||||
server?: null | ServerListItemWithCredential,
|
||||
imageSize?: number,
|
||||
): AlbumArtist => {
|
||||
const imageUrl =
|
||||
@@ -235,7 +235,7 @@ const normalizeAlbumArtist = (
|
||||
|
||||
const normalizeAlbum = (
|
||||
item: z.infer<typeof ssType._response.album> | z.infer<typeof ssType._response.albumListEntry>,
|
||||
server: null | ServerListItem,
|
||||
server?: null | ServerListItemWithCredential,
|
||||
imageSize?: number,
|
||||
): Album => {
|
||||
const imageUrl =
|
||||
@@ -294,7 +294,7 @@ const normalizePlaylist = (
|
||||
item:
|
||||
| z.infer<typeof ssType._response.playlist>
|
||||
| z.infer<typeof ssType._response.playlistListEntry>,
|
||||
server: null | ServerListItem,
|
||||
server?: null | ServerListItemWithCredential,
|
||||
): Playlist => {
|
||||
return {
|
||||
description: item.comment || null,
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { Omit } from 'lodash';
|
||||
import orderBy from 'lodash/orderBy';
|
||||
import reverse from 'lodash/reverse';
|
||||
import shuffle from 'lodash/shuffle';
|
||||
@@ -84,11 +85,9 @@ export type QueueSong = Song & {
|
||||
};
|
||||
|
||||
export type ServerListItem = {
|
||||
credential: string;
|
||||
features?: ServerFeatures;
|
||||
id: string;
|
||||
name: string;
|
||||
ndCredential?: string;
|
||||
preferInstantMix?: boolean;
|
||||
savePassword?: boolean;
|
||||
type: ServerType;
|
||||
@@ -98,6 +97,11 @@ export type ServerListItem = {
|
||||
version?: string;
|
||||
};
|
||||
|
||||
export type ServerListItemWithCredential = ServerListItem & {
|
||||
credential: string;
|
||||
ndCredential?: string;
|
||||
};
|
||||
|
||||
export type User = {
|
||||
createdAt: null | string;
|
||||
email: null | string;
|
||||
@@ -372,7 +376,8 @@ export type Song = {
|
||||
|
||||
type BaseEndpointArgs = {
|
||||
apiClientProps: {
|
||||
server: null | ServerListItem;
|
||||
server?: null | ServerListItemWithCredential;
|
||||
serverId: string;
|
||||
signal?: AbortSignal;
|
||||
};
|
||||
};
|
||||
@@ -829,7 +834,6 @@ export enum PlaylistListSort {
|
||||
export type AddToPlaylistArgs = BaseEndpointArgs & {
|
||||
body: AddToPlaylistBody;
|
||||
query: AddToPlaylistQuery;
|
||||
serverId?: string;
|
||||
};
|
||||
|
||||
export type AddToPlaylistBody = {
|
||||
@@ -843,7 +847,7 @@ export type AddToPlaylistQuery = {
|
||||
// Add to playlist
|
||||
export type AddToPlaylistResponse = null | undefined;
|
||||
|
||||
export type CreatePlaylistArgs = BaseEndpointArgs & { body: CreatePlaylistBody; serverId?: string };
|
||||
export type CreatePlaylistArgs = BaseEndpointArgs & { body: CreatePlaylistBody };
|
||||
|
||||
export type CreatePlaylistBody = {
|
||||
_custom?: {
|
||||
@@ -864,7 +868,6 @@ export type CreatePlaylistResponse = undefined | { id: string };
|
||||
|
||||
export type DeletePlaylistArgs = BaseEndpointArgs & {
|
||||
query: DeletePlaylistQuery;
|
||||
serverId?: string;
|
||||
};
|
||||
|
||||
export type DeletePlaylistQuery = { id: string };
|
||||
@@ -872,7 +875,7 @@ export type DeletePlaylistQuery = { id: string };
|
||||
// Delete Playlist
|
||||
export type DeletePlaylistResponse = null | undefined;
|
||||
|
||||
export type FavoriteArgs = BaseEndpointArgs & { query: FavoriteQuery; serverId?: string };
|
||||
export type FavoriteArgs = BaseEndpointArgs & { query: FavoriteQuery };
|
||||
|
||||
export type FavoriteQuery = {
|
||||
id: string[];
|
||||
@@ -909,7 +912,6 @@ export type RatingResponse = null | undefined;
|
||||
|
||||
export type RemoveFromPlaylistArgs = BaseEndpointArgs & {
|
||||
query: RemoveFromPlaylistQuery;
|
||||
serverId?: string;
|
||||
};
|
||||
|
||||
export type RemoveFromPlaylistQuery = {
|
||||
@@ -920,9 +922,9 @@ export type RemoveFromPlaylistQuery = {
|
||||
// Remove from playlist
|
||||
export type RemoveFromPlaylistResponse = null | undefined;
|
||||
|
||||
export type SetRatingArgs = BaseEndpointArgs & { query: RatingQuery; serverId?: string };
|
||||
export type SetRatingArgs = BaseEndpointArgs & { query: RatingQuery };
|
||||
|
||||
export type ShareItemArgs = BaseEndpointArgs & { body: ShareItemBody; serverId?: string };
|
||||
export type ShareItemArgs = BaseEndpointArgs & { body: ShareItemBody };
|
||||
|
||||
export type ShareItemBody = {
|
||||
description: string;
|
||||
@@ -938,7 +940,6 @@ export type ShareItemResponse = undefined | { id: string };
|
||||
export type UpdatePlaylistArgs = BaseEndpointArgs & {
|
||||
body: UpdatePlaylistBody;
|
||||
query: UpdatePlaylistQuery;
|
||||
serverId?: string;
|
||||
};
|
||||
|
||||
export type UpdatePlaylistBody = {
|
||||
@@ -1135,7 +1136,6 @@ export type RandomSongListResponse = SongListResponse;
|
||||
|
||||
export type ScrobbleArgs = BaseEndpointArgs & {
|
||||
query: ScrobbleQuery;
|
||||
serverId?: string;
|
||||
};
|
||||
|
||||
export type ScrobbleQuery = {
|
||||
@@ -1279,6 +1279,85 @@ export type FontData = {
|
||||
style: string;
|
||||
};
|
||||
|
||||
export type InternalControllerEndpoint = {
|
||||
addToPlaylist: (
|
||||
args: ReplaceApiClientProps<AddToPlaylistArgs>,
|
||||
) => Promise<AddToPlaylistResponse>;
|
||||
authenticate: (
|
||||
url: string,
|
||||
body: { legacy?: boolean; password: string; username: string },
|
||||
) => Promise<AuthenticationResponse>;
|
||||
createFavorite: (args: ReplaceApiClientProps<FavoriteArgs>) => Promise<FavoriteResponse>;
|
||||
createPlaylist: (
|
||||
args: ReplaceApiClientProps<CreatePlaylistArgs>,
|
||||
) => Promise<CreatePlaylistResponse>;
|
||||
deleteFavorite: (args: ReplaceApiClientProps<FavoriteArgs>) => Promise<FavoriteResponse>;
|
||||
deletePlaylist: (
|
||||
args: ReplaceApiClientProps<DeletePlaylistArgs>,
|
||||
) => Promise<DeletePlaylistResponse>;
|
||||
getAlbumArtistDetail: (
|
||||
args: ReplaceApiClientProps<AlbumArtistDetailArgs>,
|
||||
) => Promise<AlbumArtistDetailResponse>;
|
||||
getAlbumArtistList: (
|
||||
args: ReplaceApiClientProps<AlbumArtistListArgs>,
|
||||
) => Promise<AlbumArtistListResponse>;
|
||||
getAlbumArtistListCount: (
|
||||
args: ReplaceApiClientProps<AlbumArtistListCountArgs>,
|
||||
) => Promise<number>;
|
||||
getAlbumDetail: (args: ReplaceApiClientProps<AlbumDetailArgs>) => Promise<AlbumDetailResponse>;
|
||||
getAlbumInfo?: (args: ReplaceApiClientProps<AlbumDetailArgs>) => Promise<AlbumInfo>;
|
||||
getAlbumList: (args: ReplaceApiClientProps<AlbumListArgs>) => Promise<AlbumListResponse>;
|
||||
getAlbumListCount: (args: ReplaceApiClientProps<AlbumListCountArgs>) => Promise<number>;
|
||||
// getArtistInfo?: (args: any) => void;
|
||||
getArtistList: (args: ReplaceApiClientProps<ArtistListArgs>) => Promise<ArtistListResponse>;
|
||||
getArtistListCount: (args: ReplaceApiClientProps<ArtistListCountArgs>) => Promise<number>;
|
||||
getDownloadUrl: (args: ReplaceApiClientProps<DownloadArgs>) => string;
|
||||
getGenreList: (args: ReplaceApiClientProps<GenreListArgs>) => Promise<GenreListResponse>;
|
||||
getLyrics?: (args: ReplaceApiClientProps<LyricsArgs>) => Promise<LyricsResponse>;
|
||||
getMusicFolderList: (
|
||||
args: ReplaceApiClientProps<MusicFolderListArgs>,
|
||||
) => Promise<MusicFolderListResponse>;
|
||||
getPlaylistDetail: (
|
||||
args: ReplaceApiClientProps<PlaylistDetailArgs>,
|
||||
) => Promise<PlaylistDetailResponse>;
|
||||
getPlaylistList: (
|
||||
args: ReplaceApiClientProps<PlaylistListArgs>,
|
||||
) => Promise<PlaylistListResponse>;
|
||||
getPlaylistListCount: (args: ReplaceApiClientProps<PlaylistListCountArgs>) => Promise<number>;
|
||||
getPlaylistSongList: (
|
||||
args: ReplaceApiClientProps<PlaylistSongListArgs>,
|
||||
) => Promise<SongListResponse>;
|
||||
getRandomSongList: (
|
||||
args: ReplaceApiClientProps<RandomSongListArgs>,
|
||||
) => Promise<SongListResponse>;
|
||||
getRoles: (
|
||||
args: ReplaceApiClientProps<BaseEndpointArgs>,
|
||||
) => Promise<Array<string | { label: string; value: string }>>;
|
||||
getServerInfo: (args: ReplaceApiClientProps<ServerInfoArgs>) => Promise<ServerInfo>;
|
||||
getSimilarSongs: (args: ReplaceApiClientProps<SimilarSongsArgs>) => Promise<Song[]>;
|
||||
getSongDetail: (args: ReplaceApiClientProps<SongDetailArgs>) => Promise<SongDetailResponse>;
|
||||
getSongList: (args: ReplaceApiClientProps<SongListArgs>) => Promise<SongListResponse>;
|
||||
getSongListCount: (args: ReplaceApiClientProps<SongListCountArgs>) => Promise<number>;
|
||||
getStructuredLyrics?: (
|
||||
args: ReplaceApiClientProps<StructuredLyricsArgs>,
|
||||
) => Promise<StructuredLyric[]>;
|
||||
getTags?: (args: ReplaceApiClientProps<TagArgs>) => Promise<TagResponses>;
|
||||
getTopSongs: (args: ReplaceApiClientProps<TopSongListArgs>) => Promise<TopSongListResponse>;
|
||||
getTranscodingUrl: (args: ReplaceApiClientProps<TranscodingArgs>) => string;
|
||||
getUserList?: (args: ReplaceApiClientProps<UserListArgs>) => Promise<UserListResponse>;
|
||||
movePlaylistItem?: (args: ReplaceApiClientProps<MoveItemArgs>) => Promise<void>;
|
||||
removeFromPlaylist: (
|
||||
args: ReplaceApiClientProps<RemoveFromPlaylistArgs>,
|
||||
) => Promise<RemoveFromPlaylistResponse>;
|
||||
scrobble: (args: ReplaceApiClientProps<ScrobbleArgs>) => Promise<ScrobbleResponse>;
|
||||
search: (args: ReplaceApiClientProps<SearchArgs>) => Promise<SearchResponse>;
|
||||
setRating?: (args: ReplaceApiClientProps<SetRatingArgs>) => Promise<RatingResponse>;
|
||||
shareItem?: (args: ReplaceApiClientProps<ShareItemArgs>) => Promise<ShareItemResponse>;
|
||||
updatePlaylist: (
|
||||
args: ReplaceApiClientProps<UpdatePlaylistArgs>,
|
||||
) => Promise<UpdatePlaylistResponse>;
|
||||
};
|
||||
|
||||
export type LyricGetQuery = {
|
||||
remoteSongId: string;
|
||||
remoteSource: LyricSource;
|
||||
@@ -1305,6 +1384,8 @@ export type MoveItemQuery = {
|
||||
trackId: string;
|
||||
};
|
||||
|
||||
export type ReplaceApiClientProps<T> = BaseEndpointArgsWithServer & Omit<T, 'apiClientProps'>;
|
||||
|
||||
export type ServerInfo = {
|
||||
features: ServerFeatures;
|
||||
id?: string;
|
||||
@@ -1370,6 +1451,14 @@ export type TranscodingQuery = {
|
||||
format?: string;
|
||||
};
|
||||
|
||||
type BaseEndpointArgsWithServer = {
|
||||
apiClientProps: {
|
||||
server: null | ServerListItemWithCredential;
|
||||
serverId: string;
|
||||
signal?: AbortSignal;
|
||||
};
|
||||
};
|
||||
|
||||
export const sortAlbumList = (albums: Album[], sortBy: AlbumListSort, sortOrder: SortOrder) => {
|
||||
let results = albums;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user