export interface MediaFile { metadata: { duration: number; }; } export interface Directory { files: FileListing; } //Scanned = we know which children exist //Unknown = either: // - not scanned (is a subdirectory and recursive=false) // - only partially exists, because some deeper file was scannend, and this entry only exists as a link export interface DirectoryWithStatus { files: FileListingWithStatus; status: "Scanned" | "Unknown"; } export type FileListing = Map; export type FileListingWithStatus = Map; export function fileSort(a: [string, Directory | MediaFile], b: [string, Directory | MediaFile]): number { //sort directories first if ("metadata" in b[1] && !("metadata" in a[1])) return -1; if ("metadata" in a[1] && !("metadata" in b[1])) return 1; return a[0].localeCompare(b[0], undefined, { numeric: true }); } export enum MediaFormat { "opus/ogg" = "opus/ogg", "opus/webm" = "opus/webm", mp3 = "mp3", vorbis = "vorbis", }