Explorer
/proc/thread-self/root/tmp/fix_watchlist_preselection.py
← Zurück ↓ Download
from pathlib import Path
from datetime import datetime

app = Path('/opt/struktur/youtube-research/app.py')
tpl = Path('/opt/struktur/youtube-research/templates/index.html')
stamp = datetime.now().strftime('%Y%m%d-%H%M%S')

for p in (app, tpl):
    Path(str(p) + f'.bak-watchlist-preselection-fix-{stamp}').write_text(p.read_text())

s = app.read_text()
old = '''    videos = db.get_spateransehen_videos()\n    logger.info("Später ansehen: %d Videos in Bewertung.", len(videos))\n    return videos'''
new = '''    staged = preselection.list_candidates()\n    legacy = db.get_spateransehen_videos()\n    videos = staged + legacy\n    logger.info("Später ansehen: %d Vorselektion + %d Legacy = %d Videos.", len(staged), len(legacy), len(videos))\n    return videos'''
assert old in s, 'spateransehen block not found'
s = s.replace(old, new, 1)

old = '''    title = db.set_video_spateransehen(video_id, False)\n    logger.info("Später ansehen: Video %d ('%s') gelöscht.", video_id, title)'''
new = '''    if video_id < 0:\n        title = preselection.remove_candidate(video_id)\n    else:\n        title = db.set_video_spateransehen(video_id, False)\n    logger.info("Später ansehen: Video %d ('%s') gelöscht.", video_id, title)'''
assert old in s, 'remove block not found'
s = s.replace(old, new, 1)

old = '''    # Prüfe ob Video existiert\n    conn = db.get_connection()\n    row = conn.execute("SELECT title FROM videos WHERE id = ?", (video_id,)).fetchone()\n    conn.close()\n\n    if not row:\n        raise HTTPException(status_code=404, detail="Video nicht gefunden")\n\n    title = db.move_video_to_library(video_id, library_id)'''
new = '''    if video_id < 0:\n        promoted = await pool_to_library(video_id)\n        video_id = int(promoted["video_id"])\n\n    # Prüfe ob Video existiert\n    conn = db.get_connection()\n    row = conn.execute("SELECT title FROM videos WHERE id = ?", (video_id,)).fetchone()\n    conn.close()\n\n    if not row:\n        raise HTTPException(status_code=404, detail="Video nicht gefunden")\n\n    title = db.move_video_to_library(video_id, library_id)'''
assert old in s, 'move block not found'
s = s.replace(old, new, 1)
app.write_text(s)

s = tpl.read_text()
old = """    const res  = await fetch('/api/spateransehen?_t=' + Date.now());"""
new = """    const res  = await fetch('/api/spateransehen?_t=' + Date.now());"""
assert old in s
# endpoint stays the same; backend now merges both sources.

old = '''  const watchedStatusBtn = `<button class="btn-watched-status ${r.watched ? 'watched' : 'not-watched'}"\n    onclick="toggleWatched(this, ${r.id})"\n    title="${r.watched ? 'Als nicht gesehen markieren' : 'Als gesehen markieren'}">\n    ${r.watched ? '✓ Gesehen' : '⊙ Nicht gesehen'}\n  </button>`;'''
new = '''  const isPreselection = !!r.preselection || Number(r.id) < 0;\n  const watchedStatusBtn = isPreselection ? '' : `<button class="btn-watched-status ${r.watched ? 'watched' : 'not-watched'}"\n    onclick="toggleWatched(this, ${r.id})"\n    title="${r.watched ? 'Als nicht gesehen markieren' : 'Als gesehen markieren'}">\n    ${r.watched ? '✓ Gesehen' : '⊙ Nicht gesehen'}\n  </button>`;'''
assert old in s, 'watched button block not found'
s = s.replace(old, new, 1)

tpl.write_text(s)
print('PATCHED', stamp)