加入视频下载,优化变量名称,

This commit is contained in:
emm
2022-09-06 21:30:30 +08:00
parent 63ab838f43
commit 6920aecf15
3 changed files with 378 additions and 87 deletions
+82 -21
View File
@@ -2,7 +2,7 @@
<div class="DashBoard" v-show="loadComplete">
<el-input v-model="link" placeholder="输入链接"/>
<br>
<el-button @click="query">查询本子</el-button>
<el-button @click="queryTask">查询任务</el-button>
<el-button @click="searchByLink">查找任务</el-button>
<br>
<hr>
@@ -27,7 +27,22 @@
</el-select>
</tr>
</table>
<el-button @click="post" v-if="preDownloadGallery.availableResolution">下载</el-button>
<el-button @click="postTask" v-if="preDownloadGallery.availableResolution">下载</el-button>
</el-dialog>
<el-dialog title="查询视频" v-model="preDownloadVideo">
<table>
<tr>视频名字:{{preDownloadVideo.name}}</tr>
<tr>视频网站: <el-link :href="preDownloadVideo.website">{{preDownloadVideo.website}}</el-link> </tr>
<tr>视频链接: <el-link :href="preDownloadVideo.link">{{preDownloadVideo.link}}</el-link></tr>
<tr>视频状态:{{preDownloadVideo.status}}</tr>
<tr v-if="!preDownloadVideo.resolution">
目标分辨率: <el-select v-model="targetResolution">
<el-option v-for="(resolution) in preDownloadVideo.availableResolution" :value="resolution" :label="resolution"/>
</el-select>
</tr>
</table>
<el-button @click="postTask" v-if="!preDownloadVideo.resolution">下载</el-button>
</el-dialog>
<div class="DashBoard" v-show="!loadComplete">
@@ -55,6 +70,10 @@ export default {
return store.getters.preDownloadGallery
})
let preDownloadVideo = computed(() => {
return store.getters.preDownloadVideo
})
const loadComplete = computed(() => {
return store.getters.loadComplete
})
@@ -63,29 +82,40 @@ export default {
return str1 + " " + str2
}
function post(){
if(link.value.trim() === ''){
ElMessage("请输入链接后再提交")
function postTask(){
if(!validateLink(link.value)){
ElMessage("链接错误")
return
}
if(targetResolution.value === ''){
ElMessage("请选择分辨率再提交")
return
}
let tempLink = coverLink(link.value)
if(link.value.includes("hentai")) {
store.dispatch("postGalleryTask", {link: tempLink, targetResolution: targetResolution.value})
targetResolution.value = ""
}
else {
let gid = link.value.split('/')[4]
if (!gid || !link.value.includes("hentai")) {
ElMessage("请检查链接输入是否正确")
}
else
store.dispatch("post", {link: link.value, targetResolution: targetResolution.value})
store.dispatch("postVideoTask", {link: tempLink, targetResolution: targetResolution.value})
targetResolution.value = ""
}
}
function query(){
if(link.value.trim() === ''){
ElMessage("请输入链接后再查询")
function queryTask(){
if(!validateLink(link.value)){
ElMessage("链接错误")
return
}
let tempLink
if(link.value.includes("hentai")) {
tempLink = coverLink(link.value)
store.dispatch("queryGalleryTask", tempLink)
}
else{
tempLink = coverLink(link.value)
store.dispatch("queryVideoTask", tempLink)
}
else
store.dispatch("query", link.value)
}
function validate(){
@@ -100,8 +130,8 @@ export default {
}
function searchByLink() {
if(link.value.trim() === ""){
ElMessage("请输入链接后查找")
if(!validateLink(link.value)){
ElMessage("请检查输入的链接")
}
else {
store.dispatch("searchByLink", link.value)
@@ -116,6 +146,36 @@ export default {
}, 500)
}
function coverLink(rawLink){
let tempLink = ""
if(rawLink.includes("hentai")) {
if (rawLink.includes("exhentai.org"))
tempLink = rawLink.replace("exhentai.org", "element-plus.org")
else if (rawLink.includes("e-hentai.org"))
tempLink = rawLink.replace("e-hentai.org", "element.org")
}
else if(rawLink.includes("xvideos.com") || rawLink.includes("pornhub.com")){
tempLink = rawLink.replace("xvideos.com", "xiaomi.com").
replace("cn.pornhub.com", "pixiv.com").
replace("pornhub.com", "pixiv.com")
}
return tempLink;
}
function validateLink(rawLink){
if(rawLink.trim() === "")
return false
if(rawLink.includes("hentai")){
return rawLink.includes("/g/")
}
else if(rawLink.includes("xvideos.com")){
return true
}
else if(rawLink.includes("pornhub.com")){
return rawLink.includes("view_video.php")
}
}
onMounted(() => {
const auth = localStorage.getItem("auth")
if(auth !== null){
@@ -123,8 +183,8 @@ export default {
}
})
return {post,
query,
return {postTask,
queryTask,
validate,
searchByLink,
searchByKeyword,
@@ -135,6 +195,7 @@ export default {
keyword,
isRemember,
preDownloadGallery,
preDownloadVideo,
targetResolution,
store
}
@@ -145,7 +206,7 @@ export default {
<style scoped>
.DashBoard{
width: auto;
height: 90vh;
height: 92vh;
background-color: ghostwhite;
text-align: center;
}
+99 -21
View File
@@ -1,13 +1,13 @@
<template>
<div class="side" style="width: 100%">
<span>下载历史</span>
<div v-show="loadComplete" class="load_complete" >
<el-table :data="data">
<span>{{showType}}历史</span>
<div v-show="loadComplete" class="load_complete">
<el-table :data="galleryTasks" v-show="isShowGalleryHistory">
<el-table-column type="expand">
<template #default="props">
名字:{{ props.row.name}} <br>
链接:<el-link :href="props.row.link">Link</el-link> <br>
链接:<el-link :href="props.row.link">链接</el-link> <br>
语言:{{props.row.language}} <br>
页数:{{props.row.pages}} <br>
文件大小:{{props.row.fileSize}}<br>
@@ -24,14 +24,48 @@
<el-table-column label="操作" width="250">
<template #default="scoped">
<span v-show="scoped.row.download">
<el-button @click="downloadGallery(scoped.row.download)">下载</el-button>
<el-button @click="downloadTask(scoped.row.download)">下载</el-button>
<el-button @click="deleteGallery(scoped.row.gid)">删除</el-button>
<el-button @click="onlineReader(scoped.row.name)">在线看</el-button>
<el-button @click="onlineGalleryReader(scoped.row.name)">在线看</el-button>
</span>
</template>
</el-table-column>
<el-table-column label="进度" width="60">
<el-table-column label="进度" width="80">
<template #default="scoped">
{{ scoped.row.progress }}
</template>
</el-table-column>
</el-table>
<el-table :data="videoTasks" v-show="isShowVideoHistory">
<el-table-column type="expand">
<template #default="props">
名字:{{props.row.name}} <br>
网站:{{props.row.website}} <br>
链接:<el-link :href="props.row.link">链接</el-link> <br>
文件大小:{{props.row.fileSize}} <br>
视频长度:{{props.row.duration}} <br>
分辨率:{{props.row.resolution}} <br>
</template>
</el-table-column>
<el-table-column label="名字" width="300">
<template #default="scoped">
{{scoped.row.name}}
</template>
</el-table-column>
<el-table-column label="操作" width="250">
<template #default="scoped">
<span v-show="scoped.row.download">
<el-button @click="downloadTask(scoped.row.download)">下载</el-button>
<el-button @click="deleteVideo(scoped.row.id)">删除</el-button>
<el-button @click="onlineVideoViewer(scoped.row.name)">在线看</el-button>
</span>
</template>
</el-table-column>
<el-table-column label="进度" width="80">
<template #default="scoped">
{{ scoped.row.progress }}
</template>
@@ -47,11 +81,14 @@
v-show="isEditing"
@blur="reverse()"
class="page"
ref="input"></el-input>
ref="inputNode"></el-input>
<span @click="reverse" v-show="!isEditing" class="page">{{page}}</span>
<el-button @click="next">+</el-button>
<el-button @click="toMax">{{max}}</el-button>
</el-col>
<el-col>
<el-button @click="changeShowType">切换</el-button>
</el-col>
</el-row>
</div>
<span v-show="!loadComplete" class="side">请输入授权码后再查看</span>
@@ -68,16 +105,31 @@ export default {
const targetPage = ref(1)
const isEditing = ref(false)
let input = ref(null)
let inputNode = ref(null)
let showType = ref("本子")
let data = computed(() => {
console.log(store.getters.task)
if(store.getters.task)
return store.getters.task
let galleryTasks = computed(() => {
if(store.getters.galleryTasks)
return store.getters.galleryTasks
else
return null
})
let videoTasks = computed(() => {
if(store.getters.videoTasks)
return store.getters.videoTasks
else
return null
})
let isShowVideoHistory = computed(() => {
return store.getters.showType === "video"
})
let isShowGalleryHistory = computed(() => {
return store.getters.showType === "gallery"
})
let min = computed(() => {
return store.getters.min
})
@@ -130,12 +182,12 @@ export default {
function reverse(){
isEditing.value = !isEditing.value
if(isEditing){
input.value.focus()
inputNode.value.focus()
}
targetPage.value = page.value
}
function downloadGallery(link){
function downloadTask(link){
window.open(link)
}
@@ -143,28 +195,54 @@ export default {
store.dispatch("deleteGallery", gid)
}
function onlineReader(name){
function deleteVideo(id){
store.dispatch("deleteVideo", id)
}
function onlineGalleryReader(name){
window.open("http://100.42.234.138:8080/1/gallery/" + encodeURI(name))
}
function onlineVideoViewer(name){
window.open("http://100.42.234.138:8080/1/video/" + encodeURI(name + ".mp4"))
}
return {data,
function changeShowType(){
if(isShowVideoHistory.value){
store.commit("_setShowType", "gallery")
showType.value = "本子"
}
else{
store.commit("_setShowType", "video")
showType.value = "视频"
}
}
return {galleryTasks,
videoTasks,
min,
max,
targetPage,
loadComplete,
page,
isEditing,
input,
inputNode,
isShowVideoHistory,
isShowGalleryHistory,
showType,
reverse,
changePage,
changeShowType,
toMax,
toMin,
previous,
next,
downloadGallery,
downloadTask,
deleteGallery,
onlineReader,
deleteVideo,
onlineGalleryReader,
onlineVideoViewer,
store
}
}
@@ -181,7 +259,7 @@ export default {
}
.pageChanger{
position: absolute;
top:92vh;
top:90vh;
left: 150px;
}
.page{