temp save

This commit is contained in:
EstrellaXD
2023-05-02 18:58:56 +08:00
parent 6c96558387
commit a9f3cdd281
15 changed files with 79 additions and 53 deletions

View File

@@ -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" ]

View File

@@ -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:

View File

@@ -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"

View File

@@ -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__)

View File

@@ -1,2 +1,2 @@
class ConflictError(Exception):
pass
pass

View File

@@ -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()

View File

@@ -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,

View File

@@ -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)

View File

@@ -1 +1 @@
import module
import module

View File

@@ -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)"