add sqlite 保存下载历史
This commit is contained in:
		
							parent
							
								
									95f09a96b8
								
							
						
					
					
						commit
						b439920702
					
				
							
								
								
									
										
											BIN
										
									
								
								db/database.db
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								db/database.db
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										7
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								index.js
									
									
									
									
									
								
							@ -4,6 +4,7 @@ const static = require('koa-static')
 | 
				
			|||||||
app.use(static("./view/dist"))
 | 
					app.use(static("./view/dist"))
 | 
				
			||||||
const { koaBody } = require('koa-body');
 | 
					const { koaBody } = require('koa-body');
 | 
				
			||||||
const KoaSSEStream = require('koa-sse-stream');
 | 
					const KoaSSEStream = require('koa-sse-stream');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
app.use(koaBody());
 | 
					app.use(koaBody());
 | 
				
			||||||
app.use(async (ctx, next) => {
 | 
					app.use(async (ctx, next) => {
 | 
				
			||||||
    ctx.set('Access-Control-Allow-Origin', '*');
 | 
					    ctx.set('Access-Control-Allow-Origin', '*');
 | 
				
			||||||
@ -16,10 +17,10 @@ app.use(async (ctx, next) => {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
const index = require("./router/index.js")
 | 
					const index = require("./router/index.js")
 | 
				
			||||||
app.use(index.routes()).use(index.allowedMethods())
 | 
					app.use(index.routes()).use(index.allowedMethods())
 | 
				
			||||||
const videoInfo = require("./router/videoInfo.js")
 | 
					const videoInfo = require("./router/videoInfo.js");
 | 
				
			||||||
app.use(videoInfo.routes()).use(videoInfo.allowedMethods())
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					app.use(videoInfo.routes()).use(videoInfo.allowedMethods())
 | 
				
			||||||
app.listen(3050, "0.0.0.0");
 | 
					app.listen(3050, "0.0.0.0");
 | 
				
			||||||
 | 
					console.log("link: http://127.0.0.1:3050")
 | 
				
			||||||
@ -11,6 +11,7 @@
 | 
				
			|||||||
  "license": "ISC",
 | 
					  "license": "ISC",
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "axios": "^1.4.0",
 | 
					    "axios": "^1.4.0",
 | 
				
			||||||
 | 
					    "dayjs": "^1.11.8",
 | 
				
			||||||
    "koa": "^2.14.2",
 | 
					    "koa": "^2.14.2",
 | 
				
			||||||
    "koa-body": "^6.0.1",
 | 
					    "koa-body": "^6.0.1",
 | 
				
			||||||
    "koa-router": "^12.0.0",
 | 
					    "koa-router": "^12.0.0",
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										7
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										7
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							@ -4,6 +4,9 @@ dependencies:
 | 
				
			|||||||
  axios:
 | 
					  axios:
 | 
				
			||||||
    specifier: ^1.4.0
 | 
					    specifier: ^1.4.0
 | 
				
			||||||
    version: 1.4.0
 | 
					    version: 1.4.0
 | 
				
			||||||
 | 
					  dayjs:
 | 
				
			||||||
 | 
					    specifier: ^1.11.8
 | 
				
			||||||
 | 
					    version: 1.11.8
 | 
				
			||||||
  koa:
 | 
					  koa:
 | 
				
			||||||
    specifier: ^2.14.2
 | 
					    specifier: ^2.14.2
 | 
				
			||||||
    version: 2.14.2
 | 
					    version: 2.14.2
 | 
				
			||||||
@ -618,6 +621,10 @@ packages:
 | 
				
			|||||||
    engines: {node: '>= 14'}
 | 
					    engines: {node: '>= 14'}
 | 
				
			||||||
    dev: false
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /dayjs@1.11.8:
 | 
				
			||||||
 | 
					    resolution: {integrity: sha512-LcgxzFoWMEPO7ggRv1Y2N31hUf2R0Vj7fuy/m+Bg1K8rr+KAs1AEy4y9jd5DXe8pbHgX+srkHNS7TH6Q6ZhYeQ==}
 | 
				
			||||||
 | 
					    dev: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /debug@3.2.7:
 | 
					  /debug@3.2.7:
 | 
				
			||||||
    resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
 | 
					    resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
 | 
				
			||||||
    peerDependencies:
 | 
					    peerDependencies:
 | 
				
			||||||
 | 
				
			|||||||
@ -2,9 +2,10 @@ const Router = require("koa-router")
 | 
				
			|||||||
const { getQqListData } = require("../util/getList/qq")
 | 
					const { getQqListData } = require("../util/getList/qq")
 | 
				
			||||||
const KoaSSEStream = require('koa-sse-stream');
 | 
					const KoaSSEStream = require('koa-sse-stream');
 | 
				
			||||||
const { dowload } = require("../util/download");
 | 
					const { dowload } = require("../util/download");
 | 
				
			||||||
 | 
					const { addDownList, getDownList, setDownState } = require("../util/sql/download");
 | 
				
			||||||
 | 
					const dayjs = require("dayjs")
 | 
				
			||||||
const router = new Router()
 | 
					const router = new Router()
 | 
				
			||||||
const dowloadlist = []
 | 
					// const dowloadlist = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
router.get("/getQqList",async (ctx)=>{
 | 
					router.get("/getQqList",async (ctx)=>{
 | 
				
			||||||
    let url = ctx.query.url
 | 
					    let url = ctx.query.url
 | 
				
			||||||
@ -16,10 +17,11 @@ router.get("/startDown",async (ctx)=>{
 | 
				
			|||||||
    let title = ctx.query.title
 | 
					    let title = ctx.query.title
 | 
				
			||||||
    let url = ctx.query.url
 | 
					    let url = ctx.query.url
 | 
				
			||||||
    let save = ctx.query.save
 | 
					    let save = ctx.query.save
 | 
				
			||||||
    dowloadlist.push({
 | 
					    // dowloadlist.push({
 | 
				
			||||||
        title,url,save
 | 
					    //     title,url,save
 | 
				
			||||||
    })
 | 
					    // })
 | 
				
			||||||
    // startDown()
 | 
					    // startDown()
 | 
				
			||||||
 | 
					    addDownList(title,url,save,new Date().getTime(),0)
 | 
				
			||||||
    ctx.body={
 | 
					    ctx.body={
 | 
				
			||||||
        code:0,
 | 
					        code:0,
 | 
				
			||||||
        msg:"添加成功"
 | 
					        msg:"添加成功"
 | 
				
			||||||
@ -36,27 +38,31 @@ router.get('/msg', KoaSSEStream(SSE_CONF), ctx => {
 | 
				
			|||||||
    // 每次连接会进行一个 push
 | 
					    // 每次连接会进行一个 push
 | 
				
			||||||
    clientList.push(ctx.sse);
 | 
					    clientList.push(ctx.sse);
 | 
				
			||||||
    if(clientList.length > 5){
 | 
					    if(clientList.length > 5){
 | 
				
			||||||
        // 删除
 | 
					        // 超过5个删除最开始的一个
 | 
				
			||||||
 | 
					        // todo 浏览器关闭后自动检测删除
 | 
				
			||||||
        clientList.shift()
 | 
					        clientList.shift()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
let start = false
 | 
					let start = false
 | 
				
			||||||
function startDown(){
 | 
					function startDown(data){
 | 
				
			||||||
    start = true
 | 
					    start = true
 | 
				
			||||||
    dowload(dowloadlist[0],(data,isok)=>{
 | 
					    dowload(data,async (data2,isok)=>{
 | 
				
			||||||
        let name = dowloadlist[0].title
 | 
					        let name = data2.title
 | 
				
			||||||
        clientList.forEach((i)=>{
 | 
					        clientList.forEach((i)=>{
 | 
				
			||||||
            i.send(isok ? `${name}下载完成` : data )
 | 
					            i.send(isok ? `${name}下载完成` : data2 )
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        if(isok){
 | 
					        if(isok){
 | 
				
			||||||
            dowloadlist.shift()
 | 
					            // dowloadlist.shift()
 | 
				
			||||||
 | 
					            await setDownState(data.id,1)
 | 
				
			||||||
            start = false
 | 
					            start = false
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
setInterval(()=>{
 | 
					setInterval(async ()=>{
 | 
				
			||||||
 | 
					    let dowloadlist = await getDownList()
 | 
				
			||||||
 | 
					    console.log(dowloadlist)
 | 
				
			||||||
    if(dowloadlist.length != 0 && !start){
 | 
					    if(dowloadlist.length != 0 && !start){
 | 
				
			||||||
        startDown()
 | 
					        startDown(dowloadlist[0])
 | 
				
			||||||
    }else if(dowloadlist.length == 0){
 | 
					    }else if(dowloadlist.length == 0){
 | 
				
			||||||
        start = false
 | 
					        start = false
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -13,7 +13,7 @@ router.get("/search",async (ctx)=>{
 | 
				
			|||||||
    ctx.body = info
 | 
					    ctx.body = info
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
route.get("/getinfo",async (ctx)=>{
 | 
					router.get("/getinfo",async (ctx)=>{
 | 
				
			||||||
    let url = ctx.query.url
 | 
					    let url = ctx.query.url
 | 
				
			||||||
    let info = await getinfo(url)
 | 
					    let info = await getinfo(url)
 | 
				
			||||||
    ctx.body = info
 | 
					    ctx.body = info
 | 
				
			||||||
 | 
				
			|||||||
@ -1,15 +1,39 @@
 | 
				
			|||||||
const sqlite = require("sqlite3")
 | 
					const sqlite = require("sqlite3")
 | 
				
			||||||
const path = require("path")
 | 
					const path = require("path");
 | 
				
			||||||
database = new sqlite.Database(path.join(__dirname,"/db"), function(e) {
 | 
					const { cwd } = require("process");
 | 
				
			||||||
 | 
					let p = path.join(cwd(),"/db/database.db")
 | 
				
			||||||
 | 
					database = new sqlite.Database(p, function(err) {
 | 
				
			||||||
    if (err) throw err;
 | 
					    if (err) throw err;
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function run(){
 | 
					function run(){
 | 
				
			||||||
    database.run(...arguments)
 | 
					    let args = arguments
 | 
				
			||||||
 | 
					    console.log(args)
 | 
				
			||||||
 | 
					    return new Promise((res,err)=>{
 | 
				
			||||||
 | 
					        database.run(...args,(error)=>{
 | 
				
			||||||
 | 
					            if(error){
 | 
				
			||||||
 | 
					                err(error)
 | 
				
			||||||
 | 
					            }else{
 | 
				
			||||||
 | 
					                res("添加成功")
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function 
 | 
					function getAll(sql){
 | 
				
			||||||
 | 
					    let args = arguments
 | 
				
			||||||
 | 
					    return new Promise((res,err)=>{
 | 
				
			||||||
 | 
					        database.all(...args,function (error,data){
 | 
				
			||||||
 | 
					            if(error){
 | 
				
			||||||
 | 
					                err(error)
 | 
				
			||||||
 | 
					            }else{
 | 
				
			||||||
 | 
					                res(data)
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = {
 | 
					module.exports = {
 | 
				
			||||||
    run
 | 
					    run,
 | 
				
			||||||
 | 
					    getAll
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -1,6 +1,28 @@
 | 
				
			|||||||
const { run } = require("./base");
 | 
					const { run, getAll } = require("./base");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function addDownList(title,url,save){
 | 
					function addDownList(title,url,save,downDate,isOk){
 | 
				
			||||||
    let sql = `insert into download(title,url,save) value(?,?,?)`
 | 
					    let sql = `insert into download(title,url,save,downDate,isOk) values(?,?,?,?,?)`
 | 
				
			||||||
    run(sql,title,url,save)
 | 
					    run(sql,title,url,save,downDate,isOk)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async function getDownList(){
 | 
				
			||||||
 | 
					    let sql = `select * from download where isOk == 0`
 | 
				
			||||||
 | 
					    try{
 | 
				
			||||||
 | 
					        let list = await getAll(sql)
 | 
				
			||||||
 | 
					        return list
 | 
				
			||||||
 | 
					    }catch(err){
 | 
				
			||||||
 | 
					        console.error(err)
 | 
				
			||||||
 | 
					        return []
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async function setDownState(id,state){
 | 
				
			||||||
 | 
					    let sql = `update download set isOk = ? where id = ?`
 | 
				
			||||||
 | 
					    await run(sql,state,id)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    addDownList,
 | 
				
			||||||
 | 
					    getDownList,
 | 
				
			||||||
 | 
					    setDownState
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -1,16 +1,34 @@
 | 
				
			|||||||
const { run } = require("./base");
 | 
					const { run } = require("./base");
 | 
				
			||||||
 | 
					const fs = require("fs");
 | 
				
			||||||
 | 
					const path = require("path")
 | 
				
			||||||
function initTable(){
 | 
					function initTable(){
 | 
				
			||||||
    // 创建下载列表
 | 
					    // 创建下载列表
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * id 
 | 
				
			||||||
 | 
					     * title 剧集标题
 | 
				
			||||||
 | 
					     * url 剧集链接
 | 
				
			||||||
 | 
					     * save 保存地址
 | 
				
			||||||
 | 
					     * downDate 添加下载日期 时间戳
 | 
				
			||||||
 | 
					     * isOk 是否下载完成 0 未完成 1 完成
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    let sql = `create table download (
 | 
					    let sql = `create table download (
 | 
				
			||||||
        id INT PRIMARY KEY NOT NULL autoincrement,
 | 
					        id INT PRIMARY KEY NOT NULL autoincrement,
 | 
				
			||||||
        title VARCHAR(255) not null,
 | 
					        title VARCHAR(255) not null,
 | 
				
			||||||
        url varchar(255) not null,
 | 
					        url varchar(255) not null,
 | 
				
			||||||
        save varcahr(255) not null
 | 
					        save varcahr(255) not null,
 | 
				
			||||||
 | 
					        downDate INTEGER not null,
 | 
				
			||||||
 | 
					        isOk INTEGER not null
 | 
				
			||||||
    )`
 | 
					    )`
 | 
				
			||||||
    run(sql)
 | 
					    run(sql)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = {
 | 
					function init(){
 | 
				
			||||||
    initTable
 | 
					    let isexists = fs.existsSync(path.join(__dirname,"/db/database.db"))
 | 
				
			||||||
 | 
					    if(!isexists){
 | 
				
			||||||
 | 
					        initTable()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					module.exports = {
 | 
				
			||||||
 | 
					    init
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user