Refresh thumbnails after an upload or file move
This commit is contained in:
21
src/files.rs
21
src/files.rs
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
use std::fs::read_dir;
|
use std::fs::read_dir;
|
||||||
use std::io;
|
use std::io;
|
||||||
@@ -6,6 +7,7 @@ use std::path::{Path, PathBuf};
|
|||||||
use std::sync::Mutex;
|
use std::sync::Mutex;
|
||||||
|
|
||||||
use ::anyhow;
|
use ::anyhow;
|
||||||
|
use actix::{Handler, Message};
|
||||||
use anyhow::{anyhow, Context};
|
use anyhow::{anyhow, Context};
|
||||||
|
|
||||||
use actix_web::web::Data;
|
use actix_web::web::Data;
|
||||||
@@ -16,12 +18,13 @@ use actix_web::{
|
|||||||
use log::{debug, error, info};
|
use log::{debug, error, info};
|
||||||
|
|
||||||
use crate::data::{Claims, FilesRequest, FilterMode, PhotosResponse};
|
use crate::data::{Claims, FilesRequest, FilterMode, PhotosResponse};
|
||||||
use crate::AppState;
|
use crate::{AppState, create_thumbnails};
|
||||||
|
|
||||||
use crate::error::IntoHttpError;
|
use crate::error::IntoHttpError;
|
||||||
use crate::tags::TagDao;
|
use crate::tags::TagDao;
|
||||||
use path_absolutize::*;
|
use path_absolutize::*;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
use crate::video::StreamActor;
|
||||||
|
|
||||||
pub async fn list_photos<TagD: TagDao, FS: FileSystemAccess>(
|
pub async fn list_photos<TagD: TagDao, FS: FileSystemAccess>(
|
||||||
_: Claims,
|
_: Claims,
|
||||||
@@ -211,6 +214,7 @@ pub async fn move_file<FS: FileSystemAccess>(
|
|||||||
{
|
{
|
||||||
Ok(_) => {
|
Ok(_) => {
|
||||||
info!("Moved file: {} -> {}", request.source, request.destination,);
|
info!("Moved file: {} -> {}", request.source, request.destination,);
|
||||||
|
app_state.stream_manager.do_send(RefreshThumbnailsMessage);
|
||||||
|
|
||||||
HttpResponse::Ok().finish()
|
HttpResponse::Ok().finish()
|
||||||
}
|
}
|
||||||
@@ -272,6 +276,21 @@ impl FileSystemAccess for RealFileSystem {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct RefreshThumbnailsMessage;
|
||||||
|
|
||||||
|
impl Message for RefreshThumbnailsMessage {
|
||||||
|
type Result = ();
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Handler<RefreshThumbnailsMessage> for StreamActor {
|
||||||
|
type Result = ();
|
||||||
|
|
||||||
|
fn handle(&mut self, _msg: RefreshThumbnailsMessage, _ctx: &mut Self::Context) -> Self::Result {
|
||||||
|
debug!("Refreshing thumbnails after upload");
|
||||||
|
create_thumbnails()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ use log::{debug, error, info, warn};
|
|||||||
use crate::auth::login;
|
use crate::auth::login;
|
||||||
use crate::data::*;
|
use crate::data::*;
|
||||||
use crate::database::*;
|
use crate::database::*;
|
||||||
use crate::files::{is_image_or_video, is_valid_full_path, move_file, RealFileSystem};
|
use crate::files::{is_image_or_video, is_valid_full_path, move_file, RealFileSystem, RefreshThumbnailsMessage};
|
||||||
use crate::service::ServiceBuilder;
|
use crate::service::ServiceBuilder;
|
||||||
use crate::state::AppState;
|
use crate::state::AppState;
|
||||||
use crate::tags::*;
|
use crate::tags::*;
|
||||||
@@ -185,8 +185,6 @@ async fn upload_image(
|
|||||||
|
|
||||||
let mut file = File::create(new_path).unwrap();
|
let mut file = File::create(new_path).unwrap();
|
||||||
file.write_all(&file_content).unwrap();
|
file.write_all(&file_content).unwrap();
|
||||||
|
|
||||||
return HttpResponse::Ok().finish();
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
error!("Invalid path for upload: {:?}", full_path);
|
error!("Invalid path for upload: {:?}", full_path);
|
||||||
@@ -196,6 +194,8 @@ async fn upload_image(
|
|||||||
return HttpResponse::BadRequest().body("No file body read");
|
return HttpResponse::BadRequest().body("No file body read");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
app_state.stream_manager.do_send(RefreshThumbnailsMessage);
|
||||||
|
|
||||||
HttpResponse::Ok().finish()
|
HttpResponse::Ok().finish()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user