fix BestFilmVersion

This commit is contained in:
jxxghp 2023-08-05 07:11:05 +08:00
parent 9b14d0c04b
commit 0a2d9913e3

View File

@ -9,30 +9,27 @@ from apscheduler.triggers.cron import CronTrigger
from app.chain.subscribe import SubscribeChain from app.chain.subscribe import SubscribeChain
from app.core.config import settings from app.core.config import settings
from app.core.context import MediaInfo from app.core.context import MediaInfo
from app.core.event import Event
from app.core.event import eventmanager
from app.core.metainfo import MetaInfo from app.core.metainfo import MetaInfo
from app.log import logger from app.log import logger
from app.modules.emby import Emby from app.modules.emby import Emby
from app.modules.jellyfin import Jellyfin from app.modules.jellyfin import Jellyfin
from app.modules.plex import Plex from app.modules.plex import Plex
from app.plugins import _PluginBase from app.plugins import _PluginBase
from app.schemas.types import EventType, MediaType from app.schemas.types import MediaType
from app.utils.http import RequestUtils from app.utils.http import RequestUtils
lock = Lock() lock = Lock()
class BestFilmVersion(_PluginBase): class BestFilmVersion(_PluginBase):
# 插件名称 # 插件名称
plugin_name = "收藏洗版" plugin_name = "收藏洗版"
# 插件描述 # 插件描述
plugin_desc = "jellyfin|emby点击收藏后,自动订阅洗版(只支持电影洗版)" plugin_desc = "Jellyfin/Emby点击收藏电影后自动订阅洗版"
# 插件图标 # 插件图标
plugin_icon = "like.jpg" plugin_icon = "like.jpg"
# 主题色 # 主题色
plugin_color = "#05B711" plugin_color = "#E4003F"
# 插件版本 # 插件版本
plugin_version = "1.0" plugin_version = "1.0"
# 插件作者 # 插件作者
@ -40,9 +37,9 @@ class BestFilmVersion(_PluginBase):
# 作者主页 # 作者主页
author_url = "https://github.com/developer-wlj" author_url = "https://github.com/developer-wlj"
# 插件配置项ID前缀 # 插件配置项ID前缀
plugin_config_prefix = "bestversion_" plugin_config_prefix = "bestfilmversion_"
# 加载顺序 # 加载顺序
plugin_order = 3 plugin_order = 13
# 可使用的用户级别 # 可使用的用户级别
auth_level = 2 auth_level = 2
@ -65,19 +62,19 @@ class BestFilmVersion(_PluginBase):
_notify: bool = False _notify: bool = False
def init_plugin(self, config: dict = None): def init_plugin(self, config: dict = None):
self._cache_path = settings.TEMP_PATH / "__best_version_cache__" self._cache_path = settings.TEMP_PATH / "__best_film_version_cache__"
self.subscribechain = SubscribeChain() self.subscribechain = SubscribeChain()
if settings.MEDIASERVER =='jellyfin': if settings.MEDIASERVER == 'jellyfin':
self.jellyfin = Jellyfin() self.jellyfin = Jellyfin()
self.jellyfin_user=self.jellyfin.get_user() self.jellyfin_user = self.jellyfin.get_user()
self.service_apikey=settings.JELLYFIN_API_KEY self.service_apikey = settings.JELLYFIN_API_KEY
self.service_host=settings.JELLYFIN_HOST self.service_host = settings.JELLYFIN_HOST
if settings.MEDIASERVER =='emby': if settings.MEDIASERVER == 'emby':
self.emby = Emby() self.emby = Emby()
self.emby_user = self.emby.get_user() self.emby_user = self.emby.get_user()
self.service_apikey = settings.EMBY_API_KEY self.service_apikey = settings.EMBY_API_KEY
self.service_host = settings.EMBY_HOST self.service_host = settings.EMBY_HOST
if settings.MEDIASERVER =='plex': if settings.MEDIASERVER == 'plex':
self.emby = Plex() self.emby = Plex()
self.service_apikey = settings.PLEX_TOKEN self.service_apikey = settings.PLEX_TOKEN
self.service_host = settings.PLEX_HOST self.service_host = settings.PLEX_HOST
@ -87,7 +84,6 @@ class BestFilmVersion(_PluginBase):
if not self.service_host.startswith("http"): if not self.service_host.startswith("http"):
self.service_host = "http://" + self.service_host self.service_host = "http://" + self.service_host
# 停止现有任务 # 停止现有任务
self.stop_service() self.stop_service()
@ -188,7 +184,6 @@ class BestFilmVersion(_PluginBase):
'component': 'VCol', 'component': 'VCol',
'props': { 'props': {
'cols': 12, 'cols': 12,
'md': 6
}, },
'content': [ 'content': [
{ {
@ -200,22 +195,6 @@ class BestFilmVersion(_PluginBase):
} }
} }
] ]
},
{
'component': 'VCol',
'props': {
'cols': 12,
'md': 6
},
'content': [
{
'component': 'VTextField',
'props': {
'model': 'queue_cnt',
'label': '队列数量'
}
}
]
} }
] ]
} }
@ -223,9 +202,8 @@ class BestFilmVersion(_PluginBase):
} }
], { ], {
"enabled": False, "enabled": False,
"notify": True, "notify": False,
"cron": "*/30 * * * *", "cron": "*/30 * * * *",
"queue_cnt": 5
} }
def get_page(self) -> List[dict]: def get_page(self) -> List[dict]:
@ -355,69 +333,69 @@ class BestFilmVersion(_PluginBase):
# 读取历史记录 # 读取历史记录
history = self.get_data('history') or [] history = self.get_data('history') or []
resp=None
if self.jellyfin: if self.jellyfin:
# 根据加入日期 降序排序 # 根据加入日期 降序排序
url=self.service_host+'Users/'+self.jellyfin_user+'/Items?SortBy=DateCreated%2CSortName&SortOrder=Descending&Filters=IsFavorite&Recursive=true&Fields=PrimaryImageAspectRatio%2CBasicSyncInfo&CollapseBoxSetItems=false&ExcludeLocationTypes=Virtual&EnableTotalRecordCount=false&Limit=20&apikey='+self.service_apikey url = f"{self.service_host}Users/{self.jellyfin_user}/Items?SortBy=DateCreated%2CSortName" \
# 获取收藏数据 f"&SortOrder=Descending" \
resp=self.media_simple_filter(url) f"&Filters=IsFavorite" \
f"&Recursive=true" \
f"&Fields=PrimaryImageAspectRatio%2CBasicSyncInfo" \
f"&CollapseBoxSetItems=false" \
f"&ExcludeLocationTypes=Virtual" \
f"&EnableTotalRecordCount=false" \
f"&Limit=20" \
f"&apikey={self.service_apikey}"
elif self.emby: elif self.emby:
# 根据加入日期 降序排序 # 根据加入日期 降序排序
url = self.service_host + 'emby/Users/' + self.emby_user+'/Items?SortBy=DateCreated%2CSortName&SortOrder=Descending&Filters=IsFavorite&Recursive=true&Fields=PrimaryImageAspectRatio%2CBasicSyncInfo&CollapseBoxSetItems=false&ExcludeLocationTypes=Virtual&EnableTotalRecordCount=false&Limit=20&api_key=' + self.service_apikey url = f"{self.service_host}emby/Users/{self.emby_user}/Items?SortBy=DateCreated%2CSortName" \
# 获取收藏数据 f"&SortOrder=Descending" \
resp = self.media_simple_filter(url) f"&Filters=IsFavorite" \
f"&Recursive=true" \
elif self.plex: f"&Fields=PrimaryImageAspectRatio%2CBasicSyncInfo" \
f"&CollapseBoxSetItems=false" \
f"&ExcludeLocationTypes=Virtual" \
f"&EnableTotalRecordCount=false" \
f"&Limit=20&api_key={self.service_apikey}"
else:
# TODO plex待开发 # TODO plex待开发
return return
# 获取收藏数据
resp = self.media_simple_filter(url)
for data in resp: for data in resp:
# 检查缓存 # 检查缓存
if data.get('Name') in caches: if data.get('Name') in caches:
continue continue
# 获取详情 # 获取详情
item_info_resp = None
if self.jellyfin: if self.jellyfin:
item_info_resp = self.jellyfin.get_iteminfo(itemid=data.get('Id')) item_info_resp = self.jellyfin.get_iteminfo(itemid=data.get('Id'))
elif self.emby: elif self.emby:
item_info_resp = self.emby.get_iteminfo(itemid=data.get('Id')) item_info_resp = self.emby.get_iteminfo(itemid=data.get('Id'))
elif self.plex: else:
# TODO plex待开发 return
item_info_resp = self.plex.get_iteminfo(itemid=data.get('Id'))
if not item_info_resp: if not item_info_resp:
continue continue
# 只接受Movie类型 # 只接受Movie类型
if data.get('Type') != 'Movie': if data.get('Type') != 'Movie':
continue continue
# 获取tmdb_id # 获取tmdb_id
media_info_ids=item_info_resp.get('ExternalUrls') media_info_ids = item_info_resp.get('ExternalUrls')
for media_info_id in media_info_ids: for media_info_id in media_info_ids:
if 'TheMovieDb' != media_info_id.get('Name'): if 'TheMovieDb' != media_info_id.get('Name'):
continue continue
tmdb_find_id=str(media_info_id.get('Url')).split('/') tmdb_find_id = str(media_info_id.get('Url')).split('/')
tmdb_find_id.reverse() tmdb_find_id.reverse()
tmdb_id=tmdb_find_id[0] tmdb_id = tmdb_find_id[0]
# 根据tmdbID获取数据
tmdbinfo: Optional[dict] = self.chain.tmdb_info(tmdbid=tmdb_id,mtype=MediaType.MOVIE)
if not tmdbinfo:
logger.warn(f'未获取到tmdb信息标题{data.get("Name")}tmdbID{tmdb_id}')
continue
logger.info(f'获取到tmdb信息标题{data.get("Name")}tmdbID{tmdb_id}')
# 识别媒体信息 # 识别媒体信息
meta = MetaInfo(tmdbinfo.get("original_title") or tmdbinfo.get("title")) mediainfo: MediaInfo = self.chain.recognize_media(tmdbid=tmdb_id, mtype=MediaType.MOVIE)
if tmdbinfo.get("year"):
meta.year = tmdbinfo.get("year")
mediainfo: MediaInfo = self.chain.recognize_media(meta=meta)
if not mediainfo: if not mediainfo:
logger.warn(f'未识别到媒体信息,标题:{data.get("Name")}tmdbID{tmdb_id}') logger.warn(f'未识别到媒体信息,标题:{data.get("Name")}tmdbID{tmdb_id}')
continue continue
# 添加订阅 # 添加订阅
self.subscribechain.add(mtype=MediaType.MOVIE, self.subscribechain.add(mtype=MediaType.MOVIE,
title=mediainfo.title, title=mediainfo.title,
@ -431,7 +409,7 @@ class BestFilmVersion(_PluginBase):
# 存储历史记录 # 存储历史记录
if mediainfo.tmdb_id not in [h.get("tmdbid") for h in history]: if mediainfo.tmdb_id not in [h.get("tmdbid") for h in history]:
history.append({ history.append({
"title": tmdbinfo.get("title") or mediainfo.title, "title": mediainfo.title,
"type": mediainfo.type.value, "type": mediainfo.type.value,
"year": mediainfo.year, "year": mediainfo.year,
"poster": mediainfo.get_poster_image(), "poster": mediainfo.get_poster_image(),
@ -455,4 +433,4 @@ class BestFilmVersion(_PluginBase):
return [] return []
except Exception as e: except Exception as e:
logger.error(f"连接User/Items 出错:" + str(e)) logger.error(f"连接User/Items 出错:" + str(e))
return [] return []