Release: v3.1.0
This commit is contained in:
+22
-19
@@ -17,6 +17,8 @@ from models import init_db, get_session, Job, Station, Recording as RecordingMod
|
||||
from recorder import RecordingManager, format_elapsed
|
||||
from scheduler import StreamScheduler
|
||||
|
||||
APP_VERSION = "3.0.0"
|
||||
|
||||
DATA_DIR = os.environ.get("DATA_DIR", "/app/data")
|
||||
STATIC_DIR = os.environ.get("STATIC_DIR", "/app/frontend/static")
|
||||
|
||||
@@ -37,7 +39,7 @@ async def lifespan(app):
|
||||
scheduler.stop()
|
||||
|
||||
|
||||
app = FastAPI(title="stream-recorder", version="3.0.0", lifespan=lifespan)
|
||||
app = FastAPI(title="stream-recorder", version=APP_VERSION, lifespan=lifespan)
|
||||
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
@@ -78,7 +80,7 @@ async def auth_middleware(request: Request, call_next):
|
||||
|
||||
@app.get("/api/health")
|
||||
async def health():
|
||||
return {"status": "ok", "version": "3.0.0"}
|
||||
return {"status": "ok", "version": APP_VERSION}
|
||||
|
||||
|
||||
# --- Jobs CRUD ---
|
||||
@@ -198,14 +200,13 @@ class JobCreate(BaseModel):
|
||||
schedule_start: str = ""
|
||||
schedule_stop: str = ""
|
||||
schedule_end_date: str = ""
|
||||
pre_buffer: int = 0
|
||||
post_buffer: int = 0
|
||||
description: str = ""
|
||||
ntfy_enabled: bool = False
|
||||
plik_enabled: bool = False
|
||||
delete_after_upload: bool = False
|
||||
metadata_monitor_enabled: bool = False
|
||||
metadata_pattern: str = ""
|
||||
metadata_grace_period: int = 300
|
||||
metadata_poll_interval: int = 30
|
||||
station_id: Optional[int] = None
|
||||
|
||||
|
||||
class JobUpdate(JobCreate):
|
||||
@@ -217,6 +218,13 @@ async def list_jobs():
|
||||
session = get_session()
|
||||
try:
|
||||
jobs = session.query(Job).order_by(Job.id).all()
|
||||
|
||||
station_ids = {j.station_id for j in jobs if j.station_id}
|
||||
station_names = {}
|
||||
if station_ids:
|
||||
for s in session.query(Station).filter(Station.id.in_(station_ids)).all():
|
||||
station_names[s.id] = s.name
|
||||
|
||||
result = []
|
||||
for j in jobs:
|
||||
is_recording = session.query(
|
||||
@@ -239,14 +247,14 @@ async def list_jobs():
|
||||
"schedule_start": j.schedule_start,
|
||||
"schedule_stop": j.schedule_stop,
|
||||
"schedule_end_date": j.schedule_end_date,
|
||||
"pre_buffer": j.pre_buffer or 0,
|
||||
"post_buffer": j.post_buffer or 0,
|
||||
"description": j.description,
|
||||
"ntfy_enabled": j.ntfy_enabled,
|
||||
"plik_enabled": j.plik_enabled,
|
||||
"delete_after_upload": j.delete_after_upload,
|
||||
"metadata_monitor_enabled": j.metadata_monitor_enabled,
|
||||
"metadata_pattern": j.metadata_pattern,
|
||||
"metadata_grace_period": j.metadata_grace_period,
|
||||
"metadata_poll_interval": j.metadata_poll_interval,
|
||||
"station_id": j.station_id,
|
||||
"station_name": station_names.get(j.station_id) if j.station_id else None,
|
||||
"is_recording": is_recording,
|
||||
"created_at": j.created_at.isoformat() if j.created_at else None,
|
||||
})
|
||||
@@ -282,13 +290,12 @@ async def get_job(job_id: int):
|
||||
"schedule_enabled": job.schedule_enabled, "schedule_once": job.schedule_once,
|
||||
"schedule_date": job.schedule_date, "schedule_days": job.schedule_days,
|
||||
"schedule_start": job.schedule_start, "schedule_stop": job.schedule_stop,
|
||||
"schedule_end_date": job.schedule_end_date, "description": job.description,
|
||||
"schedule_end_date": job.schedule_end_date,
|
||||
"pre_buffer": job.pre_buffer or 0, "post_buffer": job.post_buffer or 0,
|
||||
"description": job.description,
|
||||
"ntfy_enabled": job.ntfy_enabled,
|
||||
"plik_enabled": job.plik_enabled, "delete_after_upload": job.delete_after_upload,
|
||||
"metadata_monitor_enabled": job.metadata_monitor_enabled,
|
||||
"metadata_pattern": job.metadata_pattern,
|
||||
"metadata_grace_period": job.metadata_grace_period,
|
||||
"metadata_poll_interval": job.metadata_poll_interval,
|
||||
"station_id": job.station_id,
|
||||
}
|
||||
finally:
|
||||
session.close()
|
||||
@@ -354,10 +361,6 @@ async def start_job_recording(job_id: int):
|
||||
"max_duration": duration, "extra_ffmpeg_args": job.extra_ffmpeg_args,
|
||||
"segment_duration": job.segment_duration,
|
||||
"description": job.description,
|
||||
"metadata_monitor_enabled": job.metadata_monitor_enabled,
|
||||
"metadata_pattern": job.metadata_pattern,
|
||||
"metadata_grace_period": job.metadata_grace_period or 300,
|
||||
"metadata_poll_interval": job.metadata_poll_interval or 30,
|
||||
"ntfy_enabled": job.ntfy_enabled,
|
||||
"plik_enabled": job.plik_enabled,
|
||||
"delete_after_upload": job.delete_after_upload,
|
||||
|
||||
Reference in New Issue
Block a user