Add Lidarr library update command and UI trigger
This commit is contained in:
parent
abf9d61d72
commit
712d29921d
3 changed files with 57 additions and 0 deletions
|
|
@ -9,6 +9,7 @@ const dialogArtist = document.getElementById('dialogArtist');
|
|||
const trackList = document.getElementById('trackList');
|
||||
const sendBtn = document.getElementById('sendBtn');
|
||||
const cleanupToggle = document.getElementById('cleanupToggle');
|
||||
const updateLibraryBtn = document.getElementById('updateLibraryBtn');
|
||||
|
||||
let selectedAlbum = null;
|
||||
|
||||
|
|
@ -221,6 +222,23 @@ async function sendToLidarr(event) {
|
|||
}
|
||||
}
|
||||
|
||||
async function updateLibrary() {
|
||||
setStatus('Starte Lidarr Bibliothek-Update...');
|
||||
updateLibraryBtn.disabled = true;
|
||||
|
||||
try {
|
||||
const data = await fetchJson('/api/lidarr/update-library', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' }
|
||||
});
|
||||
setStatus(`Bibliothek-Update gestartet (${data.commandNames.join(', ')}).`);
|
||||
} catch (err) {
|
||||
setStatus(`Fehler beim Bibliothek-Update: ${err.message}`, true);
|
||||
} finally {
|
||||
updateLibraryBtn.disabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
searchBtn.addEventListener('click', searchSpotify);
|
||||
queryInput.addEventListener('keydown', (event) => {
|
||||
if (event.key === 'Enter') {
|
||||
|
|
@ -228,3 +246,4 @@ queryInput.addEventListener('keydown', (event) => {
|
|||
}
|
||||
});
|
||||
sendBtn.addEventListener('click', sendToLidarr);
|
||||
updateLibraryBtn.addEventListener('click', updateLibrary);
|
||||
|
|
|
|||
|
|
@ -22,6 +22,9 @@
|
|||
<input type="checkbox" id="cleanupToggle" />
|
||||
<span>Ueberfluessige Dateien nach Download loeschen</span>
|
||||
</label>
|
||||
<div style="margin-top: 0.8rem;">
|
||||
<button id="updateLibraryBtn" type="button">Lidarr Bibliothek updaten</button>
|
||||
</div>
|
||||
<p class="hint">
|
||||
Wenn nur einzelne Songs gewaehlt sind, versucht die App unnoetige Track-Dateien in Lidarr zu entfernen.
|
||||
</p>
|
||||
|
|
|
|||
35
server.js
35
server.js
|
|
@ -176,6 +176,30 @@ async function triggerAlbumSearch(albumId) {
|
|||
});
|
||||
}
|
||||
|
||||
async function triggerLibraryUpdate() {
|
||||
const started = [];
|
||||
|
||||
try {
|
||||
await lidarrRequest('post', '/api/v1/command', { name: 'RescanFolders' });
|
||||
started.push('RescanFolders');
|
||||
} catch (err) {
|
||||
console.warn('RescanFolders konnte nicht gestartet werden:', err.message);
|
||||
}
|
||||
|
||||
try {
|
||||
await lidarrRequest('post', '/api/v1/command', { name: 'RefreshArtist' });
|
||||
started.push('RefreshArtist');
|
||||
} catch (err) {
|
||||
console.warn('RefreshArtist konnte nicht gestartet werden:', err.message);
|
||||
}
|
||||
|
||||
if (started.length === 0) {
|
||||
throw new Error('Kein Bibliothek-Update-Kommando konnte in Lidarr gestartet werden.');
|
||||
}
|
||||
|
||||
return started;
|
||||
}
|
||||
|
||||
async function cleanupUnselectedTrackFiles(albumId, selectedTrackIds) {
|
||||
const allFiles = await fetchTrackFiles(albumId);
|
||||
if (!Array.isArray(allFiles) || allFiles.length === 0) {
|
||||
|
|
@ -416,6 +440,17 @@ app.post('/api/lidarr/send-album', async (req, res) => {
|
|||
}
|
||||
});
|
||||
|
||||
app.post('/api/lidarr/update-library', async (_req, res) => {
|
||||
try {
|
||||
const commandNames = await triggerLibraryUpdate();
|
||||
res.json({ success: true, commandNames });
|
||||
} catch (err) {
|
||||
const status = err.response?.status || 500;
|
||||
const details = err.response?.data || err.message;
|
||||
res.status(status).json({ error: typeof details === 'string' ? details : JSON.stringify(details) });
|
||||
}
|
||||
});
|
||||
|
||||
app.get('*', (_req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'public', 'index.html'));
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue