lionwebsite-frontend-desktop/src/store/index.js
2022-09-22 21:39:40 +08:00

426 lines
13 KiB
JavaScript

import vuex from "vuex"
import axios from "axios"
import {ElMessage} from "element-plus"
import qs from "qs"
const BaseUrl = "http://downloader.lionwebsite.xyz/"
const GalleryTaskHandlerUrl = BaseUrl + "GalleryTaskHandler/"
const VideoTaskHandlerUrl = BaseUrl + "VideoTaskHandler/"
const actions = {
updateGalleryTasks(context){
const AuthCode = context.state.AuthCode
axios.get(GalleryTaskHandlerUrl, {
params:{
param:"",
type:"all",
AuthCode
}
}).then((res) => {
let temp = []
context.commit("_emptyGalleryTasks")
JSON.parse(res.data.data).forEach((task) => {
temp.push(task)
})
context.commit("_updateGalleryTasks", temp)
})
},
updateVideoTasks(context){
const AuthCode = context.state.AuthCode
axios.get(VideoTaskHandlerUrl, {
params:{
param:"123",
type:"all",
AuthCode
}
}).then(res => {
let temp = []
context.commit("_emptyVideoTasks")
JSON.parse(res.data.data).forEach(task => {
temp.push(task)
})
context.commit("_updateVideoTasks", temp)
})
},
postGalleryTask(context, data){
axios.post(GalleryTaskHandlerUrl, qs.stringify({
AuthCode:context.state.AuthCode,
link:data.link,
targetResolution:data.targetResolution
})).then((res) => {
if(res.data.result === "success") {
ElMessage("提交成功")
context.commit("_setPreDownloadGallery", {gallery:false, resolution:data.targetResolution})
}
else{
if(res.data.data)
ElMessage(res.data.data)
else{
ElMessage("提交失败")
}
}
})
},
postVideoTask(context, data){
axios.post(VideoTaskHandlerUrl, qs.stringify({
AuthCode:context.state.AuthCode,
link: data.link,
targetResolution: data.targetResolution
})).then((res) => {
if(res.data.result === "success") {
ElMessage("提交成功")
context.commit("_setPreDownloadVideo", {video:false, resolution:data.targetResolution})
}
else{
if(res.data.data)
ElMessage(res.data.data)
else{
ElMessage("提交失败")
}
}
})
},
queryGalleryTask(context, link){
const AuthCode = context.state.AuthCode
axios.get(GalleryTaskHandlerUrl, {
params:{
param:link,
type:'link',
AuthCode
}
}).then((res) => {
if(res.data.result === 'success'){
const gallery = JSON.parse(res.data.data)
context.commit("_setPreDownloadGallery", {gallery})
}
else
ElMessage("查询失败")
})
},
queryVideoTask(context, link){
const AuthCode = context.state.AuthCode
axios.get(VideoTaskHandlerUrl, {
params:{
param: link,
type:"link",
AuthCode
}
}).then((res) => {
if(res.data.result === 'success'){
const video = JSON.parse(res.data.data)
context.commit("_setPreDownloadVideo", {video})
}
else
ElMessage("查询失败")
})
},
validate(context, AuthCode){
axios.post(BaseUrl + "validate?AuthCode=" + AuthCode).then((res)=>{
if(res.data.result === 'success'){
context.commit("_authed", AuthCode, context)
context.dispatch("updateGalleryTasks").then()
context.dispatch("updateVideoTasks").then()
context.dispatch("loadMaskDomain").then()
setInterval(() => {
context.dispatch("update").then()
}, 30000)
}
else{
context.commit("_unAuthed")
}
})
},
update(context){
if(context.state.showType === "video")
context.dispatch("updateVideoTasks").then()
else
context.dispatch("updateGalleryTasks").then()
},
loadMaskDomain(context){
axios.get(BaseUrl + "maskDomain").then((res) => {
if(res.data.result === "success"){
context.commit("_setMaskDomain", JSON.parse(res.data.data))
}
})
},
searchByLink(context, link){
context.commit("_searchByLink", link)
},
searchByKeyword(context, keyword){
context.commit("_searchByKeyword", keyword)
},
deleteGallery(context, gid){
axios.delete(GalleryTaskHandlerUrl, {
params:{
AuthCode:state.AuthCode,
gid
}}).then((res) => {
if(res.data.result === "success"){
ElMessage("删除成功")
context.commit("_deleteGallery", gid)
}
else{
ElMessage(res.data.data)
}
})
},
deleteVideo(context, id){
axios.delete(VideoTaskHandlerUrl, {
params:{
AuthCode:state.AuthCode,
id
}
}).then((res) => {
if(res.data.result === "success"){
ElMessage("删除成功")
context.commit("_deleteVideo", id)
}
else{
ElMessage(res.data.data)
}
})
}
}
const mutations = {
_emptyGalleryTasks(state){
state.totalGalleryTask.splice(0)
},
_emptyVideoTasks(state){
state.totalVideoTask.splice(0)
},
_updateGalleryTasks(state, tasks){
const downloadUrl = GalleryTaskHandlerUrl + "file?link="
tasks.forEach((task) => {
if(task.status === "已提交"){
task.progress = "已提交"
}
else if(task.status === "下载中"){
task.progress = (Math.round((task.proceeding / task.pages)*100)).toString() + "%"
}
else if(task.status === "下载完成"){
task.progress = "下载完成"
let tempLink
let url = new URL(task.link)
state.maskDomain.forEach((mask) => {
if(url.host === mask['raw'])
tempLink = task.link.replace(mask['raw'], mask['mask'])
})
task.download = downloadUrl + tempLink + "&AuthCode=" + state.AuthCode
}
state.totalGalleryTask.push(task)
})
if(state.isAuth && !state.loadComplete){
state.loadComplete = true
ElMessage("加载完成")
}
},
_updateVideoTasks(state, tasks){
const downloadUrl = VideoTaskHandlerUrl + "file?link="
tasks.forEach((task) => {
task.progress = task.status
if(task.status === "下载完成"){
let tempLink
let url = new URL(task.link)
state.maskDomain.forEach((mask) => {
if(url.host === mask['raw'])
tempLink = task.link.replace(mask['raw'], mask['mask'])
})
task.download = downloadUrl + tempLink + "&AuthCode=" + state.AuthCode
}
state.totalVideoTask.push(task)
})
},
_changePage(state, targetPage){
state.page = targetPage
},
_authed(state, AuthCode){
state.AuthCode = AuthCode
state.isAuth = true
ElMessage("验证成功,加载中")
},
_unAuthed(state){
state.isAuth = false
state.AuthCode = ""
ElMessage("授权码错误")
localStorage.removeItem("auth")
},
_searchByLink(state, link){
let tasks
if(state.showType === "gallery") {
tasks = state.totalGalleryTask
}
else
tasks = state.totalVideoTask
let i = 0
let found = false
for (i = 0; i < tasks.length; i++) {
if (tasks[i].link === link) {
state.page = Math.floor(i / state.length) + 1
found = true
break
}
}
if(!found){
ElMessage("未找到此任务")
}
else{
ElMessage("已跳转到该任务所在页数")
}
},
_searchByKeyword(state, keyword){
state.searchTask.splice(0)
state.page = 1
let tasks
if(state.showType === "video")
tasks = state.totalVideoTask
else
tasks = state.totalGalleryTask
tasks.forEach((task) => {
if(task.name.includes(keyword))
state.searchTask.push(task)
})
if(state.searchTask.length === 0){
ElMessage("未找到该关键字的任务")
}
},
_deleteGallery(state, gid){
state.totalGalleryTask.forEach((item, index, arr) => {
if(item.gid === gid){
arr.splice(index, 1)
}
})
},
_deleteVideo(state, id){
state.totalVideoTask.forEach((item, index, arr) => {
if(item.id === id)
arr.splice(index, 1)
})
},
_setPreDownloadGallery(state,data){
if(data.gallery === false) {
state.preDownloadGallery.resolution = data.resolution
state.preDownloadGallery.fileSize = "等待下载完成后再查看"
state.totalGalleryTask.push(state.preDownloadGallery)
}
state.preDownloadGallery = data.gallery
},
_setPreDownloadVideo(state,data){
if(data.video === false) {
state.preDownloadVideo.resolution = data.resolution
state.preDownloadVideo.fileSize = "下载完成后再查看"
state.preDownloadVideo.duration = "下载完成后再查看"
state.totalVideoTask.push(state.preDownloadVideo)
}
state.preDownloadVideo = data.video
},
_setShowType(state, showType){
state.showType = showType
},
_setMaskDomain(state, maskDomain){
state.maskDomain = maskDomain
},
_openHistoryPanel(state){
state.showHistory = true
},
_closeHistoryPanel(state){
state.showHistory = false
}
}
const state = {
totalGalleryTask:[], //存放本子数据的数组
preDownloadGallery:false, //准备下载的本子
totalVideoTask:[], //存放视频数据的数组
preDownloadVideo:false, //准备下载的视频
page:1, //当前页数
length:8, //每页能有多少个链接
isAuth:false, //是否授权
AuthCode:'', //授权码
loadComplete:false, //是否加载完成
isInclude:false, //是否搜索到任务
searchTask:[], //搜索到的任务
showHistory:'', //是否打开面板
showType:"gallery",
maskDomain:[]
}
const getters = {
galleryTasks(state){
if(state.searchTask.length !== 0)
return state.searchTask.slice((state.page-1)*state.length, state.page*state.length)
if(state.totalGalleryTask.length !== 0)
return state.totalGalleryTask.slice((state.page-1)*state.length, state.page*state.length)
return null
},
videoTasks(state){
if(state.searchTask.length !== 0)
return state.searchTask.slice((state.page-1)*state.length, state.page*state.length)
if(state.totalVideoTask.length !== 0)
return state.totalVideoTask.slice((state.page-1)*state.length, state.page*state.length)
return null
},
min(){
return 1
},
max(state){
let max = 0
let tasks
if(state.searchTask.length !== 0){
tasks = state.searchTask
}
else if(state.showHistory === "gallery")
if(state.totalGalleryTask.length !== 0)
tasks = state.totalGalleryTask
else if(state.showHistory === "video")
if(state.totalVideoTask.length)
tasks = state.totalVideoTask
if(!tasks)
return 1
max = Math.floor(tasks.length/state.length)
if(tasks.length % state.length !== 0){
max += 1
}
return max
},
isAuth(state){
return state.isAuth
},
page(state){
return state.page
},
loadComplete(state){
return state.loadComplete
},
preDownloadGallery(state){
return state.preDownloadGallery
},
preDownloadVideo(state){
return state.preDownloadVideo
},
showHistory(state){
return state.showHistory
},
showType(state){
return state.showType
},
maskDomain(state){
return state.maskDomain
}
}
export default new vuex.Store({
actions,
mutations,
state,
getters
})