97 lines
2.7 KiB
Python
97 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
euni_menu.py — interaktivní menu pro stahování kurzů z euni.cz.
|
|
|
|
Spuštění:
|
|
python euni_menu.py
|
|
|
|
Jen vyber číslo a Enter. Každá volba spustí příslušný skript a po doběhnutí
|
|
se vrátíš do menu (Ctrl+C přeruší aktuální akci, ne celé menu).
|
|
"""
|
|
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
for _s in (sys.stdout, sys.stderr):
|
|
try:
|
|
_s.reconfigure(errors="backslashreplace")
|
|
except Exception:
|
|
pass
|
|
|
|
SKRIPT_DIR = Path(__file__).resolve().parent
|
|
PY = sys.executable
|
|
|
|
# klíč -> (popis, skript, argumenty)
|
|
AKCE = {
|
|
"1": ("Test - 3 kurzy, jen dokumenty (rychle)",
|
|
"euni_stahni.py", ["--from-json", "--no-videos", "--limit", "3"]),
|
|
"2": ("Vsechny dokumenty (PDF/prezentace)",
|
|
"euni_stahni.py", ["--from-json", "--no-videos"]),
|
|
"3": ("Vse vcetne videi - nejvyssi kvalita (1080p, velke)",
|
|
"euni_stahni.py", ["--from-json"]),
|
|
"4": ("Vse vcetne videi - 720p (mensi, rychlejsi)",
|
|
"euni_stahni.py",
|
|
["--from-json", "--video-format",
|
|
"bestvideo[height<=720]+bestaudio/best"]),
|
|
"5": ("Jen videa (1080p)",
|
|
"euni_stahni.py", ["--from-json", "--no-docs"]),
|
|
"6": ("Prehled stavu (dashboard)", "euni_report.py", []),
|
|
"7": ("Obnova ze SeaweedFS na disk", "euni_restore.py", []),
|
|
"8": ("Backfill - dohrat chybejici kopie do SeaweedFS",
|
|
"euni_stahni.py", ["--seaweed-backfill", "--from-json"]),
|
|
"9": ("Aktualizovat seznam kurzu (znovu scrape do Mongo)",
|
|
"euni_stahni.py", ["--scrape-only"]),
|
|
}
|
|
|
|
|
|
def vycisti_obrazovku():
|
|
os.system("cls" if os.name == "nt" else "clear")
|
|
|
|
|
|
def vypis_menu():
|
|
print("=" * 60)
|
|
print(" EUNI - stahovani kurzu z euni.cz")
|
|
print("=" * 60)
|
|
print()
|
|
for k in sorted(AKCE):
|
|
print(f" {k}) {AKCE[k][0]}")
|
|
print()
|
|
print(" 0) Konec")
|
|
print()
|
|
|
|
|
|
def main():
|
|
while True:
|
|
vycisti_obrazovku()
|
|
vypis_menu()
|
|
try:
|
|
volba = input("Vyber cislo a stiskni Enter: ").strip()
|
|
except (EOFError, KeyboardInterrupt):
|
|
print()
|
|
break
|
|
|
|
if volba in ("0", "q", "exit", "konec"):
|
|
break
|
|
akce = AKCE.get(volba)
|
|
if not akce:
|
|
continue
|
|
|
|
_, skript, args = akce
|
|
print()
|
|
try:
|
|
subprocess.run([PY, str(SKRIPT_DIR / skript), *args],
|
|
cwd=str(SKRIPT_DIR))
|
|
except KeyboardInterrupt:
|
|
print("\nPreruseno uzivatelem.")
|
|
|
|
try:
|
|
input("\n=== HOTOVO. Stiskni Enter pro navrat do menu ===")
|
|
except (EOFError, KeyboardInterrupt):
|
|
break
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|