diff --git a/plume-models/src/medias.rs b/plume-models/src/medias.rs index 4ede485..b656631 100644 --- a/plume-models/src/medias.rs +++ b/plume-models/src/medias.rs @@ -1,11 +1,12 @@ use diesel::{self, PgConnection, QueryDsl, ExpressionMethods, RunQueryDsl}; use serde_json; +use std::fs; use ap_url; use instance::Instance; use schema::medias; -#[derive(Queryable, Serialize)] +#[derive(Identifiable, Queryable, Serialize)] pub struct Media { pub id: i32, pub file_path: String, @@ -59,4 +60,9 @@ impl Media { pub fn url(&self, conn: &PgConnection) -> String { ap_url(format!("{}/static/{}", Instance::get_local(conn).unwrap().public_domain, self.file_path)) } + + pub fn delete(&self, conn: &PgConnection) { + fs::remove_file(self.file_path.as_str()).expect("Couldn't delete media from disk"); + diesel::delete(self).execute(conn).expect("Couldn't remove media from DB"); + } } diff --git a/src/main.rs b/src/main.rs index 2bb9ddf..014d811 100644 --- a/src/main.rs +++ b/src/main.rs @@ -67,6 +67,7 @@ fn main() { routes::medias::new, routes::medias::upload, routes::medias::details, + routes::medias::delete, routes::medias::static_files, routes::notifications::paginated_notifications, diff --git a/src/routes/medias.rs b/src/routes/medias.rs index 3c1ff94..d5e3910 100644 --- a/src/routes/medias.rs +++ b/src/routes/medias.rs @@ -97,6 +97,13 @@ fn details(id: i32, user: User, conn: DbConn) -> Template { })) } +#[get("/medias//delete")] +fn delete(id: i32, _user: User, conn: DbConn) -> Redirect { + let media = Media::get(&*conn, id).expect("Media to delete not found"); + media.delete(&*conn); + Redirect::to(uri!(list)) +} + #[get("/static/media/", rank = 1)] fn static_files(file: PathBuf) -> Option { NamedFile::open(Path::new("media/").join(file)).ok() diff --git a/static/main.css b/static/main.css index a872af3..5d22ce2 100644 --- a/static/main.css +++ b/static/main.css @@ -720,7 +720,7 @@ figure { } figure > * { - width: 100%; + max-width: 100%; } figcaption {