mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-04-24 10:31:09 +08:00
temp save
This commit is contained in:
@@ -37,7 +37,7 @@ RUN apk add --no-cache \
|
||||
/tmp/*
|
||||
|
||||
COPY --chmod=755 src/. .
|
||||
COPY --chmod=755 ./docker /
|
||||
COPY --chmod=755 src/docker /
|
||||
|
||||
ENTRYPOINT [ "/init" ]
|
||||
|
||||
|
||||
@@ -37,8 +37,8 @@ def load_data_file(rss_link: str) -> ProgramData:
|
||||
|
||||
|
||||
def main_process(program_data: ProgramData, download_client: DownloadClient):
|
||||
rename = Renamer(download_client)
|
||||
rss_analyser = RSSAnalyser()
|
||||
rename = Renamer(download_client, settings)
|
||||
rss_analyser = RSSAnalyser(settings)
|
||||
while True:
|
||||
times = 0
|
||||
if settings.rss_parser.enable:
|
||||
|
||||
@@ -11,3 +11,6 @@ class RSSLink(str):
|
||||
if "://" not in settings.rss_parser.custom_url:
|
||||
return f"https://{settings.rss_parser.custom_url}/RSS/MyBangumi?token={settings.rss_parser.token}"
|
||||
return f"{settings.rss_parser.custom_url}/RSS/MyBangumi?token={settings.rss_parser.token}"
|
||||
|
||||
|
||||
PLATFORM = "Windows" if "\\" in settings.downloader.path else "Unix"
|
||||
|
||||
@@ -4,9 +4,9 @@ import time
|
||||
from aria2p import Client, ClientException, API
|
||||
|
||||
|
||||
from conf import settings
|
||||
from module.conf import settings
|
||||
|
||||
from downloader.exceptions import ConflictError
|
||||
from .exceptions import ConflictError
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
class ConflictError(Exception):
|
||||
pass
|
||||
pass
|
||||
|
||||
@@ -5,18 +5,19 @@ from pathlib import PurePath, PureWindowsPath
|
||||
|
||||
from module.core.download_client import DownloadClient
|
||||
|
||||
from module.conf import settings
|
||||
from module.parser import TitleParser
|
||||
from module.network import PostNotification
|
||||
from module.models import Config
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Renamer:
|
||||
def __init__(self, download_client: DownloadClient):
|
||||
def __init__(self, download_client: DownloadClient, settings: Config):
|
||||
self.client = download_client
|
||||
self._renamer = TitleParser()
|
||||
self.notification = PostNotification()
|
||||
self.settings = settings
|
||||
|
||||
@staticmethod
|
||||
def print_result(torrent_count, rename_count):
|
||||
@@ -43,41 +44,53 @@ class Renamer:
|
||||
file_list.append(file_name)
|
||||
return file_list
|
||||
|
||||
def rename_file(self, info, media_path):
|
||||
old_name = info.name
|
||||
def rename_file(self, info, media_path: str, settings: Config):
|
||||
torrent_name = info.name
|
||||
suffix = os.path.splitext(media_path)[-1]
|
||||
compare_name = media_path.split(os.path.sep)[-1]
|
||||
folder_name, season = self.get_folder_and_season(info.save_path)
|
||||
new_path = self._renamer.torrent_parser(old_name, folder_name, season, suffix)
|
||||
bangumi_name, season = self.get_season_info(info.save_path, settings)
|
||||
new_path = self._renamer.torrent_parser(
|
||||
torrent_name=torrent_name,
|
||||
bangumi_name=bangumi_name,
|
||||
season=season,
|
||||
suffix=suffix,
|
||||
method=settings.bangumi_manage.rename_method
|
||||
)
|
||||
if compare_name != new_path:
|
||||
try:
|
||||
self.client.rename_torrent_file(_hash=info.hash, old_path=media_path, new_path=new_path)
|
||||
self.notification.send_msg(folder_name, "update")
|
||||
self.notification.send_msg(bangumi_name, "update")
|
||||
except Exception as e:
|
||||
logger.warning(f"{old_name} rename failed")
|
||||
logger.warning(f"Folder name: {folder_name}, Season: {season}, Suffix: {suffix}")
|
||||
logger.warning(f"{torrent_name} rename failed")
|
||||
logger.warning(f"Season name: {bangumi_name}, Season: {season}, Suffix: {suffix}")
|
||||
logger.debug(e)
|
||||
# Delete bad torrent
|
||||
self.delete_bad_torrent(info)
|
||||
self.delete_bad_torrent(info, settings)
|
||||
|
||||
def rename_collection(self, info, media_list: list[str]):
|
||||
folder_name, season = self.get_folder_and_season(info.save_path)
|
||||
def rename_collection(self, info, media_list: list[str], settings: Config):
|
||||
bangumi_name, season = self.get_season_info(info.save_path, settings)
|
||||
_hash = info.hash
|
||||
for media_path in media_list:
|
||||
path_len = len(media_path.split(os.path.sep))
|
||||
if path_len <= 2:
|
||||
suffix = os.path.splitext(media_path)[-1]
|
||||
old_name = media_path.split(os.path.sep)[-1]
|
||||
new_name = self._renamer.torrent_parser(old_name, folder_name, season, suffix)
|
||||
if old_name != new_name:
|
||||
torrent_name = media_path.split(os.path.sep)[-1]
|
||||
new_name = self._renamer.torrent_parser(
|
||||
torrent_name=torrent_name,
|
||||
bangumi_name=bangumi_name,
|
||||
season=season,
|
||||
suffix=suffix,
|
||||
method=settings.bangumi_manage.rename_method
|
||||
)
|
||||
if torrent_name != new_name:
|
||||
try:
|
||||
self.client.rename_torrent_file(_hash=_hash, old_path=media_path, new_path=new_name)
|
||||
except Exception as e:
|
||||
logger.warning(f"{old_name} rename failed")
|
||||
logger.warning(f"Folder name: {folder_name}, Season: {season}, Suffix: {suffix}")
|
||||
logger.warning(f"{torrent_name} rename failed")
|
||||
logger.warning(f"Bangumi name: {bangumi_name}, Season: {season}, Suffix: {suffix}")
|
||||
logger.debug(e)
|
||||
# Delete bad torrent.
|
||||
self.delete_bad_torrent(info)
|
||||
self.delete_bad_torrent(info, settings)
|
||||
self.client.set_category(category="BangumiCollection", hashes=_hash)
|
||||
|
||||
def rename_subtitles(self, subtitle_list: list[str], _hash):
|
||||
@@ -93,13 +106,13 @@ class Renamer:
|
||||
logger.warning(f"Suffix: {suffix}")
|
||||
logger.debug(e)
|
||||
|
||||
def delete_bad_torrent(self, info):
|
||||
def delete_bad_torrent(self, info, settings: Config):
|
||||
if settings.bangumi_manage.remove_bad_torrent:
|
||||
self.client.delete_torrent(info.hash)
|
||||
logger.info(f"{info.name} have been deleted.")
|
||||
|
||||
@staticmethod
|
||||
def get_folder_and_season(save_path: str):
|
||||
def get_season_info(save_path: str, settings: Config):
|
||||
# Remove default save path
|
||||
save_path = save_path.replace(settings.downloader.path, "")
|
||||
# Check windows or linux path
|
||||
@@ -127,18 +140,12 @@ class Renamer:
|
||||
for info in recent_info:
|
||||
media_list = self.check_files(info)
|
||||
if len(media_list) == 1:
|
||||
self.rename_file(info, media_list[0])
|
||||
self.rename_file(info, media_list[0], self.settings)
|
||||
rename_count += 1
|
||||
# TODO: Rename subtitles
|
||||
elif len(media_list) > 1:
|
||||
logger.info("Start rename collection")
|
||||
self.rename_collection(info, media_list)
|
||||
self.rename_collection(info, media_list, self.settings)
|
||||
rename_count += len(media_list)
|
||||
else:
|
||||
logger.warning(f"{info.name} has no media file")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
client = DownloadClient()
|
||||
rn = Renamer(client)
|
||||
rn.rename()
|
||||
|
||||
@@ -2,11 +2,9 @@ import logging
|
||||
|
||||
from .analyser import raw_parser, torrent_parser, TMDBMatcher
|
||||
|
||||
from module.conf import settings
|
||||
from module.models import BangumiData
|
||||
from module.models import BangumiData, Config
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
LANGUAGE = settings.rss_parser.language
|
||||
|
||||
|
||||
class TitleParser:
|
||||
@@ -15,16 +13,15 @@ class TitleParser:
|
||||
|
||||
@staticmethod
|
||||
def torrent_parser(
|
||||
download_raw: str,
|
||||
folder_name: str | None = None,
|
||||
method: str,
|
||||
torrent_name: str,
|
||||
bangumi_name: str | None = None,
|
||||
season: int | None = None,
|
||||
suffix: str | None = None,
|
||||
method: str = settings.bangumi_manage.rename_method
|
||||
):
|
||||
return torrent_parser(download_raw, folder_name, season, suffix, method)
|
||||
|
||||
def tmdb_parser(self, title: str, season: int):
|
||||
return torrent_parser(torrent_name, bangumi_name, season, suffix, method)
|
||||
|
||||
def tmdb_parser(self, title: str, season: int, language: str):
|
||||
official_title, tmdb_season = None, None
|
||||
try:
|
||||
tmdb_info = self._tmdb_parser.tmdb_search(title)
|
||||
@@ -34,15 +31,21 @@ class TitleParser:
|
||||
logger.warning(f"{title} can not Matched with TMDB")
|
||||
logger.info("Please change the bangumi info in webui")
|
||||
return title, season
|
||||
if LANGUAGE == "zh":
|
||||
if language == "zh":
|
||||
official_title = f"{tmdb_info.title_zh} ({tmdb_info.year_number})"
|
||||
elif LANGUAGE == "jp":
|
||||
elif language == "jp":
|
||||
official_title = f"{tmdb_info.title_jp} ({tmdb_info.year_number})"
|
||||
tmdb_season = tmdb_info.last_season if tmdb_info.last_season else season
|
||||
official_title = official_title if official_title else title
|
||||
return official_title, tmdb_season
|
||||
|
||||
def raw_parser(self, raw: str, _id: int | None = None) -> BangumiData:
|
||||
def raw_parser(
|
||||
self,
|
||||
raw: str,
|
||||
settings: Config,
|
||||
_id: int | None = None
|
||||
) -> BangumiData:
|
||||
language = settings.rss_parser.language
|
||||
try:
|
||||
episode = raw_parser(raw)
|
||||
titles = {
|
||||
@@ -53,9 +56,13 @@ class TitleParser:
|
||||
title_search = episode.title_zh if episode.title_zh else episode.title_en
|
||||
title_raw = episode.title_en if episode.title_en else episode.title_zh
|
||||
if settings.rss_parser.enable_tmdb:
|
||||
official_title, _season = self.tmdb_parser(title_search, episode.season)
|
||||
official_title, _season = self.tmdb_parser(
|
||||
title_search,
|
||||
episode.season,
|
||||
language
|
||||
)
|
||||
else:
|
||||
official_title = titles[LANGUAGE] if titles[LANGUAGE] else titles["zh"]
|
||||
official_title = titles[language] if titles[language] else titles["zh"]
|
||||
_season = episode.season
|
||||
data = BangumiData(
|
||||
id=_id,
|
||||
|
||||
@@ -4,14 +4,15 @@ import logging
|
||||
from module.network import RequestContent
|
||||
from module.parser import TitleParser
|
||||
from module.core import DownloadClient
|
||||
from module.models import BangumiData
|
||||
from module.models import BangumiData, Config
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class RSSAnalyser:
|
||||
def __init__(self):
|
||||
def __init__(self, settings: Config):
|
||||
self._title_analyser = TitleParser()
|
||||
self.settings = settings
|
||||
|
||||
@staticmethod
|
||||
def find_id(bangumi_info: list[BangumiData]) -> int:
|
||||
@@ -37,7 +38,10 @@ class RSSAnalyser:
|
||||
break
|
||||
if extra_add:
|
||||
_id += 1
|
||||
data = self._title_analyser.raw_parser(raw_title, _id)
|
||||
data = self._title_analyser.raw_parser(
|
||||
raw=raw_title,
|
||||
_id=_id,
|
||||
settings=self.settings)
|
||||
if data is not None and data.official_title not in bangumi_info:
|
||||
bangumi_info.append(data)
|
||||
return bangumi_info
|
||||
@@ -47,7 +51,10 @@ class RSSAnalyser:
|
||||
rss_torrents = req.get_torrents(url, filter)
|
||||
for torrent in rss_torrents:
|
||||
try:
|
||||
data = self._title_analyser.raw_parser(torrent.name)
|
||||
data = self._title_analyser.raw_parser(
|
||||
torrent.name,
|
||||
settings=self.settings
|
||||
)
|
||||
return data
|
||||
except Exception as e:
|
||||
logger.debug(e)
|
||||
|
||||
@@ -1 +1 @@
|
||||
import module
|
||||
import module
|
||||
|
||||
@@ -8,6 +8,8 @@ def test_torrent_parser():
|
||||
suffix = ".mp4"
|
||||
assert torrent_parser(file_name, folder_name, season, suffix, "pn") == "Boku no Kokoro no Yabai Yatsu S01E01.mp4"
|
||||
assert torrent_parser(file_name, folder_name, season, suffix, "advance") == "我内心的糟糕念头(2023) S01E01.mp4"
|
||||
assert torrent_parser(file_name, folder_name, season, suffix, "none") == "[Lilith-Raws] Boku no Kokoro no Yabai Yatsu - 01 [Baha][WEB-DL][1080p][AVC AAC][CHT][MP4].mp4"
|
||||
|
||||
|
||||
file_name = "[Sakurato] Tonikaku Kawaii S2 [01][AVC-8bit 1080p AAC][CHS].mp4"
|
||||
folder_name = "总之就是非常可爱(2021)"
|
||||
|
||||
Reference in New Issue
Block a user