From f83c5aa423ce9fa2050327fdc5415076e39271c6 Mon Sep 17 00:00:00 2001 From: waveringana Date: Fri, 9 Dec 2022 22:02:32 +0000 Subject: [PATCH] rework delete function --- app/routes/index.ts | 44 ++++++++++++++------------------------------ app/types/db.ts | 21 +++++++++++++++++++++ 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/app/routes/index.ts b/app/routes/index.ts index 6fef961..0bedb9f 100644 --- a/app/routes/index.ts +++ b/app/routes/index.ts @@ -13,7 +13,7 @@ ffmpeg.setFfprobePath(ffprobepath.path); import fs from "fs"; import {extension} from "../types/lib"; -import {db, MediaRow} from "../types/db"; +import {db, MediaRow, getPath, deleteId} from "../types/db"; import {fileStorage, fileFilter} from "../types/multer"; import {checkAuth, checkSharexAuth, createEmbedData, handleUpload} from "./middleware"; @@ -80,35 +80,19 @@ router.post("/sharex", [checkSharexAuth, upload.single("fileupload"), createEmbe return res.send(`${req.protocol}://${req.get("host")}/uploads/${req.file.filename}`); }); -router.post("/:id(\\d+)/delete", [checkAuth], (req: Request, res: Response, next: NextFunction) => { - db.all("SELECT path FROM media WHERE id = ?", [ req.params.id ], (err: Error, path: Array) => { - if (err) { return next(err); } - fs.unlink(`uploads/${path[0].path}`, (err => { - if (err) { - console.log(err); - if (err.errno == -4058) { //File just doesnt exist anymore - db.run("DELETE FROM media WHERE id = ?", [ - req.params.id - ], (err: Error) => { - if (err) { return next(err); } - return res.redirect("/"); - }); - } else { - console.log(err); - return res.redirect("/"); - } - } else { - console.log(`Deleted ${path}`); - //Callback Hell :D - db.run("DELETE FROM media WHERE id = ?", [ - req.params.id - ], (err: Error) => { - if (err) { return next(err); } - return res.redirect("/"); - }); - } - })); - }); +router.post("/:id(\\d+)/delete", [checkAuth], async (req: Request, res: Response, next: NextFunction) => { + const path: any = await getPath(req.params.id) + fs.unlink(`uploads/${path.path}`, async (err) => { + if (err && err.errno == -4058) { + await deleteId("media", req.params.id).then(()=> { + return res.redirect("/"); + }) + } else { + await deleteId("media", req.params.id).then(()=> { + return res.redirect("/"); + }) + } + }) }); export default router; \ No newline at end of file diff --git a/app/types/db.ts b/app/types/db.ts index e83e5b4..c216bde 100644 --- a/app/types/db.ts +++ b/app/types/db.ts @@ -1,6 +1,7 @@ import sqlite3 from "sqlite3"; import mkdirp from "mkdirp"; import crypto from "crypto"; +import { FileFilterCallback } from "multer"; mkdirp.sync("./uploads"); mkdirp.sync("./var/db"); @@ -16,6 +17,26 @@ export function createUser(username: string, password: string) { ]); } +export function getPath(id: number | string) { + return new Promise((resolve, reject) => { + let query: string = `SELECT path FROM media WHERE id = ?`; + db.get(query, [id], (err: Error, path: object) => { + if (err) {reject(err)} + resolve(path) + }); + }) +} + +export function deleteId(database: string, id: number | string) { + return new Promise((resolve, reject) => { + let query: string = `DELETE FROM ${database} WHERE id = ?` + db.run(query, [id], (err: Error) => { + if (err) {reject(err); return;} + resolve(null) + }) + }) +} + export interface MediaRow { id? : Number, path: String,