// RangerHQ Tuner — Quick Stations preference helpers (v0.5.3). // // The user picks which SomaFM channels appear in the Quick Stations chip // row on the New Tab Page. Stored in chrome.storage.local under // `tuner.quickStations` as an array of SomaFM short ids // (e.g. ['groovesalad', 'defcon', ...]). If the key is missing, the // DEFAULT_QUICK_IDS below are used — a tidy 8 that wraps to 2 rows on // most viewports. // // Cross-surface sync: NewTab's `chrome.storage.onChanged` listener picks // up changes so toggling a checkbox in Options re-renders the chip row // instantly without a reload. export const QUICK_STATIONS_KEY = 'tuner.quickStations'; // 8 curated defaults — the same set Tuner v0.4.0 shipped with. Chosen // for genre breadth (chill / ambient / indie / lounge / space / vocal / // ambient / electronic) and to fit a tidy 2-row chip layout. export const DEFAULT_QUICK_IDS = Object.freeze([ 'groovesalad', 'dronezone', 'indiepop', 'secretagent', 'spacestation', 'lush', 'deepspaceone', 'fluid', ]); function storage() { if (typeof chrome === 'undefined') return null; if (!chrome.storage || !chrome.storage.local) return null; return chrome.storage.local; } /** Read the user's chosen quick-station list, falling back to defaults. */ export async function getQuickStations() { const s = storage(); if (!s) return [...DEFAULT_QUICK_IDS]; const o = await s.get(QUICK_STATIONS_KEY); const v = o[QUICK_STATIONS_KEY]; return Array.isArray(v) ? v.filter(x => typeof x === 'string') : [...DEFAULT_QUICK_IDS]; } /** Persist the user's chosen quick-station list. Empty array = no quick chips. */ export async function setQuickStations(ids) { const s = storage(); if (!s) return; const arr = Array.isArray(ids) ? ids.filter(x => typeof x === 'string') : []; await s.set({ [QUICK_STATIONS_KEY]: arr }); } /** Wipe the preference so the default-8 is used again. */ export async function resetQuickStations() { const s = storage(); if (!s) return; await s.remove(QUICK_STATIONS_KEY); }