const Router = require("koa-router") const {getQqListData} = require("../util/getList/qq") const {getVideoTotalLength} = require("../util/utils") const KoaSSEStream = require('koa-sse-stream'); const {dowload} = require("../util/download"); const {addDownList, getDownList, setDownState} = require("../util/sql/download"); const dayjs = require("dayjs") const router = new Router() // const dowloadlist = [] router.get("/test", async (ctx) => { let url = ctx.query.url ctx.body = getVideoTotalLength(url) }) router.get("/getQqList", async (ctx) => { let url = ctx.query.url let videoid = url.split("/") for(let i in videoid){ if(videoid[i] == "cover"){ videoid = videoid[i + 1].replace(".html") break } } let list = await getQqListData(url) ctx.body = list }) router.get("/startDown", async (ctx) => { let title = ctx.query.title let url = ctx.query.url let save = ctx.query.save // dowloadlist.push({ // title,url,save // }) // startDown() addDownList(title, url, save, new Date().getTime(), 0) ctx.body = { code: 0, msg: "添加成功" } }) // 连接池 const clientList = []; // koa-sse-stream 配置 const SSE_CONF = { maxClients: 5, // 最大连接数 pingInterval: 40000 // 重连时间 } router.get('/msg', KoaSSEStream(SSE_CONF), ctx => { // 每次连接会进行一个 push clientList.push(ctx.sse); if (clientList.length > 5) { // 超过5个删除最开始的一个 // todo 浏览器关闭后自动检测删除 clientList.shift() } }) let start = false function startDown(data) { start = true dowload(data, async (data2, isok) => { let name = data2.title clientList.forEach((i) => { i.send(isok ? `${name}下载完成` : data2) }) if (isok) { // dowloadlist.shift() await setDownState(data.id, 1) start = false } }) } setInterval(async () => { let dowloadlist = await getDownList() if (dowloadlist.length != 0 && !start) { startDown(dowloadlist[0]) } else if (dowloadlist.length == 0) { start = false } }, 1000) module.exports = router