fix: FilesView filter logic - remove 'registered_scan' status
Bug: Scan files were getting status 'registered_scan' which doesn't match any filter value (unregistered/pending/processing/completed/indexed/unindexed). When toggling filters on/off, files would disappear because their status didn't match any valid filter. Fix: - Removed 'registered_scan' status entirely - Fetch regFiles FIRST to get real statuses - Scan files default to 'unregistered' status - regFiles overlay with actual status (pending/processing/completed) - Increased regFiles page_size to 200 for larger libraries
This commit is contained in:
@@ -262,50 +262,53 @@ async function fetchFiles() {
|
|||||||
loading.value = true
|
loading.value = true
|
||||||
try {
|
try {
|
||||||
const config = getCurrentConfig()
|
const config = getCurrentConfig()
|
||||||
const scanResp = await httpFetch<any>(`${config.api_base_url}/api/v1/files/scan`)
|
|
||||||
const scanFiles: any[] = (scanResp?.files || []).map((f: any) => {
|
|
||||||
const mediaType = getMediaType(f.file_name)
|
|
||||||
return {
|
|
||||||
...f,
|
|
||||||
media_type: mediaType,
|
|
||||||
status: f.is_registered ? 'registered_scan' : 'unregistered',
|
|
||||||
is_indexed: false
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
// Get registered files with real processing status
|
// Get registered files with real processing status FIRST
|
||||||
let regFiles: any[] = []
|
let regFiles: any[] = []
|
||||||
try {
|
try {
|
||||||
const regResp = await httpFetch<any>(`${config.api_base_url}/api/v1/files?page=1&page_size=100`)
|
const regResp = await httpFetch<any>(`${config.api_base_url}/api/v1/files?page=1&page_size=200`)
|
||||||
regFiles = (regResp?.files || regResp?.data || []).map((f: any) => {
|
regFiles = (regResp?.files || regResp?.data || []).map((f: any) => {
|
||||||
const mediaType = getMediaType(f.file_name)
|
const mediaType = getMediaType(f.file_name)
|
||||||
return {
|
return {
|
||||||
...f,
|
...f,
|
||||||
media_type: mediaType,
|
media_type: mediaType,
|
||||||
status: f.status || 'pending',
|
status: f.status || 'pending',
|
||||||
is_indexed: f.total_chunks > 0 || false
|
is_indexed: (f.total_chunks || 0) > 0
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
} catch {
|
} catch {
|
||||||
// Registered files API may not be available; use scan data only
|
// Registered files API may not be available
|
||||||
}
|
}
|
||||||
|
|
||||||
// Merge: scan results first, then overlay with registered statuses
|
// Get scan results
|
||||||
const merged = new Map<string, any>()
|
const scanResp = await httpFetch<any>(`${config.api_base_url}/api/v1/files/scan`)
|
||||||
for (const f of scanFiles) {
|
const scanFiles: any[] = (scanResp?.files || []).map((f: any) => {
|
||||||
merged.set(f.file_path, f)
|
const mediaType = getMediaType(f.file_name)
|
||||||
}
|
return {
|
||||||
for (const f of regFiles) {
|
...f,
|
||||||
// Preserve media_type from scan if not set in regFiles
|
media_type: mediaType,
|
||||||
const existing = merged.get(f.file_path)
|
is_indexed: false
|
||||||
if (existing) {
|
|
||||||
merged.set(f.file_path, {
|
|
||||||
...f,
|
|
||||||
media_type: f.media_type || existing.media_type
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
merged.set(f.file_path, f)
|
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// Build a set of registered file paths for quick lookup
|
||||||
|
const registeredPaths = new Set(regFiles.map(f => f.file_path))
|
||||||
|
|
||||||
|
// Merge: start with scan results, override with registered data where available
|
||||||
|
const merged = new Map<string, any>()
|
||||||
|
|
||||||
|
// First pass: add all scan results
|
||||||
|
for (const f of scanFiles) {
|
||||||
|
const isRegistered = registeredPaths.has(f.file_path)
|
||||||
|
merged.set(f.file_path, {
|
||||||
|
...f,
|
||||||
|
status: isRegistered ? 'pending' : 'unregistered'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Second pass: override with real registered data
|
||||||
|
for (const f of regFiles) {
|
||||||
|
merged.set(f.file_path, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
files.value = Array.from(merged.values())
|
files.value = Array.from(merged.values())
|
||||||
|
|||||||
Reference in New Issue
Block a user