Compare commits

..

1 Commits

Author SHA1 Message Date
xiaoQQya
32e4984438
Merge 78581b15a7 into edbc4c50c9 2025-08-28 07:49:46 +00:00
4 changed files with 46 additions and 135 deletions

View File

@ -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:

View File

@ -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 ""

View File

@ -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:

View File

@ -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) {