fix 迁移部分插件功能到Module公共能力

This commit is contained in:
jxxghp 2023-08-07 10:33:35 +08:00
parent df5a5fc3c2
commit e58d45923a
4 changed files with 102 additions and 89 deletions

View File

@ -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 []

View File

@ -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 []

View File

@ -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}')

View File

@ -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 = []
# 循环获取媒体信息 # 循环获取媒体信息