mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-25 00:36:31 +02:00
feat: enhance folder indexing with metadata management and improve folder structure handling in UI components
This commit is contained in:
parent
60eb1e4060
commit
ae98f64760
6 changed files with 35 additions and 3 deletions
|
|
@ -1276,6 +1276,13 @@ async def index_uploaded_files(
|
|||
)
|
||||
await session.flush()
|
||||
|
||||
root_folder = await session.get(Folder, root_folder_id)
|
||||
if root_folder:
|
||||
meta = dict(root_folder.folder_metadata or {})
|
||||
meta["indexing_in_progress"] = True
|
||||
root_folder.folder_metadata = meta
|
||||
await session.commit()
|
||||
|
||||
page_limit_service = PageLimitService(session)
|
||||
pipeline = IndexingPipelineService(session)
|
||||
llm = await get_user_long_context_llm(session, user_id, search_space_id)
|
||||
|
|
@ -1454,3 +1461,14 @@ async def index_uploaded_files(
|
|||
log_entry, f"Error: {e}", "Unexpected error", {}
|
||||
)
|
||||
return 0, 0, str(e)
|
||||
|
||||
finally:
|
||||
try:
|
||||
root_folder = await session.get(Folder, root_folder_id)
|
||||
if root_folder:
|
||||
meta = dict(root_folder.folder_metadata or {})
|
||||
meta.pop("indexing_in_progress", None)
|
||||
root_folder.folder_metadata = meta
|
||||
await session.commit()
|
||||
except Exception:
|
||||
pass
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ export interface FolderDisplay {
|
|||
position: string;
|
||||
parentId: number | null;
|
||||
searchSpaceId: number;
|
||||
metadata?: Record<string, unknown> | null;
|
||||
}
|
||||
|
||||
interface FolderNodeProps {
|
||||
|
|
|
|||
|
|
@ -168,6 +168,12 @@ export function FolderTreeView({
|
|||
return states;
|
||||
}, [folders, docsByFolder, foldersByParent, mentionedDocIds]);
|
||||
|
||||
const folderMap = useMemo(() => {
|
||||
const map: Record<number, FolderDisplay> = {};
|
||||
for (const f of folders) map[f.id] = f;
|
||||
return map;
|
||||
}, [folders]);
|
||||
|
||||
const folderProcessingStates = useMemo(() => {
|
||||
const states: Record<number, "idle" | "processing" | "failed"> = {};
|
||||
|
||||
|
|
@ -178,6 +184,11 @@ export function FolderTreeView({
|
|||
);
|
||||
let hasFailed = directDocs.some((d) => d.status?.state === "failed");
|
||||
|
||||
const folder = folderMap[folderId];
|
||||
if (folder?.metadata?.indexing_in_progress) {
|
||||
hasProcessing = true;
|
||||
}
|
||||
|
||||
for (const child of foldersByParent[folderId] ?? []) {
|
||||
const sub = compute(child.id);
|
||||
hasProcessing = hasProcessing || sub.hasProcessing;
|
||||
|
|
@ -195,7 +206,7 @@ export function FolderTreeView({
|
|||
if (states[f.id] === undefined) compute(f.id);
|
||||
}
|
||||
return states;
|
||||
}, [folders, docsByFolder, foldersByParent]);
|
||||
}, [folders, docsByFolder, foldersByParent, folderMap]);
|
||||
|
||||
function renderLevel(parentId: number | null, depth: number): React.ReactNode[] {
|
||||
const key = parentId ?? "root";
|
||||
|
|
|
|||
|
|
@ -194,6 +194,7 @@ export function DocumentsSidebar({
|
|||
position: f.position,
|
||||
parentId: f.parentId ?? null,
|
||||
searchSpaceId: f.searchSpaceId,
|
||||
metadata: f.metadata as Record<string, unknown> | null | undefined,
|
||||
})),
|
||||
[zeroFolders]
|
||||
);
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ export function FolderWatchDialog({
|
|||
const folderPath = await api.selectFolder();
|
||||
if (!folderPath) return;
|
||||
|
||||
const folderName = folderPath.split("/").pop() || folderPath.split("\\").pop() || folderPath;
|
||||
const folderName = folderPath.split(/[/\\]/).pop() || folderPath;
|
||||
setSelectedFolder({ path: folderPath, name: folderName });
|
||||
}, []);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import { number, string, table } from "@rocicorp/zero";
|
||||
import { json, number, string, table } from "@rocicorp/zero";
|
||||
|
||||
export const folderTable = table("folders")
|
||||
.columns({
|
||||
|
|
@ -10,5 +10,6 @@ export const folderTable = table("folders")
|
|||
createdById: string().optional().from("created_by_id"),
|
||||
createdAt: number().from("created_at"),
|
||||
updatedAt: number().from("updated_at"),
|
||||
metadata: json<Record<string, unknown>>().optional().from("metadata"),
|
||||
})
|
||||
.primaryKey("id");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue