Aurora SpotiRip desktop and web app
- Spotify playlist, library, album and artist browsing with in-app playback - Song, playlist and album downloads via spotdl with YouTube and Bandcamp fallbacks - Electron desktop app (castLabs Widevine) with a permanent sidebar layout - Linux and Windows packaging scripts
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
export type LibraryHistoryEntry = {
|
||||
id: string;
|
||||
timestamp: number;
|
||||
kind: "playlist" | "identify" | "convert";
|
||||
title: string;
|
||||
trackCount?: number;
|
||||
artworkUrl?: string;
|
||||
sourceUrl?: string;
|
||||
};
|
||||
|
||||
const KEY = "aurora-spotirip-history-v1";
|
||||
|
||||
export function loadLibraryHistory(): LibraryHistoryEntry[] {
|
||||
if (typeof window === "undefined") return [];
|
||||
try {
|
||||
const parsed = JSON.parse(window.localStorage.getItem(KEY) || "[]");
|
||||
return Array.isArray(parsed) ? parsed : [];
|
||||
} catch {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
export function addLibraryHistory(entry: Omit<LibraryHistoryEntry, "id" | "timestamp">) {
|
||||
const current = loadLibraryHistory();
|
||||
const next: LibraryHistoryEntry[] = [
|
||||
{
|
||||
...entry,
|
||||
id: crypto.randomUUID(),
|
||||
timestamp: Date.now(),
|
||||
},
|
||||
...current,
|
||||
].slice(0, 200);
|
||||
window.localStorage.setItem(KEY, JSON.stringify(next));
|
||||
}
|
||||
|
||||
export function clearLibraryHistory() {
|
||||
window.localStorage.removeItem(KEY);
|
||||
}
|
||||
Reference in New Issue
Block a user