fix BestFilmVersion
This commit is contained in:
parent
9b14d0c04b
commit
0a2d9913e3
@ -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(),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user