refactor: make code slightly cleaner
This commit is contained in:
parent
01e6f84f0b
commit
1c52044f9c
1 changed files with 20 additions and 26 deletions
46
merge_srt.py
46
merge_srt.py
|
@ -4,29 +4,25 @@ import shlex
|
||||||
class SRTMerger:
|
class SRTMerger:
|
||||||
def __init__(self, srt1_filename, srt2_filename, commands_filename, output_filename):
|
def __init__(self, srt1_filename, srt2_filename, commands_filename, output_filename):
|
||||||
self.errors = []
|
self.errors = []
|
||||||
self.srt1, srt1_errors = self.parse_srt(srt1_filename)
|
self.srt1 = self.parse_srt(srt1_filename)
|
||||||
self.errors.extend(srt1_errors)
|
self.srt2 = self.parse_srt(srt2_filename)
|
||||||
self.srt2, srt2_errors = self.parse_srt(srt2_filename)
|
self.commands = self.read_commands(commands_filename)
|
||||||
self.errors.extend(srt2_errors)
|
|
||||||
self.commands, cmd_errors = self.read_commands(commands_filename)
|
|
||||||
self.errors.extend(cmd_errors)
|
|
||||||
self.output = []
|
self.output = []
|
||||||
self.output_filename = output_filename
|
self.output_filename = output_filename
|
||||||
|
|
||||||
def parse_srt(self, filename):
|
def parse_srt(self, filename):
|
||||||
entries = []
|
entries = []
|
||||||
errors = []
|
|
||||||
try:
|
try:
|
||||||
with open(filename, 'r', encoding='utf-8-sig') as f:
|
with open(filename, 'r', encoding='utf-8-sig') as f:
|
||||||
content = f.read().strip()
|
content = f.read().strip()
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
errors.append(f"Error reading {filename}: {e}")
|
self.errors.append(f"Error reading {filename}: {e}")
|
||||||
return entries, errors
|
return entries
|
||||||
blocks = content.split('\n\n')
|
blocks = content.split('\n\n')
|
||||||
for block_number, block in enumerate(blocks, start=1):
|
for block_number, block in enumerate(blocks, start=1):
|
||||||
lines = block.split('\n')
|
lines = block.split('\n')
|
||||||
if len(lines) < 3:
|
if len(lines) < 3:
|
||||||
errors.append(f"Block {block_number} in {filename} has less than 3 lines.")
|
self.errors.append(f"Block {block_number} in {filename} has less than 3 lines.")
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
timestamp_line = lines[1]
|
timestamp_line = lines[1]
|
||||||
|
@ -36,18 +32,17 @@ class SRTMerger:
|
||||||
'text': text,
|
'text': text,
|
||||||
})
|
})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
errors.append(f"Error parsing block {block_number} in {filename}: {e}")
|
self.errors.append(f"Error parsing block {block_number} in {filename}: {e}")
|
||||||
return entries, errors
|
return entries
|
||||||
|
|
||||||
def read_commands(self, filename):
|
def read_commands(self, filename):
|
||||||
commands = []
|
commands = []
|
||||||
errors = []
|
|
||||||
try:
|
try:
|
||||||
with open(filename, 'r', encoding='utf-8') as f:
|
with open(filename, 'r', encoding='utf-8') as f:
|
||||||
lines = f.readlines()
|
lines = f.readlines()
|
||||||
except IOError as e:
|
except IOError as e:
|
||||||
errors.append(f"Error reading {filename}: {e}")
|
self.errors.append(f"Error reading {filename}: {e}")
|
||||||
return commands, errors
|
return commands
|
||||||
supported = {
|
supported = {
|
||||||
'COPY': self.parse_copy,
|
'COPY': self.parse_copy,
|
||||||
'MAP': self.parse_map,
|
'MAP': self.parse_map,
|
||||||
|
@ -60,14 +55,14 @@ class SRTMerger:
|
||||||
continue
|
continue
|
||||||
command = parts[0].upper()
|
command = parts[0].upper()
|
||||||
if command not in supported:
|
if command not in supported:
|
||||||
errors.append(f"Line {line_number}: unknown command '{command}'.")
|
self.errors.append(f"Line {line_number}: unknown command '{command}'.")
|
||||||
continue
|
continue
|
||||||
parsed = supported[command](parts)
|
parsed = supported[command](parts)
|
||||||
if parsed is None:
|
if parsed is None:
|
||||||
errors.append(f"Line {line_number}: invalid {command} command.")
|
self.errors.append(f"Line {line_number}: invalid {command} command.")
|
||||||
else:
|
else:
|
||||||
commands.append(parsed)
|
commands.append(parsed)
|
||||||
return commands, errors
|
return commands
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def split_line(line):
|
def split_line(line):
|
||||||
|
@ -160,15 +155,14 @@ class SRTMerger:
|
||||||
return ('PUT', source, index, text)
|
return ('PUT', source, index, text)
|
||||||
|
|
||||||
def process_commands(self):
|
def process_commands(self):
|
||||||
|
supported = {
|
||||||
|
'COPY': self.handle_copy,
|
||||||
|
'MAP': self.handle_map,
|
||||||
|
'SYNC': self.handle_sync,
|
||||||
|
'PUT': self.handle_put,
|
||||||
|
}
|
||||||
for cmd in self.commands:
|
for cmd in self.commands:
|
||||||
if cmd[0] == 'COPY':
|
supported[cmd[0]](*cmd[1])
|
||||||
self.handle_copy(*cmd[1:])
|
|
||||||
elif cmd[0] == 'MAP':
|
|
||||||
self.handle_map(*cmd[1:])
|
|
||||||
elif cmd[0] == 'SYNC':
|
|
||||||
self.handle_sync(*cmd[1:])
|
|
||||||
elif cmd[0] == 'PUT':
|
|
||||||
self.handle_put(*cmd[1:])
|
|
||||||
|
|
||||||
def handle_copy(self, source, start, end):
|
def handle_copy(self, source, start, end):
|
||||||
source_list = self.srt1 if source == 1 else self.srt2
|
source_list = self.srt1 if source == 1 else self.srt2
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue