Compare commits

...

3 Commits

Author SHA1 Message Date
x1ao4
0cc4230916
Merge pull request #75 from x1ao4/dev
修复当 TMDB 上集的 air_date 被删除时 air_date_local 未同步清空的问题
2025-12-25 16:38:07 +08:00
x1ao4
7abb33f7ce 规范文件格式 2025-12-25 16:14:06 +08:00
x1ao4
d550de4e9f 修复当 TMDB 上集的 air_date 被删除时 air_date_local 未同步清空的问题
问题描述:
- 当 TMDB 上某一集的播出日期被删除后,本地数据库的 air_date 会在刷新时被清空
- 但对应的 air_date_local 没有被清空,导致已播出集数计算不准确

修复内容:
- 修改 update_episodes_air_date_local 函数,在所有三个分支中添加对 air_date 为空的处理
- 当 air_date 为空时,自动清空对应的 air_date_local
- 确保 air_date_local 始终与 air_date 保持一致

影响范围:
- 修复后,当 TMDB 上集的播出日期被删除时,air_date_local 会被正确清空
- is_episode_aired 函数会正确返回 False,已播出集数计算会及时更新
2025-12-25 10:55:37 +08:00
4 changed files with 45 additions and 6 deletions

View File

@ -120,4 +120,4 @@ jobs:
prerelease: false
body: "## What's Changed\n\n${{ steps.get_commit_messages.outputs.commits }}"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

2
.gitignore vendored
View File

@ -1,4 +1,4 @@
quark_config_debug.json
__pycache__
/config
.vscode
.vscode

View File

@ -6360,7 +6360,9 @@ def update_episodes_air_date_local(cal_db: CalendarDB, tmdb_id: int, season_numb
for ep in episodes:
ep_air_date = ep.get('air_date') or ''
ep_number = ep.get('episode_number') or 0
if ep_air_date and ep_number:
if not ep_number:
continue
if ep_air_date:
try:
from datetime import datetime as _dt, timedelta as _td
src_date = _dt.strptime(ep_air_date, '%Y-%m-%d').date()
@ -6373,13 +6375,26 @@ def update_episodes_air_date_local(cal_db: CalendarDB, tmdb_id: int, season_numb
)
except Exception as _e_sync:
logging.debug(f"使用手动偏移值更新 air_date_local 失败 tmdb_id={tmdb_id}, season={season_number}, ep={ep_number}: {_e_sync}")
else:
# 如果 air_date 为空,清空 air_date_local
try:
cal_db.update_episode_air_date_local(
int(tmdb_id),
int(season_number),
int(ep_number),
''
)
except Exception as _e_clear:
logging.debug(f"清空 air_date_local 失败 tmdb_id={tmdb_id}, season={season_number}, ep={ep_number}: {_e_clear}")
return
else:
# 没有时区信息且没有手动偏移值,将 air_date_local 设置为与 air_date 相同的值
for ep in episodes:
ep_air_date = ep.get('air_date') or ''
ep_number = ep.get('episode_number') or 0
if ep_air_date and ep_number:
if not ep_number:
continue
if ep_air_date:
try:
cal_db.update_episode_air_date_local(
int(tmdb_id),
@ -6389,6 +6404,17 @@ def update_episodes_air_date_local(cal_db: CalendarDB, tmdb_id: int, season_numb
)
except Exception as _e_sync:
logging.debug(f"同步 air_date 到 air_date_local 失败 tmdb_id={tmdb_id}, season={season_number}, ep={ep_number}: {_e_sync}")
else:
# 如果 air_date 为空,清空 air_date_local
try:
cal_db.update_episode_air_date_local(
int(tmdb_id),
int(season_number),
int(ep_number),
''
)
except Exception as _e_clear:
logging.debug(f"清空 air_date_local 失败 tmdb_id={tmdb_id}, season={season_number}, ep={ep_number}: {_e_clear}")
return
# 获取本地时区配置
@ -6401,7 +6427,9 @@ def update_episodes_air_date_local(cal_db: CalendarDB, tmdb_id: int, season_numb
for ep in episodes:
ep_air_date = ep.get('air_date') or ''
ep_number = ep.get('episode_number') or 0
if ep_air_date and ep_number:
if not ep_number:
continue
if ep_air_date:
try:
# 解析 TMDB air_date 作为源时区日期
src_date = _dt.strptime(ep_air_date, '%Y-%m-%d').date()
@ -6436,6 +6464,17 @@ def update_episodes_air_date_local(cal_db: CalendarDB, tmdb_id: int, season_numb
)
except Exception as _e_local:
logging.debug(f"计算本地播出日期失败 tmdb_id={tmdb_id}, season={season_number}, ep={ep_number}: {_e_local}")
else:
# 如果 air_date 为空,清空 air_date_local
try:
cal_db.update_episode_air_date_local(
int(tmdb_id),
int(season_number),
int(ep_number),
''
)
except Exception as _e_clear:
logging.debug(f"清空 air_date_local 失败 tmdb_id={tmdb_id}, season={season_number}, ep={ep_number}: {_e_clear}")
# 如果计算出了日期偏移且用户没有手动设置,存储到数据库
# 这里的 date_offset 是通过时区转换计算出的偏移值(例如:美东周日 21:00 -> 北京时间周一 10:00偏移 +1

View File

@ -1039,4 +1039,4 @@ def main():
if __name__ == "__main__":
main()
main()