From 88e8790678f1975a1f3e95e1f130e953f8f6ef90 Mon Sep 17 00:00:00 2001 From: Akimio521 Date: Sat, 2 Nov 2024 14:11:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8F=AF=E9=80=89=E4=BB=8E=E5=AA=92?= =?UTF-8?q?=E4=BD=93=E6=9C=8D=E5=8A=A1=E5=99=A8=E4=B8=AD=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E5=85=A5=E5=BA=93=E6=9D=A1=E7=9B=AE=E6=B5=B7?= =?UTF-8?q?=E6=8A=A5=E4=BD=9C=E4=B8=BA=E7=99=BB=E5=BD=95=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=A3=81=E7=BA=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/endpoints/login.py | 17 +++++++++++------ app/chain/mediaserver.py | 17 ++++++++++++++++- app/core/config.py | 2 +- config/app.env | 2 +- 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/app/api/endpoints/login.py b/app/api/endpoints/login.py index ac4d7061..76220ea6 100644 --- a/app/api/endpoints/login.py +++ b/app/api/endpoints/login.py @@ -7,6 +7,7 @@ from fastapi.security import OAuth2PasswordRequestForm from app import schemas from app.chain.tmdb import TmdbChain from app.chain.user import UserChain +from app.chain.mediaserver import MediaServerChain from app.core import security from app.core.config import settings from app.helper.sites import SitesHelper @@ -53,10 +54,12 @@ def wallpaper() -> Any: """ 获取登录页面电影海报 """ - if settings.WALLPAPER == "tmdb": - url = TmdbChain().get_random_wallpager() - else: + if settings.WALLPAPER == "bing": url = WebUtils.get_bing_wallpaper() + elif settings.WALLPAPER == "mediaserver": + url = MediaServerChain().get_latest_wallpaper() + else: + url = TmdbChain().get_random_wallpager() if url: return schemas.Response( success=True, @@ -70,7 +73,9 @@ def wallpapers() -> Any: """ 获取登录页面电影海报 """ - if settings.WALLPAPER == "tmdb": - return TmdbChain().get_trending_wallpapers() - else: + if settings.WALLPAPER == "bing": return WebUtils.get_bing_wallpapers() + elif settings.WALLPAPER == "mediaserver": + url = MediaServerChain().get_latest_wallpapers() + else: + url = TmdbChain().get_trending_wallpapers() \ No newline at end of file diff --git a/app/chain/mediaserver.py b/app/chain/mediaserver.py index 8b9a5186..f9f512fd 100644 --- a/app/chain/mediaserver.py +++ b/app/chain/mediaserver.py @@ -1,9 +1,11 @@ import threading from typing import List, Union, Optional, Generator +from cachetools import cached, TTLCache + from app import schemas from app.chain import ChainBase -from app.core.config import global_vars +from app.core.config import global_vars, settings from app.db.mediaserver_oper import MediaServerOper from app.helper.service import ServiceConfigHelper from app.log import logger @@ -91,6 +93,19 @@ class MediaServerChain(ChainBase): 获取媒体服务器最新入库条目 """ return self.run_module("mediaserver_latest", count=count, server=server, username=username) + + @cached(cache=TTLCache(maxsize=1, ttl=3600)) + def get_latest_wallpapers(self, server:str, count=20) -> List[str]: + """ + 获取最新最新入库条目海报作为壁纸,缓存1小时 + """ + return self.run_module("mediaserver_latest_images", server=server, count=count) + + def get_latest_wallpaper(self, server:str) -> Optional[str]: + """ + 获取最新最新入库条目海报作为壁纸,缓存1小时 + """ + return self.get_latest_wallpapers(server=server, count=20)[0] def get_play_url(self, server: str, item_id: Union[str, int]) -> Optional[str]: """ diff --git a/app/core/config.py b/app/core/config.py index cd6af6be..eca5c9c3 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -79,7 +79,7 @@ class ConfigModel(BaseModel): API_TOKEN: Optional[str] = None # 网络代理 IP:PORT PROXY_HOST: Optional[str] = None - # 登录页面电影海报,tmdb/bing + # 登录页面电影海报,tmdb/bing/mediaserver WALLPAPER: str = "tmdb" # 媒体搜索来源 themoviedb/douban/bangumi,多个用,分隔 SEARCH_SOURCE: str = "themoviedb,douban,bangumi" diff --git a/config/app.env b/config/app.env index 9c48016e..417a987b 100644 --- a/config/app.env +++ b/config/app.env @@ -33,7 +33,7 @@ META_CACHE_EXPIRE=0 AUTO_UPDATE_RESOURCE=true # 【*】API密钥,未设置时系统将随机生成,建议使用复杂字符串,用于Jellyseerr/Overseerr、媒体服务器Webhook等配置以及部分支持API_TOKEN的API请求 API_TOKEN='' -# 登录页面电影海报,tmdb/bing,tmdb要求能正常连接api.themoviedb.org +# 登录页面电影海报,tmdb/bing/mediaserver,tmdb要求能正常连接api.themoviedb.org WALLPAPER=tmdb # TMDB图片地址,无需修改需保留默认值,如果默认地址连通性不好可以尝试修改为:`static-mdb.v.geilijiasu.com` TMDB_IMAGE_DOMAIN=image.tmdb.org