diff --git a/src/lib/library/scanner.ts b/src/lib/library/scanner.ts new file mode 100644 index 0000000..0522de3 --- /dev/null +++ b/src/lib/library/scanner.ts @@ -0,0 +1,72 @@ +import { readDir } from '@tauri-apps/plugin-fs'; + +export interface Artist { + name: string; + path: string; +} + +export interface Playlist { + name: string; + path: string; +} + +/** + * Scan music folder for artists (each folder is an artist) + */ +export async function scanArtists(musicFolderPath: string): Promise { + try { + const entries = await readDir(musicFolderPath); + + const artists: Artist[] = []; + + for (const entry of entries) { + if (entry.isDirectory) { + artists.push({ + name: entry.name, + path: `${musicFolderPath}/${entry.name}` + }); + } + } + + // Sort alphabetically + artists.sort((a, b) => a.name.localeCompare(b.name)); + + return artists; + } catch (error) { + console.error('Error scanning artists:', error); + return []; + } +} + +/** + * Scan playlists folder for m3u/m3u8 files + */ +export async function scanPlaylists(playlistsFolderPath: string): Promise { + try { + const entries = await readDir(playlistsFolderPath); + + const playlists: Playlist[] = []; + + for (const entry of entries) { + if (!entry.isDirectory) { + const isPlaylist = entry.name.endsWith('.m3u') || entry.name.endsWith('.m3u8'); + if (isPlaylist) { + // Remove extension for display name + const nameWithoutExt = entry.name.replace(/\.(m3u8?|M3U8?)$/, ''); + playlists.push({ + name: nameWithoutExt, + path: `${playlistsFolderPath}/${entry.name}` + }); + } + } + } + + // Sort alphabetically + playlists.sort((a, b) => a.name.localeCompare(b.name)); + + return playlists; + } catch (error) { + console.error('Error scanning playlists:', error); + return []; + } +} diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 6e72bc2..1c00b0b 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,7 +1,31 @@
@@ -44,31 +68,31 @@
-