2022-05-04 20:35:15 +00:00
|
|
|
#!/usr/bin/env node
|
2022-05-04 22:45:37 +00:00
|
|
|
const fs = require('fs')
|
|
|
|
const path = require("path")
|
|
|
|
const termkit = require("terminal-kit")
|
|
|
|
const { Encoder } = require("../lib/encoder.js")
|
|
|
|
const { UI } = require("../lib/ui.js")
|
|
|
|
const { SettingsManager } = require("../lib/settingsManager.js")
|
2022-05-03 21:27:58 +00:00
|
|
|
let term = termkit.terminal
|
|
|
|
|
|
|
|
/**
|
2022-05-04 18:40:14 +00:00
|
|
|
* TODO : FIND A WAY TO COMPILE THIS:..
|
|
|
|
*
|
2022-05-03 21:27:58 +00:00
|
|
|
*/
|
|
|
|
|
2022-05-04 18:40:14 +00:00
|
|
|
const inputList = process.argv.slice(2)
|
2022-05-03 21:27:58 +00:00
|
|
|
//if launched without params
|
|
|
|
if (!inputList[0]) {
|
2022-05-04 22:45:37 +00:00
|
|
|
main(true)
|
2022-05-03 21:27:58 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
//Parse file inputs (n Drag n drop or arguments)
|
|
|
|
let filePaths = [], fileNames = [], fileTypes = []
|
|
|
|
let presetIndexArg = undefined
|
|
|
|
//if preset argument go through list from 2 and add argument
|
|
|
|
if (inputList[0] == "-preset") {
|
|
|
|
presetIndexArg = inputList[1]
|
|
|
|
|
|
|
|
for (let i = 2; i < inputList.length; i++) {
|
|
|
|
let file
|
2022-05-04 18:40:14 +00:00
|
|
|
file = path.resolve(inputList[i])
|
2022-05-03 21:27:58 +00:00
|
|
|
|
|
|
|
filePaths.push(file)
|
|
|
|
|
|
|
|
file = file.split("\\")
|
|
|
|
file = file[file.length - 1]
|
|
|
|
file = file.split(".")
|
|
|
|
|
|
|
|
fileTypes.push(file[1])
|
|
|
|
fileNames.push(file[0])
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
for (let i = 0; i < inputList.length; i++) {
|
|
|
|
let file
|
2022-05-04 18:40:14 +00:00
|
|
|
file = path.resolve(inputList[i])
|
2022-05-03 21:27:58 +00:00
|
|
|
|
|
|
|
filePaths.push(file)
|
|
|
|
|
|
|
|
file = file.split("\\")
|
|
|
|
file = file[file.length - 1]
|
|
|
|
file = file.split(".")
|
|
|
|
|
|
|
|
fileTypes.push(file[1])
|
|
|
|
fileNames.push(file[0])
|
|
|
|
}
|
|
|
|
}
|
|
|
|
main()
|
|
|
|
|
2022-05-04 22:45:37 +00:00
|
|
|
async function main(menu = false) {
|
|
|
|
//get settings
|
|
|
|
let settings = new SettingsManager()
|
|
|
|
await settings.start(__dirname)
|
|
|
|
const ui = new UI(settings.settings, settings.currentSetting, settings.settingsFile)
|
|
|
|
|
|
|
|
if (menu) savesettings = await ui.startMenu()
|
2022-05-03 21:27:58 +00:00
|
|
|
|
|
|
|
//file checks
|
|
|
|
let isListEncodable = true
|
|
|
|
//check if all files exist
|
|
|
|
for (let i = 0; i < filePaths.length; i++) {
|
|
|
|
if (!fs.existsSync(filePaths[i])) {
|
|
|
|
term.italic(`${filePaths[i]}`).bold.red(" <- Path or File doesn't exist\n")
|
|
|
|
term.grey("press enter to exit...")
|
|
|
|
isListEncodable = false
|
|
|
|
term.inputField(function () { process.exit() })
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//check if all files are valid formats
|
|
|
|
if (isListEncodable) {
|
|
|
|
for (let i = 0; i < filePaths.length; i++) {
|
|
|
|
if (fileTypes[i] == "jpg" || fileTypes[i] == "JPG" || fileTypes[i] == "png" || fileTypes[i] == "PNG" || fileTypes[i] == "webp" ||
|
|
|
|
fileTypes[i] == "webm" || fileTypes[i] == "mp4" || fileTypes[i] == "mov" || fileTypes[i] == "mkv" || fileTypes[i] == "avi" ||
|
|
|
|
fileTypes[i] == "ogg" || fileTypes[i] == "mp3" || fileTypes[i] == "aiff" || fileTypes[i] == "wav" || fileTypes[i] == "flac") {
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
term.italic(`${fileTypes[i]}`).bold.red(` <- Unsupported format\n`)
|
|
|
|
term.grey("press enter to exit...")
|
|
|
|
isListEncodable = false
|
|
|
|
term.inputField(function () { process.exit() })
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
//start encoding all
|
|
|
|
if (isListEncodable) {
|
|
|
|
|
|
|
|
let encoder = []
|
|
|
|
for (let i = 0; i < filePaths.length; i++) {
|
|
|
|
encoder.push(new Encoder(settings.settings, settings.currentSetting, presetIndexArg))
|
|
|
|
console.log(`Encoding with "${settings.currentSetting.name}" preset...`)
|
|
|
|
|
|
|
|
if (fileTypes[i] == "jpg" || fileTypes[i] == "JPG" || fileTypes[i] == "png" || fileTypes[i] == "PNG" || fileTypes[i] == "webp") {
|
|
|
|
ui.newBar(await encoder[i].encodePicture(filePaths[i], fileNames[i]))
|
|
|
|
ui.updateBar("time=00:00:01", i, false, true)
|
|
|
|
encoder[i].on("close", () => { ui.encodeFinished(i) })
|
|
|
|
}
|
|
|
|
else if (fileTypes[i] == "webm" || fileTypes[i] == "mp4" || fileTypes[i] == "mov" || fileTypes[i] == "mkv" || fileTypes[i] == "avi") {
|
|
|
|
ui.newBar(await encoder[i].encodeVideo(filePaths[i], fileNames[i]))
|
|
|
|
encoder[i].on("update", (chunk) => { ui.updateBar(chunk, i) })
|
|
|
|
encoder[i].on("close", () => { ui.encodeFinished(i) })
|
|
|
|
}
|
|
|
|
else if (fileTypes[i] == "ogg" || fileTypes[i] == "mp3" || fileTypes[i] == "aiff" || fileTypes[i] == "wav" || fileTypes[i] == "flac") {
|
|
|
|
ui.newBar(await encoder[i].encodeAudio(filePaths[i], fileNames[i]))
|
|
|
|
encoder[i].on("update", (chunk) => { ui.updateBar(chunk, i, false) })
|
|
|
|
encoder[i].on("close", () => { ui.encodeFinished(i) })
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|