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 trackList = document.getElementById('trackList');
|
||||||
const sendBtn = document.getElementById('sendBtn');
|
const sendBtn = document.getElementById('sendBtn');
|
||||||
const cleanupToggle = document.getElementById('cleanupToggle');
|
const cleanupToggle = document.getElementById('cleanupToggle');
|
||||||
|
const updateLibraryBtn = document.getElementById('updateLibraryBtn');
|
||||||
|
|
||||||
let selectedAlbum = null;
|
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);
|
searchBtn.addEventListener('click', searchSpotify);
|
||||||
queryInput.addEventListener('keydown', (event) => {
|
queryInput.addEventListener('keydown', (event) => {
|
||||||
if (event.key === 'Enter') {
|
if (event.key === 'Enter') {
|
||||||
|
|
@ -228,3 +246,4 @@ queryInput.addEventListener('keydown', (event) => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
sendBtn.addEventListener('click', sendToLidarr);
|
sendBtn.addEventListener('click', sendToLidarr);
|
||||||
|
updateLibraryBtn.addEventListener('click', updateLibrary);
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,9 @@
|
||||||
<input type="checkbox" id="cleanupToggle" />
|
<input type="checkbox" id="cleanupToggle" />
|
||||||
<span>Ueberfluessige Dateien nach Download loeschen</span>
|
<span>Ueberfluessige Dateien nach Download loeschen</span>
|
||||||
</label>
|
</label>
|
||||||
|
<div style="margin-top: 0.8rem;">
|
||||||
|
<button id="updateLibraryBtn" type="button">Lidarr Bibliothek updaten</button>
|
||||||
|
</div>
|
||||||
<p class="hint">
|
<p class="hint">
|
||||||
Wenn nur einzelne Songs gewaehlt sind, versucht die App unnoetige Track-Dateien in Lidarr zu entfernen.
|
Wenn nur einzelne Songs gewaehlt sind, versucht die App unnoetige Track-Dateien in Lidarr zu entfernen.
|
||||||
</p>
|
</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) {
|
async function cleanupUnselectedTrackFiles(albumId, selectedTrackIds) {
|
||||||
const allFiles = await fetchTrackFiles(albumId);
|
const allFiles = await fetchTrackFiles(albumId);
|
||||||
if (!Array.isArray(allFiles) || allFiles.length === 0) {
|
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) => {
|
app.get('*', (_req, res) => {
|
||||||
res.sendFile(path.join(__dirname, 'public', 'index.html'));
|
res.sendFile(path.join(__dirname, 'public', 'index.html'));
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue