@@ -380,21 +380,44 @@ def _update_item_state(self, item_id: str) -> None:
380
380
"""Update the state of a single item."""
381
381
with db .Session () as session :
382
382
try :
383
- item = session .execute (select (MediaItem ).filter_by (id = item_id )).unique ().scalar_one_or_none ()
384
- if item :
385
- previous_state , new_state = item .store_state ()
386
- if previous_state != new_state :
387
- self .em .add_event (Event (emitted_by = "UpdateOngoing" , item_id = item_id ))
388
- logger .log ("RELEASE" , f" { item .log_string } has been released!" )
389
- logger .debug (f"Changed state for { item .log_string } ({ item .id } ) from { previous_state .name } to { new_state .name } " )
390
- session .merge (item )
391
- session .commit ()
383
+ item = session .execute (
384
+ select (MediaItem ).where (MediaItem .id == item_id )
385
+ ).scalar_one ()
386
+
387
+ if not item :
388
+ logger .error (f"Item { item_id } not found" )
389
+ return
390
+
391
+ # Check if this item should be scheduled for release today
392
+ current_time = datetime .now ().astimezone ()
393
+ if item .aired_at :
394
+ delay_minutes = settings_manager .settings .content .trakt .release_delay_minutes
395
+ delayed_time = item .aired_at + timedelta (minutes = delay_minutes )
396
+
397
+ # If it's a future release for today, schedule it
398
+ if (delayed_time > current_time and
399
+ item .aired_at .year == current_time .year and
400
+ item .aired_at .month == current_time .month and
401
+ item .aired_at .day == current_time .day ):
402
+ release_time_str = delayed_time .strftime ("%I:%M %p" ).lstrip ('0' )
403
+ logger .log ("PROGRAM" , f"Scheduling { item .log_string } for release at { release_time_str } " )
404
+ self .scheduled_releases [item .id ] = delayed_time
405
+ # If it should have been released already, release it now
406
+ elif delayed_time <= current_time :
407
+ previous_state , new_state = item .store_state ()
408
+ if previous_state != new_state :
409
+ 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 } " )
411
+
412
+ session .merge (item )
413
+ session .commit ()
392
414
except Exception as e :
393
415
session .rollback ()
394
416
logger .error (f"Failed to update scheduled state for item with ID { item_id } : { e } " )
395
417
finally :
396
418
# Remove from scheduled releases after processing
397
- self .scheduled_releases .pop (item_id , None )
419
+ if item_id in self .scheduled_releases and self .scheduled_releases [item_id ] <= current_time :
420
+ del self .scheduled_releases [item_id ]
398
421
399
422
def _schedule_functions (self ) -> None :
400
423
"""Schedule each service based on its update interval."""
0 commit comments