@@ -33,6 +33,8 @@ public class ScheduleListItem(
3333 private readonly IMapper _mapper = mapper ;
3434 private bool _isInitializing ;
3535 private AlarmSchedule ? _lastKnownSchedule ;
36+ private string ? _lastKnownTranslationName ;
37+ private string ? _lastKnownBookName ;
3638 private bool _isBusy ;
3739 private Action ? _onPlayStarted ;
3840 private Action ? _onPlaybackStarted ;
@@ -83,6 +85,11 @@ public void Initialize(AlarmSchedule schedule)
8385 applicationState . StateChanged += OnApplicationStateChanged ;
8486 // Store initial state for comparison
8587 _lastKnownSchedule = Schedule ;
88+
89+ // Initialize tracked subtitle values from state
90+ var initialStateItem = applicationState . Value . Schedules . FirstOrDefault ( s => s . Id == schedule . Id ) ;
91+ _lastKnownTranslationName = initialStateItem ? . TranslationName ;
92+ _lastKnownBookName = initialStateItem ? . BookName ;
8693
8794 // Subscribe to PlaybackState changes to manage IsBusy
8895 playbackState . StateChanged += OnPlaybackStateChanged ;
@@ -262,9 +269,6 @@ private void RefreshSubTitleFromState()
262269 var scheduleStateItem = applicationState . Value . Schedules
263270 . FirstOrDefault ( s => s . Id == scheduleId ) ;
264271
265- logger . Debug ( "ScheduleListItem: RefreshSubTitleFromState - ScheduleId: {ScheduleId}, TranslationName: '{TranslationName}', BookName: '{BookName}'" ,
266- scheduleId , scheduleStateItem ? . TranslationName ?? "null" , scheduleStateItem ? . BookName ?? "null" ) ;
267-
268272 if ( scheduleStateItem ? . BibleReadingScheduleId . HasValue == true )
269273 {
270274 // Set language separately (for display below switch)
@@ -407,6 +411,12 @@ private void OnApplicationStateChanged(object? sender, EventArgs e)
407411
408412 if ( updatedScheduleItem == null ) return ;
409413
414+ // Store old subtitle-related values BEFORE updating
415+ // Get current values from SubTitle property (which reflects what's currently displayed)
416+ // and from the current Schedule entity
417+ var oldBookNumber = Schedule ? . BibleReadingSchedule ? . BookNumber ;
418+ var oldChapterNumber = Schedule ? . BibleReadingSchedule ? . ChapterNumber ;
419+
410420 // Map DTO to entity for comparison and storage
411421 var updatedSchedule = _mapper . Map < AlarmSchedule > ( updatedScheduleItem ) ;
412422
@@ -447,10 +457,26 @@ private void OnApplicationStateChanged(object? sender, EventArgs e)
447457 var isEnabledChanged = oldIsEnabled != updatedSchedule . IsEnabled ;
448458 var nameChanged = oldName != updatedSchedule . Name ;
449459 var timeChanged = oldHour != updatedSchedule . Hour || oldMinute != updatedSchedule . Minute ;
460+
461+ // Check if subtitle-related properties changed
462+ var newTranslationName = updatedScheduleItem . TranslationName ;
463+ var newBookName = updatedScheduleItem . BookName ;
464+ var bookNumberChanged = oldBookNumber != updatedSchedule . BibleReadingSchedule ? . BookNumber ;
465+ var chapterNumberChanged = oldChapterNumber != updatedSchedule . BibleReadingSchedule ? . ChapterNumber ;
466+ var translationNameChanged = _lastKnownTranslationName != newTranslationName ;
467+ var bookNameChanged = _lastKnownBookName != newBookName ;
468+
469+ // Only refresh subtitle if subtitle-related properties actually changed
470+ var subtitleChanged = trackChanged || bookNumberChanged || chapterNumberChanged ||
471+ translationNameChanged || bookNameChanged ;
450472
451- // Always refresh subtitle/language when state changes, since TranslationName and BookName
452- // may have been updated even if other properties didn't change
453- RefreshChapterName ( ) ;
473+ if ( subtitleChanged )
474+ {
475+ // Update tracked values
476+ _lastKnownTranslationName = newTranslationName ;
477+ _lastKnownBookName = newBookName ;
478+ RefreshChapterName ( ) ;
479+ }
454480
455481 // Always update _isEnabled to match the schedule
456482 _isEnabled = updatedSchedule . IsEnabled ;
0 commit comments