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