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
|
||||
try {
|
||||
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[] = []
|
||||
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) => {
|
||||
const mediaType = getMediaType(f.file_name)
|
||||
return {
|
||||
...f,
|
||||
media_type: mediaType,
|
||||
status: f.status || 'pending',
|
||||
is_indexed: f.total_chunks > 0 || false
|
||||
is_indexed: (f.total_chunks || 0) > 0
|
||||
}
|
||||
})
|
||||
} 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
|
||||
const merged = new Map<string, any>()
|
||||
for (const f of scanFiles) {
|
||||
merged.set(f.file_path, f)
|
||||
}
|
||||
for (const f of regFiles) {
|
||||
// Preserve media_type from scan if not set in regFiles
|
||||
const existing = merged.get(f.file_path)
|
||||
if (existing) {
|
||||
merged.set(f.file_path, {
|
||||
...f,
|
||||
media_type: f.media_type || existing.media_type
|
||||
})
|
||||
} else {
|
||||
merged.set(f.file_path, f)
|
||||
// Get scan results
|
||||
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,
|
||||
is_indexed: false
|
||||
}
|
||||
})
|
||||
|
||||
// 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())
|
||||
|
||||
Reference in New Issue
Block a user