Use isolated document extraction in shared indexing and desktop reconciliation
This commit is contained in:
1 parent
844fdbf89f
commit
ab31870260
8 files changed
+378
-23
No files matched your search
@@ -45,6 +45,7 @@ struct AppState {
|
||||
semantic: Arc<SemanticState>,
|
||||
watching: Arc<watching::WatchService>,
|
||||
index_options: searchi_core::IndexOptions,
|
||||
document_worker: PathBuf,
|
||||
previews: Arc<media_preview::PreviewRegistry>,
|
||||
}
|
||||
|
||||
@@ -446,6 +447,7 @@ async fn index_folder(root: String, state: State<'_, AppState>) -> Result<IndexR
|
||||
let lexical = state.lexical.clone();
|
||||
let watching = state.watching.clone();
|
||||
let options = state.index_options.clone();
|
||||
let document_worker = state.document_worker.clone();
|
||||
tauri::async_runtime::spawn_blocking(move || {
|
||||
let _guard = guard;
|
||||
settings
|
||||
@@ -454,6 +456,7 @@ async fn index_folder(root: String, state: State<'_, AppState>) -> Result<IndexR
|
||||
.add_root(std::path::Path::new(&root))?;
|
||||
watching.add_root(std::fs::canonicalize(&root).map_err(|error| error.to_string())?)?;
|
||||
let mut index = SearchIndex::open(database).map_err(|error| error.to_string())?;
|
||||
index.set_document_worker(document_worker);
|
||||
let report = index
|
||||
.index_folder_with_options(root, &options)
|
||||
.map_err(|error| error.to_string())?;
|
||||
@@ -476,6 +479,7 @@ fn start_folder_watching(
|
||||
indexing: Arc<AtomicBool>,
|
||||
roots: Vec<PathBuf>,
|
||||
options: searchi_core::IndexOptions,
|
||||
document_worker: PathBuf,
|
||||
) -> Result<watching::WatchService, String> {
|
||||
watching::WatchService::start(roots, options.excluded_paths.clone(), move |request| {
|
||||
if indexing
|
||||
@@ -488,6 +492,7 @@ fn start_folder_watching(
|
||||
let _ = app.emit("folder-indexing-changed", ());
|
||||
let result = (|| -> Result<bool, String> {
|
||||
let mut index = SearchIndex::open(&database).map_err(|error| error.to_string())?;
|
||||
index.set_document_worker(document_worker.clone());
|
||||
let report = match request.paths {
|
||||
Some(paths) => index.index_paths_cancellable(
|
||||
&request.root,
|
||||
@@ -566,6 +571,14 @@ fn main() {
|
||||
)?;
|
||||
std::fs::create_dir_all(&directory)?;
|
||||
let database = directory.join("searchi.sqlite");
|
||||
// Bundle resources live outside the executable directory on macOS.
|
||||
let document_worker = std::env::var_os("SEARCHI_EXTRACT_WORKER")
|
||||
.map(PathBuf::from)
|
||||
.unwrap_or(app.path().resource_dir()?.join(if cfg!(windows) {
|
||||
"searchi-extract-worker.exe"
|
||||
} else {
|
||||
"searchi-extract-worker"
|
||||
}));
|
||||
let lexical = Arc::new(Mutex::new(SearchIndex::open(&database)?));
|
||||
let warm_database = database.clone();
|
||||
let warm_target = lexical.clone();
|
||||
@@ -632,7 +645,7 @@ fn main() {
|
||||
let indexing = Arc::new(AtomicBool::new(false));
|
||||
let watching = Arc::new(start_folder_watching(
|
||||
app.handle().clone(), database.clone(), lexical.clone(), indexing.clone(),
|
||||
settings.value.roots.clone(), index_options.clone(),
|
||||
settings.value.roots.clone(), index_options.clone(), document_worker.clone(),
|
||||
).map_err(std::io::Error::other)?);
|
||||
let semantic = Arc::new(
|
||||
SemanticState::new(model_directory, worker, media_tools)
|
||||
@@ -666,6 +679,7 @@ fn main() {
|
||||
semantic,
|
||||
watching,
|
||||
index_options,
|
||||
document_worker,
|
||||
previews: previews.clone(),
|
||||
});
|
||||
Ok(())
|
||||
|
||||
Reference in new issue
Block a user