UNPKG

youtube-likes-downloader

Version:
82 lines 4.05 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.addVideo = addVideo; const crypto_1 = require("crypto"); const fs_1 = __importDefault(require("fs")); const os_1 = __importDefault(require("os")); const path_1 = __importDefault(require("path")); const out_url_1 = require("out-url"); const zod_1 = require("zod"); const schema_1 = require("./types/schema"); require("@anmiles/prototypes"); const cli_1 = require("./utils/cli"); const formatJSON_1 = require("./utils/formatJSON"); const formatTitle_1 = require("./utils/formatTitle"); const paths_1 = require("./utils/paths"); async function addVideo(profile) { const cli = new cli_1.Cli(); const { id, title, channel, duration, resolution, epoch, videoFile, imageFile, descriptionFile, } = await getData(cli); cli.close(); const ext = path_1.default.extname(videoFile).slice(1); const outputDir = (0, paths_1.getOutputDir)(profile); fs_1.default.ensureDir(outputDir, { create: true }); const filename = path_1.default.join(outputDir, `${(0, formatTitle_1.formatTitle)({ id, title, channel }).toFilename()}`); const json = (0, formatJSON_1.formatJSON)({ id, title, channel, duration, resolution, epoch, ext }); await fs_1.default.promises.writeFile(`${filename}.info.json`, JSON.stringify(json)); await fs_1.default.promises.copyFile(path_1.default.resolve(videoFile), filename + path_1.default.extname(videoFile)); await fs_1.default.promises.copyFile(path_1.default.resolve(imageFile), filename + path_1.default.extname(imageFile)); await fs_1.default.promises.copyFile(path_1.default.resolve(descriptionFile), `${filename}.description`); await fs_1.default.promises.appendFile((0, paths_1.getDownloadArchive)(profile), `youtube ${id}\n`); } async function getData(cli) { const data = await getJSONData(cli); if (data) { return data; } return { id: await cli.getAnswer('Youtube link', schema_1.youtubeIdSchema), title: await cli.getAnswer('Title', schema_1.stringSchema), channel: await cli.getAnswer('Channel', schema_1.stringSchema), duration: await cli.getAnswer('Duration', schema_1.durationSchema), resolution: await cli.getAnswer('Resolution', schema_1.resolutionSchema), epoch: await cli.getAnswer('Date', schema_1.epochSchema), videoFile: await cli.getAnswer('Video file', schema_1.fileSchema), imageFile: await cli.getAnswer('Image file', schema_1.fileSchema), descriptionFile: await cli.getAnswer('Description file', schema_1.fileSchema), }; } async function getJSONData(cli) { const inputData = await cli.getAnswer('Input JSON (optional)', schema_1.inputDataSchema.or(zod_1.z.undefined()), JSON.parse); if (!inputData) { return undefined; } const videoFile = await cli.getAnswer('Video file', schema_1.fileSchema); cli.say('Opening thumbnail; please download it as an image file'); await (0, out_url_1.open)(inputData.thumbnail.split('?')[0]); const imageFile = await cli.getAnswer('Image file', schema_1.fileSchema); const descriptionFile = createTempFilePath('txt'); await fs_1.default.promises.writeFile(descriptionFile, inputData.description); return transformInputData(inputData, videoFile, imageFile, descriptionFile); } function createTempFilePath(ext) { const tmp = os_1.default.tmpdir(); const filename = (0, crypto_1.randomUUID)(); return path_1.default.join(tmp, `${filename}.${ext}`); } function transformInputData(inputData, videoFile, imageFile, descriptionFile) { return { id: inputData.id, title: inputData.title, channel: inputData.channel, duration: inputData.duration, resolution: inputData.resolution, epoch: inputData.epoch, videoFile, imageFile, descriptionFile, }; } //# sourceMappingURL=addVideo.js.map