From e58d45923a7dbbe26127ec19b8f35468e70faa13 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Mon, 7 Aug 2023 10:33:35 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E8=BF=81=E7=A7=BB=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E5=8A=9F=E8=83=BD=E5=88=B0Module=E5=85=AC?= =?UTF-8?q?=E5=85=B1=E8=83=BD=E5=8A=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/modules/emby/emby.py | 39 ++++++++++++++ app/modules/jellyfin/jellyfin.py | 43 +++++++++++++++ app/plugins/bestfilmversion/__init__.py | 70 ++++--------------------- app/plugins/mediasyncdel/__init__.py | 39 ++++---------- 4 files changed, 102 insertions(+), 89 deletions(-) diff --git a/app/modules/emby/emby.py b/app/modules/emby/emby.py index 5dd14369..3eee6ef1 100644 --- a/app/modules/emby/emby.py +++ b/app/modules/emby/emby.py @@ -597,3 +597,42 @@ class Emby(metaclass=Singleton): image_type="Backdrop") 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 [] diff --git a/app/modules/jellyfin/jellyfin.py b/app/modules/jellyfin/jellyfin.py index df5db170..9e40bdae 100644 --- a/app/modules/jellyfin/jellyfin.py +++ b/app/modules/jellyfin/jellyfin.py @@ -1,3 +1,4 @@ +import datetime import json import re from typing import List, Union, Optional, Dict, Generator @@ -437,3 +438,45 @@ class Jellyfin(metaclass=Singleton): except Exception as e: logger.error(f"连接Users/Items出错:" + str(e)) 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 [] diff --git a/app/plugins/bestfilmversion/__init__.py b/app/plugins/bestfilmversion/__init__.py index ea58498a..ea80a928 100644 --- a/app/plugins/bestfilmversion/__init__.py +++ b/app/plugins/bestfilmversion/__init__.py @@ -12,7 +12,6 @@ from app.core.context import MediaInfo from app.log import logger from app.modules.emby import Emby from app.modules.jellyfin import Jellyfin -from app.modules.plex import Plex from app.plugins import _PluginBase from app.schemas.types import MediaType from app.utils.http import RequestUtils @@ -46,14 +45,6 @@ class BestFilmVersion(_PluginBase): _scheduler: Optional[BackgroundScheduler] = None _cache_path: Optional[Path] = 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 @@ -63,25 +54,6 @@ class BestFilmVersion(_PluginBase): def init_plugin(self, config: dict = None): self._cache_path = settings.TEMP_PATH / "__best_film_version_cache__" 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() @@ -230,7 +202,6 @@ class BestFilmVersion(_PluginBase): poster = history.get("poster") mtype = history.get("type") time_str = history.get("time") - overview = history.get("overview") tmdbid = history.get("tmdbid") contents.append( { @@ -332,48 +303,27 @@ class BestFilmVersion(_PluginBase): # 读取历史记录 history = self.get_data('history') or [] - if self.jellyfin: - # 根据加入日期 降序排序 - url = f"{self.service_host}Users/{self.jellyfin_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.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}" + # 读取收藏 + if settings.MEDIASERVER == 'jellyfin': + resp = Jellyfin().get_fav_items() + elif settings.MEDIASERVER == 'emby': + resp = Emby().get_fav_items() else: # TODO plex待开发 return - # 获取收藏数据 - resp = self.media_simple_filter(url) - logger.info(f'BestFilmVersion插件 resp打印 {resp}') - for data in resp: # 检查缓存 if data.get('Name') in caches: continue # 获取详情 - if self.jellyfin: - item_info_resp = self.jellyfin.get_iteminfo(itemid=data.get('Id')) - elif self.emby: - item_info_resp = self.emby.get_iteminfo(itemid=data.get('Id')) + if settings.MEDIASERVER == 'jellyfin': + item_info_resp = Jellyfin().get_iteminfo(itemid=data.get('Id')) + elif settings.MEDIASERVER == 'emby': + item_info_resp = Emby().get_iteminfo(itemid=data.get('Id')) else: + # TODO plex待开发 return logger.info(f'BestFilmVersion插件 item打印 {item_info_resp}') diff --git a/app/plugins/mediasyncdel/__init__.py b/app/plugins/mediasyncdel/__init__.py index 6e5215b5..40552aca 100644 --- a/app/plugins/mediasyncdel/__init__.py +++ b/app/plugins/mediasyncdel/__init__.py @@ -13,9 +13,10 @@ from app.core.event import eventmanager, Event from app.db.models.transferhistory import TransferHistory from app.db.transferhistory_oper import TransferHistoryOper from app.log import logger +from app.modules.emby import Emby +from app.modules.jellyfin import Jellyfin from app.plugins import _PluginBase from app.schemas.types import NotificationType, EventType -from app.utils.http import RequestUtils class MediaSyncDel(_PluginBase): @@ -469,25 +470,15 @@ class MediaSyncDel(_PluginBase): @staticmethod def parse_emby_log(last_time): - # emby host - emby_host = settings.EMBY_HOST - if emby_host: - 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: + # emby + log_text = Emby().get_log() + if not log_text: logger.error("获取emby日志失败,请检查服务器配置") 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+)' - matches = re.findall(pattern, log_res.text) + matches = re.findall(pattern, log_text) del_medias = [] # 循环获取媒体信息 @@ -551,26 +542,16 @@ class MediaSyncDel(_PluginBase): @staticmethod def parse_jellyfin_log(last_time): - # jellyfin host - jellyfin_host = settings.JELLYFIN_HOST - if jellyfin_host: - if not jellyfin_host.endswith("/"): - jellyfin_host += "/" - if not jellyfin_host.startswith("http"): - jellyfin_host = "http://" + jellyfin_host + # jellyfin + log_text = Jellyfin().get_log() - # jellyfin 日志url - 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: + if not log_text: logger.error("获取jellyfin日志失败,请检查服务器配置") return [] # 正则解析删除的媒体信息 pattern = r'\[(.*?)\].*?Removing item, Type: "(.*?)", Name: "(.*?)", Path: "(.*?)"' - matches = re.findall(pattern, log_res.text) + matches = re.findall(pattern, log_text) del_medias = [] # 循环获取媒体信息