From 1f832633ea1bcafa5cf613ee26a9dbac7d755c18 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Wed, 14 Jun 2023 07:15:39 +0800 Subject: [PATCH] meta property --- app/chain/douban_sync.py | 10 ++-- app/chain/download.py | 38 +++++++------- app/chain/identify.py | 2 +- app/chain/search.py | 4 +- app/chain/subscribe.py | 32 ++++++------ app/chain/transfer.py | 12 ++--- app/chain/user_message.py | 28 +++++----- app/core/context.py | 23 +++++---- app/core/meta/metabase.py | 76 +++++++++++++++++----------- app/core/meta/metavideo.py | 14 ++--- app/helper/torrent.py | 10 ++-- app/modules/douban/__init__.py | 8 +-- app/modules/emby/__init__.py | 6 +-- app/modules/fanart/__init__.py | 2 +- app/modules/filetransfer/__init__.py | 18 +++---- app/modules/filter/__init__.py | 4 +- app/modules/jellyfin/__init__.py | 6 +-- app/modules/plex/__init__.py | 6 +-- app/modules/qbittorrent/__init__.py | 6 +-- app/modules/slack/slack.py | 16 +++--- app/modules/telegram/telegram.py | 14 ++--- app/modules/themoviedb/__init__.py | 38 +++++++------- app/modules/themoviedb/tmdb_cache.py | 2 +- app/modules/transmission/__init__.py | 4 +- app/modules/wechat/wechat.py | 12 ++--- tests/test_metainfo.py | 6 +-- 26 files changed, 209 insertions(+), 188 deletions(-) diff --git a/app/chain/douban_sync.py b/app/chain/douban_sync.py index bb86aa9a..b97faf28 100644 --- a/app/chain/douban_sync.py +++ b/app/chain/douban_sync.py @@ -76,24 +76,24 @@ class DoubanSyncChain(ChainBase): # 查询缺失的媒体信息 exist_flag, no_exists = self.downloadchain.get_no_exists_info(meta=meta, mediainfo=mediainfo) if exist_flag: - logger.info(f'{mediainfo.get_title_string()} 媒体库中已存在') + logger.info(f'{mediainfo.title_year} 媒体库中已存在') continue - logger.info(f'{mediainfo.get_title_string()} 媒体库中不存在,开始搜索 ...') + logger.info(f'{mediainfo.title_year} 媒体库中不存在,开始搜索 ...') # 搜索 contexts = self.searchchain.process(meta=meta, mediainfo=mediainfo, no_exists=no_exists) if not contexts: - logger.warn(f'{mediainfo.get_title_string()} 未搜索到资源') + logger.warn(f'{mediainfo.title_year} 未搜索到资源') continue # 自动下载 downloads, lefts = self.downloadchain.batch_download(contexts=contexts, need_tvs=no_exists) if downloads and not lefts: # 全部下载完成 - logger.info(f'{mediainfo.get_title_string()} 下载完成') + logger.info(f'{mediainfo.title_year} 下载完成') else: # 未完成下载 - logger.info(f'{mediainfo.get_title_string()} 未下载未完整,添加订阅 ...') + logger.info(f'{mediainfo.title_year} 未下载未完整,添加订阅 ...') # 添加订阅 self.subscribechain.process(title=mediainfo.title, year=mediainfo.year, diff --git a/app/chain/download.py b/app/chain/download.py index 755b3b8e..8ce98d82 100644 --- a/app/chain/download.py +++ b/app/chain/download.py @@ -29,8 +29,8 @@ class DownloadChain(ChainBase): msg_text = "" if torrent.site_name: msg_text = f"站点:{torrent.site_name}" - if meta.get_resource_type_string(): - msg_text = f"{msg_text}\n质量:{meta.get_resource_type_string()}" + if meta.resource: + msg_text = f"{msg_text}\n质量:{meta.resource}" if torrent.size: if str(torrent.size).isdigit(): size = StringUtils.str_filesize(torrent.size) @@ -50,8 +50,8 @@ class DownloadChain(ChainBase): torrent.description = re.sub(r'<[^>]+>', '', description) msg_text = f"{msg_text}\n描述:{torrent.description}" - self.post_message(title=f"{mediainfo.get_title_string()}" - f"{meta.get_season_episode_string()} 开始下载", + self.post_message(title=f"{mediainfo.title_year}" + f"{meta.season_episode} 开始下载", text=msg_text, image=mediainfo.get_message_image(), userid=userid) @@ -124,11 +124,11 @@ class DownloadChain(ChainBase): self.download_added(context=_context, torrent_path=_torrent_file) else: # 下载失败 - logger.error(f"{_media.get_title_string()} 添加下载任务失败:" + logger.error(f"{_media.title_year} 添加下载任务失败:" f"{_torrent.title} - {_torrent.enclosure},{error_msg}") self.post_message( title="添加下载任务失败:%s %s" - % (_media.get_title_string(), _meta.get_season_episode_string()), + % (_media.title_year, _meta.get_season_episode_string()), text=f"站点:{_torrent.site_name}\n" f"种子名称:{_meta.org_string}\n" f"种子链接:{_torrent.enclosure}\n" @@ -208,8 +208,8 @@ class DownloadChain(ChainBase): torrent = context.torrent_info if media.type != MediaType.TV: continue - item_season = meta.get_season_list() - if meta.get_episode_list(): + item_season = meta.season_list + if meta.episode_list: continue if need_tmdbid == media.tmdb_id: if set(item_season).issubset(set(need_season)): @@ -259,10 +259,10 @@ class DownloadChain(ChainBase): if context in downloaded_list: continue # 只处理单季含集的种子 - item_season = meta.get_season_list() + item_season = meta.season_list if len(item_season) != 1 or item_season[0] != need_season: continue - item_episodes = meta.get_episode_list() + item_episodes = meta.episode_list if not item_episodes: continue # 为需要集的子集则下载 @@ -301,10 +301,10 @@ class DownloadChain(ChainBase): break # 选中一个单季整季的或单季包括需要的所有集的 if media.tmdb_id == need_tmdbid \ - and (not meta.get_episode_list() - or set(meta.get_episode_list()).intersection(set(need_episodes))) \ - and len(meta.get_season_list()) == 1 \ - and meta.get_season_list()[0] == need_season: + and (not meta.episode_list + or set(meta.episode_list).intersection(set(need_episodes))) \ + and len(meta.season_list) == 1 \ + and meta.season_list[0] == need_season: # 检查种子看是否有需要的集 torrent_path, torrent_files = __download_torrent(torrent) if not torrent_path: @@ -377,20 +377,20 @@ class DownloadChain(ChainBase): # 电影 exists_movies: Optional[ExistMediaInfo] = self.media_exists(mediainfo) if exists_movies: - logger.info(f"媒体库中已存在电影:{mediainfo.get_title_string()}") + logger.info(f"媒体库中已存在电影:{mediainfo.title_year}") return True, {} return False, {} else: if not mediainfo.seasons: # 补充媒体信息 - mediainfo: MediaInfo = self.recognize_media(meta=MetaInfo(title=mediainfo.get_title_string()), + mediainfo: MediaInfo = self.recognize_media(meta=MetaInfo(title=mediainfo.title_year), mtype=mediainfo.type, tmdbid=mediainfo.tmdb_id) if not mediainfo: logger.error(f"媒体信息识别失败!") return False, {} if not mediainfo.seasons: - logger.error(f"媒体信息中没有季集信息:{mediainfo.get_title_string()}") + logger.error(f"媒体信息中没有季集信息:{mediainfo.title_year}") return False, {} # 电视剧 exists_tvs: Optional[ExistMediaInfo] = self.media_exists(mediainfo) @@ -399,7 +399,7 @@ class DownloadChain(ChainBase): for season, episodes in mediainfo.seasons.items(): # 全季不存在 if meta.begin_season \ - and season not in meta.get_season_list(): + and season not in meta.season_list: continue __append_no_exists(_season=season, _episodes=[], _total=len(episodes), _start=min(episodes)) return False, no_exists @@ -407,7 +407,7 @@ class DownloadChain(ChainBase): # 存在一些,检查缺失的季集 for season, episodes in mediainfo.seasons.items(): if meta.begin_season \ - and season not in meta.get_season_list(): + and season not in meta.season_list: continue exist_seasons = exists_tvs.seasons if exist_seasons.get(season): diff --git a/app/chain/identify.py b/app/chain/identify.py index 4deb0b2d..60574838 100644 --- a/app/chain/identify.py +++ b/app/chain/identify.py @@ -27,7 +27,7 @@ class IdentifyChain(ChainBase): if not mediainfo: logger.warn(f'{title} 未识别到媒体信息') return Context(meta=metainfo) - logger.info(f'{title} 识别到媒体信息:{mediainfo.type.value} {mediainfo.get_title_string()}') + logger.info(f'{title} 识别到媒体信息:{mediainfo.type.value} {mediainfo.title_year}') # 更新媒体图片 self.obtain_image(mediainfo=mediainfo) # 返回上下文 diff --git a/app/chain/search.py b/app/chain/search.py index 5302a54b..68ed864b 100644 --- a/app/chain/search.py +++ b/app/chain/search.py @@ -110,14 +110,14 @@ class SearchChain(ChainBase): if torrent_meta.year != mediainfo.year: continue # 比对标题 - if torrent_meta.get_name() in [mediainfo.title, mediainfo.original_title]: + if torrent_meta.name in [mediainfo.title, mediainfo.original_title]: logger.info(f'{mediainfo.title} 匹配到资源:{torrent.site_name} - {torrent.title}') _match_torrents.append(torrent) continue # 比对别名和译名 for name in mediainfo.names: if StringUtils.clear(name).strip().upper() == \ - StringUtils.clear(torrent_meta.get_name()).strip().upper(): + StringUtils.clear(torrent_meta.name).strip().upper(): logger.info(f'{mediainfo.title} 匹配到资源:{torrent.site_name} - {torrent.title}') _match_torrents.append(torrent) break diff --git a/app/chain/subscribe.py b/app/chain/subscribe.py index 82bd2023..158f6d25 100644 --- a/app/chain/subscribe.py +++ b/app/chain/subscribe.py @@ -86,17 +86,17 @@ class SubscribeChain(ChainBase): # 添加订阅 sid, err_msg = self.subscribes.add(mediainfo, season=season, **kwargs) if not sid: - logger.error(f'{mediainfo.get_title_string()} {err_msg}') + logger.error(f'{mediainfo.title_year} {err_msg}') # 发回原用户 - self.post_message(title=f"{mediainfo.get_title_string()}{metainfo.get_season_string()} " + self.post_message(title=f"{mediainfo.title_year}{metainfo.season} " f"添加订阅失败!", text=f"{err_msg}", image=mediainfo.get_message_image(), userid=userid) else: - logger.info(f'{mediainfo.get_title_string()}{metainfo.get_season_string()} 添加订阅成功') + logger.info(f'{mediainfo.title_year}{metainfo.season} 添加订阅成功') # 广而告之 - self.post_message(title=f"{mediainfo.get_title_string()}{metainfo.get_season_string()} 已添加订阅", + self.post_message(title=f"{mediainfo.title_year}{metainfo.season} 已添加订阅", text=f"评分:{mediainfo.vote_average},来自用户:{username or userid}", image=mediainfo.get_message_image()) # 返回结果 @@ -132,10 +132,10 @@ class SubscribeChain(ChainBase): # 查询缺失的媒体信息 exist_flag, no_exists = self.downloadchain.get_no_exists_info(meta=meta, mediainfo=mediainfo) if exist_flag: - logger.info(f'{mediainfo.get_title_string()} 媒体库中已存在,完成订阅') + logger.info(f'{mediainfo.title_year} 媒体库中已存在,完成订阅') self.subscribes.delete(subscribe.id) # 发送通知 - self.post_message(title=f'{mediainfo.get_title_string()}{meta.get_season_string()} 已完成订阅', + self.post_message(title=f'{mediainfo.title_year}{meta.season} 已完成订阅', image=mediainfo.get_message_image()) continue # 使用订阅的总集数和开始集数替换no_exists @@ -159,14 +159,14 @@ class SubscribeChain(ChainBase): downloads, lefts = self.downloadchain.batch_download(contexts=contexts, need_tvs=no_exists) if downloads and not lefts: # 全部下载完成 - logger.info(f'{mediainfo.get_title_string()} 下载完成,完成订阅') + logger.info(f'{mediainfo.title_year} 下载完成,完成订阅') self.subscribes.delete(subscribe.id) # 发送通知 - self.post_message(title=f'{mediainfo.get_title_string()}{meta.get_season_string()} 已完成订阅', + self.post_message(title=f'{mediainfo.title_year}{meta.season} 已完成订阅', image=mediainfo.get_message_image()) else: # 未完成下载 - logger.info(f'{mediainfo.get_title_string()} 未下载未完整,继续订阅 ...') + logger.info(f'{mediainfo.title_year} 未下载未完整,继续订阅 ...') def refresh(self): """ @@ -236,10 +236,10 @@ class SubscribeChain(ChainBase): # 查询缺失的媒体信息 exist_flag, no_exists = self.downloadchain.get_no_exists_info(meta=meta, mediainfo=mediainfo) if exist_flag: - logger.info(f'{mediainfo.get_title_string()} 媒体库中已存在,完成订阅') + logger.info(f'{mediainfo.title_year} 媒体库中已存在,完成订阅') self.subscribes.delete(subscribe.id) # 发送通知 - self.post_message(title=f'{mediainfo.get_title_string()}{meta.get_season_string()} 已完成订阅', + self.post_message(title=f'{mediainfo.title_year}{meta.season} 已完成订阅', image=mediainfo.get_message_image()) continue # 使用订阅的总集数和开始集数替换no_exists @@ -264,18 +264,18 @@ class SubscribeChain(ChainBase): if meta.begin_season and meta.begin_season != torrent_meta.begin_season: continue # 匹配成功 - logger.info(f'{mediainfo.get_title_string()} 匹配成功:{torrent_info.title}') + logger.info(f'{mediainfo.title_year} 匹配成功:{torrent_info.title}') _match_context.append(context) - logger.info(f'{mediainfo.get_title_string()} 匹配完成,共匹配到{len(_match_context)}个资源') + logger.info(f'{mediainfo.title_year} 匹配完成,共匹配到{len(_match_context)}个资源') if _match_context: # 批量择优下载 downloads, lefts = self.downloadchain.batch_download(contexts=_match_context, need_tvs=no_exists) if downloads and not lefts: # 全部下载完成 - logger.info(f'{mediainfo.get_title_string()} 下载完成,完成订阅') + logger.info(f'{mediainfo.title_year} 下载完成,完成订阅') self.subscribes.delete(subscribe.id) # 发送通知 - self.post_message(title=f'{mediainfo.get_title_string()}{meta.get_season_string()} 已完成订阅', + self.post_message(title=f'{mediainfo.title_year}{meta.season} 已完成订阅', image=mediainfo.get_message_image()) else: # 未完成下载,计算剩余集数 @@ -284,7 +284,7 @@ class SubscribeChain(ChainBase): season = season_info.get('season') if season == subscribe.season: left_episodes = season_info.get('episodes') - logger.info(f'{mediainfo.get_title_string()} 季 {season} 未下载完整,' + logger.info(f'{mediainfo.title_year} 季 {season} 未下载完整,' f'更新缺失集数为{len(left_episodes)} ...') self.subscribes.update(subscribe.id, { "lack_episode": len(left_episodes) diff --git a/app/chain/transfer.py b/app/chain/transfer.py index 13247dee..8c6ef3ad 100644 --- a/app/chain/transfer.py +++ b/app/chain/transfer.py @@ -78,7 +78,7 @@ class TransferChain(ChainBase): title, subtitle = torrent.title, None # 识别元数据 meta: MetaBase = MetaInfo(title=title, subtitle=subtitle) - if not meta.get_name(): + if not meta.name: logger.warn(f'未识别到元数据,标题:{title}') continue if not arg_mediainfo: @@ -91,7 +91,7 @@ class TransferChain(ChainBase): continue else: mediainfo = arg_mediainfo - logger.info(f"{torrent.title} 识别为:{mediainfo.type.value} {mediainfo.get_title_string()}") + logger.info(f"{torrent.title} 识别为:{mediainfo.type.value} {mediainfo.title_year}") # 更新媒体图片 self.obtain_image(mediainfo=mediainfo) # 转移 @@ -99,7 +99,7 @@ class TransferChain(ChainBase): if not transferinfo or not transferinfo.target_path: logger.warn(f"{torrent.title} 入库失败") self.post_message( - title=f"{mediainfo.get_title_string()}{meta.get_season_episode_string()} 入库失败!", + title=f"{mediainfo.title_year}{meta.season_episode} 入库失败!", text=f"原因:{transferinfo.message if transferinfo else '未知'}", image=mediainfo.get_message_image() ), @@ -126,15 +126,15 @@ class TransferChain(ChainBase): transferinfo.target_path ) ) - msg_title = f"{mediainfo.get_title_string()} 已入库" + msg_title = f"{mediainfo.title_year} 已入库" if mediainfo.vote_average: msg_str = f"评分:{mediainfo.vote_average},类型:{mediainfo.type.value}" else: msg_str = f"类型:{mediainfo.type.value}" if mediainfo.category: msg_str = f"{msg_str},类别:{mediainfo.category}" - if meta.get_resource_type_string(): - msg_str = f"{msg_str},质量:{meta.get_resource_type_string()}" + if meta.resource: + msg_str = f"{msg_str},质量:{meta.resource}" msg_str = f"{msg_str}, 大小:{file_size}" # 发送 self.post_message(title=msg_title, text=msg_str, image=mediainfo.get_message_image()) diff --git a/app/chain/user_message.py b/app/chain/user_message.py index 10b35943..3cf9d408 100644 --- a/app/chain/user_message.py +++ b/app/chain/user_message.py @@ -85,8 +85,8 @@ class UserMessageChain(ChainBase): exist_flag, no_exists = self.downloadchain.get_no_exists_info(meta=self._current_meta, mediainfo=self._current_media) if exist_flag: - self.post_message(title=f"{self._current_media.get_title_string()}" - f"{self._current_meta.get_season()} 媒体库中已存在", + self.post_message(title=f"{self._current_media.title_year}" + f"{self._current_meta.sea} 媒体库中已存在", userid=userid) return # 发送缺失的媒体信息 @@ -94,11 +94,11 @@ class UserMessageChain(ChainBase): # 发送消息 messages = [f"第 {no_exist.get('season')} 季缺失 {len(no_exist.get('episodes')) or no_exist.get('total_episodes')} 集" for no_exist in no_exists.get(mediainfo.tmdb_id)] - self.post_message(title=f"{mediainfo.get_title_string()}:\n" + "\n".join(messages)) + self.post_message(title=f"{mediainfo.title_year}:\n" + "\n".join(messages)) # 搜索种子,过滤掉不需要的剧集,以便选择 - logger.info(f"{mediainfo.get_title_string()} 媒体库中不存在,开始搜索 ...") + logger.info(f"{mediainfo.title_year} 媒体库中不存在,开始搜索 ...") self.post_message( - title=f"开始搜索 {mediainfo.type.value} {mediainfo.get_title_string()} ...", userid=userid) + title=f"开始搜索 {mediainfo.type.value} {mediainfo.title_year} ...", userid=userid) # 开始搜索 contexts = self.searchchain.process(meta=self._current_meta, mediainfo=mediainfo, @@ -106,7 +106,7 @@ class UserMessageChain(ChainBase): if not contexts: # 没有数据 self.post_message(title=f"{mediainfo.title}" - f"{self._current_meta.get_season()} 未搜索到资源!", + f"{self._current_meta.sea} 未搜索到资源!", userid=userid) return # 搜索结果排序 @@ -142,8 +142,8 @@ class UserMessageChain(ChainBase): exist_flag, no_exists = self.downloadchain.get_no_exists_info(meta=self._current_meta, mediainfo=self._current_media) if exist_flag: - self.post_message(title=f"{self._current_media.get_title_string()}" - f"{self._current_meta.get_season()} 媒体库中已存在", + self.post_message(title=f"{self._current_media.title_year}" + f"{self._current_meta.sea} 媒体库中已存在", userid=userid) return # 批量下载 @@ -152,10 +152,10 @@ class UserMessageChain(ChainBase): userid=userid) if downloads and not lefts: # 全部下载完成 - logger.info(f'{self._current_media.get_title_string()} 下载完成') + logger.info(f'{self._current_media.title_year} 下载完成') else: # 未完成下载 - logger.info(f'{self._current_media.get_title_string()} 未下载未完整,添加订阅 ...') + logger.info(f'{self._current_media.title_year} 未下载未完整,添加订阅 ...') # 添加订阅 self.subscribechain.process(title=self._current_media.title, year=self._current_media.year, @@ -286,7 +286,7 @@ class UserMessageChain(ChainBase): mtype, key_word, season_num, episode_num, year, title = StringUtils.get_keyword(content) # 识别 meta = MetaInfo(title) - if not meta.get_name(): + if not meta.name: self.post_message(title="无法识别输入内容!", userid=userid) return # 合并信息 @@ -301,10 +301,10 @@ class UserMessageChain(ChainBase): # 记录当前状态 self._current_meta = meta # 开始搜索 - logger.info(f"开始搜索:{meta.get_name()}") + logger.info(f"开始搜索:{meta.name}") medias: Optional[List[MediaInfo]] = self.search_medias(meta=meta) if not medias: - self.post_message(title=f"{meta.get_name()} 没有找到对应的媒体信息!", userid=userid) + self.post_message(title=f"{meta.name} 没有找到对应的媒体信息!", userid=userid) return logger.info(f"搜索到 {len(medias)} 条相关媒体信息") self._user_cache[userid] = { @@ -314,7 +314,7 @@ class UserMessageChain(ChainBase): self._current_page = 0 self._current_media = None # 发送媒体列表 - self.__post_medias_message(title=meta.get_name(), + self.__post_medias_message(title=meta.name, items=medias[:self._page_size], userid=userid, total=len(medias)) diff --git a/app/core/context.py b/app/core/context.py index 422c69ae..e9af2efa 100644 --- a/app/core/context.py +++ b/app/core/context.py @@ -341,7 +341,14 @@ class MediaInfo: if overview.split("/")[0].strip().isdigit(): self.year = overview.split("/")[0].strip() - def get_detail_url(self): + @property + def title_year(self): + if self.title: + return "%s (%s)" % (self.title, self.year) if self.year else self.title + return "" + + @property + def detail_link(self): """ TMDB媒体详情页地址 """ @@ -354,7 +361,8 @@ class MediaInfo: return "https://movie.douban.com/subject/%s" % self.douban_id return "" - def get_stars(self): + @property + def stars(self): """ 返回评分星星个数 """ @@ -362,9 +370,10 @@ class MediaInfo: return "" return "".rjust(int(self.vote_average), "★") - def get_star_string(self): + @property + def vote_star(self): if self.vote_average: - return "评分:%s" % self.get_stars() + return "评分:%s" % self.stars return "" def get_backdrop_image(self, default: bool = False): @@ -391,11 +400,6 @@ class MediaInfo: return self.poster_path.replace("original", "w500") return default or "" - def get_title_string(self): - if self.title: - return "%s (%s)" % (self.title, self.year) if self.year else self.title - return "" - def get_overview_string(self, max_len: int = 140): """ 返回带限定长度的简介信息 @@ -487,6 +491,7 @@ class Context: """ 转换为字典 """ + def object_to_dict(obj): attributes = [ attr for attr in dir(obj) diff --git a/app/core/meta/metabase.py b/app/core/meta/metabase.py index 939036e5..81ce3412 100644 --- a/app/core/meta/metabase.py +++ b/app/core/meta/metabase.py @@ -66,7 +66,8 @@ class MetaBase(object): self.subtitle = subtitle self.isfile = isfile - def get_name(self) -> str: + @property + def name(self) -> str: """ 返回名称 """ @@ -220,9 +221,10 @@ class MetaBase(object): else: return int(episode) == self.begin_episode - def get_season_string(self) -> str: + @property + def season(self) -> str: """ - 返回季字符串,确定是剧集没有季的返回S01 + 返回开始季、结束季字符串,确定是剧集没有季的返回S01 """ if self.begin_season is not None: return "S%s" % str(self.begin_season).rjust(2, "0") \ @@ -236,16 +238,18 @@ class MetaBase(object): else: return "" - def get_season(self) -> str: + @property + def sea(self) -> str: """ - 返回季字符串,确定是剧集没有季的返回空 + 返回开始季字符串,确定是剧集没有季的返回空 """ if self.begin_season is not None: - return self.get_season_string() + return self.season else: return "" - - def get_begin_season_string(self) -> str: + + @property + def season_name(self) -> str: """ 返回begin_season 的Sxx """ @@ -256,8 +260,9 @@ class MetaBase(object): return "S01" else: return "" - - def get_season_seq(self) -> str: + + @property + def season_seq(self) -> str: """ 返回begin_season 的数字,电视剧没有季的返回1 """ @@ -269,7 +274,8 @@ class MetaBase(object): else: return "" - def get_season_list(self) -> List[int]: + @property + def season_list(self) -> List[int]: """ 返回季的数组 """ @@ -317,10 +323,10 @@ class MetaBase(object): self.begin_episode = int(ep) self.end_episode = None - # - def get_episode_string(self) -> str: + @ property + def episode(self) -> str: """ - 返回集字符串 + 返回开始集、结束集字符串 """ if self.begin_episode is not None: return "E%s" % str(self.begin_episode).rjust(2, "0") \ @@ -331,8 +337,9 @@ class MetaBase(object): str(self.end_episode).rjust(2, "0")) else: return "" - - def get_episode_list(self) -> List[int]: + + @property + def episode_list(self) -> List[int]: """ 返回集的数组 """ @@ -343,17 +350,19 @@ class MetaBase(object): else: return [self.begin_episode] - def get_episode_strings(self) -> str: + @property + def episodes(self) -> str: """ 返回集的并列表达方式,用于支持单文件多集 """ - return "E%s" % "E".join(str(episode).rjust(2, '0') for episode in self.get_episode_list()) + return "E%s" % "E".join(str(episode).rjust(2, '0') for episode in self.episode_list) - def get_episode_seqs(self) -> str: + @property + def episode_seqs(self) -> str: """ 返回单文件多集的集数表达方式,用于支持单文件多集 """ - episodes = self.get_episode_list() + episodes = self.episode_list if episodes: # 集 xx if len(episodes) == 1: @@ -363,23 +372,25 @@ class MetaBase(object): else: return "" - def get_episode_seq(self) -> str: + @property + def episode_seq(self) -> str: """ 返回begin_episode 的数字 """ - episodes = self.get_episode_list() + episodes = self.episode_list if episodes: return str(episodes[0]) else: return "" - def get_season_episode_string(self) -> str: + @property + def season_episode(self) -> str: """ 返回季集字符串 """ if self.type == MediaType.TV: - seaion = self.get_season_string() - episode = self.get_episode_string() + seaion = self.season + episode = self.episode if seaion and episode: return "%s %s" % (seaion, episode) elif seaion: @@ -390,7 +401,8 @@ class MetaBase(object): return "" return "" - def get_resource_type_string(self) -> str: + @property + def resource(self) -> str: """ 返回资源类型字符串,含分辨率 """ @@ -403,7 +415,8 @@ class MetaBase(object): ret_string = f"{ret_string} {self.resource_pix}" return ret_string - def get_edtion_string(self) -> str: + @property + def edtion(self) -> str: """ 返回资源类型字符串,不含分辨率 """ @@ -414,7 +427,8 @@ class MetaBase(object): ret_string = f"{ret_string} {self.resource_effect}" return ret_string.strip() - def get_resource_team_string(self) -> str: + @property + def release_team(self) -> str: """ 返回发布组/字幕组字符串 """ @@ -423,13 +437,15 @@ class MetaBase(object): else: return "" - def get_video_encode_string(self) -> str: + @property + def video_term(self) -> str: """ 返回视频编码 """ return self.video_encode or "" - def get_audio_encode_string(self) -> str: + @property + def audio_term(self) -> str: """ 返回音频编码 """ diff --git a/app/core/meta/metavideo.py b/app/core/meta/metavideo.py index f53f002a..602bb254 100644 --- a/app/core/meta/metavideo.py +++ b/app/core/meta/metavideo.py @@ -190,7 +190,7 @@ class MetaVideo(MetaBase): # 第季集后面的不要 if self._last_token_type == 'name_se_words': return - if self.get_name(): + if self.name: # 名字后面以 0 开头的不要,极有可能是集 if token.startswith('0'): return @@ -245,7 +245,7 @@ class MetaVideo(MetaBase): self._last_token_type = "enname" def __init_part(self, token: str): - if not self.get_name(): + if not self.name: return if not self.year \ and not self.begin_season \ @@ -268,7 +268,7 @@ class MetaVideo(MetaBase): self._stop_name_flag = False def __init_year(self, token: str): - if not self.get_name(): + if not self.name: return if not token.isdigit(): return @@ -290,7 +290,7 @@ class MetaVideo(MetaBase): self._stop_name_flag = True def __init_resource_pix(self, token: str): - if not self.get_name(): + if not self.name: return re_res = re.findall(r"%s" % self._resources_pix_re, token, re.IGNORECASE) if re_res: @@ -443,7 +443,7 @@ class MetaVideo(MetaBase): self._last_token_type = "EPISODE" def __init_resource_type(self, token): - if not self.get_name(): + if not self.name: return source_res = re.search(r"(%s)" % self._source_re, token, re.IGNORECASE) if source_res: @@ -481,7 +481,7 @@ class MetaVideo(MetaBase): self._last_token = effect.upper() def __init_video_encode(self, token: str): - if not self.get_name(): + if not self.name: return if not self.year \ and not self.resource_pix \ @@ -521,7 +521,7 @@ class MetaVideo(MetaBase): self.video_encode = f"{self.video_encode} 10bit" def __init_audio_encode(self, token: str): - if not self.get_name(): + if not self.name: return if not self.year \ and not self.resource_pix \ diff --git a/app/helper/torrent.py b/app/helper/torrent.py index de079465..a5f7e610 100644 --- a/app/helper/torrent.py +++ b/app/helper/torrent.py @@ -175,8 +175,8 @@ class TorrentHelper: def get_sort_str(_context): _meta = _context.meta_info _torrent = _context.torrent_info - season_len = str(len(_meta.get_season_list())).rjust(2, '0') - episode_len = str(9999 - len(_meta.get_episode_list())).rjust(4, '0') + season_len = str(len(_meta.season_list)).rjust(2, '0') + episode_len = str(9999 - len(_meta.episode_list)).rjust(4, '0') # 排序:标题、资源类型、站点、做种、季集 return "%s%s%s%s" % (str(_torrent.title).ljust(100, ' '), str(_torrent.pri_order).rjust(3, '0'), @@ -208,10 +208,10 @@ class TorrentHelper: meta = context.meta_info media = context.media_info if media.type == MediaType.TV: - media_name = "%s%s" % (media.get_title_string(), + media_name = "%s%s" % (media.title_year, meta.get_season_episode_string()) else: - media_name = media.get_title_string() + media_name = media.title_year if media_name not in _added: _added.append(media_name) result.append(context) @@ -230,5 +230,5 @@ class TorrentHelper: meta = MetaInfo(file) if not meta.begin_episode: continue - episodes = list(set(episodes).union(set(meta.get_episode_list()))) + episodes = list(set(episodes).union(set(meta.episode_list))) return episodes diff --git a/app/modules/douban/__init__.py b/app/modules/douban/__init__.py index da40c048..3c20bf58 100644 --- a/app/modules/douban/__init__.py +++ b/app/modules/douban/__init__.py @@ -98,9 +98,9 @@ class DoubanModule(_ModuleBase): if settings.SEARCH_SOURCE != "douban": return None - if not meta.get_name(): + if not meta.name: return [] - result = self.doubanapi.search(meta.get_name()) + result = self.doubanapi.search(meta.name) if not result: return [] # 返回数据 @@ -128,7 +128,7 @@ class DoubanModule(_ModuleBase): if not title: continue meta = MetaInfo(title) - if meta.get_name() == name and (not season or meta.begin_season == season): + if meta.name == name and (not season or meta.begin_season == season): return item_obj return {} @@ -148,7 +148,7 @@ class DoubanModule(_ModuleBase): logger.info(f"开始刮削媒体库文件:{file} ...") try: meta = MetaInfo(file.stem) - if not meta.get_name(): + if not meta.name: continue # 根据名称查询豆瓣数据 doubaninfo = self.match(name=mediainfo.title, year=mediainfo.year, season=meta.begin_season) diff --git a/app/modules/emby/__init__.py b/app/modules/emby/__init__.py index 80d82870..07c59ed5 100644 --- a/app/modules/emby/__init__.py +++ b/app/modules/emby/__init__.py @@ -41,7 +41,7 @@ class EmbyModule(_ModuleBase): if mediainfo.type == MediaType.MOVIE: movies = self.emby.get_movies(title=mediainfo.title, year=mediainfo.year) if not movies: - logger.info(f"{mediainfo.get_title_string()} 在媒体库中不存在") + logger.info(f"{mediainfo.title_year} 在媒体库中不存在") return None else: logger.info(f"媒体库中已存在:{movies}") @@ -51,10 +51,10 @@ class EmbyModule(_ModuleBase): year=mediainfo.year, tmdb_id=mediainfo.tmdb_id) if not tvs: - logger.info(f"{mediainfo.get_title_string()} 在媒体库中不存在") + logger.info(f"{mediainfo.title_year} 在媒体库中不存在") return None else: - logger.info(f"{mediainfo.get_title_string()} 媒体库中已存在:{tvs}") + logger.info(f"{mediainfo.title_year} 媒体库中已存在:{tvs}") return ExistMediaInfo(type=MediaType.TV, seasons=tvs) def refresh_mediaserver(self, mediainfo: MediaInfo, file_path: Path) -> Optional[bool]: diff --git a/app/modules/fanart/__init__.py b/app/modules/fanart/__init__.py index 126e88e9..93713d22 100644 --- a/app/modules/fanart/__init__.py +++ b/app/modules/fanart/__init__.py @@ -38,7 +38,7 @@ class FanartModule(_ModuleBase): else: result = self.__request_fanart(mediainfo.type, mediainfo.tvdb_id) if not result or result.get('status') == 'error': - logger.warn(f"没有获取到 {mediainfo.get_title_string()} 的Fanart图片数据") + logger.warn(f"没有获取到 {mediainfo.title_year} 的Fanart图片数据") return for name, images in result.items(): if not images: diff --git a/app/modules/filetransfer/__init__.py b/app/modules/filetransfer/__init__.py index 711e5555..86abeaa0 100644 --- a/app/modules/filetransfer/__init__.py +++ b/app/modules/filetransfer/__init__.py @@ -137,11 +137,11 @@ class FileTransferModule(_ModuleBase): if (org_path.stem == Path(sub_file_name).stem) or \ (sub_metainfo.cn_name and sub_metainfo.cn_name == metainfo.cn_name) \ or (sub_metainfo.en_name and sub_metainfo.en_name == metainfo.en_name): - if metainfo.get_season_string() \ - and metainfo.get_season_string() != sub_metainfo.get_season_string(): + if metainfo.season \ + and metainfo.season != sub_metainfo.season: continue - if metainfo.get_episode_string() \ - and metainfo.get_episode_string() != sub_metainfo.get_episode_string(): + if metainfo.episode \ + and metainfo.episode != sub_metainfo.episode: continue new_file_type = "" # 兼容jellyfin字幕识别(多重识别), emby则会识别最后一个后缀 @@ -444,11 +444,11 @@ class FileTransferModule(_ModuleBase): # 原语种标题 "original_title": mediainfo.original_title, # 识别名称 - "name": meta.get_name(), + "name": meta.name, # 年份 "year": mediainfo.year, # 版本 - "edition": meta.get_edtion_string(), + "edition": meta.edtion, # 分辨率 "videoFormat": meta.resource_pix, # 制作组/字幕组 @@ -464,11 +464,11 @@ class FileTransferModule(_ModuleBase): # IMDBID "imdbid": mediainfo.imdb_id, # 季号 - "season": meta.get_season_seq(), + "season": meta.season_seq, # 集号 - "episode": meta.get_episode_seqs(), + "episode": meta.episode_seqs, # 季集 SxxExx - "season_episode": "%s%s" % (meta.get_begin_season_string(), meta.get_episode_strings()), + "season_episode": "%s%s" % (meta.season_name, meta.episode), # 段/节 "part": meta.part, # 文件后缀 diff --git a/app/modules/filter/__init__.py b/app/modules/filter/__init__.py index 3e0af1bc..9638a4a7 100644 --- a/app/modules/filter/__init__.py +++ b/app/modules/filter/__init__.py @@ -105,12 +105,12 @@ class FilterModule(_ModuleBase): seasons = season_episodes.keys() meta = MetaInfo(title=torrent.title, subtitle=torrent.description) # 种子季 - torrent_seasons = meta.get_season_list() + torrent_seasons = meta.season_list if not torrent_seasons: # 按第一季处理 torrent_seasons = [1] # 种子集 - torrent_episodes = meta.get_episode_list() + torrent_episodes = meta.episode_list if not set(torrent_seasons).issubset(set(seasons)): # 种子季不在过滤季中 logger.info(f"种子 {torrent.title} 不是需要的季") diff --git a/app/modules/jellyfin/__init__.py b/app/modules/jellyfin/__init__.py index 5f45f0f5..96fe6d75 100644 --- a/app/modules/jellyfin/__init__.py +++ b/app/modules/jellyfin/__init__.py @@ -41,7 +41,7 @@ class JellyfinModule(_ModuleBase): if mediainfo.type == MediaType.MOVIE: movies = self.jellyfin.get_movies(title=mediainfo.title, year=mediainfo.year) if not movies: - logger.info(f"{mediainfo.get_title_string()} 在媒体库中不存在") + logger.info(f"{mediainfo.title_year} 在媒体库中不存在") return None else: logger.info(f"媒体库中已存在:{movies}") @@ -51,10 +51,10 @@ class JellyfinModule(_ModuleBase): year=mediainfo.year, tmdb_id=mediainfo.tmdb_id) if not tvs: - logger.info(f"{mediainfo.get_title_string()} 在媒体库中不存在") + logger.info(f"{mediainfo.title_year} 在媒体库中不存在") return None else: - logger.info(f"{mediainfo.get_title_string()} 媒体库中已存在:{tvs}") + logger.info(f"{mediainfo.title_year} 媒体库中已存在:{tvs}") return ExistMediaInfo(type=MediaType.TV, seasons=tvs) def refresh_mediaserver(self, mediainfo: MediaInfo, file_path: Path) -> Optional[bool]: diff --git a/app/modules/plex/__init__.py b/app/modules/plex/__init__.py index abfd6f4a..0cf66d98 100644 --- a/app/modules/plex/__init__.py +++ b/app/modules/plex/__init__.py @@ -41,7 +41,7 @@ class PlexModule(_ModuleBase): if mediainfo.type == MediaType.MOVIE: movies = self.plex.get_movies(title=mediainfo.title, year=mediainfo.year) if not movies: - logger.info(f"{mediainfo.get_title_string()} 在媒体库中不存在") + logger.info(f"{mediainfo.title_year} 在媒体库中不存在") return None else: logger.info(f"媒体库中已存在:{movies}") @@ -50,10 +50,10 @@ class PlexModule(_ModuleBase): tvs = self.plex.get_tv_episodes(title=mediainfo.title, year=mediainfo.year) if not tvs: - logger.info(f"{mediainfo.get_title_string()} 在媒体库中不存在") + logger.info(f"{mediainfo.title_year} 在媒体库中不存在") return None else: - logger.info(f"{mediainfo.get_title_string()} 媒体库中已存在:{tvs}") + logger.info(f"{mediainfo.title_year} 媒体库中已存在:{tvs}") return ExistMediaInfo(type=MediaType.TV, seasons=tvs) def refresh_mediaserver(self, mediainfo: MediaInfo, file_path: Path) -> Optional[bool]: diff --git a/app/modules/qbittorrent/__init__.py b/app/modules/qbittorrent/__init__.py index 1e4b833d..0b7eb298 100644 --- a/app/modules/qbittorrent/__init__.py +++ b/app/modules/qbittorrent/__init__.py @@ -71,11 +71,11 @@ class QbittorrentModule(_ModuleBase): file_id = torrent_file.get("id") file_name = torrent_file.get("name") meta_info = MetaInfo(file_name) - if not meta_info.get_episode_list() \ - or not set(meta_info.get_episode_list()).issubset(episodes): + if not meta_info.episode_list \ + or not set(meta_info.episode_list).issubset(episodes): file_ids.append(file_id) else: - sucess_epidised = list(set(sucess_epidised).union(set(meta_info.get_episode_list()))) + sucess_epidised = list(set(sucess_epidised).union(set(meta_info.episode_list))) if sucess_epidised and file_ids: # 选择文件 self.qbittorrent.set_files(torrent_hash=torrent_hash, file_ids=file_ids, priority=0) diff --git a/app/modules/slack/slack.py b/app/modules/slack/slack.py index c4a260fa..fbe6e5da 100644 --- a/app/modules/slack/slack.py +++ b/app/modules/slack/slack.py @@ -177,13 +177,13 @@ class Slack: index = 1 for media in medias: if media.get_poster_image(): - if media.get_star_string(): - text = f"{index}. *<{media.get_detail_url()}|{media.get_title_string()}>*" \ + if media.vote_star: + text = f"{index}. *<{media.detail_link}|{media.title_year}>*" \ f"\n类型:{media.type.value}" \ - f"\n{media.get_star_string()}" \ + f"\n{media.vote_star}" \ f"\n{media.get_overview_string(50)}" else: - text = f"{index}. *<{media.get_detail_url()}|{media.get_title_string()}>*" \ + text = f"{index}. *<{media.detail_link}|{media.title_year}>*" \ f"\n类型:{media.type.value}" \ f"\n{media.get_overview_string(50)}" blocks.append( @@ -196,7 +196,7 @@ class Slack: "accessory": { "type": "image", "image_url": f"{media.get_poster_image()}", - "alt_text": f"{media.get_title_string()}" + "alt_text": f"{media.title_year}" } } ) @@ -261,9 +261,9 @@ class Slack: site_name = torrent.site_name meta = MetaInfo(torrent.title, torrent.description) link = torrent.page_url - title = f"{meta.get_season_episode_string()} " \ - f"{meta.get_resource_type_string()} " \ - f"{meta.get_resource_team_string()}" + title = f"{meta.season_episode} " \ + f"{meta.resource} " \ + f"{meta.release_team}" title = re.sub(r"\s+", " ", title).strip() free = torrent.get_volume_factor_string() seeder = f"{torrent.seeders}↑" diff --git a/app/modules/telegram/telegram.py b/app/modules/telegram/telegram.py index e5a6b7fc..f39e361d 100644 --- a/app/modules/telegram/telegram.py +++ b/app/modules/telegram/telegram.py @@ -109,15 +109,15 @@ class Telegram(metaclass=Singleton): if media.vote_average: caption = "%s\n%s. [%s](%s)\n_%s,%s_" % (caption, index, - media.get_title_string(), - media.get_detail_url(), + media.title_year, + media.detail_link, f"类型:{media.type.value}", f"评分:{media.vote_average}") else: caption = "%s\n%s. [%s](%s)\n_%s_" % (caption, index, - media.get_title_string(), - media.get_detail_url(), + media.title_year, + media.detail_link, f"类型:{media.type.value}") index += 1 @@ -148,9 +148,9 @@ class Telegram(metaclass=Singleton): site_name = torrent.site_name meta = MetaInfo(torrent.title, torrent.description) link = torrent.page_url - title = f"{meta.get_season_episode_string()} " \ - f"{meta.get_resource_type_string()} " \ - f"{meta.get_resource_team_string()}" + title = f"{meta.season_episode} " \ + f"{meta.resource} " \ + f"{meta.release_team}" title = re.sub(r"\s+", " ", title).strip() free = torrent.get_volume_factor_string() seeder = f"{torrent.seeders}↑" diff --git a/app/modules/themoviedb/__init__.py b/app/modules/themoviedb/__init__.py index 53d5cb99..126c70e6 100644 --- a/app/modules/themoviedb/__init__.py +++ b/app/modules/themoviedb/__init__.py @@ -60,38 +60,38 @@ class TheMovieDbModule(_ModuleBase): # 直接查询详情 info = self.tmdb.get_info(mtype=mtype, tmdbid=tmdbid) else: - logger.info(f"正在识别 {meta.get_name()} ...") + logger.info(f"正在识别 {meta.name} ...") if meta.type == MediaType.UNKNOWN and not meta.year: - info = self.tmdb.match_multi(meta.get_name()) + info = self.tmdb.match_multi(meta.name) else: if meta.type == MediaType.TV: # 确定是电视 - info = self.tmdb.match(name=meta.get_name(), + info = self.tmdb.match(name=meta.name, year=meta.year, mtype=meta.type, season_year=meta.year, season_number=meta.begin_season) if meta.year: # 非严格模式下去掉年份再查一次 - info = self.tmdb.match(name=meta.get_name(), + info = self.tmdb.match(name=meta.name, mtype=meta.type) else: # 有年份先按电影查 - info = self.tmdb.match(name=meta.get_name(), + info = self.tmdb.match(name=meta.name, year=meta.year, mtype=MediaType.MOVIE) # 没有再按电视剧查 if not info: - info = self.tmdb.match(name=meta.get_name(), + info = self.tmdb.match(name=meta.name, year=meta.year, mtype=MediaType.TV) if not info: # 非严格模式下去掉年份和类型再查一次 - info = self.tmdb.match_multi(name=meta.get_name()) + info = self.tmdb.match_multi(name=meta.name) if not info: # 从网站查询 - info = self.tmdb.match_web(name=meta.get_name(), + info = self.tmdb.match_web(name=meta.name, mtype=meta.type) # 补充全量信息 if info and not info.get("genres"): @@ -102,11 +102,11 @@ class TheMovieDbModule(_ModuleBase): else: # 使用缓存信息 if cache_info.get("title"): - logger.info(f"{meta.get_name()} 使用识别缓存:{cache_info.get('title')}") + logger.info(f"{meta.name} 使用识别缓存:{cache_info.get('title')}") info = self.tmdb.get_info(mtype=cache_info.get("type"), tmdbid=cache_info.get("id")) else: - logger.info(f"{meta.get_name()} 使用识别缓存:无法识别") + logger.info(f"{meta.name} 使用识别缓存:无法识别") info = None if info: @@ -118,12 +118,12 @@ class TheMovieDbModule(_ModuleBase): # 赋值TMDB信息并返回 mediainfo = MediaInfo(tmdb_info=info) mediainfo.set_category(cat) - logger.info(f"{meta.get_name()} 识别结果:{mediainfo.type.value} " - f"{mediainfo.get_title_string()} " + logger.info(f"{meta.name} 识别结果:{mediainfo.type.value} " + f"{mediainfo.title_year} " f"{mediainfo.tmdb_id}") return mediainfo else: - logger.info(f"{meta.get_name()} 未匹配到媒体信息") + logger.info(f"{meta.name} 未匹配到媒体信息") return None @@ -137,15 +137,15 @@ class TheMovieDbModule(_ModuleBase): if settings.SEARCH_SOURCE != "themoviedb": return None - if not meta.get_name(): + if not meta.name: return [] if meta.type == MediaType.UNKNOWN and not meta.year: - results = self.tmdb.search_multiis(meta.get_name()) + results = self.tmdb.search_multiis(meta.name) else: if meta.type == MediaType.UNKNOWN: results = list( - set(self.tmdb.search_movies(meta.get_name(), meta.year)) - .union(set(self.tmdb.search_tv_tmdbinfos(meta.get_name(), meta.year))) + set(self.tmdb.search_movies(meta.name, meta.year)) + .union(set(self.tmdb.search_tv_tmdbinfos(meta.name, meta.year))) ) # 组合结果的情况下要排序 results = sorted( @@ -154,9 +154,9 @@ class TheMovieDbModule(_ModuleBase): reverse=True ) elif meta.type == MediaType.MOVIE: - results = self.tmdb.search_movies(meta.get_name(), meta.year) + results = self.tmdb.search_movies(meta.name, meta.year) else: - results = self.tmdb.search_tv_tmdbinfos(meta.get_name(), meta.year) + results = self.tmdb.search_tv_tmdbinfos(meta.name, meta.year) return [MediaInfo(tmdb_info=info) for info in results] diff --git a/app/modules/themoviedb/tmdb_cache.py b/app/modules/themoviedb/tmdb_cache.py index 893a7df7..ec34a777 100644 --- a/app/modules/themoviedb/tmdb_cache.py +++ b/app/modules/themoviedb/tmdb_cache.py @@ -48,7 +48,7 @@ class TmdbCache(metaclass=Singleton): """ 获取缓存KEY """ - return f"[{meta.type.value if meta.type else '未知'}]{meta.get_name()}-{meta.year}-{meta.begin_season}" + return f"[{meta.type.value if meta.type else '未知'}]{meta.name}-{meta.year}-{meta.begin_season}" def get(self, meta: MetaBase): """ diff --git a/app/modules/transmission/__init__.py b/app/modules/transmission/__init__.py index 99bea2d2..7c627462 100644 --- a/app/modules/transmission/__init__.py +++ b/app/modules/transmission/__init__.py @@ -59,9 +59,9 @@ class TransmissionModule(_ModuleBase): file_id = torrent_file.id file_name = torrent_file.name meta_info = MetaInfo(file_name) - if not meta_info.get_episode_list(): + if not meta_info.episode_list: continue - selected = set(meta_info.get_episode_list()).issubset(set(episodes)) + selected = set(meta_info.episode_list).issubset(set(episodes)) if not selected: continue file_ids.append(file_id) diff --git a/app/modules/wechat/wechat.py b/app/modules/wechat/wechat.py index 88de1c2e..bcf1211d 100644 --- a/app/modules/wechat/wechat.py +++ b/app/modules/wechat/wechat.py @@ -170,14 +170,14 @@ class WeChat(metaclass=Singleton): index = 1 for media in medias: if media.vote_average: - title = f"{index}. {media.get_title_string()}\n类型:{media.type.value},评分:{media.vote_average}" + title = f"{index}. {media.title_year}\n类型:{media.type.value},评分:{media.vote_average}" else: - title = f"{index}. {media.get_title_string()}\n类型:{media.type.value}" + title = f"{index}. {media.title_year}\n类型:{media.type.value}" articles.append({ "title": title, "description": "", "picurl": media.get_message_image() if index == 1 else media.get_poster_image(), - "url": media.get_detail_url() + "url": media.detail_link }) index += 1 @@ -214,9 +214,9 @@ class WeChat(metaclass=Singleton): torrent = context.torrent_info meta = MetaInfo(title=torrent.title, subtitle=torrent.description) torrent_title = f"{index}.【{torrent.site_name}】" \ - f"{meta.get_season_episode_string()} " \ - f"{meta.get_resource_type_string()} " \ - f"{meta.get_resource_team_string()} " \ + f"{meta.season_episode} " \ + f"{meta.resource} " \ + f"{meta.release_team} " \ f"{StringUtils.str_filesize(torrent.size)} " \ f"{torrent.get_volume_factor_string()} " \ f"{torrent.seeders}↑" diff --git a/tests/test_metainfo.py b/tests/test_metainfo.py index 8d23861e..83d89884 100644 --- a/tests/test_metainfo.py +++ b/tests/test_metainfo.py @@ -24,9 +24,9 @@ class MetaInfoTest(TestCase): "en_name": meta_info.en_name or "", "year": meta_info.year or "", "part": meta_info.part or "", - "season": meta_info.get_season_string(), - "episode": meta_info.get_episode_string(), - "restype": meta_info.get_edtion_string(), + "season": meta_info.season, + "episode": meta_info.episode, + "restype": meta_info.edtion, "pix": meta_info.resource_pix or "", "video_codec": meta_info.video_encode or "", "audio_codec": meta_info.audio_encode or ""