feat: add PUT command and use shlex for command parsing

This commit is contained in:
Emmanuel BENOîT 2025-04-06 13:05:29 +02:00
parent 27f7f2ec38
commit 56187476c3
Signed by: Emmanuel BENOîT
SSH key fingerprint: SHA256:l7PFUUF5TCDsvYeQC9OnTNz08dFY7Fvf4Hv3neIqYpg

View file

@ -1,4 +1,6 @@
import sys
import shlex
import json
class SRTMerger:
def __init__(self, srt1_filename, srt2_filename, commands_filename, output_filename):
@ -33,12 +35,12 @@ class SRTMerger:
line = line.strip()
if not line or line.startswith('#'):
continue
parts = line.split()
parts = shlex.split(line)
if not parts:
continue
command = parts[0].upper()
if command == 'COPY':
if len(parts) != 3:
if len(parts) != 4:
continue
try:
source = int(parts[1])
@ -51,7 +53,7 @@ class SRTMerger:
continue
commands.append(('COPY', source, start, end))
elif command == 'MAP':
if len(parts) != 6:
if len(parts) != 7:
continue
try:
text_source = int(parts[1])
@ -67,7 +69,7 @@ class SRTMerger:
continue
commands.append(('MAP', text_source, text_start, time_source, time_start, count))
elif command == 'SYNC':
if len(parts) != 4:
if len(parts) != 5:
continue
try:
text_source = int(parts[1])
@ -80,6 +82,25 @@ class SRTMerger:
except (ValueError, AttributeError):
continue
commands.append(('SYNC', text_source, text_index, time_index))
elif command == 'PUT':
if len(parts) != 4:
continue
try:
source = int(parts[1])
if source not in (1, 2):
continue
index = int(parts[2])
if index < 1:
continue
json_str = parts[3]
data = json.loads(json_str)
if 'text' not in data:
continue
text = data['text']
except (ValueError, json.JSONDecodeError, TypeError) as e:
print(f"Error parsing PUT command: {e}")
continue
commands.append(('PUT', source, index, text))
else:
continue
return commands
@ -92,6 +113,8 @@ class SRTMerger:
self.handle_map(*cmd[1:])
elif cmd[0] == 'SYNC':
self.handle_sync(*cmd[1:])
elif cmd[0] == 'PUT':
self.handle_put(*cmd[1:])
self.write_output()
def handle_copy(self, source, start, end):
@ -139,6 +162,19 @@ class SRTMerger:
'text': text_entry['text'],
})
def handle_put(self, source, index, text):
source_list = self.srt1 if source == 1 else self.srt2
index_idx = index - 1
if index_idx < 0 or index_idx >= len(source_list):
print(f"Skipping invalid PUT command: source {source}, index {index} is out of bounds")
return
entry = source_list[index_idx]
new_entry = {
'timestamp': entry['timestamp'],
'text': text,
}
self.output.append(new_entry)
def write_output(self):
if self.output_filename == '-':
out = sys.stdout