From f4b94a66b4d284a775800cbea50ee87ddeaa5eea Mon Sep 17 00:00:00 2001 From: chuzhongzai Date: Thu, 28 Dec 2023 16:34:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=9B=E5=BC=83=E8=BD=AE=E8=AF=A2=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E7=94=A8websocket=E8=8E=B7=E5=8F=96=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E8=BF=9B=E5=BA=A6;=E9=83=A8=E5=88=86=E4=BC=98=E5=8C=96;?= =?UTF-8?q?=E5=8E=BB=E9=99=A4=E6=AE=8B=E7=95=99=E7=9A=84=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E5=88=A4=E6=96=AD;=E4=BF=AE=E5=A4=8D=E5=8E=BB=E9=99=A4?= =?UTF-8?q?=E4=B8=B4=E6=97=B6=E6=9C=AC=E5=AD=90=E6=97=B6=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E4=B8=8D=E5=AD=98=E5=9C=A8=E7=9A=84=E9=A2=84=E8=A7=88=E5=9B=BE?= =?UTF-8?q?(=E5=90=8C=E6=AD=A5=E6=9B=B4=E6=96=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/DashBoard.vue | 2 +- src/components/OnlineReader.vue | 1 - src/components/Side.vue | 11 +- src/store/index.js | 197 ++++++++++++++------------------ 4 files changed, 90 insertions(+), 121 deletions(-) diff --git a/src/components/DashBoard.vue b/src/components/DashBoard.vue index db0be17..e7fd0ad 100644 --- a/src/components/DashBoard.vue +++ b/src/components/DashBoard.vue @@ -35,7 +35,7 @@ + :src="chosenGallery.thumb_link !== undefined ? 'https://downloader.lionwebsite.xyz/GalleryManage/ehThumbnail?path=' + chosenGallery.thumb_link: ''"/> 本子名字:{{chosenGallery.name}}本子页数:{{chosenGallery.pages}} diff --git a/src/components/OnlineReader.vue b/src/components/OnlineReader.vue index b6fdc12..ecf77d1 100644 --- a/src/components/OnlineReader.vue +++ b/src/components/OnlineReader.vue @@ -93,7 +93,6 @@ function set_current_page(page){ :preview-src-list="links" :initial-index="i" @switch="switch_page" @show="set_current_page(i)" loading="lazy"/>
{{lengthPerPage * index + i + 1}} - diff --git a/src/components/Side.vue b/src/components/Side.vue index 87e962d..592c863 100644 --- a/src/components/Side.vue +++ b/src/components/Side.vue @@ -103,14 +103,11 @@ @@ -124,8 +121,6 @@ import axios from "axios"; import {ElMessage} from "element-plus"; import OnlineReader from "./OnlineReader.vue"; -let GalleryManagePrefix = "https://downloader.lionwebsite.xyz/GalleryManage/" - //输入 let inputNode = ref(null) //是否正在编辑页数 diff --git a/src/store/index.js b/src/store/index.js index 01913b2..8ec4851 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -6,32 +6,15 @@ const BaseUrl = "https://downloader.lionwebsite.xyz/" const GalleryManageUrl = BaseUrl + "GalleryManage" const actions = { - updateGalleryTasks(context, type){ + updateGalleryTasks(context){ axios.get(GalleryManageUrl, { params:{ - type, - AuthCode: state.AuthCode + AuthCode: state.AuthCode, + type: 'all' } }).then((res) => { - if(res.data.result === "success") { - let tasks = JSON.parse(res.data.data) - if (type === "all" && state.galleryRefreshTimer === 0) { //判断是否有未下载完成的本子以及定时更新是否开启 - for (let i = tasks.length - 1; i > tasks.length - 11; i--) //从后往前遍历十个本子,查看是否有未下载完成的本子 - if (tasks[i].status !== "下载完成") { - state.galleryRefreshTimer = setInterval(() => { - context.dispatch("updateGalleryTasks", "undone").then() - }, 20000) - break - } - } - context.commit("_updateGalleryTasks", {tasks, type}) - } - - else if(type === 'undone') { - context.dispatch("updateGalleryTasks", "all").then() - clearInterval(state.galleryRefreshTimer) - state.galleryRefreshTimer = 0 - } + if(res.data.result === "success") + context.commit("_updateGalleryTasks", JSON.parse(res.data.data)) }) }, postGalleryTask(context, data){ @@ -43,17 +26,12 @@ const actions = { ElMessage("提交成功") context.commit("_setChosenGallery", {gallery: false, resolution: data.targetResolution}) - if(state.galleryRefreshTimer === 0) - state.galleryRefreshTimer = setInterval(() => { - context.dispatch("updateGalleryTasks", "undone").then() - }, 20000) } - else{ + else if(res.data.data) ElMessage(res.data.data) else ElMessage("提交失败") - } }) }, queryGalleryTask(context, link){ @@ -79,14 +57,31 @@ const actions = { context.commit("_authed", {AuthCode, ...data}) //初始化 context.dispatch("loadWeekUsedAmount").then() - context.dispatch("updateGalleryTasks", "all").then(() => confirmCurrentTask(context.state)) - - //手机不需要设置宽度 + context.dispatch("updateGalleryTasks").then(() => confirmCurrentTask(context.state)) + context.dispatch("initWebsocket").then() } else context.commit("_unAuthed") }) }, + initWebsocket(context){ + state.websocket = new WebSocket("wss://downloader.lionwebsite.xyz/ws/") + state.websocket.onopen = () => { + state.websocket.send("DownloaderWebsocket") + } + + state.websocket.onmessage = (event) => { + let message = JSON.parse(event.data) + + switch (message.type){ + case "updateTasks": + context.commit("_updateGalleryTaskProceeding", message.data) + break + case "fullUpdate": + context.dispatch("updateGalleryTasks").then() + } + } + }, loadWeekUsedAmount(context){ axios.get(GalleryManageUrl + "/weekUsedAmount", { params: { @@ -183,95 +178,71 @@ const mutations = { state.collectGallery[index].isCollect = false state.collectGallery.splice(index, 1) }, - _updateGalleryTasks(state, data){ - let {tasks, type} = data - if(type === 'all') { - state.totalGalleryTask.splice(0) - state.collectGallery.slice(0) - state.downloadGallery.splice(0) + _updateGalleryTasks(state, tasks){ + state.totalGalleryTask.splice(0) + state.collectGallery.slice(0) + state.downloadGallery.splice(0) - tasks.forEach((task) => { - //处理名字 - task.shortName = getShortname(task.name) - task.thumb_link = GalleryManageUrl + "/ehThumbnail?path=" + task.thumb_link + tasks.forEach((task) => { + //处理名字 + task.shortName = getShortname(task.name) + task.thumb_link = GalleryManageUrl + "/ehThumbnail?path=" + task.thumb_link - //处理进度相关 - switch (task.status) { - case "已提交": - task.progress = "已提交" - break; - case "下载中": - task.progress = (Math.round((task.proceeding / task.pages) * 100)).toString() + "%" - break; - case "下载完成": - task.progress = "下载完成" - task.download = GalleryManageUrl + "/file/" + encodeURI(task.name) + ".zip?AuthCode=" + state.AuthCode + "&gid=" + task.gid - break; - case "压缩中": - task.progress = "压缩中" - break - } + //处理进度相关 + switch (task.status) { + case "已提交": + case "压缩中": + task.progress = task.status + break; + case "下载中": + task.progress = (Math.round((task.proceeding / task.pages) * 100)).toString() + "%" + break; + case "下载完成": + task.progress = task.status + task.download = GalleryManageUrl + "/file/" + encodeURI(task.name) + ".zip?AuthCode=" + state.AuthCode + "&gid=" + task.gid + break; + } - //处理时间戳 - task.createTimeDisplay = new Date(task.createTime * 1000).toLocaleString("zh") + //处理时间戳 + task.createTimeDisplay = new Date(task.createTime * 1000).toLocaleString("zh") - //处理是否收藏 - if('isCollect' in task) - state.collectGallery.push(task) - else - task.isCollect = false + //处理是否收藏 + if('isCollect' in task) + state.collectGallery.push(task) + else + task.isCollect = false - //处理是否下载 - if(task.downloader === state.userId) - state.downloadGallery.push(task) + //处理是否下载 + if(task.downloader === state.userId) + state.downloadGallery.push(task) - state.totalGalleryTask.push(task) - }) - } else { - let tempArray = Array.from(state.totalGalleryTask) - state.totalGalleryTask.splice(0) - let preDeleteIndex - tempArray.forEach((task) => { - preDeleteIndex = -1 - if(task.status !== "下载完成") - for(let i=0; i < tasks.length; i++) - if(tasks[i] !== undefined && tasks[i].name === task.name) { - preDeleteIndex = i - task.status = tasks[i].status - task.proceeding = tasks[i].proceeding - if (task.proceeding === 0) - task.progress = task.status - else - task.progress = (Math.round((task.proceeding / task.pages) * 100)).toString() + "%" - } + state.totalGalleryTask.push(task) + }) - if(preDeleteIndex !== -1) - delete tasks[preDeleteIndex] - state.totalGalleryTask.push(task) - }) - } - - switch (state.sortType) { - case "name": - state.totalGalleryTask = state.totalGalleryTask.sort((before, after) => { - return before.name > after.name ? 1: -1 - }) - break - case "shortName": - state.totalGalleryTask = state.totalGalleryTask.sort((before, after) => { - return before.shortName > after.shortName ? 1: -1 - }) - break - case "createTime": - state.totalGalleryTask = state.totalGalleryTask.sort((before, after) => { - return before.createTime - after.createTime - }) - } + sortTasks(state) if(state.isAuth && !state.loadComplete){ state.loadComplete = true ElMessage("加载完成") } }, + _updateGalleryTaskProceeding(state, tasks){ + let galleries = Array.from(state.totalGalleryTask) + state.totalGalleryTask.splice(0) + galleries.forEach((gallery) => { + if(gallery.status !== '下载完成') + tasks.forEach((task) => { + if(task.gid === gallery.gid){ + gallery.status = status[task.status] + gallery.proceeding = task.proceeding + if(gallery.status === '下载中') + gallery.progress = (Math.round((gallery.proceeding / gallery.pages) * 100)).toString() + "%" + else + gallery.progress = gallery.status + } + }) + state.totalGalleryTask.push(gallery) + }) + }, _changePage(state, targetPage){ state.page = targetPage }, @@ -352,7 +323,7 @@ const mutations = { state.chosenGallery.createTimeDisplay = "等待下载完成后再查看" state.chosenGallery.progress = "已提交" state.chosenGallery.downloader = state.userId - state.chosenGallery.downloader = state.userId + state.chosenGallery.thumb_link = GalleryManageUrl + "/ehThumbnail?path=" + state.chosenGallery.thumb_link state.totalGalleryTask.push(state.chosenGallery) state.downloadGallery.push(state.chosenGallery) } @@ -397,6 +368,8 @@ const mutations = { } const state = { + websocket: {}, //websocket + totalGalleryTask: [], //存放本子数据的数组 chosenGallery: false, //准备下载的本子 thumbnailGallery: {}, //缩略图本子 @@ -528,7 +501,7 @@ function sortTasks(state){ }) break case "createTime": - state.currentTasks = state.currentTasks.sort((before, after) => { + state.currentTasks = state.currentTasks.sort((before, after) => { return before.createTime - after.createTime }) } @@ -541,4 +514,6 @@ function deleteTask(tasks, key, value){ tasks[j].splice(i, 1) break } -} \ No newline at end of file +} + +let status = ['已提交', '下载中', '等待压缩', '压缩中', '下载完成'] \ No newline at end of file