Skip to content

Commit

Permalink
Handle Dressrosa Arc who's files use a "Chapter XXX-XXX" syntax when …
Browse files Browse the repository at this point in the history
…downloaded from the Torrent feed
  • Loading branch information
Matroxt committed Jun 2, 2022
1 parent f5b4519 commit 2871113
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 19 deletions.
50 changes: 50 additions & 0 deletions chapters-reference.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
{
"700-701": "E628-E630",
"702-703": "E631-E633",
"704-705": "E634-E635",
"706-707": "E636-E637",
"708-709": "E638",
"710-711": "E639-E641",
"712-713": "E642-E643",
"714-715": "E644-E645",
"716-717": "E646-E647",
"718-719": "E648-E649",
"720-721": "E650-E651",
"722-723": "E652-E654",
"724-725": "E655-E657",
"726-727": "E658-E659",
"728-729": "E660-E661",
"730-731": "E662-E663",
"732-733": "E664-E665",
"734-735": "E666-E667",
"736-737": "E668-E670",
"738-739": "E671-E672",
"740-741": "E673-E675",
"742-743": "E676-E678",
"744-745": "E679-E680",
"746-747": "E681-E683",
"748-749": "E684-E686",
"750-751": "E686-E688",
"752-753": "E689-E691",
"754-755": "E692-E693",
"756-757": "E694-E696",
"758-759": "E697-E698",
"760-761": "E699-E700",
"762-763": "E701-E702",
"764-765": "E703-E704",
"766-767": "E705-E707",
"768-769": "E708-E710",
"770-771": "E711-E713",
"772-773": "E714-E716",
"774-775": "E717-E719",
"776-778": "E720-E721",
"779-781": "E722-E724",
"782-783": "E725-E727",
"784-785": "E728-E730",
"786-787": "E731-E733",
"788-790": "E734-E736",
"791-793": "E737-E739",
"794-795": "E740-E741",
"796-797": "E742-E743",
"798-800": "E744-E746"
}
75 changes: 56 additions & 19 deletions rename.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,34 @@
import json
import argparse

# load_episodes_reference_file takes the reference file path
args = None

# set_ref_file_vars sets the chapterepisode reference files as global variables
# because they're often referenced in the script
def set_ref_file_vars(episodes_ref_file_path, chapters_ref_file_path):
global episodes_ref_file
episodes_ref_file = episodes_ref_file_path
global chapters_ref_file
chapters_ref_file = chapters_ref_file_path


# set_mapping sets mapping of One Pace episodes as global variables
# because they're often referenced in the script
def set_mapping(episode_mapping_value, chapter_mapping_value):
global episode_mapping
episode_mapping = episode_mapping_value
global chapter_mapping
chapter_mapping = chapter_mapping_value


# load_json_file takes a JSON file path
# and returns a JSON object of it.
def load_episodes_reference_file(reference_file):
with open(reference_file) as f:
def load_json_file(file):
with open(file) as f:
try:
episode_mapping = json.load(f)
except ValueError as e:
print("Failed to load the episode reference file \"{}\": {}".format(reference_file, e))
print("Failed to load the file \"{}\": {}".format(file, e))
exit

return episode_mapping
Expand All @@ -26,46 +46,63 @@ def list_mkv_files_in_directory(directory):
# generate_new_name_for_episode parses the original one pace file name
# and tries to match it with the reference episodes.
# It returns the new name the file should have
def generate_new_name_for_episode(original_file_name, episode_mapping, reference_file):
def generate_new_name_for_episode(original_file_name):
reg = re.search(r'\[One Pace\]\[.*\] (.*?) (\d\d?) \[(\d+p)\].*\.mkv', original_file_name)

if (reg is None):
raise ValueError("File \"{}\" didn't match the regex".format(original_file_name))
if (reg is not None):
arc_name = reg.group(1)
arc_ep_num = reg.group(2)
resolution = reg.group(3)

arc = episode_mapping.get(arc_name)
if (arc is None):
raise ValueError("\"{}\" Arc not found in file {}".format(arc_name, episodes_ref_file))

arc_name = reg.group(1)
arc_ep_num = reg.group(2)
resolution = reg.group(3)
episode_number = arc.get(arc_ep_num)
if ((episode_number is None) or (episode_number == "")):
raise ValueError("Episode {} not found in \"{}\" Arc in file {}".format(arc_ep_num, arc_name, episodes_ref_file))

arc = episode_mapping.get(arc_name)
if (arc is None):
raise ValueError("\"{}\" Arc not found in file {}".format(arc_name, reference_file))
return "One.Piece.{}.{}.mkv".format(episode_number, resolution)

episode_number = arc.get(arc_ep_num)
if ((episode_number is None) or (episode_number == "")):
raise ValueError("Episode {} not found in \"{}\" Arc in file {}".format(arc_ep_num, arc_name, reference_file))
reg = re.search(r'\[One Pace\]\ Chapter\ (\d+-\d+) \[(\d+p)\].*\.mkv', original_file_name)

return "One.Piece.{}.{}.mkv".format(episode_number, resolution)
if (reg is not None):
chapters = reg.group(1)
resolution = reg.group(2)

episode_number = chapter_mapping.get(chapters)
if ((episode_number is None) or (episode_number == "")):
raise ValueError("\"{}\" Episode not found in file {}".format(chapters, chapters_ref_file))

return "One.Piece.{}.{}.mkv".format(episode_number, resolution)

raise ValueError("File \"{}\" didn't match the regexes".format(original_file_name))


def main():
parser = argparse.ArgumentParser(description='Rename One Pace files to a format Plex understands')
parser.add_argument("-rf", "--reference-file", nargs='?', help="Path to the episodes reference file", default="episodes-reference.json")
parser.add_argument("-crf", "--chapter-reference-file", nargs='?', help="Path to the chapters reference file", default="chapters-reference.json")
parser.add_argument("-d", "--directory", nargs='?', help="Data directory (aka path where the mkv files are)", default=None)
parser.add_argument("--dry-run", action="store_true", help="If this flag is passed, the output will only show how the files would be renamed")
args = vars(parser.parse_args())


set_ref_file_vars(args["reference_file"], args["chapter_reference_file"] )

if args["directory"] is None:
args["directory"] = getcwd()

episode_mapping = load_episodes_reference_file(args["reference_file"])
set_mapping(load_json_file(episodes_ref_file), load_json_file(chapters_ref_file))

video_files = list_mkv_files_in_directory(args["directory"])

if len(video_files) == 0:
print("No mkv files found in directory \"{}\"".format(args["directory"]))

for file in video_files:
try:
new_episode_name = generate_new_name_for_episode(file, episode_mapping, args["reference_file"])
new_episode_name = generate_new_name_for_episode(file)
except ValueError as e:
print(e)
continue
Expand Down

0 comments on commit 2871113

Please sign in to comment.