-
Notifications
You must be signed in to change notification settings - Fork 355
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix api bugs. Add new module to parse path problem
- Loading branch information
1 parent
c26b669
commit 8f548d8
Showing
16 changed files
with
257 additions
and
296 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
import re | ||
import logging | ||
|
||
from module.conf import settings | ||
from module.models import BangumiData | ||
|
||
if ":\\" in settings.downloader.path: | ||
import ntpath as path | ||
else: | ||
import os.path as path | ||
|
||
logger = logging.getLogger(__name__) | ||
|
||
|
||
class TorrentPath: | ||
def __init__(self): | ||
self.download_path = settings.downloader.path | ||
|
||
@staticmethod | ||
def check_files(info): | ||
media_list = [] | ||
subtitle_list = [] | ||
for f in info.files: | ||
file_name = f.name | ||
suffix = path.splitext(file_name)[-1] | ||
if suffix.lower() in [".mp4", ".mkv"]: | ||
media_list.append(file_name) | ||
elif suffix.lower() in [".ass", ".srt"]: | ||
subtitle_list.append(file_name) | ||
return media_list, subtitle_list | ||
|
||
def _path_to_bangumi(self, save_path): | ||
# Split save path and download path | ||
save_parts = save_path.split(path.sep) | ||
download_parts = self.download_path.split(path.sep) | ||
# Get bangumi name and season | ||
bangumi_name = "" | ||
season = 1 | ||
for part in save_parts: | ||
if re.match(r"S\d+|[Ss]eason \d+", part): | ||
season = int(re.findall(r"\d+", part)[0]) | ||
elif part not in download_parts: | ||
bangumi_name = part | ||
return bangumi_name, season | ||
|
||
@staticmethod | ||
def _file_depth(path): | ||
return len(path.split(path.sep)) | ||
|
||
@staticmethod | ||
def is_ep(self, path): | ||
return self._file_depth(path) <= 2 | ||
|
||
def _gen_save_path(self, data: BangumiData): | ||
folder = f"{data.official_title}({data.year})" if data.year else data.official_title | ||
save_path = path.join(self.download_path, folder, f"Season {data.season}") | ||
return save_path | ||
|
||
@staticmethod | ||
def _rule_name(data: BangumiData): | ||
rule_name = f"[{data.group_name}] {data.official_title} S{data.season}" \ | ||
if settings.bangumi_manage.group_tag \ | ||
else f"{data.official_title} S{data.season}" | ||
return rule_name | ||
|
||
@staticmethod | ||
def _join_path(*args): | ||
return path.join(*args) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
from .eps_complete import FullSeasonGet | ||
from .collector import SeasonCollector, eps_complete | ||
from .renamer import Renamer | ||
from .torrent import TorrentManager |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
import logging | ||
|
||
from module.downloader import DownloadClient | ||
from module.models import BangumiData | ||
from module.database import BangumiDatabase | ||
from module.searcher import SearchTorrent | ||
|
||
logger = logging.getLogger(__name__) | ||
|
||
|
||
class SeasonCollector(DownloadClient): | ||
def add_season_torrents(self, data: BangumiData, torrents): | ||
for torrent in torrents: | ||
download_info = { | ||
"url": torrent.torrent_link, | ||
"save_path": self._gen_save_path(data), | ||
} | ||
self.add_torrent(download_info) | ||
|
||
def collect_season(self, data: BangumiData, link: str = None): | ||
logger.info(f"Start collecting {data.official_title} Season {data.season}...") | ||
with SearchTorrent() as st: | ||
if not link: | ||
torrents = st.search_season(data) | ||
else: | ||
torrents = st.get_torrents(link) | ||
self.add_season_torrents(data, torrents) | ||
logger.info("Completed!") | ||
|
||
def subscribe_season(self, data: BangumiData): | ||
data.added = True | ||
data.eps_collect = True | ||
with BangumiDatabase() as db: | ||
db.insert(data) | ||
self.add_rss_feed(data.rss_link[0], item_path=data.official_title) | ||
self.set_rule(data) | ||
|
||
|
||
def eps_complete(): | ||
with BangumiDatabase() as bd: | ||
datas = bd.not_complete() | ||
if datas: | ||
logger.info("Start collecting full season...") | ||
for data in datas: | ||
if not data.eps_collect: | ||
with SeasonCollector() as sc: | ||
sc.collect_season(data) | ||
data.eps_collect = True | ||
bd.update_list(datas) | ||
|
||
|
||
if __name__ == '__main__': | ||
from module.conf import setup_logger | ||
setup_logger() | ||
eps_complete() |
Oops, something went wrong.