mirror of
https://github.com/Cp0204/quark-auto-save.git
synced 2026-01-12 07:10:44 +08:00
修复 PanSou 插件资源发布时间显示错误的问题
- 简化时间处理规则:只有 TG 来源需要 +8 小时 - 其他所有来源(Unknown、Plugin 等)都不 +8 小时 - 修正前端 formatPublishDate 函数的判断逻辑 - 确保时间显示准确,避免错误的时间转换
This commit is contained in:
parent
a89ad08ae8
commit
967a363d87
@ -24,10 +24,33 @@ class PanSou:
|
||||
except Exception as e:
|
||||
return {"success": False, "message": str(e)}
|
||||
|
||||
def _get_pansou_source(self, result_item: dict, merged_item: dict = None) -> str:
|
||||
"""
|
||||
获取PanSou内部来源信息
|
||||
返回格式:
|
||||
- "tg:频道名称" - 来自Telegram频道,需要+8小时
|
||||
- "plugin:插件名" - 来自指定插件,不+8小时
|
||||
- "unknown" - 未知来源,不+8小时
|
||||
"""
|
||||
# 优先从 results 的 channel 字段判断
|
||||
if result_item and result_item.get("channel"):
|
||||
channel = result_item.get("channel", "").strip()
|
||||
if channel:
|
||||
return f"tg:{channel}"
|
||||
|
||||
# 从 merged_by_type 的 source 字段获取
|
||||
if merged_item and merged_item.get("source"):
|
||||
source = merged_item.get("source", "").strip()
|
||||
if source:
|
||||
return source
|
||||
|
||||
# 默认返回 unknown
|
||||
return "unknown"
|
||||
|
||||
def search(self, keyword: str):
|
||||
"""
|
||||
搜索资源(仅返回夸克网盘结果)
|
||||
返回:{"success": True, "data": [{taskname, content, shareurl, tags[]}]}
|
||||
返回:{"success": True, "data": [{taskname, content, shareurl, tags[], pansou_source}]}
|
||||
"""
|
||||
if not self.server:
|
||||
return {"success": False, "message": "PanSou未配置服务器"}
|
||||
@ -82,6 +105,9 @@ class PanSou:
|
||||
content = result_item.get("content", "")
|
||||
datetime_str = result_item.get("datetime", "") # 获取发布日期
|
||||
|
||||
# 获取PanSou内部来源
|
||||
pansou_source = self._get_pansou_source(result_item)
|
||||
|
||||
# 从 links 获取具体链接
|
||||
links = result_item.get("links", [])
|
||||
if isinstance(links, list):
|
||||
@ -96,7 +122,8 @@ class PanSou:
|
||||
"shareurl": url,
|
||||
"tags": [link_type] if link_type else (result_item.get("tags", []) or []),
|
||||
"publish_date": datetime_str, # 原始时间(可能是 ISO)
|
||||
"source": "PanSou" # 添加来源标识
|
||||
"source": "PanSou", # 添加来源标识
|
||||
"pansou_source": pansou_source # 添加PanSou内部来源
|
||||
})
|
||||
|
||||
# 2) merged_by_type: 兜底解析,使用 note 字段作为标题
|
||||
@ -112,6 +139,10 @@ class PanSou:
|
||||
note = link.get("note", "") # 使用 note 字段作为标题
|
||||
note = strip_links(note)
|
||||
datetime_str = link.get("datetime", "") # 获取发布日期
|
||||
|
||||
# 获取PanSou内部来源
|
||||
pansou_source = self._get_pansou_source(None, link)
|
||||
|
||||
if url:
|
||||
cleaned.append({
|
||||
"taskname": note,
|
||||
@ -119,7 +150,8 @@ class PanSou:
|
||||
"shareurl": url,
|
||||
"tags": [cloud_type] if cloud_type else [],
|
||||
"publish_date": datetime_str, # 原始时间
|
||||
"source": "PanSou" # 添加来源标识
|
||||
"source": "PanSou", # 添加来源标识
|
||||
"pansou_source": pansou_source # 添加PanSou内部来源
|
||||
})
|
||||
|
||||
# 3) 直接 data 数组兜底
|
||||
@ -132,7 +164,8 @@ class PanSou:
|
||||
"shareurl": item.get("url", ""),
|
||||
"tags": item.get("tags", []) or [],
|
||||
"publish_date": item.get("datetime", ""), # 原始时间
|
||||
"source": "PanSou" # 添加来源标识
|
||||
"source": "PanSou", # 添加来源标识
|
||||
"pansou_source": "unknown" # 兜底来源
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
|
||||
@ -1038,7 +1038,7 @@
|
||||
<span v-html="suggestion.verify ? '✅': ''"></span> {{ suggestion.taskname }}
|
||||
<small class="text-muted">
|
||||
<a :href="suggestion.shareurl" target="_blank" @click.stop> · {{ suggestion.shareurl.replace(/^https?:\/\/pan\.quark\.cn\/s\//, '') }}</a>
|
||||
<template v-if="suggestion.source"><span class="source-badge" :class="suggestion.source.toLowerCase()" :data-publish-date="suggestion.publish_date ? ' · ' + formatPublishDate(suggestion.publish_date) : ''">{{ suggestion.source }}</span></template>
|
||||
<template v-if="suggestion.source"><span class="source-badge" :class="suggestion.source.toLowerCase()" :data-publish-date="suggestion.publish_date ? ' · ' + formatPublishDate(suggestion.publish_date, suggestion.pansou_source, suggestion.source) : ''">{{ suggestion.source }}</span></template>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
@ -1966,7 +1966,7 @@
|
||||
<span v-html="suggestion.verify ? '✅': ''"></span> {{ suggestion.taskname }}
|
||||
<small class="text-muted">
|
||||
<a :href="suggestion.shareurl" target="_blank" @click.stop> · {{ suggestion.shareurl.replace(/^https?:\/\/pan\.quark\.cn\/s\//, '') }}</a>
|
||||
<template v-if="suggestion.source"><span class="source-badge" :class="suggestion.source.toLowerCase()" :data-publish-date="suggestion.publish_date ? ' · ' + formatPublishDate(suggestion.publish_date) : ''">{{ suggestion.source }}</span></template>
|
||||
<template v-if="suggestion.source"><span class="source-badge" :class="suggestion.source.toLowerCase()" :data-publish-date="suggestion.publish_date ? ' · ' + formatPublishDate(suggestion.publish_date, suggestion.pansou_source, suggestion.source) : ''">{{ suggestion.source }}</span></template>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
@ -6724,7 +6724,7 @@
|
||||
return isNaN(ts) ? 0 : ts;
|
||||
},
|
||||
// 规范化资源发布日期展示:将 ISO 格式(含 T/Z/偏移)转为 "YYYY-MM-DD HH:mm:ss"
|
||||
formatPublishDate(value) {
|
||||
formatPublishDate(value, pansouSource = null, source = null) {
|
||||
if (!value) return '';
|
||||
const s = String(value).trim();
|
||||
|
||||
@ -6735,8 +6735,14 @@
|
||||
const m = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2}):(\d{2})/.exec(s);
|
||||
if (m) {
|
||||
const [, y, mo, d, h, mi, se] = m;
|
||||
// 修复时区问题:如果时间以Z结尾或包含T,说明是UTC时间,需要+8小时
|
||||
if (s.includes('T') || s.includes('Z')) {
|
||||
// 判断是否需要+8小时:
|
||||
// 1. 如果是PanSou的tg来源,需要+8小时
|
||||
// 2. 如果是CloudSaver来源,需要+8小时
|
||||
// 3. 其他来源都不+8小时
|
||||
const needAdd8Hours = (pansouSource && pansouSource.startsWith('tg:')) ||
|
||||
(source === 'CloudSaver');
|
||||
|
||||
if (needAdd8Hours) {
|
||||
// 创建Date对象并加上8小时
|
||||
const date = new Date(Number(y), Number(mo) - 1, Number(d), Number(h), Number(mi), Number(se));
|
||||
date.setHours(date.getHours() + 8);
|
||||
@ -6755,8 +6761,11 @@
|
||||
out = out.replace(/Z$/i, '');
|
||||
out = out.replace(/([+-]\d{2}:?\d{2})$/i, '');
|
||||
|
||||
// 如果原始时间包含T或Z,说明是UTC时间,需要+8小时
|
||||
if (s.includes('T') || s.includes('Z')) {
|
||||
// 判断是否需要+8小时
|
||||
const needAdd8Hours = (pansouSource && pansouSource.startsWith('tg:')) ||
|
||||
(source === 'CloudSaver');
|
||||
|
||||
if (needAdd8Hours) {
|
||||
try {
|
||||
const date = new Date(out);
|
||||
if (!isNaN(date.getTime())) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user