Skip to content

Commit e9c0103

Browse files
committed
Update program.py
1 parent 6d690cc commit e9c0103

File tree

1 file changed

+33
-1
lines changed

1 file changed

+33
-1
lines changed

src/program/program.py

+33-1
Original file line numberDiff line numberDiff line change
@@ -402,12 +402,22 @@ def _update_item_state(self, item_id: str) -> None:
402402
release_time_str = delayed_time.strftime("%I:%M %p").lstrip('0')
403403
logger.log("PROGRAM", f"Scheduling {item.log_string} for release at {release_time_str}")
404404
self.scheduled_releases[item.id] = delayed_time
405+
406+
# Schedule a one-time job at the release time
407+
self.scheduler.add_job(
408+
self._process_release,
409+
'date',
410+
run_date=delayed_time,
411+
args=[item.id, item.log_string],
412+
id=f"release_{item.id}",
413+
replace_existing=True
414+
)
405415
# If it should have been released already, release it now
406416
elif delayed_time <= current_time:
407417
previous_state, new_state = item.store_state()
408418
if previous_state != new_state:
409419
self.em.add_event(Event(emitted_by="UpdateOngoing", item_id=item.id))
410-
logger.debug(f"Updated state for {item.log_string} ({item.id}) from {previous_state.name} to {new_state.name}")
420+
logger.log("RELEASE", f"{item.log_string} has been released!")
411421

412422
session.merge(item)
413423
session.commit()
@@ -419,6 +429,28 @@ def _update_item_state(self, item_id: str) -> None:
419429
if item_id in self.scheduled_releases and self.scheduled_releases[item_id] <= current_time:
420430
del self.scheduled_releases[item_id]
421431

432+
def _process_release(self, item_id: str, log_string: str) -> None:
433+
"""Process a scheduled release at its designated time."""
434+
try:
435+
with db.Session() as session:
436+
item = session.execute(
437+
select(MediaItem).where(MediaItem.id == item_id)
438+
).scalar_one()
439+
440+
if item:
441+
previous_state, new_state = item.store_state()
442+
if previous_state != new_state:
443+
self.em.add_event(Event(emitted_by="UpdateOngoing", item_id=item_id))
444+
release_time = datetime.now().astimezone().strftime("%I:%M %p").lstrip('0')
445+
logger.log("RELEASE", f"🎬 Released at {release_time}: {log_string}")
446+
session.merge(item)
447+
session.commit()
448+
449+
# Clean up the scheduled release
450+
self.scheduled_releases.pop(item_id, None)
451+
except Exception as e:
452+
logger.error(f"Failed to process scheduled release for {log_string}: {e}")
453+
422454
def _schedule_functions(self) -> None:
423455
"""Schedule each service based on its update interval."""
424456
# Schedule the ongoing state update function to run at midnight

0 commit comments

Comments
 (0)