68 řádky
1.6 KiB
Rust
68 řádky
1.6 KiB
Rust
use anyhow::Error;
|
|
use glob::glob;
|
|
use std::collections::HashSet;
|
|
use tokio::fs::remove_file;
|
|
|
|
use crate::{
|
|
ctx::Ctx,
|
|
db::models::{Banner, Board, Post},
|
|
};
|
|
|
|
pub async fn s_cleanup_files(ctx: &Ctx) -> Result<(), Error> {
|
|
let mut keep = HashSet::new();
|
|
let mut keep_thumbs = HashSet::new();
|
|
|
|
let banners = Banner::read_all(ctx).await?;
|
|
|
|
for banner in banners {
|
|
keep.insert(format!(
|
|
"{}.{}",
|
|
banner.banner.timestamp, banner.banner.format
|
|
));
|
|
}
|
|
|
|
let boards = Board::read_all(ctx).await?;
|
|
|
|
for board in boards {
|
|
let posts = Post::read_all(ctx, board.id.clone()).await?;
|
|
|
|
for post in posts {
|
|
for file in post.files.0 {
|
|
keep.insert(format!("{}.{}", file.timestamp, file.format));
|
|
|
|
if let Some(thumb_format) = file.thumb_format {
|
|
keep_thumbs.insert(format!("{}.{}", file.timestamp, thumb_format));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for file in glob("./uploads/*.*")? {
|
|
let file = file?;
|
|
let file_name = file.file_name();
|
|
|
|
if let Some(file_name) = file_name {
|
|
let check = file_name.to_string_lossy().to_string();
|
|
|
|
if !keep.contains(&check) {
|
|
remove_file(file).await?;
|
|
}
|
|
}
|
|
}
|
|
|
|
for file in glob("./uploads/thumb/*.*")? {
|
|
let file = file?;
|
|
let file_name = file.file_name();
|
|
|
|
if let Some(file_name) = file_name {
|
|
let check = file_name.to_string_lossy().to_string();
|
|
|
|
if !keep_thumbs.contains(&check) {
|
|
remove_file(file).await?;
|
|
}
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|