Merge pull request #1 from x1ao4/dev

优化部分逻辑,增加对纯 {} 表达式的支持
This commit is contained in:
x1ao4 2025-04-22 17:29:06 +08:00 committed by GitHub
commit df296236af
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 966 additions and 243 deletions

View File

@ -259,6 +259,37 @@ def get_task_suggestions():
return jsonify({"success": True, "message": f"error: {str(e)}"}) return jsonify({"success": True, "message": f"error: {str(e)}"})
# 添加函数,与主程序保持一致
def is_date_format(number_str):
"""
判断一个纯数字字符串是否可能是日期格式
支持的格式YYYYMMDD, MMDD
"""
# 判断YYYYMMDD格式 (8位数字)
if len(number_str) == 8 and number_str.startswith('20'):
year = int(number_str[:4])
month = int(number_str[4:6])
day = int(number_str[6:8])
# 简单检查月份和日期是否有效
if 1 <= month <= 12 and 1 <= day <= 31:
# 可能是日期格式
return True
# 判断MMDD格式 (4位数字)
elif len(number_str) == 4:
month = int(number_str[:2])
day = int(number_str[2:4])
# 简单检查月份和日期是否有效
if 1 <= month <= 12 and 1 <= day <= 31:
# 可能是日期格式
return True
# 其他长度的纯数字不视为日期格式
return False
@app.route("/get_share_detail", methods=["POST"]) @app.route("/get_share_detail", methods=["POST"])
def get_share_detail(): def get_share_detail():
if not is_login(): if not is_login():
@ -285,7 +316,11 @@ def get_share_detail():
current_sequence = 1 current_sequence = 1
# 构建顺序命名的正则表达式 # 构建顺序命名的正则表达式
regex_pattern = re.escape(sequence_pattern).replace('\\{\\}', '(\\d+)') if sequence_pattern == "{}":
# 对于单独的{},使用特殊匹配
regex_pattern = "(\\d+)"
else:
regex_pattern = re.escape(sequence_pattern).replace('\\{\\}', '(\\d+)')
# 实现高级排序算法 # 实现高级排序算法
def extract_sorting_value(file): def extract_sorting_value(file):
@ -401,10 +436,24 @@ def get_share_detail():
return 0 return 0
# 过滤出非目录文件,并且排除已经符合命名规则的文件 # 过滤出非目录文件,并且排除已经符合命名规则的文件
files_to_process = [ files_to_process = []
f for f in share_detail["list"] for f in share_detail["list"]:
if not f["dir"] and not re.match(regex_pattern, f["file_name"]) if f["dir"]:
] continue # 跳过文件夹
# 检查文件是否已符合命名规则
if sequence_pattern == "{}":
# 对于单独的{},检查文件名是否为纯数字
file_name_without_ext = os.path.splitext(f["file_name"])[0]
if file_name_without_ext.isdigit():
# 增加判断:如果是日期格式的纯数字,不视为已命名
if not is_date_format(file_name_without_ext):
continue # 跳过已符合命名规则的文件
elif re.match(regex_pattern, f["file_name"]):
continue # 跳过已符合命名规则的文件
# 添加到待处理文件列表
files_to_process.append(f)
# 根据提取的排序值进行排序 # 根据提取的排序值进行排序
sorted_files = sorted(files_to_process, key=extract_sorting_value) sorted_files = sorted(files_to_process, key=extract_sorting_value)
@ -426,7 +475,11 @@ def get_share_detail():
# 获取文件扩展名 # 获取文件扩展名
file_ext = os.path.splitext(file["file_name"])[1] file_ext = os.path.splitext(file["file_name"])[1]
# 生成预览文件名 # 生成预览文件名
file["file_name_re"] = sequence_pattern.replace("{}", f"{current_sequence:02d}") + file_ext if sequence_pattern == "{}":
# 对于单独的{},直接使用数字序号作为文件名
file["file_name_re"] = f"{current_sequence:02d}{file_ext}"
else:
file["file_name_re"] = sequence_pattern.replace("{}", f"{current_sequence:02d}") + file_ext
current_sequence += 1 current_sequence += 1
return share_detail return share_detail

View File

@ -636,6 +636,13 @@
mounted() { mounted() {
this.fetchData(); this.fetchData();
this.checkNewVersion(); this.checkNewVersion();
// 从本地存储中恢复之前的标签页状态
const savedTab = localStorage.getItem('quarkAutoSave_activeTab');
if (savedTab) {
this.activeTab = savedTab;
}
$('[data-toggle="tooltip"]').tooltip(); $('[data-toggle="tooltip"]').tooltip();
document.addEventListener('keydown', this.handleKeyDown); document.addEventListener('keydown', this.handleKeyDown);
document.addEventListener('click', (e) => { document.addEventListener('click', (e) => {
@ -693,6 +700,8 @@
methods: { methods: {
changeTab(tab) { changeTab(tab) {
this.activeTab = tab; this.activeTab = tab;
// 在本地存储中保存当前标签页状态
localStorage.setItem('quarkAutoSave_activeTab', tab);
if (window.innerWidth <= 768) { if (window.innerWidth <= 768) {
$('#sidebarMenu').collapse('toggle') $('#sidebarMenu').collapse('toggle')
} }
@ -1211,8 +1220,8 @@
}, },
detectNamingMode(task) { detectNamingMode(task) {
// 检测是否为顺序命名模式或剧集命名模式 // 检测是否为顺序命名模式或剧集命名模式
const sequencePatterns = ['E{}', 'EP{}', 'S\\d+E{}', '第{}集', '第{}话', '第{}期']; const sequencePatterns = ['{}', 'E{}', 'EP{}', 'S\\d+E{}', '第{}集', '第{}话', '第{}期'];
const episodePatterns = ['E[]', 'EP[]', 'S\\d+E[]', '第[]集', '第[]话', '第[]期', '[]']; const episodePatterns = ['[]', 'E[]', 'EP[]', 'S\\d+E[]', '第[]集', '第[]话', '第[]期'];
let isSequenceNaming = false; let isSequenceNaming = false;
let isEpisodeNaming = false; let isEpisodeNaming = false;

File diff suppressed because it is too large Load Diff