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.
|
/// Allowed host/domain name the API can serve.
|
||||||
#[arg(long, env = "UPEND_ALLOW_HOST")]
|
#[arg(long, env = "UPEND_ALLOW_HOST")]
|
||||||
allow_host: Vec<String>,
|
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]
|
#[actix_web::main]
|
||||||
|
@ -465,7 +469,7 @@ async fn main() -> Result<()> {
|
||||||
|
|
||||||
let state = routes::State {
|
let state = routes::State {
|
||||||
upend: upend.clone(),
|
upend: upend.clone(),
|
||||||
store,
|
store: store.clone(),
|
||||||
job_container: job_container.clone(),
|
job_container: job_container.clone(),
|
||||||
preview_store,
|
preview_store,
|
||||||
preview_thread_pool,
|
preview_thread_pool,
|
||||||
|
@ -513,6 +517,9 @@ async fn main() -> Result<()> {
|
||||||
|
|
||||||
if !args.no_initial_update && (!open_result.new || args.rescan_mode.is_some()) {
|
if !args.no_initial_update && (!open_result.new || args.rescan_mode.is_some()) {
|
||||||
info!("Running update...");
|
info!("Running update...");
|
||||||
|
let upend = upend.clone();
|
||||||
|
let store = store.clone();
|
||||||
|
let job_container = job_container.clone();
|
||||||
block_background::<_, _, anyhow::Error>(move || {
|
block_background::<_, _, anyhow::Error>(move || {
|
||||||
let connection: upend_db::UpEndConnection = upend.connection()?;
|
let connection: upend_db::UpEndConnection = upend.connection()?;
|
||||||
|
|
||||||
|
@ -529,7 +536,7 @@ async fn main() -> Result<()> {
|
||||||
.unwrap_or_default()
|
.unwrap_or_default()
|
||||||
};
|
};
|
||||||
|
|
||||||
let _ = state.store.update(
|
let _ = store.update(
|
||||||
&upend,
|
&upend,
|
||||||
job_container.clone(),
|
job_container.clone(),
|
||||||
upend_db::stores::UpdateOptions {
|
upend_db::stores::UpdateOptions {
|
||||||
|
@ -540,7 +547,7 @@ async fn main() -> Result<()> {
|
||||||
);
|
);
|
||||||
let _ = extractors::extract_all(
|
let _ = extractors::extract_all(
|
||||||
upend,
|
upend,
|
||||||
state.store,
|
store,
|
||||||
job_container,
|
job_container,
|
||||||
OperationContext::default(),
|
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")]
|
#[cfg(feature = "desktop")]
|
||||||
{
|
{
|
||||||
if browser_enabled {
|
if browser_enabled {
|
||||||
|
|
Loading…
Reference in a new issue