feat: media duplicate purge, part 3 of 3: the SPA (Settings "Media cleanup" card, PurgeDuplicatesDialog, Media Duplicates toolbar button)
This commit is contained in:
1 parent
1a55a39425
commit
2303b12377
26 files changed
+3856
-83
No files matched your search
@@ -0,0 +1,78 @@
|
||||
import { useApi } from '@/composables/useApi'
|
||||
import { bumpMediaRevision } from '@/lib/mediaRevision'
|
||||
|
||||
export interface PurgeSettings {
|
||||
auto_purge_enabled: boolean
|
||||
auto_purge_interval_days: number
|
||||
last_purge_at: string | null
|
||||
last_purge_merged: number
|
||||
last_purge_articles_updated: number
|
||||
enabled_at: string | null
|
||||
next_purge_at: string | null
|
||||
}
|
||||
|
||||
export type PurgeSettingsPatch =
|
||||
| { auto_purge_enabled: boolean }
|
||||
| { auto_purge_interval_days: number }
|
||||
|
||||
export interface PurgePreviewGroup {
|
||||
keep_id: number
|
||||
filename: string
|
||||
url: string
|
||||
used_in: number
|
||||
merged: number
|
||||
}
|
||||
|
||||
export interface PurgePreview {
|
||||
groups: number
|
||||
copies: number
|
||||
articles: number
|
||||
list: PurgePreviewGroup[]
|
||||
more: number
|
||||
fingerprint: string
|
||||
}
|
||||
|
||||
export interface PurgeResult {
|
||||
groups_total: number
|
||||
groups_purged: number
|
||||
merged: number
|
||||
articles_updated: number
|
||||
failed_groups: number
|
||||
}
|
||||
|
||||
const SETTINGS_PATH = '/v1/media/purge-settings'
|
||||
const PREVIEW_PATH = '/v1/media/purge-preview'
|
||||
const PURGE_PATH = '/v1/media/purge'
|
||||
const JSON_HEADERS = { 'Content-Type': 'application/json' }
|
||||
|
||||
export function useMediaPurge() {
|
||||
const { request } = useApi()
|
||||
|
||||
function getSettings() {
|
||||
return request<PurgeSettings>(SETTINGS_PATH)
|
||||
}
|
||||
|
||||
function updateSettings(patch: PurgeSettingsPatch) {
|
||||
return request<PurgeSettings>(SETTINGS_PATH, {
|
||||
method: 'PATCH',
|
||||
headers: JSON_HEADERS,
|
||||
body: JSON.stringify(patch),
|
||||
})
|
||||
}
|
||||
|
||||
function getPreview() {
|
||||
return request<PurgePreview>(PREVIEW_PATH)
|
||||
}
|
||||
|
||||
async function purge(fingerprint: string) {
|
||||
const result = await request<PurgeResult>(PURGE_PATH, {
|
||||
method: 'POST',
|
||||
headers: JSON_HEADERS,
|
||||
body: JSON.stringify({ fingerprint }),
|
||||
})
|
||||
bumpMediaRevision()
|
||||
return result
|
||||
}
|
||||
|
||||
return { getSettings, updateSettings, getPreview, purge }
|
||||
}
|
||||
Reference in new issue
Block a user