const Router = require("koa-router") const { getQqListData } = require("../util/getList/qq") 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("/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