diff --git a/app/conf/moduleconf.py b/app/conf/moduleconf.py index e96808055..85a17b88e 100644 --- a/app/conf/moduleconf.py +++ b/app/conf/moduleconf.py @@ -847,25 +847,26 @@ class ModuleConf(object): "tmdb_movie": { "with_genres": { "name": "类型", - "type": "selectgroup", - "options": [{'value': 28, 'name': '动作'}, - {'value': 12, 'name': '冒险'}, - {'value': 16, 'name': '动画'}, - {'value': 35, 'name': '喜剧'}, - {'value': 80, 'name': '犯罪'}, - {'value': 18, 'name': '剧情'}, - {'value': 14, 'name': '奇幻'}, - {'value': 27, 'name': '恐怖'}, - {'value': 9648, 'name': '悬疑'}, - {'value': 10749, 'name': '爱情'}, - {'value': 878, 'name': '科幻'}, - {'value': 53, 'name': '惊悚'}, - {'value': 10752, 'name': '战争'}] + "type": "dropdown", + "options": [{'value': '', 'name': '全部'}, + {'value': '12', 'name': '冒险'}, + {'value': '16', 'name': '动画'}, + {'value': '35', 'name': '喜剧'}, + {'value': '80', 'name': '犯罪'}, + {'value': '18', 'name': '剧情'}, + {'value': '14', 'name': '奇幻'}, + {'value': '27', 'name': '恐怖'}, + {'value': '9648', 'name': '悬疑'}, + {'value': '10749', 'name': '爱情'}, + {'value': '878', 'name': '科幻'}, + {'value': '53', 'name': '惊悚'}, + {'value': '10752', 'name': '战争'}] }, "with_original_language": { "name": "语言", - "type": "selectgroup", - "options": [{'value': 'zh', 'name': '中文'}, + "type": "dropdown", + "options": [{'value': '', 'name': '全部'}, + {'value': 'zh', 'name': '中文'}, {'value': 'en', 'name': '英语'}, {'value': 'ja', 'name': '日语'}, {'value': 'ko', 'name': '韩语'}, @@ -878,29 +879,31 @@ class ModuleConf(object): "tmdb_tv": { "with_genres": { "name": "类型", - "type": "selectgroup", - "options": [{'value': 10759, 'name': '动作冒险'}, - {'value': 16, 'name': '动画'}, - {'value': 35, 'name': '喜剧'}, - {'value': 80, 'name': '犯罪'}, - {'value': 99, 'name': '纪录'}, - {'value': 18, 'name': '剧情'}, - {'value': 10762, 'name': '儿童'}, - {'value': 9648, 'name': '悬疑'}, - {'value': 10764, 'name': '真人秀'}, - {'value': 10765, 'name': '科幻'}] + "type": "dropdown", + "options": [{'value': '', 'name': '全部'}, + {'value': '10759', 'name': '动作冒险'}, + {'value': '16', 'name': '动画'}, + {'value': '35', 'name': '喜剧'}, + {'value': '80', 'name': '犯罪'}, + {'value': '99', 'name': '纪录'}, + {'value': '18', 'name': '剧情'}, + {'value': '10762', 'name': '儿童'}, + {'value': '9648', 'name': '悬疑'}, + {'value': '10764', 'name': '真人秀'}, + {'value': '10765', 'name': '科幻'}] }, "with_original_language": { "name": "语言", - "type": "selectgroup", - "options": [{'id': 'zh', 'name': '中文'}, - {'id': 'en', 'name': '英语'}, - {'id': 'ja', 'name': '日语'}, - {'id': 'ko', 'name': '韩语'}, - {'id': 'fr', 'name': '法语'}, - {'id': 'de', 'name': '德语'}, - {'id': 'ru', 'name': '俄语'}, - {'id': 'hi', 'name': '印地语'}] + "type": "dropdown", + "options": [{'value': '', 'name': '全部'}, + {'value': 'zh', 'name': '中文'}, + {'value': 'en', 'name': '英语'}, + {'value': 'ja', 'name': '日语'}, + {'value': 'ko', 'name': '韩语'}, + {'value': 'fr', 'name': '法语'}, + {'value': 'de', 'name': '德语'}, + {'value': 'ru', 'name': '俄语'}, + {'value': 'hi', 'name': '印地语'}] } }, "douban_movie": { diff --git a/app/utils/types.py b/app/utils/types.py index b01d731a1..eba304817 100644 --- a/app/utils/types.py +++ b/app/utils/types.py @@ -93,3 +93,7 @@ class SiteSchema(Enum): TorrentLeech = "TorrentLeech" FileList = "FileList" TNode = "TNode" + + +MovieTypes = ['MOV', '电影'] +TvTypes = ['TV', '电视剧'] diff --git a/web/action.py b/web/action.py index c0d59f1f4..262a4c44e 100644 --- a/web/action.py +++ b/web/action.py @@ -40,7 +40,7 @@ from app.speedlimiter import SpeedLimiter from app.utils import StringUtils, EpisodeFormat, RequestUtils, PathUtils, \ SystemUtils, ExceptionUtils, Torrent -from app.utils.types import RmtMode, OsType, SearchType, DownloaderType, SyncType, MediaType +from app.utils.types import RmtMode, OsType, SearchType, DownloaderType, SyncType, MediaType, MovieTypes, TvTypes from config import RMT_MEDIAEXT, TMDB_IMAGE_W500_URL, RMT_SUBEXT, Config from web.backend.search_torrents import search_medias_for_web, search_media_by_message from web.backend.web_utils import WebUtils @@ -49,8 +49,7 @@ class WebAction: dbhelper = None _actions = {} - _MovieTypes = ['MOV', '电影'] - _TvTypes = ['TV', '电视剧'] + TvTypes = ['TV', '电视剧'] def __init__(self): self.dbhelper = DbHelper() @@ -428,7 +427,8 @@ def __sch(data): ThreadHelper().start_thread(commands.get(sch_item), ()) return {"retmsg": "服务已启动", "item": sch_item} - def __search(self, data): + @staticmethod + def __search(data): """ WEB检索资源 """ @@ -438,7 +438,7 @@ def __search(self, data): tmdbid = data.get("tmdbid") media_type = data.get("media_type") if media_type: - if media_type in self._MovieTypes: + if media_type in MovieTypes: media_type = MediaType.MOVIE else: media_type = MediaType.TV @@ -733,9 +733,9 @@ def __rename(self, data): episode_details = data.get("episode_details") episode_offset = data.get("episode_offset") min_filesize = data.get("min_filesize") - if mtype in self._MovieTypes: + if mtype in MovieTypes: media_type = MediaType.MOVIE - elif mtype in self._TvTypes: + elif mtype in TvTypes: media_type = MediaType.TV else: media_type = MediaType.ANIME @@ -780,9 +780,9 @@ def __rename_udf(self, data): episode_details = data.get("episode_details") episode_offset = data.get("episode_offset") min_filesize = data.get("min_filesize") - if mtype in self._MovieTypes: + if mtype in MovieTypes: media_type = MediaType.MOVIE - elif mtype in self._TvTypes: + elif mtype in TvTypes: media_type = MediaType.TV else: media_type = MediaType.ANIME @@ -1351,7 +1351,7 @@ def __remove_rss_media(self, data): if name: name = MetaInfo(title=name).get_name() if mtype: - if mtype in self._MovieTypes: + if mtype in MovieTypes: self.dbhelper.delete_rss_movie( title=name, year=year, rssid=rssid, tmdbid=tmdbid) else: @@ -1384,7 +1384,7 @@ def __add_rss_media(self, data): rssid = data.get("rssid") page = data.get("page") mtype = MediaType.MOVIE if data.get( - "type") in self._MovieTypes else MediaType.TV + "type") in MovieTypes else MediaType.TV media_info = None if isinstance(season, list): code = 0 @@ -1515,7 +1515,7 @@ def __media_info(self, data): release_date = "" overview = "" # 类型 - if mtype in self._MovieTypes: + if mtype in MovieTypes: media_type = MediaType.MOVIE else: media_type = MediaType.TV @@ -1857,10 +1857,11 @@ def __tv_calendar_data(data): }) return {"code": 0, "events": episode_events} - def __rss_detail(self, data): + @staticmethod + def __rss_detail(data): rid = data.get("rssid") mtype = data.get("rsstype") - if mtype in self._MovieTypes: + if mtype in MovieTypes: rssdetail = Subscribe().get_subscribe_movies(rid=rid) if not rssdetail: return {"code": 1} @@ -2409,13 +2410,13 @@ def get_recommend(self, data): res_list = Media().get_tmdb_trending_all_week(page=CurrentPage) elif Type == "DISCOVER": # TMDB发现 - mtype = MediaType.MOVIE if SubType in self._MovieTypes else MediaType.TV + mtype = MediaType.MOVIE if SubType in MovieTypes else MediaType.TV # 过滤参数 with_genres with_original_language - params = data.get("filter_params") + params = data.get("params") or {} res_list = Media().get_tmdb_discover(mtype=mtype, page=CurrentPage, params=params) elif Type == "DOUBANTAG": # 豆瓣发现 - mtype = MediaType.MOVIE if SubType in self._MovieTypes else MediaType.TV + mtype = MediaType.MOVIE if SubType in MovieTypes else MediaType.TV # 参数 # params = data.get("filter_params") or {} # 排序 @@ -4451,14 +4452,15 @@ def __cookiecloud_sync(self, data): return {"code": 0, "msg": f"成功更新 {success_count} 个站点的Cookie数据"} return {"code": 0, "msg": "同步完成,但未更新任何站点的Cookie!"} - def media_detail(self, data): + @staticmethod + def media_detail(data): """ 获取媒体详情 """ # TMDBID 或 DB:豆瓣ID tmdbid = data.get("tmdbid") mtype = MediaType.MOVIE if data.get( - "type") in self._MovieTypes else MediaType.TV + "type") in MovieTypes else MediaType.TV if not tmdbid: return {"code": 1, "msg": "未指定媒体ID"} media_info = WebUtils.get_mediainfo_from_id( @@ -4498,14 +4500,15 @@ def media_detail(self, data): } } - def __media_similar(self, data): + @staticmethod + def __media_similar(data): """ 查询TMDB相似媒体 """ tmdbid = data.get("tmdbid") page = data.get("page") or 1 mtype = MediaType.MOVIE if data.get( - "type") in self._MovieTypes else MediaType.TV + "type") in MovieTypes else MediaType.TV if not tmdbid: return {"code": 1, "msg": "未指定TMDBID"} if mtype == MediaType.MOVIE: @@ -4514,14 +4517,15 @@ def __media_similar(self, data): result = Media().get_tv_similar(tmdbid=tmdbid, page=page) return {"code": 0, "data": result} - def __media_recommendations(self, data): + @staticmethod + def __media_recommendations(data): """ 查询TMDB同类推荐媒体 """ tmdbid = data.get("tmdbid") page = data.get("page") or 1 mtype = MediaType.MOVIE if data.get( - "type") in self._MovieTypes else MediaType.TV + "type") in MovieTypes else MediaType.TV if not tmdbid: return {"code": 1, "msg": "未指定TMDBID"} if mtype == MediaType.MOVIE: @@ -4530,26 +4534,28 @@ def __media_recommendations(self, data): result = Media().get_tv_recommendations(tmdbid=tmdbid, page=page) return {"code": 0, "data": result} - def __media_person(self, data): + @staticmethod + def __media_person(data): """ 查询TMDB媒体所有演员 """ tmdbid = data.get("tmdbid") mtype = MediaType.MOVIE if data.get( - "type") in self._MovieTypes else MediaType.TV + "type") in MovieTypes else MediaType.TV if not tmdbid: return {"code": 1, "msg": "未指定TMDBID"} return {"code": 0, "data": Media().get_tmdb_cats(tmdbid=tmdbid, mtype=mtype)} - def __person_medias(self, data): + @staticmethod + def __person_medias(data): """ 查询演员参演作品 """ personid = data.get("personid") page = data.get("page") or 1 mtype = MediaType.MOVIE if data.get( - "type") in self._MovieTypes else MediaType.TV + "type") in MovieTypes else MediaType.TV if not personid: return {"code": 1, "msg": "未指定演员ID"} return {"code": 0, "data": Media().get_person_medias(personid=personid, diff --git a/web/main.py b/web/main.py index 0fea8f230..dd555f56a 100644 --- a/web/main.py +++ b/web/main.py @@ -402,6 +402,8 @@ def recommend(): PersonId = request.args.get("personid") or "" Keyword = request.args.get("keyword") or "" Source = request.args.get("source") or "" + FilterKey = request.args.get("filter") or "" + Params = json.loads(request.args.get("params")) if request.args.get("params") else {} return render_template("discovery/recommend.html", Type=Type, SubType=SubType, @@ -412,7 +414,10 @@ def recommend(): PersonId=PersonId, SubTitle=SubTitle, Keyword=Keyword, - Source=Source) + Source=Source, + Filter=FilterKey, + FilterConf=ModuleConf.DISCOVER_FILTER_CONF.get(FilterKey) if FilterKey else {}, + Params=Params) # 推荐页面 @@ -430,7 +435,9 @@ def douban_movie(): return render_template("discovery/recommend.html", Type="DOUBANTAG", SubType="MOV", - Title="豆瓣电影") + Title="豆瓣电影", + Filter="douban_movie", + FilterConf=ModuleConf.DISCOVER_FILTER_CONF.get('douban_movie')) # 豆瓣电视剧 @@ -440,7 +447,9 @@ def douban_tv(): return render_template("discovery/recommend.html", Type="DOUBANTAG", SubType="TV", - Title="豆瓣电视剧") + Title="豆瓣电视剧", + Filter="douban_tv", + FilterConf=ModuleConf.DISCOVER_FILTER_CONF.get('douban_tv')) @App.route('/tmdb_movie', methods=['POST', 'GET']) @@ -449,7 +458,9 @@ def tmdb_movie(): return render_template("discovery/recommend.html", Type="DISCOVER", SubType="MOV", - Title="TMDB电影") + Title="TMDB电影", + Filter="tmdb_movie", + FilterConf=ModuleConf.DISCOVER_FILTER_CONF.get('tmdb_movie')) @App.route('/tmdb_tv', methods=['POST', 'GET']) @@ -458,7 +469,9 @@ def tmdb_tv(): return render_template("discovery/recommend.html", Type="DISCOVER", SubType="TV", - Title="TMDB电视剧") + Title="TMDB电视剧", + Filter="tmdb_tv", + FilterConf=ModuleConf.DISCOVER_FILTER_CONF.get('tmdb_tv')) # Bangumi每日放送 diff --git a/web/templates/discovery/recommend.html b/web/templates/discovery/recommend.html index a1c76df8a..a9eae0312 100644 --- a/web/templates/discovery/recommend.html +++ b/web/templates/discovery/recommend.html @@ -1,4 +1,5 @@ {% import 'macro/oops.html' as OOPS %} +{% import 'macro/form.html' as FORM %}