cobalt/src/modules/sub/utils.js

109 lines
4 KiB
JavaScript
Raw Normal View History

2022-07-08 19:17:56 +01:00
import { createStream } from "../stream/manage.js";
export function apiJSON(type, obj) {
try {
switch (type) {
case 0:
return { status: 400, body: { status: "error", text: obj.t } };
case 1:
return { status: 200, body: { status: "redirect", url: obj.u } };
2022-08-16 08:14:19 +01:00
case 2:
2022-07-08 19:17:56 +01:00
return { status: 200, body: { status: "stream", url: createStream(obj) } };
case 3:
return { status: 200, body: { status: "success", text: obj.t } };
case 4:
return { status: 429, body: { status: "rate-limit", text: obj.t } };
2022-09-03 16:32:39 +01:00
case 5:
2022-10-09 18:44:00 +01:00
let pickerType = "various", audio = false
switch (obj.service) {
case "douyin":
case "tiktok":
audio = createStream(obj)
pickerType = "images"
break;
}
return { status: 200, body: { status: "picker", pickerType: pickerType, picker: obj.picker, audio: audio } };
2022-07-08 19:17:56 +01:00
default:
return { status: 400, body: { status: "error", text: "Bad Request" } };
}
} catch (e) {
return { status: 500, body: { status: "error", text: "Internal Server Error" } };
}
}
export function metadataManager(obj) {
let keys = Object.keys(obj);
let tags = ["album", "composer", "genre", "copyright", "encoded_by", "title", "language", "artist", "album_artist", "performer", "disc", "publisher", "track", "encoder", "compilation", "date", "creation_time", "comment"]
let commands = []
for (let i in keys) { if (tags.includes(keys[i])) commands.push('-metadata', `${keys[i]}=${obj[keys[i]]}`) }
return commands;
}
2022-07-08 19:17:56 +01:00
export function msToTime(d) {
2022-09-01 14:51:18 +01:00
let milliseconds = parseInt((d % 1000) / 100, 10),
seconds = parseInt((d / 1000) % 60, 10),
minutes = parseInt((d / (1000 * 60)) % 60, 10),
hours = parseInt((d / (1000 * 60 * 60)) % 24, 10),
2022-07-08 19:17:56 +01:00
r;
2022-09-01 14:51:18 +01:00
hours = (hours < 10) ? `0${hours}` : hours;
minutes = (minutes < 10) ? `0${minutes}` : minutes;
seconds = (seconds < 10) ? `0${seconds}` : seconds;
r = `${hours}:${minutes}:${seconds}`;
if (milliseconds) r += `.${milliseconds}`;
2022-07-08 19:17:56 +01:00
return r;
}
export function cleanURL(url, host) {
url = url.replace('}', '').replace('{', '').replace(')', '').replace('(', '').replace(' ', '').replace('@', '');
2022-07-08 19:17:56 +01:00
if (url.includes('youtube.com/shorts/')) {
url = url.split('?')[0].replace('shorts/', 'watch?v=');
}
if (host === "youtube") {
2022-07-08 19:17:56 +01:00
url = url.split('&')[0];
} else {
url = url.split('?')[0];
if (url.substring(url.length - 1) === "/") {
2022-07-08 19:17:56 +01:00
url = url.substring(0, url.length - 1);
}
}
return url
}
export function languageCode(req) {
return req.header('Accept-Language') ? req.header('Accept-Language').slice(0, 2) : "en"
}
export function unicodeDecode(str) {
return str.replace(/\\u[\dA-F]{4}/gi, (unicode) => {
return String.fromCharCode(parseInt(unicode.replace(/\\u/g, ""), 16));
});
}
export function checkJSONPost(obj) {
let def = {
vFormat: "mp4",
vQuality: "hig",
aFormat: "mp3",
isAudioOnly: false,
isNoTTWatermark: false,
isTTFullAudio: false
}
let booleanOnly = ["isAudioOnly", "isNoTTWatermark", "isTTFullAudio"]
try {
let objKeys = Object.keys(obj);
if (objKeys.length < 8) {
let defKeys = Object.keys(def);
for (let i in objKeys) {
if (defKeys.includes(objKeys[i])) {
if (booleanOnly.includes(objKeys[i])) {
def[objKeys[i]] = obj[objKeys[i]] ? true : false
} else {
def[objKeys[i]] = obj[objKeys[i]]
}
}
}
return def
} else {
return false
}
} catch (e) {
return false;
}
}