From 435c07d75efee3242526e492092756e904ebe564 Mon Sep 17 00:00:00 2001 From: Daniel Szabo Date: Sun, 31 Jul 2022 19:18:07 +0100 Subject: [PATCH] Implement manual deletion behaviour and fix #35 --- src/endpoints/remove.rs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/endpoints/remove.rs b/src/endpoints/remove.rs index a814884..feae38f 100644 --- a/src/endpoints/remove.rs +++ b/src/endpoints/remove.rs @@ -2,10 +2,12 @@ use actix_web::{get, web, HttpResponse}; use crate::args::ARGS; use crate::endpoints::errors::ErrorTemplate; +use crate::pasta::PastaFile; use crate::util::animalnumbers::to_u64; use crate::util::misc::remove_expired; use crate::AppState; use askama::Template; +use std::fs; #[get("/remove/{id}")] pub async fn remove(data: web::Data, id: web::Path) -> HttpResponse { @@ -19,10 +21,22 @@ pub async fn remove(data: web::Data, id: web::Path) -> HttpRes let id = to_u64(&*id.into_inner()).unwrap_or(0); - remove_expired(&mut pastas); - for (i, pasta) in pastas.iter().enumerate() { if pasta.id == id { + // remove the file itself + if let Some(PastaFile { name, .. }) = &pasta.file { + if fs::remove_file(format!("./pasta_data/{}/{}", pasta.id_as_animals(), name)) + .is_err() + { + log::error!("Failed to delete file {}!", name) + } + + // and remove the containing directory + if fs::remove_dir(format!("./pasta_data/{}/", pasta.id_as_animals())).is_err() { + log::error!("Failed to delete directory {}!", name) + } + } + // remove it from in-memory pasta list pastas.remove(i); return HttpResponse::Found() .append_header(("Location", "/pastalist")) @@ -30,6 +44,8 @@ pub async fn remove(data: web::Data, id: web::Path) -> HttpRes } } + remove_expired(&mut pastas); + HttpResponse::Ok() .content_type("text/html") .body(ErrorTemplate { args: &ARGS }.render().unwrap())