add folder browsing support (#315)

This commit is contained in:
jeffvli
2025-12-02 21:30:44 -08:00
parent 355257104d
commit 917bf91583
53 changed files with 2382 additions and 299 deletions
+26
View File
@@ -24,6 +24,7 @@ export enum LibraryItem {
ALBUM = 'album',
ALBUM_ARTIST = 'albumArtist',
ARTIST = 'artist',
FOLDER = 'folder',
GENRE = 'genre',
PLAYLIST = 'playlist',
PLAYLIST_SONG = 'playlistSong',
@@ -257,6 +258,29 @@ export type EndpointDetails = {
server: ServerListItem;
};
export type Folder = {
_itemType: LibraryItem.FOLDER;
_serverId: string;
_serverType: ServerType;
children?: {
folders: Folder[];
songs: Song[];
};
id: string;
name: string;
parentId?: string;
};
export type FolderArgs = BaseEndpointArgs & { query: FolderQuery };
export interface FolderQuery extends BaseQuery<SongListSort> {
id: string;
musicFolderId?: string | string[];
searchTerm?: string;
}
export type FolderResponse = Folder;
export type GainInfo = {
album?: number;
track?: number;
@@ -1231,6 +1255,7 @@ export type ControllerEndpoint = {
getArtistList: (args: ArtistListArgs) => Promise<ArtistListResponse>;
getArtistListCount: (args: ArtistListCountArgs) => Promise<number>;
getDownloadUrl: (args: DownloadArgs) => string;
getFolder: (args: FolderArgs) => Promise<FolderResponse>;
getGenreList: (args: GenreListArgs) => Promise<GenreListResponse>;
getLyrics?: (args: LyricsArgs) => Promise<LyricsResponse>;
getMusicFolderList: (args: MusicFolderListArgs) => Promise<MusicFolderListResponse>;
@@ -1309,6 +1334,7 @@ export type InternalControllerEndpoint = {
getArtistList: (args: ReplaceApiClientProps<ArtistListArgs>) => Promise<ArtistListResponse>;
getArtistListCount: (args: ReplaceApiClientProps<ArtistListCountArgs>) => Promise<number>;
getDownloadUrl: (args: ReplaceApiClientProps<DownloadArgs>) => string;
getFolder: (args: ReplaceApiClientProps<FolderArgs>) => Promise<FolderResponse>;
getGenreList: (args: ReplaceApiClientProps<GenreListArgs>) => Promise<GenreListResponse>;
getLyrics?: (args: ReplaceApiClientProps<LyricsArgs>) => Promise<LyricsResponse>;
getMusicFolderList: (
+2
View File
@@ -6,6 +6,7 @@ export enum DragTarget {
ALBUM = LibraryItem.ALBUM,
ALBUM_ARTIST = LibraryItem.ALBUM_ARTIST,
ARTIST = LibraryItem.ARTIST,
FOLDER = LibraryItem.FOLDER,
GENERIC = 'generic',
GENRE = LibraryItem.GENRE,
GRID_ROW = 'gridRow',
@@ -19,6 +20,7 @@ export const DragTargetMap = {
[LibraryItem.ALBUM]: DragTarget.ALBUM,
[LibraryItem.ALBUM_ARTIST]: DragTarget.ALBUM_ARTIST,
[LibraryItem.ARTIST]: DragTarget.ARTIST,
[LibraryItem.FOLDER]: DragTarget.FOLDER,
[LibraryItem.GENRE]: DragTarget.GENRE,
[LibraryItem.PLAYLIST]: DragTarget.PLAYLIST,
[LibraryItem.PLAYLIST_SONG]: DragTarget.SONG,