This commit is contained in:
localhost 2024-03-30 14:32:37 +01:00
parent cfe48bcb0a
commit 0083081fbd
2 changed files with 29 additions and 17 deletions

View File

@ -4,6 +4,7 @@ const https = require('https')
const maxRetries = 5 const maxRetries = 5
const platforms = ['WEB', 'ANDROID', 'iOS'] const platforms = ['WEB', 'ANDROID', 'iOS']
const cobalt = ['http://cobalt-api:9000', 'https://co.wuk.sh', 'http://cobalt-api:9000']
const ignoreSsl = new https.Agent({ const ignoreSsl = new https.Agent({
rejectUnauthorized: false, rejectUnauthorized: false,
@ -125,7 +126,12 @@ async function getPlaylistVideos(id) {
} }
async function getVideoDownload(url, quality) { async function getVideoDownload(url, quality) {
const json = await (await fetch('http://cobalt-api:9000/api/json', { let json
for (let retries = 0; retries < maxRetries; retries++) {
try {
const instance = cobalt[retries % cobalt.length];
json = await (await fetch(`${instance}/api/json`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Accept': 'application/json', 'Accept': 'application/json',
@ -137,6 +143,13 @@ async function getVideoDownload(url, quality) {
}) })
})).json() })).json()
if (json.error) continue
return json
} catch (error) {
continue
}
}
return json return json
} }

View File

@ -8,17 +8,16 @@ async function downloadVideo(url, ws, id) {
let quality = '720p' let quality = '720p'
const video = await metadata.getVideoMetadata(id) const video = await metadata.getVideoMetadata(id)
if (video.error) { if (video.error) {
resolve({ return resolve({
message: `Failed to request Youtube with error ${video.error}. Please retry...`, message: `Failed to request Youtube with error ${video.error}. Please retry...`,
fail: true fail: true
}) })
} }
if (video.basic_info.duration >= 900) quality = '360p' // 15 minutes
if (video.basic_info.duration > 1200) quality = '480p' // 20 minutes
if (video.basic_info.duration > 2100) quality = '360p' // 35 minutes
const downloadJson = await metadata.getVideoDownload(url, quality) const downloadJson = await metadata.getVideoDownload(url, quality)
if (downloadJson.status == 'error') { if (downloadJson.status == 'error') {
resolve({ return resolve({
message: 'Failed to request Youtube. Please retry...', message: 'Failed to request Youtube. Please retry...',
fail: true fail: true
}) })
@ -61,11 +60,11 @@ async function downloadVideo(url, ws, id) {
download.on('end', output => { download.on('end', output => {
if (output == 'Finished writing to disk') { if (output == 'Finished writing to disk') {
ws.send(`DATA - Download has finished`) ws.send(`DATA - Download has finished`)
resolve({ return resolve({
fail: false fail: false
}) })
} else { } else {
resolve({ return resolve({
fail: true fail: true
}) })
} }