diff --git a/frontend/src/services/api.js b/frontend/src/services/api.js index af81987..34f60ea 100644 --- a/frontend/src/services/api.js +++ b/frontend/src/services/api.js @@ -62,6 +62,8 @@ export const settingsApi = { regenerateApiKey: () => api.post('/settings/api-key/regenerate'), getLogs: (params = {}) => api.get('/settings/logs', { params }), refreshStorageStats: () => api.post('/settings/storage-stats/refresh'), + getLibraryValidation: () => api.get('/settings/library-validation'), + runLibraryValidation: () => api.post('/settings/library-validation/run'), } // Platforms API diff --git a/frontend/src/views/Settings.vue b/frontend/src/views/Settings.vue index 359e35b..dcd1932 100644 --- a/frontend/src/views/Settings.vue +++ b/frontend/src/views/Settings.vue @@ -58,6 +58,16 @@ persistent-hint /> + + + + @@ -168,6 +178,152 @@ + + + + mdi-shield-search + Library Validation + + + +

+ Walks the downloads tree and reports files that fail magic-byte + validation — same checks the live download path uses, but applied to + your existing library to surface silently-truncated files. Reports + only; pre-existing files aren't moved. +

+ + + No scan has been run yet. + + + + mdi-progress-clock + Scan queued — refreshing report automatically. + + + +
+ + + + + mdi-refresh + Refresh + + + mdi-play + Run scan + + +
+ @@ -438,10 +594,10 @@