removing auto, making it a sep service
This commit is contained in:
parent
aba54981cd
commit
089332dfaa
12
index.js
12
index.js
|
@ -4,7 +4,6 @@ const express = require('express')
|
||||||
const cors = require('cors')
|
const cors = require('cors')
|
||||||
|
|
||||||
const logger = require('./utils/logger.js')
|
const logger = require('./utils/logger.js')
|
||||||
const auto = require('./utils/auto.js')
|
|
||||||
|
|
||||||
const latestController = require('./controller/latest.js')
|
const latestController = require('./controller/latest.js')
|
||||||
const videoController = require('./controller/video.js')
|
const videoController = require('./controller/video.js')
|
||||||
|
@ -34,14 +33,9 @@ app.ws('/saveplaylist', websocketController.playlist)
|
||||||
app.ws('/savechannel', websocketController.channel)
|
app.ws('/savechannel', websocketController.channel)
|
||||||
app.get('/autodownload', websocketController.addAutodownload)
|
app.get('/autodownload', websocketController.addAutodownload)
|
||||||
|
|
||||||
auto.handleCheck()
|
process.on('uncaughtException', err => {
|
||||||
// setInterval(() => {
|
logger.info({ message: `Error: ${err.message}` })
|
||||||
// auto.handleCheck()
|
})
|
||||||
// }, 300000)
|
|
||||||
|
|
||||||
// process.on('uncaughtException', err => {
|
|
||||||
// logger.info({ message: `Error: ${err.message}` })
|
|
||||||
// })
|
|
||||||
|
|
||||||
app.listen(1337, () => {
|
app.listen(1337, () => {
|
||||||
logger.info({ message: 'Server listening on port 1337!' })
|
logger.info({ message: 'Server listening on port 1337!' })
|
||||||
|
|
|
@ -1,96 +0,0 @@
|
||||||
const fs = require('node:fs')
|
|
||||||
|
|
||||||
const upload = require('../utils/upload.js')
|
|
||||||
const ytdlp = require('../utils/ytdlp.js')
|
|
||||||
const redis = require('../utils/redis.js')
|
|
||||||
|
|
||||||
const metadata = require('../utils/metadata.js')
|
|
||||||
const websocket = require('../utils/websocket.js')
|
|
||||||
const logger = require("../utils/logger.js")
|
|
||||||
|
|
||||||
const { PrismaClient } = require('@prisma/client')
|
|
||||||
const prisma = new PrismaClient()
|
|
||||||
|
|
||||||
async function handleCheck() {
|
|
||||||
const channels = await prisma.autodownload.findMany()
|
|
||||||
|
|
||||||
for (c of channels) {
|
|
||||||
if (await redis.get(c.channel)) {
|
|
||||||
logger.info({ message: `${c.channel} is already being downloaded` })
|
|
||||||
} else {
|
|
||||||
await redis.set(c.channel, 'downloading')
|
|
||||||
await handleDownload(c.channel)
|
|
||||||
await redis.del(c.channel)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function handleDownload(channelId) {
|
|
||||||
logger.info({ message: `Checking ${channelId} for new videos...` })
|
|
||||||
|
|
||||||
const videos = await metadata.getChannelVideos(channelId)
|
|
||||||
if (!videos) return logger.info({ message: `Failed requesting Youtube for ${channelId}` })
|
|
||||||
let downloadIndex = 0
|
|
||||||
|
|
||||||
await Promise.all(videos.map(async (video) => {
|
|
||||||
const id = video.url.match(/[?&]v=([^&]+)/)[1]
|
|
||||||
|
|
||||||
const already = await prisma.videos.findFirst({
|
|
||||||
where: {
|
|
||||||
id: id
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
if (already) return
|
|
||||||
if (await redis.get(id)) {
|
|
||||||
logger.info({ message: `Someone is already downloading ${video.title}, ${id}` })
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (await redis.get(`blacklist:${id}`)) {
|
|
||||||
logger.info({ message: `${video.title} is blacklisted from downloading, ${id}` })
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (video.duration > 5400) {
|
|
||||||
logger.info({ message: `${video.title} is longer than 1h30m, ${id}` })
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
await redis.set(id, 'downloading')
|
|
||||||
|
|
||||||
downloadIndex++
|
|
||||||
await delay(downloadIndex * 15000)
|
|
||||||
|
|
||||||
logger.info({ message: `Starting to download ${video.title}, ${id}` })
|
|
||||||
|
|
||||||
const download = await ytdlp.downloadVideo('https://www.youtube.com' + video.url)
|
|
||||||
if (download.fail) {
|
|
||||||
logger.info({ message: `Failed downloading ${video.title}, ${id} -> ${download.message}` })
|
|
||||||
await redis.del(id)
|
|
||||||
return
|
|
||||||
} else {
|
|
||||||
const file = fs.readdirSync("./videos").find(f => f.includes(id))
|
|
||||||
if (file) {
|
|
||||||
fs.renameSync(`./videos/${file}`, `./videos/${id}.webm`)
|
|
||||||
logger.info({ message: `Downloaded ${video.title}, ${id}` })
|
|
||||||
|
|
||||||
const videoUrl = await upload.uploadVideo(`./videos/${id}.webm`)
|
|
||||||
logger.info({ message: `Uploaded ${video.title}, ${id}` })
|
|
||||||
fs.unlinkSync(`./videos/${id}.webm`)
|
|
||||||
|
|
||||||
await websocket.createDatabaseVideo(id, videoUrl)
|
|
||||||
await redis.del(id)
|
|
||||||
} else {
|
|
||||||
await redis.set(id, 'error')
|
|
||||||
logger.info({ message: `Couldn't find file for ${video.title}, ${id}` })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
|
|
||||||
async function delay(ms) {
|
|
||||||
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = { handleCheck, handleDownload }
|
|
Loading…
Reference in New Issue