mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-05-11 18:10:15 +08:00
Merge pull request #2780 from InfinityPacer/feature/module
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
from typing import Optional, Tuple, Union, Any, List, Generator, Dict
|
||||
from typing import Optional, Tuple, Union, Any, List, Generator
|
||||
|
||||
from app import schemas
|
||||
from app.core.context import MediaInfo
|
||||
from app.helper.mediaserver import MediaServerHelper
|
||||
from app.log import logger
|
||||
from app.modules import _ModuleBase, _MediaServerBase
|
||||
from app.modules.plex.plex import Plex
|
||||
@@ -10,22 +9,14 @@ from app.schemas import MediaServerConf
|
||||
from app.schemas.types import MediaType
|
||||
|
||||
|
||||
class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
class PlexModule(_ModuleBase, _MediaServerBase[Plex]):
|
||||
|
||||
def init_module(self) -> None:
|
||||
"""
|
||||
初始化模块
|
||||
"""
|
||||
# 读取媒体服务器配置
|
||||
self._servers: Dict[str, Plex] = {}
|
||||
self._configs: Dict[str, MediaServerConf] = {}
|
||||
mediaservers = MediaServerHelper().get_mediaservers()
|
||||
if not mediaservers:
|
||||
return
|
||||
for server in mediaservers:
|
||||
if server.type == "plex" and server.enabled:
|
||||
self._configs[server.name] = server
|
||||
self._servers[server.name] = Plex(**server.config, sync_libraries=server.sync_libraries)
|
||||
super().init_service(service_name=Plex.__name__.lower(),
|
||||
service_type=lambda conf: Plex(**conf.config, sync_libraries=conf.sync_libraries))
|
||||
|
||||
@staticmethod
|
||||
def get_name() -> str:
|
||||
@@ -38,9 +29,9 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
测试模块连接性
|
||||
"""
|
||||
if not self._servers:
|
||||
if not self._instances:
|
||||
return None
|
||||
for name, server in self._servers.items():
|
||||
for name, server in self._instances.items():
|
||||
if server.is_inactive():
|
||||
server.reconnect()
|
||||
if not server.get_librarys():
|
||||
@@ -55,7 +46,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
定时任务,每10分钟调用一次
|
||||
"""
|
||||
# 定时重连
|
||||
for name, server in self._servers.items():
|
||||
for name, server in self._instances.items():
|
||||
if server.is_inactive():
|
||||
logger.info(f"Plex {name} 服务器连接断开,尝试重连 ...")
|
||||
server.reconnect()
|
||||
@@ -73,7 +64,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
server_config: MediaServerConf = self.get_config(source, 'plex')
|
||||
if not server_config:
|
||||
return None
|
||||
server: Plex = self.get_server(source)
|
||||
server: Plex = self.get_instance(source)
|
||||
if not server:
|
||||
return None
|
||||
return server.get_webhook_message(body)
|
||||
@@ -81,7 +72,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
for conf in self._configs.values():
|
||||
if conf.type != "plex":
|
||||
continue
|
||||
server = self.get_server(conf.name)
|
||||
server = self.get_instance(conf.name)
|
||||
if server:
|
||||
result = server.get_webhook_message(body)
|
||||
if result:
|
||||
@@ -95,7 +86,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
:param itemid: 媒体服务器ItemID
|
||||
:return: 如不存在返回None,存在时返回信息,包括每季已存在所有集{type: movie/tv, seasons: {season: [episodes]}}
|
||||
"""
|
||||
for name, server in self._servers.items():
|
||||
for name, server in self._instances.items():
|
||||
if mediainfo.type == MediaType.MOVIE:
|
||||
if itemid:
|
||||
movie = server.get_iteminfo(itemid)
|
||||
@@ -144,12 +135,12 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
媒体数量统计
|
||||
"""
|
||||
if server:
|
||||
server: Plex = self.get_server(server)
|
||||
server: Plex = self.get_instance(server)
|
||||
if not server:
|
||||
return None
|
||||
servers = [server]
|
||||
else:
|
||||
servers = self._servers.values()
|
||||
servers = self._instances.values()
|
||||
media_statistics = []
|
||||
for server in servers:
|
||||
media_statistic = server.get_medias_count()
|
||||
@@ -163,16 +154,17 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
媒体库列表
|
||||
"""
|
||||
server: Plex = self.get_server(server)
|
||||
server: Plex = self.get_instance(server)
|
||||
if server:
|
||||
return server.get_librarys(hidden)
|
||||
return None
|
||||
|
||||
def mediaserver_items(self, server: str, library_id: str, start_index: int = 0, limit: int = 100) -> Optional[Generator]:
|
||||
def mediaserver_items(self, server: str, library_id: str, start_index: int = 0, limit: int = 100) \
|
||||
-> Optional[Generator]:
|
||||
"""
|
||||
媒体库项目列表
|
||||
"""
|
||||
server: Plex = self.get_server(server)
|
||||
server: Plex = self.get_instance(server)
|
||||
if server:
|
||||
return server.get_items(library_id, start_index, limit)
|
||||
return None
|
||||
@@ -181,7 +173,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
媒体库项目详情
|
||||
"""
|
||||
server: Plex = self.get_server(server)
|
||||
server: Plex = self.get_instance(server)
|
||||
if server:
|
||||
return server.get_iteminfo(item_id)
|
||||
return None
|
||||
@@ -191,7 +183,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
获取剧集信息
|
||||
"""
|
||||
server: Plex = self.get_server(server)
|
||||
server: Plex = self.get_instance(server)
|
||||
if not server:
|
||||
return None
|
||||
_, seasoninfo = server.get_tv_episodes(item_id=item_id)
|
||||
@@ -206,7 +198,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
获取媒体服务器正在播放信息
|
||||
"""
|
||||
server: Plex = self.get_server(server)
|
||||
server: Plex = self.get_instance(server)
|
||||
if not server:
|
||||
return []
|
||||
return server.get_resume(num=count)
|
||||
@@ -215,7 +207,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
获取媒体服务器最新入库条目
|
||||
"""
|
||||
server: Plex = self.get_server(server)
|
||||
server: Plex = self.get_instance(server)
|
||||
if not server:
|
||||
return []
|
||||
return server.get_latest(num=count)
|
||||
@@ -224,7 +216,7 @@ class PlexModule(_ModuleBase, _MediaServerBase):
|
||||
"""
|
||||
获取媒体库播放地址
|
||||
"""
|
||||
server: Plex = self.get_server(server)
|
||||
server: Plex = self.get_instance(server)
|
||||
if not server:
|
||||
return None
|
||||
return server.get_play_url(item_id)
|
||||
|
||||
Reference in New Issue
Block a user