Skip to content

Commit 300cc54

Browse files
authored
Merge pull request #88 from shinonomeow/shino_aio
fix get info error when torrent is a hybird torrent
2 parents 5696c61 + 76b0bdf commit 300cc54

32 files changed

Lines changed: 681 additions & 342 deletions

backend/src/main.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
}
3030

3131

32+
3233
def create_app() -> FastAPI:
3334
app = FastAPI(lifespan=lifespan)
3435

backend/src/module/conf/__init__.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
from .search_provider import SEARCH_CONFIG
77

88
PLATFORM = sys.platform
9-
TMDB_API = "291237f90b24267380d6176c98f7619f"
109
DATA_PATH = "sqlite:///data/data.db"
1110
LEGACY_DATA_PATH = Path("data/data.json")
1211
VERSION_PATH = Path("config/version.info")
@@ -15,7 +14,6 @@
1514

1615
__all__ = [
1716
"VERSION",
18-
"TMDB_API",
1917
"DATA_PATH",
2018
"LEGACY_DATA_PATH",
2119
"VERSION_PATH",

backend/src/module/conf/log.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import logging
2-
from logging import NullHandler
2+
from logging.handlers import RotatingFileHandler
33
from pathlib import Path
44

55
from .config import settings
@@ -38,7 +38,12 @@ def setup_logger(level: int = logging.INFO, reset: bool = False):
3838
datefmt=TIME_FORMAT,
3939
encoding="utf-8",
4040
handlers=[
41-
logging.FileHandler(LOG_PATH, encoding="utf-8"),
41+
RotatingFileHandler(
42+
LOG_PATH,
43+
maxBytes=10*1024*1024, # 10MB
44+
backupCount=5,
45+
encoding="utf-8"
46+
),
4247
logging.StreamHandler(),
4348
],
4449
force=reset, # 强制重新配置如果是重置模式

backend/src/module/conf/tmdb.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,28 @@
11
"""TMDB API configuration and constants."""
22

3-
from . import TMDB_API
3+
from .config import settings
4+
45

56
TMDB_URL = "https://api.themoviedb.org"
67
TMDB_IMG_URL = "https://image.tmdb.org/t/p/w780"
78

9+
# Default TMDB API key, replace with your own key if needed
10+
# Note: Using a public key is not recommended for production use.
11+
# It is better to set your own key in the configuration.
12+
t = "291237f90b24267380d6176c98f7619f"
13+
814
LANGUAGE = {"zh": "zh-CN", "jp": "ja-JP", "en": "en-US"}
915

16+
def get_api_key():
17+
"""Get the TMDB API key from settings."""
18+
return settings.rss_parser.tmdb_api_key or t
19+
1020

1121
def search_url(keyword: str) -> str:
1222
"""Generate TMDB search URL for TV shows."""
13-
return f"{TMDB_URL}/3/search/tv?api_key={TMDB_API}&page=1&query={keyword}&include_adult=false"
23+
return f"{TMDB_URL}/3/search/tv?api_key={get_api_key()}&page=1&query={keyword}&include_adult=false"
1424

1525

1626
def info_url(show_id: str, language: str) -> str:
1727
"""Generate TMDB info URL for a specific TV show."""
18-
return f"{TMDB_URL}/3/tv/{show_id}?api_key={TMDB_API}&language={LANGUAGE[language]}"
28+
return f"{TMDB_URL}/3/tv/{show_id}?api_key={get_api_key()}&language={LANGUAGE[language]}"

backend/src/module/conf/uvicorn_logging.py

Lines changed: 0 additions & 38 deletions
This file was deleted.

backend/src/module/core/aiocore.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
from contextlib import asynccontextmanager
44
from typing import Any
55

6-
from module.conf import settings
76
from module.utils.events import event_bus
87

98
from .task_manager import TaskManager

backend/src/module/core/example_service.py

Whitespace-only changes.

backend/src/module/database/bangumi.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import logging
22

3-
from sqlalchemy.sql import func
43
from sqlmodel import Session, and_, delete, false, or_, select
54

65
from module.models import Bangumi, BangumiUpdate

backend/src/module/database/combine.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22

33
from sqlmodel import Session, SQLModel, and_, delete, false, or_, select, text
44

5-
from module.database.bangumi import BangumiDatabase
6-
from module.database.database_version import VersionDatabase
7-
from module.database.engine import engine as e
8-
from module.database.rss import RSSDatabase
9-
from module.database.torrent import TorrentDatabase
10-
from module.database.user import UserDatabase
115
from module.models import Bangumi, RSSItem, Torrent, User
126

7+
from .bangumi import BangumiDatabase
8+
from .database_version import VersionDatabase
9+
from .engine import engine as e
10+
from .rss import RSSDatabase
11+
from .torrent import TorrentDatabase
12+
from .user import UserDatabase
13+
1314
logger = logging.getLogger(__name__)
1415

1516

backend/src/module/database/migration.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@
77
from pathlib import Path
88
from typing import Callable
99

10+
from packaging import version
1011
from sqlmodel import Session, text
1112

1213
from module.conf import DATA_PATH
13-
from module.database.engine import engine
14+
from .engine import engine
1415
from module.models import DatabaseVersion
1516

1617
logger = logging.getLogger(__name__)
@@ -130,35 +131,34 @@ def _get_migration_path(self, from_version: str, to_version: str) -> list[str]:
130131
migrations_needed.append(version)
131132

132133
# 按版本号排序
133-
migrations_needed.sort(key=lambda v: self._version_to_tuple(v))
134+
migrations_needed.sort(key=lambda v: version.parse(v))
134135

135136
return migrations_needed
136137

137138
def _version_compare(self, version1: str, version2: str) -> int:
138139
"""比较两个版本号
139140
返回值: 1 表示 version1 > version2, 0 表示相等, -1 表示 version1 < version2
140141
"""
141-
v1_tuple = self._version_to_tuple(version1)
142-
v2_tuple = self._version_to_tuple(version2)
143-
144-
if v1_tuple > v2_tuple:
145-
return 1
146-
elif v1_tuple < v2_tuple:
147-
return -1
148-
else:
149-
return 0
150-
151-
def _version_to_tuple(self, version: str) -> tuple:
152-
"""将版本字符串转换为可比较的元组"""
153142
try:
154-
# 处理类似 "3.2.0" 或 "3.2.0-beta" 的版本号
155-
# 先移除后缀 (如 -beta, -alpha, -dev 等)
156-
base_version = version.split("-")[0]
157-
parts = base_version.split(".")
158-
return tuple(int(part) for part in parts)
159-
except (ValueError, AttributeError):
160-
# 如果解析失败,返回一个默认值
161-
return (0, 0, 0)
143+
v1 = version.parse(version1)
144+
v2 = version.parse(version2)
145+
146+
if v1 > v2:
147+
return 1
148+
elif v1 < v2:
149+
return -1
150+
else:
151+
return 0
152+
except Exception as e:
153+
logger.warning(f"版本比较失败 {version1} vs {version2}: {e}")
154+
# 降级到字符串比较
155+
if version1 > version2:
156+
return 1
157+
elif version1 < version2:
158+
return -1
159+
else:
160+
return 0
161+
162162

163163
def _migrate_to_3_2_0(self, session: Session):
164164
"""迁移到版本 3.2.0"""

0 commit comments

Comments
 (0)