fix 迁移部分插件功能到Module公共能力
This commit is contained in:
parent
df5a5fc3c2
commit
e58d45923a
@ -597,3 +597,42 @@ class Emby(metaclass=Singleton):
|
|||||||
image_type="Backdrop")
|
image_type="Backdrop")
|
||||||
|
|
||||||
return eventItem
|
return eventItem
|
||||||
|
|
||||||
|
def get_log(self):
|
||||||
|
"""
|
||||||
|
获取日志
|
||||||
|
"""
|
||||||
|
if not self._host or not self._apikey:
|
||||||
|
return ""
|
||||||
|
# emby 日志url
|
||||||
|
log_url = "%sSystem/Logs/embyserver.txt?api_key=%s" % (self._host, self._apikey)
|
||||||
|
log_res = RequestUtils().get_res(url=log_url)
|
||||||
|
|
||||||
|
if not log_res or log_res.status_code != 200:
|
||||||
|
return ""
|
||||||
|
return log_res.text
|
||||||
|
|
||||||
|
def get_fav_items(self, user: str = None) -> list:
|
||||||
|
"""
|
||||||
|
获取已收藏媒体列表
|
||||||
|
"""
|
||||||
|
# 根据加入日期 降序排序
|
||||||
|
url = f"{self._host}emby/Users/{user or self._user}/Items?SortBy=DateCreated%2CSortName" \
|
||||||
|
f"&SortOrder=Descending" \
|
||||||
|
f"&Filters=IsFavorite" \
|
||||||
|
f"&Recursive=true" \
|
||||||
|
f"&Fields=PrimaryImageAspectRatio%2CBasicSyncInfo" \
|
||||||
|
f"&CollapseBoxSetItems=false" \
|
||||||
|
f"&ExcludeLocationTypes=Virtual" \
|
||||||
|
f"&EnableTotalRecordCount=false" \
|
||||||
|
f"&Limit=20&api_key={self._apikey}"
|
||||||
|
try:
|
||||||
|
resp = RequestUtils().get_res(url=url)
|
||||||
|
if resp:
|
||||||
|
return resp.json().get("Items")
|
||||||
|
else:
|
||||||
|
logger.error(f"User/Items 未获取到返回数据")
|
||||||
|
return []
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"连接User/Items 出错:" + str(e))
|
||||||
|
return []
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import datetime
|
||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
from typing import List, Union, Optional, Dict, Generator
|
from typing import List, Union, Optional, Dict, Generator
|
||||||
@ -437,3 +438,45 @@ class Jellyfin(metaclass=Singleton):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"连接Users/Items出错:" + str(e))
|
logger.error(f"连接Users/Items出错:" + str(e))
|
||||||
yield {}
|
yield {}
|
||||||
|
|
||||||
|
def get_log(self):
|
||||||
|
"""
|
||||||
|
获取日志
|
||||||
|
"""
|
||||||
|
if not self._host or not self._apikey:
|
||||||
|
return ""
|
||||||
|
# 日志url
|
||||||
|
log_url = "%sSystem/Logs/Log?name=log_%s.log&api_key=%s" % (
|
||||||
|
self._host, datetime.date.today().strftime("%Y%m%d"), self._apikey)
|
||||||
|
log_res = RequestUtils().get_res(url=log_url)
|
||||||
|
|
||||||
|
if not log_res or log_res.status_code != 200:
|
||||||
|
return ""
|
||||||
|
else:
|
||||||
|
return log_res.text
|
||||||
|
|
||||||
|
def get_fav_items(self, user: str = None) -> list:
|
||||||
|
"""
|
||||||
|
获取已收藏媒体列表
|
||||||
|
"""
|
||||||
|
# 根据加入日期 降序排序
|
||||||
|
url = f"{self._host}Users/{user or self._user}/Items?SortBy=DateCreated%2CSortName" \
|
||||||
|
f"&SortOrder=Descending" \
|
||||||
|
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._apikey}"
|
||||||
|
try:
|
||||||
|
resp = RequestUtils().get_res(url=url)
|
||||||
|
if resp:
|
||||||
|
return resp.json().get("Items")
|
||||||
|
else:
|
||||||
|
logger.error(f"User/Items 未获取到返回数据")
|
||||||
|
return []
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"连接User/Items 出错:" + str(e))
|
||||||
|
return []
|
||||||
|
@ -12,7 +12,6 @@ from app.core.context import MediaInfo
|
|||||||
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.plugins import _PluginBase
|
from app.plugins import _PluginBase
|
||||||
from app.schemas.types import MediaType
|
from app.schemas.types import MediaType
|
||||||
from app.utils.http import RequestUtils
|
from app.utils.http import RequestUtils
|
||||||
@ -46,14 +45,6 @@ class BestFilmVersion(_PluginBase):
|
|||||||
_scheduler: Optional[BackgroundScheduler] = None
|
_scheduler: Optional[BackgroundScheduler] = None
|
||||||
_cache_path: Optional[Path] = None
|
_cache_path: Optional[Path] = None
|
||||||
subscribechain = None
|
subscribechain = None
|
||||||
jellyfin = None
|
|
||||||
jellyfin_user = None
|
|
||||||
emby = None
|
|
||||||
emby_user = None
|
|
||||||
plex = None
|
|
||||||
plex_user = None
|
|
||||||
service_host = None
|
|
||||||
service_apikey = None
|
|
||||||
|
|
||||||
# 配置属性
|
# 配置属性
|
||||||
_enabled: bool = False
|
_enabled: bool = False
|
||||||
@ -63,25 +54,6 @@ class BestFilmVersion(_PluginBase):
|
|||||||
def init_plugin(self, config: dict = None):
|
def init_plugin(self, config: dict = None):
|
||||||
self._cache_path = settings.TEMP_PATH / "__best_film_version_cache__"
|
self._cache_path = settings.TEMP_PATH / "__best_film_version_cache__"
|
||||||
self.subscribechain = SubscribeChain()
|
self.subscribechain = SubscribeChain()
|
||||||
if settings.MEDIASERVER == 'jellyfin':
|
|
||||||
self.jellyfin = Jellyfin()
|
|
||||||
self.jellyfin_user = self.jellyfin.get_user()
|
|
||||||
self.service_apikey = settings.JELLYFIN_API_KEY
|
|
||||||
self.service_host = settings.JELLYFIN_HOST
|
|
||||||
if settings.MEDIASERVER == 'emby':
|
|
||||||
self.emby = Emby()
|
|
||||||
self.emby_user = self.emby.get_user()
|
|
||||||
self.service_apikey = settings.EMBY_API_KEY
|
|
||||||
self.service_host = settings.EMBY_HOST
|
|
||||||
if settings.MEDIASERVER == 'plex':
|
|
||||||
self.plex = Plex()
|
|
||||||
self.service_apikey = settings.PLEX_TOKEN
|
|
||||||
self.service_host = settings.PLEX_HOST
|
|
||||||
if self.service_host:
|
|
||||||
if not self.service_host.endswith("/"):
|
|
||||||
self.service_host += "/"
|
|
||||||
if not self.service_host.startswith("http"):
|
|
||||||
self.service_host = "http://" + self.service_host
|
|
||||||
|
|
||||||
# 停止现有任务
|
# 停止现有任务
|
||||||
self.stop_service()
|
self.stop_service()
|
||||||
@ -230,7 +202,6 @@ class BestFilmVersion(_PluginBase):
|
|||||||
poster = history.get("poster")
|
poster = history.get("poster")
|
||||||
mtype = history.get("type")
|
mtype = history.get("type")
|
||||||
time_str = history.get("time")
|
time_str = history.get("time")
|
||||||
overview = history.get("overview")
|
|
||||||
tmdbid = history.get("tmdbid")
|
tmdbid = history.get("tmdbid")
|
||||||
contents.append(
|
contents.append(
|
||||||
{
|
{
|
||||||
@ -332,48 +303,27 @@ class BestFilmVersion(_PluginBase):
|
|||||||
# 读取历史记录
|
# 读取历史记录
|
||||||
history = self.get_data('history') or []
|
history = self.get_data('history') or []
|
||||||
|
|
||||||
if self.jellyfin:
|
# 读取收藏
|
||||||
# 根据加入日期 降序排序
|
if settings.MEDIASERVER == 'jellyfin':
|
||||||
url = f"{self.service_host}Users/{self.jellyfin_user}/Items?SortBy=DateCreated%2CSortName" \
|
resp = Jellyfin().get_fav_items()
|
||||||
f"&SortOrder=Descending" \
|
elif settings.MEDIASERVER == 'emby':
|
||||||
f"&Filters=IsFavorite" \
|
resp = Emby().get_fav_items()
|
||||||
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:
|
|
||||||
# 根据加入日期 降序排序
|
|
||||||
url = f"{self.service_host}emby/Users/{self.emby_user}/Items?SortBy=DateCreated%2CSortName" \
|
|
||||||
f"&SortOrder=Descending" \
|
|
||||||
f"&Filters=IsFavorite" \
|
|
||||||
f"&Recursive=true" \
|
|
||||||
f"&Fields=PrimaryImageAspectRatio%2CBasicSyncInfo" \
|
|
||||||
f"&CollapseBoxSetItems=false" \
|
|
||||||
f"&ExcludeLocationTypes=Virtual" \
|
|
||||||
f"&EnableTotalRecordCount=false" \
|
|
||||||
f"&Limit=20&api_key={self.service_apikey}"
|
|
||||||
else:
|
else:
|
||||||
# TODO plex待开发
|
# TODO plex待开发
|
||||||
return
|
return
|
||||||
|
|
||||||
# 获取收藏数据
|
|
||||||
resp = self.media_simple_filter(url)
|
|
||||||
logger.info(f'BestFilmVersion插件 resp打印 {resp}')
|
|
||||||
|
|
||||||
for data in resp:
|
for data in resp:
|
||||||
# 检查缓存
|
# 检查缓存
|
||||||
if data.get('Name') in caches:
|
if data.get('Name') in caches:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# 获取详情
|
# 获取详情
|
||||||
if self.jellyfin:
|
if settings.MEDIASERVER == 'jellyfin':
|
||||||
item_info_resp = self.jellyfin.get_iteminfo(itemid=data.get('Id'))
|
item_info_resp = Jellyfin().get_iteminfo(itemid=data.get('Id'))
|
||||||
elif self.emby:
|
elif settings.MEDIASERVER == 'emby':
|
||||||
item_info_resp = self.emby.get_iteminfo(itemid=data.get('Id'))
|
item_info_resp = Emby().get_iteminfo(itemid=data.get('Id'))
|
||||||
else:
|
else:
|
||||||
|
# TODO plex待开发
|
||||||
return
|
return
|
||||||
|
|
||||||
logger.info(f'BestFilmVersion插件 item打印 {item_info_resp}')
|
logger.info(f'BestFilmVersion插件 item打印 {item_info_resp}')
|
||||||
|
@ -13,9 +13,10 @@ from app.core.event import eventmanager, Event
|
|||||||
from app.db.models.transferhistory import TransferHistory
|
from app.db.models.transferhistory import TransferHistory
|
||||||
from app.db.transferhistory_oper import TransferHistoryOper
|
from app.db.transferhistory_oper import TransferHistoryOper
|
||||||
from app.log import logger
|
from app.log import logger
|
||||||
|
from app.modules.emby import Emby
|
||||||
|
from app.modules.jellyfin import Jellyfin
|
||||||
from app.plugins import _PluginBase
|
from app.plugins import _PluginBase
|
||||||
from app.schemas.types import NotificationType, EventType
|
from app.schemas.types import NotificationType, EventType
|
||||||
from app.utils.http import RequestUtils
|
|
||||||
|
|
||||||
|
|
||||||
class MediaSyncDel(_PluginBase):
|
class MediaSyncDel(_PluginBase):
|
||||||
@ -469,25 +470,15 @@ class MediaSyncDel(_PluginBase):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def parse_emby_log(last_time):
|
def parse_emby_log(last_time):
|
||||||
# emby host
|
# emby
|
||||||
emby_host = settings.EMBY_HOST
|
log_text = Emby().get_log()
|
||||||
if emby_host:
|
if not log_text:
|
||||||
if not emby_host.endswith("/"):
|
|
||||||
emby_host += "/"
|
|
||||||
if not emby_host.startswith("http"):
|
|
||||||
emby_host = "http://" + emby_host
|
|
||||||
|
|
||||||
# emby 日志url
|
|
||||||
log_url = "%sSystem/Logs/embyserver.txt?api_key=%s" % (emby_host, settings.EMBY_API_KEY)
|
|
||||||
log_res = RequestUtils().get_res(url=log_url)
|
|
||||||
|
|
||||||
if not log_res or log_res.status_code != 200:
|
|
||||||
logger.error("获取emby日志失败,请检查服务器配置")
|
logger.error("获取emby日志失败,请检查服务器配置")
|
||||||
return []
|
return []
|
||||||
|
|
||||||
# 正则解析删除的媒体信息
|
# 正则解析删除的媒体信息
|
||||||
pattern = r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}) Info App: Removing item from database, Type: (\w+), Name: (.*), Path: (.*), Id: (\d+)'
|
pattern = r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}) Info App: Removing item from database, Type: (\w+), Name: (.*), Path: (.*), Id: (\d+)'
|
||||||
matches = re.findall(pattern, log_res.text)
|
matches = re.findall(pattern, log_text)
|
||||||
|
|
||||||
del_medias = []
|
del_medias = []
|
||||||
# 循环获取媒体信息
|
# 循环获取媒体信息
|
||||||
@ -551,26 +542,16 @@ class MediaSyncDel(_PluginBase):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def parse_jellyfin_log(last_time):
|
def parse_jellyfin_log(last_time):
|
||||||
# jellyfin host
|
# jellyfin
|
||||||
jellyfin_host = settings.JELLYFIN_HOST
|
log_text = Jellyfin().get_log()
|
||||||
if jellyfin_host:
|
|
||||||
if not jellyfin_host.endswith("/"):
|
|
||||||
jellyfin_host += "/"
|
|
||||||
if not jellyfin_host.startswith("http"):
|
|
||||||
jellyfin_host = "http://" + jellyfin_host
|
|
||||||
|
|
||||||
# jellyfin 日志url
|
if not log_text:
|
||||||
log_url = "%sSystem/Logs/Log?name=log_%s.log&api_key=%s" % (
|
|
||||||
jellyfin_host, datetime.date.today().strftime("%Y%m%d"), settings.JELLYFIN_API_KEY)
|
|
||||||
log_res = RequestUtils().get_res(url=log_url)
|
|
||||||
|
|
||||||
if not log_res or log_res.status_code != 200:
|
|
||||||
logger.error("获取jellyfin日志失败,请检查服务器配置")
|
logger.error("获取jellyfin日志失败,请检查服务器配置")
|
||||||
return []
|
return []
|
||||||
|
|
||||||
# 正则解析删除的媒体信息
|
# 正则解析删除的媒体信息
|
||||||
pattern = r'\[(.*?)\].*?Removing item, Type: "(.*?)", Name: "(.*?)", Path: "(.*?)"'
|
pattern = r'\[(.*?)\].*?Removing item, Type: "(.*?)", Name: "(.*?)", Path: "(.*?)"'
|
||||||
matches = re.findall(pattern, log_res.text)
|
matches = re.findall(pattern, log_text)
|
||||||
|
|
||||||
del_medias = []
|
del_medias = []
|
||||||
# 循环获取媒体信息
|
# 循环获取媒体信息
|
||||||
|
Loading…
x
Reference in New Issue
Block a user