feat: server-side romaji overrides (shared list); preload ExoPlayer from SharedPreferences on cold start
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
b924f01b2a
commit
36a0b38eca
9 files changed
+116
-14
No files matched your search
@@ -1,6 +1,7 @@
|
||||
const CONFIG = {
|
||||
port: process.env.PORT || 3700,
|
||||
musicPath: process.env.MUSIC_PATH || '/music',
|
||||
dataPath: process.env.DATA_PATH || '/data',
|
||||
ytdlpBin: process.env.YTDLP_BIN || 'yt-dlp',
|
||||
audioFmt: process.env.AUDIO_FMT || 'mp3',
|
||||
audioQuality: process.env.AUDIO_QUALITY || '0',
|
||||
|
||||
@@ -188,6 +188,44 @@ app.delete('/api/romaji-index', (req, res) => {
|
||||
res.json({ ok: true });
|
||||
});
|
||||
|
||||
// ─── ROMAJI OVERRIDES (server-side, shared across all clients) ───────────────
|
||||
const _overridesFile = path.join(CONFIG.dataPath, 'romaji-overrides.json');
|
||||
|
||||
function _loadOverrides() {
|
||||
try { return JSON.parse(fs.readFileSync(_overridesFile, 'utf8')); } catch { return {}; }
|
||||
}
|
||||
function _saveOverrides(map) {
|
||||
try {
|
||||
fs.mkdirSync(CONFIG.dataPath, { recursive: true });
|
||||
fs.writeFileSync(_overridesFile, JSON.stringify(map, null, 2), 'utf8');
|
||||
} catch (e) { console.error('Failed to save romaji overrides:', e.message); }
|
||||
}
|
||||
|
||||
// GET /api/romaji-overrides — returns the full kanji→romaji map
|
||||
app.get('/api/romaji-overrides', (_req, res) => res.json(_loadOverrides()));
|
||||
|
||||
// POST /api/romaji-overrides — upsert { kanji, romaji }
|
||||
app.post('/api/romaji-overrides', (req, res) => {
|
||||
const { kanji, romaji } = req.body;
|
||||
if (!kanji?.trim()) return res.status(400).json({ error: 'kanji required' });
|
||||
const map = _loadOverrides();
|
||||
if (romaji?.trim()) map[kanji.trim()] = romaji.trim();
|
||||
else delete map[kanji.trim()];
|
||||
_saveOverrides(map);
|
||||
clearRomajiCache(); // rebuild romaji index so display picks up the change
|
||||
res.json({ ok: true });
|
||||
});
|
||||
|
||||
// DELETE /api/romaji-overrides/:kanji — remove one entry
|
||||
app.delete('/api/romaji-overrides/:kanji', (req, res) => {
|
||||
const kanji = decodeURIComponent(req.params.kanji);
|
||||
const map = _loadOverrides();
|
||||
delete map[kanji];
|
||||
_saveOverrides(map);
|
||||
clearRomajiCache();
|
||||
res.json({ ok: true });
|
||||
});
|
||||
|
||||
// POST /api/romaji-convert — convert an array of strings to romaji
|
||||
app.post('/api/romaji-convert', (req, res) => {
|
||||
const { texts } = req.body;
|
||||
|
||||
Reference in new issue
Block a user