@@ -402,12 +402,22 @@ def _update_item_state(self, item_id: str) -> None:
402
402
release_time_str = delayed_time .strftime ("%I:%M %p" ).lstrip ('0' )
403
403
logger .log ("PROGRAM" , f"Scheduling { item .log_string } for release at { release_time_str } " )
404
404
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
+ )
405
415
# If it should have been released already, release it now
406
416
elif delayed_time <= current_time :
407
417
previous_state , new_state = item .store_state ()
408
418
if previous_state != new_state :
409
419
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! " )
411
421
412
422
session .merge (item )
413
423
session .commit ()
@@ -419,6 +429,28 @@ def _update_item_state(self, item_id: str) -> None:
419
429
if item_id in self .scheduled_releases and self .scheduled_releases [item_id ] <= current_time :
420
430
del self .scheduled_releases [item_id ]
421
431
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
+
422
454
def _schedule_functions (self ) -> None :
423
455
"""Schedule each service based on its update interval."""
424
456
# Schedule the ongoing state update function to run at midnight
0 commit comments