From 903f2bfafcb867a4e456ba1323a6795183eb781c Mon Sep 17 00:00:00 2001 From: Luca Armaroli Date: Sat, 5 Sep 2020 12:51:01 +0200 Subject: [PATCH] updated destreamer to use the new download method --- src/destreamer.ts | 178 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 165 insertions(+), 13 deletions(-) diff --git a/src/destreamer.ts b/src/destreamer.ts index e518615..208ef4b 100644 --- a/src/destreamer.ts +++ b/src/destreamer.ts @@ -1,31 +1,37 @@ -import { argv } from './CommandLineParser'; +import { ApiClient } from './ApiClient'; +import { argv, promptUser } from './CommandLineParser'; +import { getDecrypter } from './Descrypter'; +import { DownloadManager } from './DownloadManager'; import { ERROR_CODE } from './Errors'; import { setProcessEvents } from './Events'; import { logger } from './Logger'; import { getPuppeteerChromiumPath } from './PuppeteerHelper'; -import { drawThumbnail } from './Thumbnail'; -import { TokenCache, refreshSession } from './TokenCache'; +// import { drawThumbnail } from './Thumbnail'; +import { TokenCache/* , refreshSession */} from './TokenCache'; import { Video, Session } from './Types'; -import { checkRequirements, ffmpegTimemarkToChunk, parseInputFile, parseCLIinput} from './Utils'; +import { checkRequirements, /* ffmpegTimemarkToChunk, */parseInputFile, parseCLIinput, getUrlsFromPlaylist} from './Utils'; import { getVideoInfo, createUniquePath } from './VideoUtils'; -import cliProgress from 'cli-progress'; +import { exec, execSync } from 'child_process'; import fs from 'fs'; import isElevated from 'is-elevated'; import puppeteer from 'puppeteer'; +import path from 'path'; +import tmp from 'tmp'; -const { FFmpegCommand, FFmpegInput, FFmpegOutput } = require('@tedconf/fessonia')(); +const m3u8Parser: any = require('m3u8-parser'); // TODO: can we create an export or something for this? const tokenCache: TokenCache = new TokenCache(); export const chromeCacheFolder = '.chrome_data'; +tmp.setGracefulCleanup(); + +// const { FFmpegCommand, FFmpegInput, FFmpegOutput } = require('@tedconf/fessonia')(); async function init(): Promise { setProcessEvents(); // must be first! - if (argv.verbose) { - logger.level = 'verbose'; - } + logger.level = argv.debug ? 'debug' : (argv.verbose ? 'verbose' : 'info'); if (await isElevated()) { process.exit(ERROR_CODE.ELEVATED_SHELL); @@ -111,14 +117,153 @@ async function DoInteractiveLogin(url: string, username?: string): Promise, + outputDirectories: Array, session: Session): Promise { + const apiClient = ApiClient.getInstance(session); + + logger.info('Downloading video info, this might take a while...'); + + const videos: Array