Files
Aurora-SpotiRip/helpers/spotiripSettings.tsx
T

72 lines
2.4 KiB
TypeScript
Raw Normal View History

2026-09-25 23:20:57 -05:00
export type SpotiRipSettings = {
filenameTemplate: string;
folderTemplate: string;
multiDiscMode: "disc-prefix" | "offset" | "track-only";
mp3Bitrate: 128 | 192 | 256 | 320;
embedArtwork: boolean;
autoSelectMatches: boolean;
smartDedup: boolean;
};
export const DEFAULT_SPOTIRIP_SETTINGS: SpotiRipSettings = {
filenameTemplate: "{artist} - {title}",
folderTemplate: "{album_artist}/{year} - {album}",
multiDiscMode: "disc-prefix",
mp3Bitrate: 192,
embedArtwork: true,
autoSelectMatches: true,
smartDedup: true,
};
const STORAGE_KEY = "aurora-spotirip-settings-v1";
export function loadSpotiRipSettings(): SpotiRipSettings {
if (typeof window === "undefined") return DEFAULT_SPOTIRIP_SETTINGS;
try {
const stored = window.localStorage.getItem(STORAGE_KEY);
if (!stored) return DEFAULT_SPOTIRIP_SETTINGS;
const parsed = JSON.parse(stored) as Partial<SpotiRipSettings>;
return {
filenameTemplate:
typeof parsed.filenameTemplate === "string" && parsed.filenameTemplate.trim()
? parsed.filenameTemplate
: DEFAULT_SPOTIRIP_SETTINGS.filenameTemplate,
folderTemplate:
typeof parsed.folderTemplate === "string" && parsed.folderTemplate.trim()
? parsed.folderTemplate
: DEFAULT_SPOTIRIP_SETTINGS.folderTemplate,
multiDiscMode:
parsed.multiDiscMode === "disc-prefix" ||
parsed.multiDiscMode === "offset" ||
parsed.multiDiscMode === "track-only"
? parsed.multiDiscMode
: DEFAULT_SPOTIRIP_SETTINGS.multiDiscMode,
mp3Bitrate:
parsed.mp3Bitrate === 128 ||
parsed.mp3Bitrate === 192 ||
parsed.mp3Bitrate === 256 ||
parsed.mp3Bitrate === 320
? parsed.mp3Bitrate
: DEFAULT_SPOTIRIP_SETTINGS.mp3Bitrate,
embedArtwork:
typeof parsed.embedArtwork === "boolean"
? parsed.embedArtwork
: DEFAULT_SPOTIRIP_SETTINGS.embedArtwork,
autoSelectMatches:
typeof parsed.autoSelectMatches === "boolean"
? parsed.autoSelectMatches
: DEFAULT_SPOTIRIP_SETTINGS.autoSelectMatches,
smartDedup:
typeof parsed.smartDedup === "boolean"
? parsed.smartDedup
: DEFAULT_SPOTIRIP_SETTINGS.smartDedup,
};
} catch {
return DEFAULT_SPOTIRIP_SETTINGS;
}
}
export function saveSpotiRipSettings(settings: SpotiRipSettings) {
window.localStorage.setItem(STORAGE_KEY, JSON.stringify(settings));
}