Something went wrong. Try again.
A decentralized music tracking and discovery platform built on AT Protocol 🎵 rocksky.app
spotify atproto lastfm musicbrainz scrobbling listenbrainz
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import fs from "fs";import os from "os";import path from "path";import type { QueueItem } from "./player";
export interface SessionState { queue: QueueItem[]; index: number; positionMs: number;}
const sessionPath = () => path.join(os.homedir(), ".rocksky", "tui-session.json");
/** Load the persisted playback session (queue + position), or null. */export function loadSession(): SessionState | null { try { const data = JSON.parse(fs.readFileSync(sessionPath(), "utf-8")); if (!Array.isArray(data.queue) || data.queue.length === 0) return null; return { queue: data.queue, index: typeof data.index === "number" ? data.index : 0, positionMs: typeof data.positionMs === "number" ? data.positionMs : 0, }; } catch { return null; }}
export function saveSession(state: SessionState | null): void { try { if (!state) return; fs.mkdirSync(path.dirname(sessionPath()), { recursive: true }); fs.writeFileSync(sessionPath(), JSON.stringify(state)); } catch { // best-effort }}
export function clearSession(): void { try { fs.rmSync(sessionPath(), { force: true }); } catch { // ignore }}