From b70ee353816c026e673eb2ae65a97ac9ebb01cb2 Mon Sep 17 00:00:00 2001 From: j Date: Mon, 26 Jan 2026 09:58:07 +0100 Subject: [PATCH 1/2] add import vo script --- import_vo.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 import_vo.py diff --git a/import_vo.py b/import_vo.py new file mode 100644 index 0000000..140933b --- /dev/null +++ b/import_vo.py @@ -0,0 +1,68 @@ +#!/usr/bin/python3 + +import ox +import os +import json +import sys +import re + +api = ox.api.signin("https://power.0x2620.org/api/") + +prefix = sys.argv[1] + +def fix_timecode(match): + ts, ms = match[0].split(',') + seconds = int(ms)/1000 + for i, v in enumerate(list(reversed(ts.split(':')))): + seconds += float(v) * pow(60, i) + return ox.format_duration(seconds * 1000, years=False).replace('.', ',') + +def fix_timecodes(srt_data): + reg = re.compile(r'(\d\d:\d\d:\d\d,\d\d\d\d)') + old = srt_data + srt_data = re.sub(reg, fix_timecode, srt_data) + if srt_data != old: + rows1 = old.split('\n') + rows2 = srt_data.split('\n') + for n, row in enumerate(rows1): + if rows1[n] != rows2[n]: + print(rows1[n], '->', rows2[n]) + return srt_data + +for root, folders, files in os.walk(prefix): + for file in sorted(files): + if file.endswith('.mp3'): + print(file) + chapter = '%02d' % int(file.split('-')[0].replace('ch', '')) + file = os.path.join(root, file) + srt = file.replace('.mp3', '_eng.srt') + if not os.path.exists(srt): + name = os.path.basename(srt) + srt = srt.replace(name, name.replace(' ', '_')) + with open(srt) as fd: + srt_data = fd.read() + srt_data = fix_timecodes(srt_data) + subs = ox.srt.loads(srt_data) + oshash = ox.oshash(file) + url = '%supload/direct/' % api.url + avinfo = ox.avinfo(file) + r = api.addMedia({ + 'id': oshash, + 'filename': os.path.basename(file), + 'info': avinfo + }) + id = r['data']['item'] + if api.upload_chunks(url, file, {'id': oshash}): + info = { + "id": id, + "type": 'voice over', + "chapter": [chapter] + } + api.edit(info) + for sub in subs: + sub['value'] = sub['value'].replace('\n', '
\n') + api.addAnnotations({ + "item": id, + "layer": "subtitles", + "annotations": subs + }) From 334b4af5febd4fa6cb71f8f166266c9026661601 Mon Sep 17 00:00:00 2001 From: j Date: Mon, 26 Jan 2026 10:14:25 +0100 Subject: [PATCH 2/2] update fixes --- db/sync_pandora.sh | 14 ++++++++++++-- etc/systemd/system/pandora-backup-db.service | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/db/sync_pandora.sh b/db/sync_pandora.sh index b84d4c8..13ff73f 100755 --- a/db/sync_pandora.sh +++ b/db/sync_pandora.sh @@ -1,5 +1,15 @@ #!/bin/bash -rsync -avP time:/srv/pandora/data/ /srv/pandora/data/ + +rsync -avP power:/srv/pandora/data/ /srv/pandora/data/ +if systemctl is-active --quiet render-infinity.service; then + systemctl stop render-infinity.service + restart_infinity=1 +else + restart_infinity=0 +fi bash /srv/pandora/data/db/reload.sh -rsync -avP time:/srv/pandora/data/ /srv/pandora/data/ --delete pandoractl manage generate_clips +rsync -avP power:/srv/pandora/data/ /srv/pandora/data/ --delete +if [ $restart_infinity == 1 ]; then + systemctl start render-infinity.service +fi diff --git a/etc/systemd/system/pandora-backup-db.service b/etc/systemd/system/pandora-backup-db.service index c8dc18b..03f3e56 100644 --- a/etc/systemd/system/pandora-backup-db.service +++ b/etc/systemd/system/pandora-backup-db.service @@ -5,4 +5,4 @@ Description=Backup pandora database Type=oneshot User=pandora Group=pandora -ExecStart=/srv/pandora/db/update.sh +ExecStart=/srv/pandora/data/db/update.sh