feat(backend): add periodic rescans (#82)
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
parent
1bb2c3afd9
commit
94464c6cd8
1 changed files with 43 additions and 3 deletions
|
@ -217,6 +217,10 @@ struct ServeArgs {
|
|||
/// Allowed host/domain name the API can serve.
|
||||
#[arg(long, env = "UPEND_ALLOW_HOST")]
|
||||
allow_host: Vec<String>,
|
||||
|
||||
/// Periodic update interval (in minutes).
|
||||
#[arg(long, env = "UPEND_UPDATE_INTERVAL", default_value_t = 720)]
|
||||
update_interval: i64,
|
||||
}
|
||||
|
||||
#[actix_web::main]
|
||||
|
@ -465,7 +469,7 @@ async fn main() -> Result<()> {
|
|||
|
||||
let state = routes::State {
|
||||
upend: upend.clone(),
|
||||
store,
|
||||
store: store.clone(),
|
||||
job_container: job_container.clone(),
|
||||
preview_store,
|
||||
preview_thread_pool,
|
||||
|
@ -513,6 +517,9 @@ async fn main() -> Result<()> {
|
|||
|
||||
if !args.no_initial_update && (!open_result.new || args.rescan_mode.is_some()) {
|
||||
info!("Running update...");
|
||||
let upend = upend.clone();
|
||||
let store = store.clone();
|
||||
let job_container = job_container.clone();
|
||||
block_background::<_, _, anyhow::Error>(move || {
|
||||
let connection: upend_db::UpEndConnection = upend.connection()?;
|
||||
|
||||
|
@ -529,7 +536,7 @@ async fn main() -> Result<()> {
|
|||
.unwrap_or_default()
|
||||
};
|
||||
|
||||
let _ = state.store.update(
|
||||
let _ = store.update(
|
||||
&upend,
|
||||
job_container.clone(),
|
||||
upend_db::stores::UpdateOptions {
|
||||
|
@ -540,7 +547,7 @@ async fn main() -> Result<()> {
|
|||
);
|
||||
let _ = extractors::extract_all(
|
||||
upend,
|
||||
state.store,
|
||||
store,
|
||||
job_container,
|
||||
OperationContext::default(),
|
||||
);
|
||||
|
@ -548,6 +555,39 @@ async fn main() -> Result<()> {
|
|||
});
|
||||
}
|
||||
|
||||
if args.update_interval > 0 {
|
||||
let _thread = std::thread::spawn(move || {
|
||||
loop {
|
||||
debug!("Waiting for {} minutes before next update...", args.update_interval);
|
||||
std::thread::sleep(std::time::Duration::from_secs(60 * args.update_interval as u64));
|
||||
let upend = upend.clone();
|
||||
let store = store.clone();
|
||||
let job_container = job_container.clone();
|
||||
let _ = block_background::<_, _, anyhow::Error>(move || {
|
||||
info!("Running periodic vault update.");
|
||||
let connection = upend.connection()?;
|
||||
let tree_mode = connection.get_vault_options()?.blob_mode.unwrap_or_default();
|
||||
let _ = store.update(
|
||||
&upend,
|
||||
job_container.clone(),
|
||||
upend_db::stores::UpdateOptions {
|
||||
initial: false,
|
||||
tree_mode,
|
||||
},
|
||||
OperationContext::default(),
|
||||
);
|
||||
let _ = extractors::extract_all(
|
||||
upend,
|
||||
store,
|
||||
job_container,
|
||||
OperationContext::default(),
|
||||
);
|
||||
Ok(())
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
#[cfg(feature = "desktop")]
|
||||
{
|
||||
if browser_enabled {
|
||||
|
|
Loading…
Reference in a new issue