diff --git a/.DS_Store b/.DS_Store
deleted file mode 100644
index ec73940..0000000
Binary files a/.DS_Store and /dev/null differ
diff --git a/.dockerignore b/.dockerignore
index d3d0013..dc69752 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,4 +1,5 @@
node_modules
+downloads
dist
package-lock.json
pnpm-lock.yaml
diff --git a/.gitignore b/.gitignore
index 696a2f7..8a804c8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,4 +11,5 @@ src/server/core/yt-dlp
*.ytdl
*.part
*.db
+downloads
.DS_Store
\ No newline at end of file
diff --git a/frontend/src/Home.tsx b/frontend/src/Home.tsx
index 40b7f28..a2775d6 100644
--- a/frontend/src/Home.tsx
+++ b/frontend/src/Home.tsx
@@ -1,9 +1,20 @@
-import { Backdrop, Button, ButtonGroup, CircularProgress, Container, Grid, Paper, Skeleton, Snackbar, TextField, Typography, } from "@mui/material";
import React, { Fragment, useEffect, useState } from "react";
+import {
+ Backdrop,
+ Button,
+ ButtonGroup,
+ CircularProgress,
+ Container,
+ Grid,
+ Paper,
+ Snackbar,
+ TextField,
+ Typography,
+} from "@mui/material";
import { useDispatch, useSelector } from "react-redux";
-import { io, Socket } from "socket.io-client";
+import { Socket } from "socket.io-client";
import { StackableResult } from "./components/StackableResult";
-import { connected, disconnected, downloading, finished } from "./features/status/statusSlice";
+import { connected, downloading, finished } from "./features/status/statusSlice";
import { IDLInfo, IDLInfoBase, IDownloadInfo, IMessage } from "./interfaces";
import { RootState } from "./stores/store";
import { toFormatArgs, updateInStateMap, } from "./utils";
@@ -106,7 +117,7 @@ export default function Home({ socket }: Props) {
const input = document.getElementById('urlInput') as HTMLInputElement;
input.value = '';
setShowBackdrop(true);
- setDownloadFormats(null);
+ setDownloadFormats(undefined);
}, 250);
}
@@ -148,7 +159,7 @@ export default function Home({ socket }: Props) {
socket.emit('abort', { pid: id })
return
}
- setDownloadFormats(null)
+ setDownloadFormats(undefined)
socket.emit('abort-all')
}
@@ -319,10 +330,10 @@ export default function Home({ socket }: Props) {
abort(message[0])}
/>
diff --git a/frontend/src/components/StackableResult.tsx b/frontend/src/components/StackableResult.tsx
index 58471e1..8fcab1e 100644
--- a/frontend/src/components/StackableResult.tsx
+++ b/frontend/src/components/StackableResult.tsx
@@ -13,7 +13,7 @@ type Props = {
}
export function StackableResult({ formattedLog, title, thumbnail, resolution, progress, stopCallback }: Props) {
- const guessResolution = (xByY: string): JSX.Element => {
+ const guessResolution = (xByY: string): any => {
if (!xByY) return null;
if (xByY.includes('4320')) return ();
if (xByY.includes('2160')) return ();
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 4b3be85..6c5e50a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -133,9 +133,6 @@ packages:
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- peerDependenciesMeta:
- '@babel/core':
- optional: true
dependencies:
'@babel/compat-data': 7.17.10
'@babel/core': 7.18.2
@@ -248,9 +245,6 @@ packages:
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- peerDependenciesMeta:
- '@babel/core':
- optional: true
dependencies:
'@babel/helper-plugin-utils': 7.16.7
dev: false
@@ -260,9 +254,6 @@ packages:
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- peerDependenciesMeta:
- '@babel/core':
- optional: true
dependencies:
'@babel/core': 7.18.2
'@babel/helper-plugin-utils': 7.17.12
@@ -273,9 +264,6 @@ packages:
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- peerDependenciesMeta:
- '@babel/core':
- optional: true
dependencies:
'@babel/core': 7.18.2
'@babel/plugin-transform-react-jsx': 7.17.12_@babel+core@7.18.2
@@ -286,9 +274,6 @@ packages:
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- peerDependenciesMeta:
- '@babel/core':
- optional: true
dependencies:
'@babel/core': 7.18.2
'@babel/helper-plugin-utils': 7.17.12
@@ -299,9 +284,6 @@ packages:
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- peerDependenciesMeta:
- '@babel/core':
- optional: true
dependencies:
'@babel/core': 7.18.2
'@babel/helper-plugin-utils': 7.16.7
@@ -312,9 +294,6 @@ packages:
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- peerDependenciesMeta:
- '@babel/core':
- optional: true
dependencies:
'@babel/core': 7.18.2
'@babel/helper-annotate-as-pure': 7.16.7
@@ -377,9 +356,6 @@ packages:
resolution: {integrity: sha512-Pr/7HGH6H6yKgnVFNEj2MVlreu3ADqftqjqwUvDy/OJzKFgxKeTQ+eeUf20FOTuHVkDON2iNa25rAXVYtWJCjw==}
peerDependencies:
'@babel/core': ^7.0.0
- peerDependenciesMeta:
- '@babel/core':
- optional: true
dependencies:
'@babel/helper-module-imports': 7.16.7
'@babel/plugin-syntax-jsx': 7.16.7
diff --git a/server/src/core/downloadArchive.ts b/server/src/core/downloadArchive.ts
index b0551bb..af5ce1c 100644
--- a/server/src/core/downloadArchive.ts
+++ b/server/src/core/downloadArchive.ts
@@ -1,18 +1,30 @@
-import { resolve } from "path";
+import { resolve as pathResolve } from "path";
import { readdir } from "fs";
+import { ISettings } from "../interfaces/ISettings";
+import Logger from "../utils/BetterLogger";
+let settings: ISettings;
+const log = Logger.instance;
-const archived = [
- {
- id: 1,
- title: '',
- path: resolve(''),
- img: '',
- },
-]
-
-export function listDownloaded(ctx: any, next: any) {
- //readdir()
- ctx.body = archived
- next()
+try {
+ settings = require('../../settings.json');
+} catch (e) {
+ log.warn('dl', 'settings.json not found');
+}
+
+export function listDownloaded(ctx: any) {
+ return new Promise((resolve, reject) => {
+ readdir(pathResolve(settings.download_path || 'download'), (err, files) => {
+ if (err) {
+ reject({ err: true })
+ return
+ }
+ ctx.body = files.map(file => {
+ resolve({
+ filename: file,
+ path: pathResolve(file),
+ })
+ })
+ })
+ })
}
diff --git a/server/src/main.ts b/server/src/main.ts
index 588d0e7..840284f 100644
--- a/server/src/main.ts
+++ b/server/src/main.ts
@@ -4,14 +4,14 @@ 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 { streamer } from './core/streamer';
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';
+import Logger from './utils/BetterLogger';
const app = new Koa();
const server = createServer(app.callback());
@@ -25,7 +25,6 @@ const io = new Server(server, {
});
// Koa routing
-
router.get('/settings', (ctx, next) => {
ctx.redirect('/')
next()
@@ -34,8 +33,16 @@ router.get('/downloaded', (ctx, next) => {
ctx.redirect('/')
next()
})
-router.get('/getAllDownloaded', (ctx, next) => {
- listDownloaded(ctx, next)
+router.get('/archive', (ctx, next) => {
+ listDownloaded(ctx)
+ .then((res: any) => {
+ ctx.body = res
+ next()
+ })
+ .catch((err: any) => {
+ ctx.body = err;
+ next()
+ })
})
router.get('/stream/:filepath', (ctx, next) => {
streamer(ctx, next)
@@ -76,8 +83,8 @@ io.on('disconnect', (socket) => {
})
app.use(serve(join(__dirname, 'frontend')))
-app.use(router.routes())
app.use(cors())
+app.use(router.routes())
server.listen(process.env.PORT || 3022)
diff --git a/server/src/utils/procUtils.ts b/server/src/utils/procUtils.ts
index a085ad0..817cdf5 100644
--- a/server/src/utils/procUtils.ts
+++ b/server/src/utils/procUtils.ts
@@ -1,7 +1,9 @@
import { exec, spawn } from 'child_process';
import fs = require('fs');
+import Logger from './BetterLogger';
// import net = require('net');
-import { logger } from './logger';
+
+const log = Logger.instance;
/**
* Browse /proc in order to find the specific pid
@@ -12,7 +14,7 @@ export function existsInProc(pid: number): any {
try {
return fs.statSync(`/proc/${pid}`)
} catch (e) {
- logger('proc', `pid ${pid} not found in procfs`)
+ log.warn('proc', `pid ${pid} not found in procfs`)
}
}
@@ -36,12 +38,11 @@ function retriveStdoutFromProcFd(pid) {
export async function killProcess(pid: number) {
const res = spawn('kill', [String(pid)])
res.on('exit', () => {
- logger('proc', `Successfully killed yt-dlp process, pid: ${pid}`)
+ log.info('proc', `Successfully killed yt-dlp process, pid: ${pid}`)
})
}
export function getFreeDiskSpace(socket: any) {
- let buffer: string = '';
let message: string = 'free-space';
exec("df -h / | tail -1 | awk '{print $4}'", (_, stdout) => {
socket.emit(message, stdout)
diff --git a/vite.config.ts b/vite.config.ts
index 8aefe3b..9a0149f 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,17 +1,18 @@
-import ViteYaml from '@modyfi/vite-plugin-yaml';
import react from "@vitejs/plugin-react";
+import ViteYaml from '@modyfi/vite-plugin-yaml';
+import { defineConfig } from 'vite';
import { resolve } from 'path';
-const config = {
- plugins: [
- ViteYaml(),
- react(),
- ],
- root: './frontend',
- build: {
- emptyOutDir: true,
- outDir: resolve(__dirname, 'dist', 'frontend'),
+export default defineConfig(() => {
+ return {
+ plugins: [
+ react(),
+ ViteYaml(),
+ ],
+ root: resolve(__dirname, 'frontend'),
+ build: {
+ emptyOutDir: true,
+ outDir: resolve(__dirname, 'dist', 'frontend'),
+ }
}
-}
-
-export default config
\ No newline at end of file
+})