initial port for dynamic playlists

This commit is contained in:
Boof2015
2026-07-04 13:25:41 -04:00
parent 61e6147d3e
commit f9ef845800
20 changed files with 2226 additions and 36 deletions
+31
View File
@@ -1,6 +1,10 @@
import { create } from 'zustand';
import type { DbTrack } from '@/types/library';
import type { Playlist, PlaylistTrackEntry } from '@/types/playlist';
import type {
DynamicPlaylistPreview,
DynamicPlaylistRulesV1,
} from '@/shared/playlists/dynamicPlaylist';
import { openLibraryDb, type LibraryDatabase } from '@/db/database';
import { getAllTracks } from '@/db/queries';
import * as playlistDb from '@/db/playlistQueries';
@@ -41,6 +45,10 @@ interface PlaylistStore {
openPlaylist: (id: number) => Promise<void>;
closePlaylist: () => void;
createPlaylist: (name: string) => Promise<Playlist>;
createDynamicPlaylist: (name: string, rules: DynamicPlaylistRulesV1) => Promise<Playlist>;
getDynamicPlaylistRules: (id: number) => Promise<DynamicPlaylistRulesV1>;
updateDynamicPlaylistRules: (id: number, rules: DynamicPlaylistRulesV1) => Promise<void>;
previewDynamicPlaylist: (rules: DynamicPlaylistRulesV1) => Promise<DynamicPlaylistPreview>;
renamePlaylist: (id: number, name: string) => Promise<void>;
deletePlaylist: (id: number) => Promise<void>;
addTracksToPlaylist: (id: number, tracks: DbTrack[]) => Promise<number>;
@@ -117,6 +125,29 @@ export const usePlaylistStore = create<PlaylistStore>((set, get) => {
return playlist;
},
createDynamicPlaylist: async (name, rules) => {
const db = await openLibraryDb();
const playlist = await playlistDb.createDynamicPlaylist(db, name, rules);
await refreshWith(db);
return playlist;
},
getDynamicPlaylistRules: async (id) => {
const db = await openLibraryDb();
return playlistDb.getDynamicPlaylistRules(db, id);
},
updateDynamicPlaylistRules: async (id, rules) => {
const db = await openLibraryDb();
await playlistDb.updateDynamicPlaylistRules(db, id, rules);
await refreshWith(db);
},
previewDynamicPlaylist: async (rules) => {
const db = await openLibraryDb();
return playlistDb.previewDynamicPlaylist(db, rules);
},
renamePlaylist: async (id, name) => {
const db = await openLibraryDb();
await playlistDb.renamePlaylist(db, id, name);