sync every hour the latest version of packages with aur
display current version and if outdated in ui display correct time in output log
This commit is contained in:
55
backend/src/scheduler/aur_version_update.rs
Normal file
55
backend/src/scheduler/aur_version_update.rs
Normal file
@@ -0,0 +1,55 @@
|
||||
use crate::db::packages;
|
||||
use crate::db::prelude::Packages;
|
||||
use anyhow::anyhow;
|
||||
use aur_rs::{Package, Request};
|
||||
use sea_orm::ActiveValue::Set;
|
||||
use sea_orm::{ActiveModelTrait, DatabaseConnection, EntityTrait};
|
||||
use std::time::Duration;
|
||||
use tokio::time::sleep;
|
||||
|
||||
pub fn start_aur_version_checking(db: DatabaseConnection) {
|
||||
tokio::spawn(async move {
|
||||
sleep(Duration::from_secs(10)).await;
|
||||
loop {
|
||||
println!("performing aur version checks");
|
||||
match aur_check_versions(db.clone()).await {
|
||||
Ok(_) => {}
|
||||
Err(e) => {
|
||||
println!("Failed to perform aur version check: {e}")
|
||||
}
|
||||
}
|
||||
sleep(Duration::from_secs(3600)).await;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async fn aur_check_versions(db: DatabaseConnection) -> anyhow::Result<()> {
|
||||
let packages = Packages::find().all(&db).await?;
|
||||
let names: Vec<&str> = packages.iter().map(|x| x.name.as_str()).collect();
|
||||
|
||||
let request = Request::default();
|
||||
let response = request.search_multi_info_by_names(names.as_slice()).await;
|
||||
|
||||
let results: Vec<Package> = response
|
||||
.map_err(|_| anyhow!("couldn't download version update"))?
|
||||
.results;
|
||||
|
||||
if results.len() != packages.len() {
|
||||
println!("Package nr in repo and aur api response has different size");
|
||||
}
|
||||
|
||||
for package in packages {
|
||||
match results.iter().find(|x1| x1.name == package.name) {
|
||||
None => {
|
||||
println!("Couldn't find {} in AUR response", package.name)
|
||||
}
|
||||
Some(result) => {
|
||||
let mut package: packages::ActiveModel = package.into();
|
||||
|
||||
package.latest_aur_version = Set(Some(result.version.clone()));
|
||||
let _ = package.update(&db).await;
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
1
backend/src/scheduler/mod.rs
Normal file
1
backend/src/scheduler/mod.rs
Normal file
@@ -0,0 +1 @@
|
||||
pub mod aur_version_update;
|
Reference in New Issue
Block a user