radio/scripts/queue_status.py
profit 3d635b742c Initial commit: self-hosted personal radio station
Flask + React web UI with audio player, podcast queue, feed management,
episode browser, music library, schedule viewer, and log tail.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-13 19:01:33 -07:00

84 lines
2.4 KiB
Python

#!/usr/bin/env python3
"""Show the current podcast queue and episode history."""
import os
import sqlite3
import sys
from pathlib import Path
BASE_DIR = Path(os.environ.get("LOCALRADIO_BASE", "/opt/localradio"))
DB_PATH = BASE_DIR / "state" / "radio.db"
QUEUE_DIR = BASE_DIR / "state" / "queue"
def show_queue():
if not DB_PATH.exists():
print("Database not found. Run init_db.py first.")
sys.exit(1)
conn = sqlite3.connect(str(DB_PATH))
conn.row_factory = sqlite3.Row
# Current queue
rows = conn.execute("""
SELECT q.position, e.feed_name, e.title, e.pub_date, e.file_path, q.enqueued
FROM queue q
JOIN episodes e ON e.id = q.episode_id
WHERE q.played = 0
ORDER BY q.position
""").fetchall()
print("=== Podcast Queue ===")
if rows:
for row in rows:
print(f" [{row['position']:3d}] {row['feed_name']}: {row['title']}")
print(f" Published: {row['pub_date'] or 'unknown'}")
print(f" Enqueued: {row['enqueued']}")
else:
print(" (empty — music is playing)")
# Queue directory
print(f"\n=== Queue Directory ({QUEUE_DIR}) ===")
if QUEUE_DIR.exists():
files = sorted(QUEUE_DIR.iterdir())
if files:
for f in files:
target = f" -> {os.readlink(f)}" if f.is_symlink() else ""
print(f" {f.name}{target}")
else:
print(" (empty)")
else:
print(" (directory missing)")
# Recent episodes
recent = conn.execute("""
SELECT feed_name, title, pub_date, downloaded, queued, played, discovered
FROM episodes
ORDER BY discovered DESC
LIMIT 15
""").fetchall()
print("\n=== Recent Episodes (last 15) ===")
for row in recent:
status_flags = []
if row["downloaded"]:
status_flags.append("DL")
if row["queued"]:
status_flags.append("Q")
if row["played"]:
status_flags.append("P")
status = ",".join(status_flags) or "-"
print(f" [{status:6s}] {row['feed_name']}: {row['title']}")
# Feed state
feeds = conn.execute("SELECT * FROM feed_state ORDER BY feed_name").fetchall()
print("\n=== Feed State ===")
for f in feeds:
print(f" {f['feed_name']}: last polled {f['last_poll'] or 'never'}")
conn.close()
if __name__ == "__main__":
show_queue()