Files
yt-dlp-webui/server/src/main.ts
marcobaobao 975784ed72 Code refactoring and set up format selection
Set up format selection and archive download for next releases
2022-06-02 17:01:26 +02:00

100 lines
2.5 KiB
TypeScript

import { logger, splash } from './utils/logger';
import { join } from 'path';
import { Server } from 'socket.io';
import { ytdlpUpdater } from './utils/updater';
import { download, abortDownload, retrieveDownload, abortAllDownloads, getFormatsAndInfo } from './core/downloader';
import { getFreeDiskSpace } from './utils/procUtils';
import Logger from './utils/BetterLogger';
import { listDownloaded } from './core/downloadArchive';
import { createServer } from 'http';
import * as Koa from 'koa';
import * as Router from 'koa-router';
import * as serve from 'koa-static';
import * as cors from '@koa/cors';
import { streamer } from './core/streamer';
const app = new Koa();
const server = createServer(app.callback());
const router = new Router();
const log = new Logger();
const io = new Server(server, {
cors: {
origin: "*",
methods: ["GET", "POST"]
}
});
// Koa routing
router.get('/settings', (ctx, next) => {
ctx.redirect('/')
next()
})
router.get('/downloaded', (ctx, next) => {
ctx.redirect('/')
next()
})
router.get('/getAllDownloaded', (ctx, next) => {
listDownloaded(ctx, next)
})
router.get('/stream/:filepath', (ctx, next) => {
streamer(ctx, next)
})
// WebSocket listeners
io.on('connection', socket => {
logger('ws', `${socket.handshake.address} connected!`)
socket.on('send-url', (args) => {
logger('ws', args?.url)
//if (args.url) getFormatsAndInfo(socket, args?.url)
download(socket, args)
})
socket.on('abort', (args) => {
abortDownload(socket, args)
})
socket.on('abort-all', () => {
abortAllDownloads(socket)
})
socket.on('update-bin', () => {
ytdlpUpdater(socket)
})
socket.on('retrieve-jobs', () => {
retrieveDownload(socket)
})
socket.on('disk-space', () => {
getFreeDiskSpace(socket)
})
})
io.on('disconnect', (socket) => {
logger('ws', `${socket.handshake.address} disconnected`)
})
app.use(serve(join(__dirname, 'frontend')))
app.use(router.routes())
app.use(cors())
server.listen(process.env.PORT || 3022)
splash()
log.info('http', `Server started on port ${process.env.PORT || 3022}`)
/**
* Cleanup handler
*/
const gracefullyStop = () => {
log.warn('proc', 'Shutting down...')
io.disconnectSockets(true)
server.close()
log.info('proc', 'Done!')
process.exit(0)
}
// Intercepts singnals and perform cleanups before shutting down.
process
.on('SIGTERM', () => gracefullyStop())
.on('SIGUSR1', () => gracefullyStop())
.on('SIGUSR2', () => gracefullyStop())