Files
yt-dlp-webui/lib/db.js
2022-01-04 12:55:36 +01:00

74 lines
1.8 KiB
JavaScript

const uuid = require('uuid')
const { logger } = require('./logger')
const { existsInProc } = require('./procUtils')
const db = require('better-sqlite3')('downloads.db')
async function init() {
try {
db.exec(`CREATE TABLE downloads (
uid varchar(36) NOT NULL,
url text NOT NULL,
title text,
thumbnail text,
created date,
size text,
process_pid int NOT NULL,
PRIMARY KEY (uid)
)`)
} catch (e) {
logger('db', 'Table already created, ignoring')
}
}
async function get_db() {
return db
}
async function insertDownload(url, title, thumbnail, size, PID) {
const uid = uuid.v1()
db
.prepare(`
INSERT INTO downloads
(uid, url, title, thumbnail, size, process_pid)
VALUES (?, ?, ?, ?, ?, ?)`
)
.run(uid, url, title, thumbnail, size, PID)
return uid
}
async function retrieveAll() {
return db
.prepare('SELECT * FROM downloads')
.all()
}
async function deleteDownloadById(uid) {
db.prepare(`DELETE FROM downloads WHERE uid=${uid}`).run()
}
async function deleteDownloadByPID(PID) {
db.prepare(`DELETE FROM downloads WHERE process_pid=${PID}`).run()
}
async function pruneDownloads() {
const all = await retrieveAll()
return all.map(job => {
if (existsInProc(job.process_pid)) {
return job
} else {
deleteDownloadByPID(job.process_pid)
}
})
}
module.exports = {
init: init,
getDB: get_db,
insertDownload: insertDownload,
retrieveAll: retrieveAll,
deleteDownloadById: deleteDownloadById,
deleteDownloadByPID: deleteDownloadByPID,
pruneDownloads: pruneDownloads,
}