fix: 已完成订阅被定时任务重复添加而互相覆盖的问题

This commit is contained in:
Attente
2024-09-28 00:16:57 +08:00
parent fd44eb70b0
commit eab8d9d4a7
2 changed files with 20 additions and 6 deletions

View File

@@ -3,11 +3,12 @@
"name": "Bangumi收藏订阅",
"description": "Bangumi用户收藏添加到订阅",
"labels": "订阅",
"version": "1.1",
"version": "1.2",
"icon": "https://raw.githubusercontent.com/wikrin/MoviePilot-Plugins/main/icons/bangumi_b.png",
"author": "Attente",
"level": 2,
"history": {
"v1.2": "修复已完成订阅条目重复添加的问题",
"v1.1": "新增根据收藏状态移除由此插件添加的订阅",
"v1.0": "将bangumi用户收藏添加到 MP 订阅,部分功能未实现"
}

View File

@@ -16,6 +16,9 @@ from app.utils.http import RequestUtils
from app.db.subscribe_oper import SubscribeOper
from app.helper.subscribe import SubscribeHelper
from app.schemas.types import NotificationType
from app.db import db_query
from app.db.models.subscribehistory import SubscribeHistory
from sqlalchemy.orm import Session
class BangumiColl(_PluginBase):
@@ -26,7 +29,7 @@ class BangumiColl(_PluginBase):
# 插件图标
plugin_icon = "https://raw.githubusercontent.com/wikrin/MoviePilot-Plugins/main/icons/bangumi_b.png"
# 插件版本
plugin_version = "1.1"
plugin_version = "1.2"
# 插件作者
plugin_author = "Attente"
# 作者主页
@@ -421,8 +424,10 @@ class BangumiColl(_PluginBase):
for i in self.subscribechain.subscribeoper.list()
if i.bangumiid and i.username == "Bangumi订阅"
}
## 获取历史订阅
db_hist = self.get_subscribe_history()
# 新增条目
new_sub = items.keys() - db_sub.keys()
new_sub = items.keys() - db_sub.keys() - db_hist
logger.debug(f"待新增条目:{new_sub}")
# 移除条目
del_sub = db_sub.keys() - items.keys()
@@ -481,7 +486,7 @@ class BangumiColl(_PluginBase):
# 额外参数
kwargs = {
"save_path": self._save_path,
"sites": self._sites,
"sites": str(self._sites),
}
# 添加到订阅
self.subscribechain.add(
@@ -527,8 +532,7 @@ class BangumiColl(_PluginBase):
def are_dates(date_str1, date_str2, threshold_days: int = 7) -> bool:
"""
对比两个日期字符串是否接近
:param date_str1: 第一个日期字符串,格式为'YYYY-MM-DD'
:param date_str2: 第二个日期字符串,格式为'YYYY-MM-DD'
:param date_str: 日期字符串,格式为'YYYY-MM-DD'
:param threshold_days: 阈值天数默认为7天
:return: 如果两个日期之间的差异小于等于阈值天数则返回True否则返回False
"""
@@ -544,3 +548,12 @@ class BangumiColl(_PluginBase):
# 比较差异和阈值
return delta <= threshold
@db_query
def get_subscribe_history(self, db: Session = None) -> set:
'''
获取已完成的订阅
'''
result = db.query(SubscribeHistory).filter(SubscribeHistory.bangumiid != None).all()
return set([i.bangumiid for i in result])