feat: Implement rescan endpoint
This commit is contained in:
parent
fb981d6417
commit
0fa5fd4d04
|
@ -17,3 +17,16 @@ pub async fn list_files(
|
|||
};
|
||||
HtmlTemplate(template)
|
||||
}
|
||||
|
||||
pub async fn rescan_files(
|
||||
base_path: String,
|
||||
State(state): State<Arc<RwLock<Vec<utils::FileEntry>>>>,
|
||||
) -> impl IntoResponse {
|
||||
let mut files = state.write().unwrap(); // Adquire lock
|
||||
|
||||
files.clear();
|
||||
|
||||
files.extend(utils::find_files(&base_path).expect("Error trying to refresh list"));
|
||||
|
||||
"Files rescanned successfuly"
|
||||
}
|
||||
|
|
15
src/main.rs
15
src/main.rs
|
@ -6,7 +6,6 @@ mod utils;
|
|||
use std::sync::{Arc, RwLock};
|
||||
|
||||
use crate::config::read_config;
|
||||
use crate::handlers::list_files;
|
||||
use axum::routing::get;
|
||||
use axum::Router;
|
||||
use tokio::net::TcpListener;
|
||||
|
@ -15,11 +14,21 @@ use tokio::net::TcpListener;
|
|||
async fn main() {
|
||||
let config = read_config().expect("Failed to read config");
|
||||
|
||||
let base_directory = &config.settings.base_directory;
|
||||
let files = Arc::new(RwLock::new(
|
||||
utils::find_files(&config.settings.base_directory).expect("Couldn't open files directory"),
|
||||
utils::find_files(base_directory).expect("Couldn't open files directory"),
|
||||
));
|
||||
|
||||
let app = Router::new().route("/", get(list_files)).with_state(files);
|
||||
let app = Router::new()
|
||||
.route("/", get(handlers::list_files))
|
||||
.route(
|
||||
"/rescan",
|
||||
get({
|
||||
let base_directory = base_directory.clone();
|
||||
move |state| handlers::rescan_files(base_directory, state)
|
||||
}),
|
||||
)
|
||||
.with_state(files);
|
||||
|
||||
let listener = TcpListener::bind("127.0.0.1:3004").await.unwrap();
|
||||
|
||||
|
|
|
@ -93,6 +93,8 @@ fn find_tag_files(dir: &str) -> Result<Vec<TagFile>, Box<dyn std::error::Error>>
|
|||
pub fn find_files(dir: &str) -> Result<Vec<FileEntry>, Box<dyn std::error::Error>> {
|
||||
let mut files = HashMap::new();
|
||||
|
||||
print!("Generating list of files...");
|
||||
|
||||
for tag_file in find_tag_files(dir)? {
|
||||
for (key, value) in tag_file.entries.into_iter() {
|
||||
// Create a copy of the list (append needs it to be mutable) and
|
||||
|
@ -117,5 +119,7 @@ pub fn find_files(dir: &str) -> Result<Vec<FileEntry>, Box<dyn std::error::Error
|
|||
}
|
||||
}
|
||||
|
||||
println!(" OK");
|
||||
|
||||
Ok(files.values().cloned().collect())
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue