refactor(book_service): 重构书籍服务中的设置更新逻辑

- 将重复的数据库更新操作提取为私有方法 _update_setting
- 修复代码格式化问题,改进长表达式的可读性
- 统一设置更新的数据持久化处理方式
- 减少重复的数据库提交操作,提高性能
- 优化代码结构,增强维护性
This commit is contained in:
2026-05-12 08:33:08 +08:00
parent 9380af19de
commit f31420eb7e
+12 -12
View File
@@ -10,7 +10,8 @@ from app.models import Setting
class BookService: class BookService:
def __init__(self): def __init__(self):
self.setting = Setting.query.filter_by(name="book_download").first().to_dict() self.setting = Setting.query.filter_by(name="book_download").first().to_dict()
self.setting["targetDate"] = timestamp_to_datetime(datetime_to_timestamp(self.setting["targetDate"]) - 24 * 60 * 60) self.setting["targetDate"] = timestamp_to_datetime(
datetime_to_timestamp(self.setting["targetDate"]) - 24 * 60 * 60)
app_dir = os.path.dirname(os.path.dirname(__file__)) app_dir = os.path.dirname(os.path.dirname(__file__))
self.download_path = os.path.join(os.path.dirname(app_dir), "download") # 下载目录 self.download_path = os.path.join(os.path.dirname(app_dir), "download") # 下载目录
self.today_timestamp = get_today_timestamp() self.today_timestamp = get_today_timestamp()
@@ -98,9 +99,7 @@ class BookService:
if total_page_element is not None: # 总页数元素存在 则更新总页数 if total_page_element is not None: # 总页数元素存在 则更新总页数
new_total_page = int(total_page_element.get("totalpage")) # 获取总页数 new_total_page = int(total_page_element.get("totalpage")) # 获取总页数
if self.setting["totalPage"] != new_total_page: # 总页数有更新 if self.setting["totalPage"] != new_total_page: # 总页数有更新
self.setting["totalPage"] = new_total_page # 更新总页数 self._update_setting(totalPage=new_total_page)
Setting.query.filter_by(name="book_download").update({"totalPage": self.setting["totalPage"]})
db.session.commit()
yield from self.section_page(new_total_page - self.setting["targetCountdownPage"]) # 重新跳转指点版块页面 yield from self.section_page(new_total_page - self.setting["targetCountdownPage"]) # 重新跳转指点版块页面
return None return None
@@ -133,9 +132,7 @@ class BookService:
# yield f"data: 目标时间是{post_date}\n\n" # yield f"data: 目标时间是{post_date}\n\n"
yield from self.post_page(self.legitimate_naming(post_element.string), post_element['href']) # 跳转帖子页面 yield from self.post_page(self.legitimate_naming(post_element.string), post_element['href']) # 跳转帖子页面
if post_date_timestamp > target_date_timestamp: # 帖子时间大于目标时间并且没有下一天时间 if post_date_timestamp > target_date_timestamp: # 帖子时间大于目标时间并且没有下一天时间
self.setting["targetDate"] = post_date self._update_setting(targetDate=post_date)
Setting.query.filter_by(name="book_download").update({"targetDate": self.setting["targetDate"]})
db.session.commit()
print(f"下一天是 {post_date}") print(f"下一天是 {post_date}")
# yield f"data: 下一天是 {post_date}\n\n" # yield f"data: 下一天是 {post_date}\n\n"
self.one_date_loading = False self.one_date_loading = False
@@ -146,11 +143,8 @@ class BookService:
"totalPage"] - 1: "totalPage"] - 1:
print("跳转到下一页") print("跳转到下一页")
# yield f"data: 跳转到下一页\n\n" # yield f"data: 跳转到下一页\n\n"
self.setting["targetCountdownPage"] = min(self.setting["targetCountdownPage"] + 1, self._update_setting(
self.setting["totalPage"] - 1) targetCountdownPage=min(self.setting["targetCountdownPage"] + 1, self.setting["totalPage"] - 1))
Setting.query.filter_by(name="book_download").update(
{"targetCountdownPage": self.setting["targetCountdownPage"]})
db.session.commit()
yield from self.section_page(self.setting["totalPage"] - self.setting["targetCountdownPage"]) yield from self.section_page(self.setting["totalPage"] - self.setting["targetCountdownPage"])
return None return None
@@ -168,3 +162,9 @@ class BookService:
target_page = self.setting["totalPage"] - self.setting["targetCountdownPage"] # 目标页 target_page = self.setting["totalPage"] - self.setting["targetCountdownPage"] # 目标页
yield from self.section_page(target_page) # 前往目标页 yield from self.section_page(target_page) # 前往目标页
yield f"event: close\ndata: 已完成\n\n" yield f"event: close\ndata: 已完成\n\n"
def _update_setting(self, **kwargs):
Setting.query.filter_by(name="book_download").update(kwargs)
db.session.commit()
for key, value in kwargs.items():
self.setting[key] = value