mirror of
https://github.com/Cp0204/quark-auto-save.git
synced 2026-01-18 19:00:44 +08:00
Compare commits
1 Commits
81d5d3c1c7
...
32e4984438
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
32e4984438 |
@ -235,17 +235,14 @@ def get_task_suggestions():
|
|||||||
return jsonify({"success": False, "message": "未登录"})
|
return jsonify({"success": False, "message": "未登录"})
|
||||||
query = request.args.get("q", "").lower()
|
query = request.args.get("q", "").lower()
|
||||||
deep = request.args.get("d", "").lower()
|
deep = request.args.get("d", "").lower()
|
||||||
net_data = config_data.get("source", {}).get("net", {})
|
|
||||||
cs_data = config_data.get("source", {}).get("cloudsaver", {})
|
cs_data = config_data.get("source", {}).get("cloudsaver", {})
|
||||||
ps_data = config_data.get("source", {}).get("pansou", {})
|
ps_data = config_data.get("source", {}).get("pansou", {})
|
||||||
|
|
||||||
def net_search():
|
def net_search():
|
||||||
if str(net_data.get("enable", "true")).lower() != "false":
|
|
||||||
base_url = base64.b64decode("aHR0cHM6Ly9zLjkxNzc4OC54eXo=").decode()
|
base_url = base64.b64decode("aHR0cHM6Ly9zLjkxNzc4OC54eXo=").decode()
|
||||||
url = f"{base_url}/task_suggestions?q={query}&d={deep}"
|
url = f"{base_url}/task_suggestions?q={query}&d={deep}"
|
||||||
response = requests.get(url)
|
response = requests.get(url)
|
||||||
return response.json()
|
return response.json()
|
||||||
return []
|
|
||||||
|
|
||||||
def cs_search():
|
def cs_search():
|
||||||
if (
|
if (
|
||||||
@ -269,9 +266,9 @@ def get_task_suggestions():
|
|||||||
return []
|
return []
|
||||||
|
|
||||||
def ps_search():
|
def ps_search():
|
||||||
if ps_data.get("server"):
|
if (ps_data.get("server")):
|
||||||
ps = PanSou(ps_data.get("server"))
|
ps = PanSou(ps_data.get("server"))
|
||||||
return ps.search(query, deep == "1")
|
return ps.search(query)
|
||||||
return []
|
return []
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
@ -11,6 +11,5 @@ def iso_to_cst(iso_time_str: str) -> str:
|
|||||||
str: CST(China Standard Time) 时间字符串
|
str: CST(China Standard Time) 时间字符串
|
||||||
"""
|
"""
|
||||||
dt = datetime.fromisoformat(iso_time_str)
|
dt = datetime.fromisoformat(iso_time_str)
|
||||||
tz = timezone(timedelta(hours=8))
|
dt_cst = dt.astimezone(timezone(timedelta(hours=8)))
|
||||||
dt_cst = dt if dt.astimezone(tz) > datetime.now(tz) else dt.astimezone(tz)
|
|
||||||
return dt_cst.strftime("%Y-%m-%d %H:%M:%S") if dt_cst.year >= 1970 else ""
|
return dt_cst.strftime("%Y-%m-%d %H:%M:%S") if dt_cst.year >= 1970 else ""
|
||||||
|
|||||||
@ -14,7 +14,7 @@ class PanSou:
|
|||||||
self.server = server
|
self.server = server
|
||||||
self.session = requests.Session()
|
self.session = requests.Session()
|
||||||
|
|
||||||
def search(self, keyword: str, refresh: bool = False) -> list:
|
def search(self, keyword: str) -> list:
|
||||||
"""搜索资源
|
"""搜索资源
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@ -25,7 +25,7 @@ class PanSou:
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
url = f"{self.server.rstrip('/')}/api/search"
|
url = f"{self.server.rstrip('/')}/api/search"
|
||||||
params = {"kw": keyword, "cloud_types": ["quark"], "res": "merge", "refresh": refresh}
|
params = {"kw": keyword, "cloud_types": ["quark"], "res": "merge", "refresh": True}
|
||||||
response = self.session.get(url, params=params)
|
response = self.session.get(url, params=params)
|
||||||
result = response.json()
|
result = response.json()
|
||||||
if result.get("code") == 0:
|
if result.get("code") == 0:
|
||||||
|
|||||||
@ -198,35 +198,12 @@
|
|||||||
|
|
||||||
<div class="row title" title="资源搜索服务配置,用于任务名称智能搜索">
|
<div class="row title" title="资源搜索服务配置,用于任务名称智能搜索">
|
||||||
<div class="col-10">
|
<div class="col-10">
|
||||||
<h2 style="display: inline-block;"><i class="bi bi-search"></i> 资源搜索</h2>
|
<h2 style="display: inline-block;"><i class="bi bi-search"></i> CloudSaver</h2>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group row mb-0" style="display:flex; align-items:center;">
|
|
||||||
<div data-toggle="collapse" data-target="#collapse_net" aria-expanded="true" aria-controls="collapse_net">
|
|
||||||
<div class="btn btn-block text-left">
|
|
||||||
<i class="bi bi-caret-right-fill"></i> 网络公开搜索
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="collapse show ml-3" id="collapse_net">
|
|
||||||
<div class="form-group row">
|
|
||||||
<label class="col-sm-2 col-form-label">启用</label>
|
|
||||||
<div class="col-sm-10 d-flex align-items-center">
|
|
||||||
<input type="checkbox" class="form-check-input" v-model="formData.source.net.enable" placeholder="是否启用网络公开搜索,默认启用">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group row mb-0" style="display:flex; align-items:center;">
|
|
||||||
<div data-toggle="collapse" data-target="#collapse_cloudsaver" aria-expanded="true" aria-controls="collapse_cloudsaver">
|
|
||||||
<div class="btn btn-block text-left">
|
|
||||||
<i class="bi bi-caret-right-fill"></i> CloudSaver
|
|
||||||
<span class="badge badge-pill badge-light">
|
<span class="badge badge-pill badge-light">
|
||||||
<a href="https://github.com/Cp0204/quark-auto-save/wiki/CloudSaver搜索源" target="_blank">?</a>
|
<a href="https://github.com/Cp0204/quark-auto-save/wiki/CloudSaver搜索源" target="_blank">?</a>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="collapse show ml-3" id="collapse_cloudsaver">
|
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-2 col-form-label">服务器</label>
|
<label class="col-sm-2 col-form-label">服务器</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
@ -245,25 +222,21 @@
|
|||||||
<input type="password" v-model="formData.source.cloudsaver.password" class="form-control" placeholder="密码">
|
<input type="password" v-model="formData.source.cloudsaver.password" class="form-control" placeholder="密码">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="form-group row mb-0" style="display:flex; align-items:center;">
|
<div class="row title" title="资源搜索服务配置,用于任务名称智能搜索">
|
||||||
<div data-toggle="collapse" data-target="#collapse_pansou" aria-expanded="true" aria-controls="collapse_pansou">
|
<div class="col-10">
|
||||||
<div class="btn btn-block text-left">
|
<h2 style="display: inline-block;"><i class="bi bi-search"></i> PanSou</h2>
|
||||||
<i class="bi bi-caret-right-fill"></i> PanSou
|
|
||||||
<span class="badge badge-pill badge-light">
|
<span class="badge badge-pill badge-light">
|
||||||
<a href="https://github.com/fish2018/pansou" target="_blank">?</a>
|
<a href="https://github.com/fish2018/pansou" target="_blank">?</a>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="collapse show ml-3" id="collapse_pansou">
|
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label class="col-sm-2 col-form-label">服务器</label>
|
<label class="col-sm-2 col-form-label">服务器</label>
|
||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<input type="text" v-model="formData.source.pansou.server" class="form-control" placeholder="资源搜索服务器地址,如 https://so.252035.xyz">
|
<input type="text" v-model="formData.source.pansou.server" class="form-control" placeholder="资源搜索服务器地址,如 https://so.252035.xyz">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -352,7 +325,7 @@
|
|||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input type="text" name="shareurl[]" class="form-control" v-model="task.shareurl" placeholder="必填" @blur="changeShareurl(task)">
|
<input type="text" name="shareurl[]" class="form-control" v-model="task.shareurl" placeholder="必填" @blur="changeShareurl(task)">
|
||||||
<div class="input-group-append" v-if="task.shareurl">
|
<div class="input-group-append" v-if="task.shareurl">
|
||||||
<button type="button" class="btn btn-outline-secondary" @click="fileSelect.selectDir=true;fileSelect.switchShare=false;fileSelect.previewRegex=false;fileSelect.sortBy='file_name';fileSelect.sortOrder='desc';showShareSelect(index)" title="选择文件夹"><i class="bi bi-folder"></i></button>
|
<button type="button" class="btn btn-outline-secondary" @click="fileSelect.selectDir=true;fileSelect.previewRegex=false;fileSelect.sortBy='file_name';fileSelect.sortOrder='desc';showShareSelect(index)" title="选择文件夹"><i class="bi bi-folder"></i></button>
|
||||||
<div class="input-group-text">
|
<div class="input-group-text">
|
||||||
<a target="_blank" :href="task.shareurl"><i class="bi bi-box-arrow-up-right"></i></a>
|
<a target="_blank" :href="task.shareurl"><i class="bi bi-box-arrow-up-right"></i></a>
|
||||||
</div>
|
</div>
|
||||||
@ -377,7 +350,7 @@
|
|||||||
<div class="col-sm-10">
|
<div class="col-sm-10">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
<button class="btn btn-outline-secondary" type="button" @click="fileSelect.selectDir=true;fileSelect.switchShare=false;fileSelect.previewRegex=true;fileSelect.sortBy='file_name';fileSelect.sortOrder='asc';showShareSelect(index)" title="预览正则处理效果">正则处理</button>
|
<button class="btn btn-outline-secondary" type="button" @click="fileSelect.selectDir=true;fileSelect.previewRegex=true;fileSelect.sortBy='file_name';fileSelect.sortOrder='asc';showShareSelect(index)" title="预览正则处理效果">正则处理</button>
|
||||||
</div>
|
</div>
|
||||||
<input type="text" name="pattern[]" class="form-control" v-model="task.pattern" placeholder="匹配表达式" list="magicRegex">
|
<input type="text" name="pattern[]" class="form-control" v-model="task.pattern" placeholder="匹配表达式" list="magicRegex">
|
||||||
<input type="text" name="replace[]" class="form-control" v-model="task.replace" placeholder="替换表达式">
|
<input type="text" name="replace[]" class="form-control" v-model="task.replace" placeholder="替换表达式">
|
||||||
@ -398,7 +371,7 @@
|
|||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input type="text" class="form-control" placeholder="可选,只转存修改日期>此文件的文件" name="startfid[]" v-model="task.startfid">
|
<input type="text" class="form-control" placeholder="可选,只转存修改日期>此文件的文件" name="startfid[]" v-model="task.startfid">
|
||||||
<div class="input-group-append" v-if="task.shareurl">
|
<div class="input-group-append" v-if="task.shareurl">
|
||||||
<button class="btn btn-outline-secondary" type="button" @click="fileSelect.selectDir=false;fileSelect.switchShare=false;fileSelect.previewRegex=false;fileSelect.sortBy='updated_at';fileSelect.sortOrder='desc';showShareSelect(index)">选择</button>
|
<button class="btn btn-outline-secondary" type="button" @click="fileSelect.selectDir=false;fileSelect.previewRegex=false;fileSelect.sortBy='updated_at';fileSelect.sortOrder='desc';showShareSelect(index)">选择</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -495,34 +468,6 @@
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body small">
|
<div class="modal-body small">
|
||||||
<!-- 分享链接来源 -->
|
|
||||||
<div class="mb-3 row" v-if="fileSelect.switchShare">
|
|
||||||
<div class="col-sm-8">
|
|
||||||
<div>
|
|
||||||
<b>名称:</b>
|
|
||||||
<span :title="fileSelect.share.content">{{ fileSelect.share.taskname }}</span>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<b>链接:</b>
|
|
||||||
<a :href="fileSelect.share.shareurl" target="_blank" @click.stop>{{ fileSelect.share.shareurl }}</a>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<b>来源:</b>
|
|
||||||
<span class="badge bg-transparent border border-success text-success">{{ fileSelect.share.source || "网络公开" }}</span>
|
|
||||||
<span class="badge bg-transparent border border-info text-info" v-if="fileSelect.share.channel">{{ fileSelect.share.channel }}</span>
|
|
||||||
</div>
|
|
||||||
<div v-if="fileSelect.share.datetime">
|
|
||||||
<b>时间:</b>
|
|
||||||
<span>{{ fileSelect.share.datetime }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-4 text-right">
|
|
||||||
<div class="btn-group" title="资源搜索结果切换">
|
|
||||||
<button type="button" class="btn btn-sm btn-outline-primary" @click="switchShare(-1)">上一个</button>
|
|
||||||
<button type="button" class="btn btn-sm btn-outline-primary" @click="switchShare(1)">下一个</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="alert alert-warning" v-if="fileSelect.error" v-html="fileSelect.error"></div>
|
<div class="alert alert-warning" v-if="fileSelect.error" v-html="fileSelect.error"></div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<!-- 正则处理表达式 -->
|
<!-- 正则处理表达式 -->
|
||||||
@ -610,9 +555,6 @@
|
|||||||
tasklist: [],
|
tasklist: [],
|
||||||
magic_regex: {},
|
magic_regex: {},
|
||||||
source: {
|
source: {
|
||||||
net: {
|
|
||||||
enable: ""
|
|
||||||
},
|
|
||||||
cloudsaver: {
|
cloudsaver: {
|
||||||
server: "",
|
server: "",
|
||||||
username: "",
|
username: "",
|
||||||
@ -653,14 +595,12 @@
|
|||||||
configModified: false,
|
configModified: false,
|
||||||
fileSelect: {
|
fileSelect: {
|
||||||
index: null,
|
index: null,
|
||||||
share: {},
|
|
||||||
shareurl: "",
|
shareurl: "",
|
||||||
stoken: "",
|
stoken: "",
|
||||||
fileList: [],
|
fileList: [],
|
||||||
paths: [],
|
paths: [],
|
||||||
selectDir: true,
|
selectDir: true,
|
||||||
selectShare: true,
|
selectShare: true,
|
||||||
switchShare: false,
|
|
||||||
previewRegex: false,
|
previewRegex: false,
|
||||||
sortBy: "updated_at",
|
sortBy: "updated_at",
|
||||||
sortOrder: "desc"
|
sortOrder: "desc"
|
||||||
@ -762,11 +702,6 @@
|
|||||||
server: ""
|
server: ""
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
if (!config_data.source.net) {
|
|
||||||
config_data.source.net = {
|
|
||||||
enable: ""
|
|
||||||
};
|
|
||||||
}
|
|
||||||
this.formData = config_data;
|
this.formData = config_data;
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.configModified = false;
|
this.configModified = false;
|
||||||
@ -1051,9 +986,7 @@
|
|||||||
selectSuggestion(index, suggestion) {
|
selectSuggestion(index, suggestion) {
|
||||||
this.smart_param.showSuggestions = false;
|
this.smart_param.showSuggestions = false;
|
||||||
this.fileSelect.selectDir = true;
|
this.fileSelect.selectDir = true;
|
||||||
this.fileSelect.switchShare = true;
|
|
||||||
this.fileSelect.previewRegex = false;
|
this.fileSelect.previewRegex = false;
|
||||||
this.fileSelect.share = suggestion;
|
|
||||||
this.showShareSelect(index, suggestion.shareurl);
|
this.showShareSelect(index, suggestion.shareurl);
|
||||||
},
|
},
|
||||||
addMagicRegex() {
|
addMagicRegex() {
|
||||||
@ -1114,7 +1047,6 @@
|
|||||||
showSavepathSelect(index) {
|
showSavepathSelect(index) {
|
||||||
this.fileSelect.selectShare = false;
|
this.fileSelect.selectShare = false;
|
||||||
this.fileSelect.selectDir = true;
|
this.fileSelect.selectDir = true;
|
||||||
this.fileSelect.switchShare = false;
|
|
||||||
this.fileSelect.previewRegex = false;
|
this.fileSelect.previewRegex = false;
|
||||||
this.fileSelect.error = undefined;
|
this.fileSelect.error = undefined;
|
||||||
this.fileSelect.fileList = [];
|
this.fileSelect.fileList = [];
|
||||||
@ -1162,23 +1094,6 @@
|
|||||||
$('#fileSelectModal').modal('toggle');
|
$('#fileSelectModal').modal('toggle');
|
||||||
this.getShareDetail();
|
this.getShareDetail();
|
||||||
},
|
},
|
||||||
switchShare(index) {
|
|
||||||
currentIndex = this.smart_param.taskSuggestions.data.indexOf(this.fileSelect.share);
|
|
||||||
nextIndex = currentIndex + index;
|
|
||||||
if (nextIndex < 0) {
|
|
||||||
alert("没有上一个啦");
|
|
||||||
} else if (nextIndex >= this.smart_param.taskSuggestions.data.length) {
|
|
||||||
alert("没有下一个啦");
|
|
||||||
} else {
|
|
||||||
this.fileSelect.error = "";
|
|
||||||
this.fileSelect.stoken = "";
|
|
||||||
this.fileSelect.share = this.smart_param.taskSuggestions.data[nextIndex];
|
|
||||||
this.fileSelect.shareurl = this.smart_param.taskSuggestions.data[nextIndex].shareurl;
|
|
||||||
this.fileSelect.paths = [];
|
|
||||||
this.fileSelect.fileList = [];
|
|
||||||
this.getShareDetail();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
navigateTo(fid, name) {
|
navigateTo(fid, name) {
|
||||||
dir = { fid: fid, name: name }
|
dir = { fid: fid, name: name }
|
||||||
if (this.fileSelect.selectShare) {
|
if (this.fileSelect.selectShare) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user