From 5ef53f8119115bb8683694183909ed3d16f02711 Mon Sep 17 00:00:00 2001 From: Amydd <2388054680@qq.com> Date: Thu, 30 Apr 2026 17:19:32 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=81=9A=E5=90=88RSS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- backend/src/module/conf/const.py | 2 +- backend/src/module/database/bangumi.py | 6 +++++- backend/src/module/network/request_contents.py | 4 +++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9d73b6b1e..50c2e0b0d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -43,7 +43,7 @@ RUN mkdir -p /home/ab && \ ENV PATH="/app/.venv/bin:$PATH" -EXPOSE 7892 +EXPOSE 37892 VOLUME ["/app/config", "/app/data"] ENTRYPOINT ["tini", "-g", "--", "/entrypoint.sh"] diff --git a/backend/src/module/conf/const.py b/backend/src/module/conf/const.py index 69f25181f..8b1b6af59 100644 --- a/backend/src/module/conf/const.py +++ b/backend/src/module/conf/const.py @@ -7,7 +7,7 @@ "program": { "rss_time": 900, "rename_time": 60, - "webui_port": 7892, + "webui_port": 37892, }, "downloader": { "type": "qbittorrent", diff --git a/backend/src/module/database/bangumi.py b/backend/src/module/database/bangumi.py index 076491223..a83df0ea0 100644 --- a/backend/src/module/database/bangumi.py +++ b/backend/src/module/database/bangumi.py @@ -1,4 +1,4 @@ -import json +import json import logging import re import time @@ -428,6 +428,10 @@ def match_list(self, torrent_list: list, rss_link: str) -> list: # Build compiled regex pattern for fast substring matching # Sort by length descending so longer (more specific) matches are found first + # If no titles are available to match, return all as unmatched + if not title_index: + return torrent_list + sorted_titles = sorted(title_index.keys(), key=len, reverse=True) # Escape special regex characters and join with alternation pattern = "|".join(re.escape(title) for title in sorted_titles) diff --git a/backend/src/module/network/request_contents.py b/backend/src/module/network/request_contents.py index e271947e7..a6f6e9b7f 100644 --- a/backend/src/module/network/request_contents.py +++ b/backend/src/module/network/request_contents.py @@ -25,8 +25,10 @@ async def get_torrents( torrents: list[Torrent] = [] if _filter is None: _filter = "|".join(settings.rss_parser.filter) + if not _filter: + _filter = None for _title, torrent_url, homepage in parsed_items: - if re.search(_filter, _title) is None: + if _filter is None or re.search(_filter, _title) is None: torrents.append( Torrent(name=_title, url=torrent_url, homepage=homepage) ) From be77c06561a5f29551124730060ee3b7ab2e1f0d Mon Sep 17 00:00:00 2001 From: Amydd <2388054680@qq.com> Date: Thu, 30 Apr 2026 18:00:32 +0800 Subject: [PATCH 02/10] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=81=9A?= =?UTF-8?q?=E5=90=88RSS=E5=B4=A9=E6=BA=83=20+=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 10 ++++++---- backend/src/module/__version__.py | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 backend/src/module/__version__.py diff --git a/Dockerfile b/Dockerfile index 50c2e0b0d..548c68a6d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,4 @@ -# syntax=docker/dockerfile:1 - -FROM ghcr.io/astral-sh/uv:0.5-python3.13-alpine AS builder +FROM ghcr.io/astral-sh/uv:0.5-python3.13-alpine AS builder WORKDIR /app ENV UV_COMPILE_BYTECODE=1 @@ -14,7 +12,7 @@ RUN uv sync --frozen --no-dev COPY backend/src ./src -FROM python:3.13-alpine AS runtime +FROM ghcr.io/astral-sh/uv:0.5-python3.13-alpine AS runtime RUN apk add --no-cache \ bash \ @@ -34,6 +32,10 @@ WORKDIR /app # Copy venv and source from builder COPY --from=builder /app/.venv /app/.venv COPY --from=builder /app/src . + +# Copy pre-built frontend from host +COPY webui/dist ./dist + COPY --chmod=755 entrypoint.sh /entrypoint.sh # Add user diff --git a/backend/src/module/__version__.py b/backend/src/module/__version__.py new file mode 100644 index 000000000..2fa3f3df2 --- /dev/null +++ b/backend/src/module/__version__.py @@ -0,0 +1 @@ +VERSION = "3.2.6-amy" From 3c730941226588477fd8eadd252b12495cdfb592 Mon Sep 17 00:00:00 2001 From: Amydd <2388054680@qq.com> Date: Thu, 30 Apr 2026 19:16:48 +0800 Subject: [PATCH 03/10] =?UTF-8?q?feat:=20=E4=B8=8B=E8=BD=BD=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E8=87=AA=E5=8A=A8=E8=BD=AC=E6=8D=A2=20Windows/Linux?= =?UTF-8?q?=20=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 后端 /status API 新增 platform 字段,返回 linux/windows - 前端下载器设置页显示当前平台标识 - 添加「路径转换」按钮,一键在 /downloads/ 和 D:\ 之间切换 --- backend/src/module/api/program.py | 21 ++--- webui/src/api/program.ts | 2 +- .../components/setting/config-download.vue | 84 ++++++++++++++++++- 3 files changed, 93 insertions(+), 14 deletions(-) diff --git a/backend/src/module/api/program.py b/backend/src/module/api/program.py index e3cb07b93..deb832d86 100644 --- a/backend/src/module/api/program.py +++ b/backend/src/module/api/program.py @@ -1,6 +1,7 @@ import logging import os import signal +import sys from fastapi import APIRouter, Depends, HTTPException from fastapi.responses import JSONResponse @@ -68,18 +69,14 @@ async def stop(): @router.get("/status", response_model=dict, dependencies=[Depends(get_current_user)]) async def program_status(): - if not program.is_running: - return { - "status": False, - "version": VERSION, - "first_run": program.first_run, - } - else: - return { - "status": True, - "version": VERSION, - "first_run": program.first_run, - } + is_linux = sys.platform == "linux" + base = { + "status": program.is_running, + "version": VERSION, + "first_run": program.first_run, + "platform": "linux" if is_linux else "windows", + } + return base @router.get( diff --git a/webui/src/api/program.ts b/webui/src/api/program.ts index eea8e1bb8..ff0e5d907 100644 --- a/webui/src/api/program.ts +++ b/webui/src/api/program.ts @@ -29,7 +29,7 @@ export const apiProgram = { * 状态 */ async status() { - const { data } = await axios.get<{ status: boolean; version: string }>( + const { data } = await axios.get<{ status: boolean; version: string; platform: string; first_run: boolean }>( 'api/v1/status' ); diff --git a/webui/src/components/setting/config-download.vue b/webui/src/components/setting/config-download.vue index 0267cb44c..d8e54a939 100644 --- a/webui/src/components/setting/config-download.vue +++ b/webui/src/components/setting/config-download.vue @@ -1,6 +1,8 @@ -