From 4aa307c8ddb42e7f628c79c837f8dd43a2ce49ad Mon Sep 17 00:00:00 2001 From: Chuck <33324927+ChuckBuilds@users.noreply.github.com> Date: Fri, 12 Sep 2025 17:57:06 -0400 Subject: [PATCH] dynamic duration buffer adjustment --- .../ncaa_fbs_logos/{MIAMI.png => MIA.png} | Bin config/config.json | 6 +++--- src/leaderboard_manager.py | 17 ++++++++--------- src/odds_ticker_manager.py | 17 ++++++++--------- 4 files changed, 19 insertions(+), 21 deletions(-) rename assets/sports/ncaa_fbs_logos/{MIAMI.png => MIA.png} (100%) diff --git a/assets/sports/ncaa_fbs_logos/MIAMI.png b/assets/sports/ncaa_fbs_logos/MIA.png similarity index 100% rename from assets/sports/ncaa_fbs_logos/MIAMI.png rename to assets/sports/ncaa_fbs_logos/MIA.png diff --git a/config/config.json b/config/config.json index 7241e662..c0d1a1f1 100644 --- a/config/config.json +++ b/config/config.json @@ -145,7 +145,7 @@ "update_interval": 3600, "scroll_speed": 1, "scroll_delay": 0.01, - "loop": true, + "loop": false, "future_fetch_days": 50, "show_channel_logos": true, "dynamic_duration": true, @@ -188,10 +188,10 @@ "display_duration": 60, "loop": false, "request_timeout": 30, - "dynamic_duration": false, + "dynamic_duration": true, "min_duration": 45, "max_duration": 600, - "duration_buffer": 0.3 + "duration_buffer": 0.1 }, "calendar": { "enabled": false, diff --git a/src/leaderboard_manager.py b/src/leaderboard_manager.py index 476aa1bb..3ec22332 100644 --- a/src/leaderboard_manager.py +++ b/src/leaderboard_manager.py @@ -1002,19 +1002,18 @@ class LeaderboardManager: # Add buffer time for smooth cycling (configurable %) buffer_time = total_time * self.duration_buffer - # If looping is enabled, ensure we complete at least one full cycle - # and add extra time to ensure we don't cut off mid-scroll + # Calculate duration for single complete pass if self.loop: - # Add extra buffer for looping to ensure smooth transition - # Use a more generous buffer to ensure complete content display - loop_buffer = total_time * 0.2 # 20% extra for looping (increased from 15%) + # For looping: add buffer to ensure smooth transition + loop_buffer = total_time * 0.05 # 5% extra for looping calculated_duration = int(total_time + buffer_time + loop_buffer) logger.debug(f"Looping enabled, added {loop_buffer:.2f}s loop buffer") else: - # Even without looping, add extra buffer to ensure complete display - extra_buffer = total_time * 0.15 # 15% extra to ensure complete content display (increased from 10%) - calculated_duration = int(total_time + buffer_time + extra_buffer) - logger.debug(f"No looping, added {extra_buffer:.2f}s extra buffer for complete display") + # For single pass: precise calculation to show content exactly once + # Add minimal buffer only to prevent cutting off the last content + completion_buffer = total_time * 0.02 # 2% extra to ensure complete display + calculated_duration = int(total_time + buffer_time + completion_buffer) + logger.debug(f"Single pass mode, added {completion_buffer:.2f}s completion buffer for precise timing") # Apply configured min/max limits if calculated_duration < self.min_duration: diff --git a/src/odds_ticker_manager.py b/src/odds_ticker_manager.py index 09130750..81027cfe 100644 --- a/src/odds_ticker_manager.py +++ b/src/odds_ticker_manager.py @@ -1377,19 +1377,18 @@ class OddsTickerManager: # Add buffer time for smooth cycling (configurable %) buffer_time = total_time * self.duration_buffer - # If looping is enabled, ensure we complete at least one full cycle - # and add extra time to ensure we don't cut off mid-scroll + # Calculate duration for single complete pass if self.loop: - # Add minimal buffer for looping to ensure smooth transition - # Reduced buffer to prevent excessive duration while maintaining smoothness - loop_buffer = total_time * 0.05 # 5% extra for looping (reduced from 20%) + # For looping: add minimal buffer to ensure smooth transition + loop_buffer = total_time * 0.05 # 5% extra for looping calculated_duration = int(total_time + buffer_time + loop_buffer) logger.debug(f"Looping enabled, added {loop_buffer:.2f}s loop buffer") else: - # Even without looping, add minimal buffer to ensure complete display - extra_buffer = total_time * 0.05 # 5% extra to ensure complete content display (reduced from 15%) - calculated_duration = int(total_time + buffer_time + extra_buffer) - logger.debug(f"No looping, added {extra_buffer:.2f}s extra buffer for complete display") + # For single pass: precise calculation to show content exactly once + # Add minimal buffer only to prevent cutting off the last content + completion_buffer = total_time * 0.02 # 2% extra to ensure complete display + calculated_duration = int(total_time + buffer_time + completion_buffer) + logger.debug(f"Single pass mode, added {completion_buffer:.2f}s completion buffer for precise timing") # Apply configured min/max limits if calculated_duration < self.min_duration: