aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/ApiManagers/UploadManager.ts15
-rw-r--r--src/server/DashUploadUtils.ts35
2 files changed, 24 insertions, 26 deletions
diff --git a/src/server/ApiManagers/UploadManager.ts b/src/server/ApiManagers/UploadManager.ts
index 76cf36d44..fe4c475c9 100644
--- a/src/server/ApiManagers/UploadManager.ts
+++ b/src/server/ApiManagers/UploadManager.ts
@@ -108,6 +108,21 @@ export default class UploadManager extends ApiManager {
register({
method: Method.POST,
+ subscription: '/queryYoutubeProgress',
+ secureHandler: async ({ req, res }) => {
+ return new Promise<void>(async resolve => {
+ req.addListener('data', args => {
+ const payload = String.fromCharCode.apply(String, args);
+ const videoId = JSON.parse(payload).videoId;
+ _success(res, { progress: DashUploadUtils.QueryYoutubeProgress(videoId) });
+ resolve();
+ });
+ });
+ },
+ });
+
+ register({
+ method: Method.POST,
subscription: new RouteSubscriber('youtubeScreenshot'),
secureHandler: async ({ req, res }) => {
const { id, timecode } = req.body;
diff --git a/src/server/DashUploadUtils.ts b/src/server/DashUploadUtils.ts
index 2c549cc9f..45e88d8cc 100644
--- a/src/server/DashUploadUtils.ts
+++ b/src/server/DashUploadUtils.ts
@@ -117,6 +117,12 @@ export namespace DashUploadUtils {
};
}
+ export function QueryYoutubeProgress(videoId: string) {
+ return uploadProgress.get(videoId) ?? 'failed';
+ }
+
+ let uploadProgress = new Map<string, string>();
+
export function uploadYoutube(videoId: string): Promise<Upload.FileResponse> {
return new Promise<Upload.FileResponse<Upload.FileInformation>>((res, rej) => {
console.log('Uploading YouTube video: ' + videoId);
@@ -124,6 +130,7 @@ export namespace DashUploadUtils {
const path = name.replace(/^-/, '__') + '.mp4';
const finalPath = serverPathToFile(Directory.videos, path);
if (existsSync(finalPath)) {
+ uploadProgress.set(videoId, 'computing duration');
exec(`yt-dlp -o ${finalPath} "https://www.youtube.com/watch?v=${videoId}" --get-duration`, (error: any, stdout: any, stderr: any) => {
const time = Array.from(stdout.trim().split(':')).reverse();
const duration = (time.length > 2 ? Number(time[2]) * 1000 * 60 : 0) + (time.length > 1 ? Number(time[1]) * 60 : 0) + (time.length > 0 ? Number(time[0]) : 0);
@@ -132,9 +139,7 @@ export namespace DashUploadUtils {
} else {
const ytdlp = spawn(`yt-dlp`, ['-o', path, videoId, '-f', 'mp4']);
- ytdlp.stdout.on('data', function (data: any) {
- console.log('stdout: ' + data.toString()); // bcz: somehow channel this back to the client...
- });
+ ytdlp.stdout.on('data', (data: any) => uploadProgress.set(videoId, data.toString()));
let errors = '';
ytdlp.stderr.on('data', (data: any) => (errors = data.toString()));
@@ -153,6 +158,7 @@ export namespace DashUploadUtils {
result: { name: 'failed youtube query', message: `Could not upload video. ${errors}` },
});
} else {
+ uploadProgress.set(videoId, 'computing duration');
exec(`yt-dlp-o ${path} "https://www.youtube.com/watch?v=${videoId}" --get-duration`, (error: any, stdout: any, stderr: any) => {
const time = Array.from(stdout.trim().split(':')).reverse();
const duration = (time.length > 2 ? Number(time[2]) * 1000 * 60 : 0) + (time.length > 1 ? Number(time[1]) * 60 : 0) + (time.length > 0 ? Number(time[0]) : 0);
@@ -162,29 +168,6 @@ export namespace DashUploadUtils {
});
}
});
- // exec(`yt-dlp -o ${path} "https://www.youtube.com/watch?v=${videoId}" -f "mp4"`, (error: any, stdout: any, stderr: any) => {
- // if (error) {
- // console.log(`error: Error: ${error.message}`);
- // res({
- // source: {
- // size: 0,
- // path,
- // name,
- // type: '',
- // toJSON: () => ({ name, path }),
- // },
- // result: { name: 'failed youtube query', message: `Could not upload YouTube video (${videoId}). Error: ${error.message}` },
- // });
- // } else {
- // exec(`yt-dlp-o ${path} "https://www.youtube.com/watch?v=${videoId}" --get-duration`, (error: any, stdout: any, stderr: any) => {
- // const time = Array.from(stdout.trim().split(':')).reverse();
- // const duration = (time.length > 2 ? Number(time[2]) * 1000 * 60 : 0) + (time.length > 1 ? Number(time[1]) * 60 : 0) + (time.length > 0 ? Number(time[0]) : 0);
- // const data = { size: 0, path, name, type: 'video/mp4' };
- // const file = { ...data, toJSON: () => ({ ...data, filename: data.path.replace(/.*\//, ''), mtime: duration.toString(), mime: '', toJson: () => undefined as any }) };
- // res(MoveParsedFile(file, Directory.videos));
- // });
- // }
- // });
}
});
}