diff --git a/.player_heartbeat b/.player_heartbeat index 24fba67..7fb3ab0 100644 --- a/.player_heartbeat +++ b/.player_heartbeat @@ -1 +1 @@ -1768669315.640205 \ No newline at end of file +1768670593.7002711 \ No newline at end of file diff --git a/playlists/server_playlist.json b/playlists/server_playlist.json index 023b8d6..55a5890 100644 --- a/playlists/server_playlist.json +++ b/playlists/server_playlist.json @@ -1,5 +1,5 @@ { - "count": 2, + "count": 3, "player_id": 1, "player_name": "TVacasa", "playlist": [ @@ -7,15 +7,21 @@ "file_name": "2026efvev-1428673176.jpg", "url": "media/2026efvev-1428673176.jpg", "duration": 50, - "edit_on_player": false + "edit_on_player": true }, { "file_name": "4k1.jpg", "url": "media/4k1.jpg", "duration": 30, + "edit_on_player": true + }, + { + "file_name": "1416529-hd_1920_1080_30fps.mp4", + "url": "media/1416529-hd_1920_1080_30fps.mp4", + "duration": 13, "edit_on_player": false } ], "playlist_id": 1, - "playlist_version": 29 + "playlist_version": 33 } \ No newline at end of file diff --git a/src/main.py b/src/main.py index e7a9fbc..1f3358e 100644 --- a/src/main.py +++ b/src/main.py @@ -910,6 +910,8 @@ class SignagePlayer(Widget): self.schedule_hide_controls() # Start heartbeat monitoring Clock.schedule_interval(self.update_heartbeat, 10) # Update every 10 seconds + # Start screen activity signaler (keep display awake) + Clock.schedule_interval(self.signal_screen_activity, 20) # Signal every 20 seconds def _update_size(self, instance, value): self.size = value @@ -925,6 +927,31 @@ class SignagePlayer(Widget): except Exception as e: Logger.warning(f"SignagePlayer: Failed to update heartbeat: {e}") + def signal_screen_activity(self, dt): + """Signal screen activity to prevent power saving/sleep + + Uses multiple methods to keep display awake: + 1. xset s reset - Reset screensaver timeout + 2. xset dpms force on - Force display on + 3. xdotool - Move mouse to trigger activity + """ + try: + # Method 1: Reset screensaver timer using xset + os.system('xset s reset 2>/dev/null') + + # Method 2: Force display on + os.system('xset dpms force on 2>/dev/null') + + # Method 3: Move mouse slightly (subtle, user won't notice) + if os.system('xdotool mousemove_relative 1 1 2>/dev/null') == 0: + os.system('xdotool mousemove_relative -1 -1 2>/dev/null') + + Logger.debug("SignagePlayer: Screen activity signal sent (display kept awake)") + + except Exception as e: + Logger.debug(f"SignagePlayer: Screen activity signal failed (non-critical): {e}") + # Non-critical - continue if this fails + def initialize_player(self, dt): """Initialize the player - load config and start playlist checking""" Logger.info("SignagePlayer: Initializing player...") @@ -1502,12 +1529,14 @@ class SignagePlayer(Widget): self.ids.status_label.opacity = 1 def on_touch_down(self, touch): - """Handle touch - show controls""" + """Handle touch - show controls and signal screen activity""" + self.signal_screen_activity(0) # Keep display awake on user input self.show_controls() return super(SignagePlayer, self).on_touch_down(touch) def on_touch_move(self, touch): - """Handle touch move - show controls""" + """Handle touch move - show controls and signal screen activity""" + self.signal_screen_activity(0) # Keep display awake on user input self.show_controls() return super(SignagePlayer, self).on_touch_move(touch)