diff --git a/tkinter_app/resources/app_config.txt b/tkinter_app/resources/app_config.txt deleted file mode 100644 index 386e08f..0000000 --- a/tkinter_app/resources/app_config.txt +++ /dev/null @@ -1,10 +0,0 @@ -{ - "screen_orientation": "Landscape", - "screen_name": "tv-terasa", - "quickconnect_key": "8887779", - "server_ip": "digi-signage.moto-adv.com", - "port": "8880", - "screen_w": "1920", - "screen_h": "1080", - "playlist_version": 30 -} \ No newline at end of file diff --git a/tkinter_app/resources/demo1.jpg b/tkinter_app/resources/demo1.jpg deleted file mode 100644 index 5f3b4b8..0000000 Binary files a/tkinter_app/resources/demo1.jpg and /dev/null differ diff --git a/tkinter_app/resources/demo2.jpeg b/tkinter_app/resources/demo2.jpeg deleted file mode 100644 index 29d8372..0000000 Binary files a/tkinter_app/resources/demo2.jpeg and /dev/null differ diff --git a/tkinter_app/resources/demo_playlist.json b/tkinter_app/resources/demo_playlist.json deleted file mode 100644 index 5982d7f..0000000 --- a/tkinter_app/resources/demo_playlist.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "playlist": [ - { - "file_name": "demo1.jpg", - "url": "Resurse/demo1.jpg", - "duration": 20 - }, - { - "file_name": "demo2.jpg", - "url": "Resurse/demo2.jpg", - "duration": 20 - } - ], - "version": 1 -} \ No newline at end of file diff --git a/tkinter_app/resources/home_icon.png b/tkinter_app/resources/home_icon.png deleted file mode 100644 index 7be1c59..0000000 Binary files a/tkinter_app/resources/home_icon.png and /dev/null differ diff --git a/tkinter_app/resources/intro.mp4 b/tkinter_app/resources/intro.mp4 deleted file mode 100644 index 2d5bbe7..0000000 Binary files a/tkinter_app/resources/intro.mp4 and /dev/null differ diff --git a/tkinter_app/resources/intro1.mp4 b/tkinter_app/resources/intro1.mp4 deleted file mode 100644 index c522a56..0000000 Binary files a/tkinter_app/resources/intro1.mp4 and /dev/null differ diff --git a/tkinter_app/resources/left-arrow-blue.png b/tkinter_app/resources/left-arrow-blue.png deleted file mode 100644 index a4fc859..0000000 Binary files a/tkinter_app/resources/left-arrow-blue.png and /dev/null differ diff --git a/tkinter_app/resources/left-arrow-green.png b/tkinter_app/resources/left-arrow-green.png deleted file mode 100644 index 2d2d930..0000000 Binary files a/tkinter_app/resources/left-arrow-green.png and /dev/null differ diff --git a/tkinter_app/resources/local_playlist.json b/tkinter_app/resources/local_playlist.json deleted file mode 100644 index 386b8a2..0000000 --- a/tkinter_app/resources/local_playlist.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "playlist": [ - { - "file_name": "Cindrel_1.jpg", - "url": "static/resurse/Cindrel_1.jpg", - "duration": 10 - }, - { - "file_name": "trans_cindrel_4.jpg", - "url": "static/resurse/trans_cindrel_4.jpg", - "duration": 10 - } - ], - "version": 30 -} \ No newline at end of file diff --git a/tkinter_app/resources/log.txt b/tkinter_app/resources/log.txt deleted file mode 100644 index 6a2bfbd..0000000 --- a/tkinter_app/resources/log.txt +++ /dev/null @@ -1,5702 +0,0 @@ -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.74, host=, quick=8887779, port=5000 -[INFO] [SignageApp] Screen size set to 1920x1080 -[INFO] [SignageApp] MediaPlayer: Starting on_enter method. -[INFO] [SignageApp] MediaPlayer: Loaded server settings: server=192.168.1.74, host=, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[WARNING] [SignageApp] python_functions: Local playlist file not found. -[INFO] [SignageApp] MediaPlayer: Loaded local playlist: [], Version: 0 -[WARNING] [SignageApp] MediaPlayer: No local playlist found. Attempting to load demo playlist... -[INFO] [SignageApp] MediaPlayer: Demo playlist loaded successfully. -[WARNING] [SignageApp] MediaPlayer: Invalid server settings. Using demo playlist. -[INFO] [SignageApp] MediaPlayer: Starting play_media method. -[INFO] [SignageApp] MediaPlayer: Playing media: Resurse/demo1.jpg -[INFO] [SignageApp] MediaPlayer: Starting log_event function. -2025-06-25 15:53:54 - STARTED: demo1.jpg -[INFO] [SignageApp] MediaPlayer: Logged event: 2025-06-25 15:53:54 - STARTED: demo1.jpg -[INFO] [SignageApp] MediaPlayer: Finished log_event function. -[INFO] [SignageApp] Showing image: Resurse/demo1.jpg -[INFO] [SignageApp] MediaPlayer: Finished play_media method. -[INFO] [SignageApp] MediaPlayer: Finished on_enter method. -[INFO] [SignageApp] SettingsScreen: Log messages loaded successfully. -[INFO] [SignageApp] SettingsScreen: Configuration saved. -[INFO] [SignageApp] MediaPlayer: Starting on_enter method. -[INFO] [SignageApp] MediaPlayer: Loaded server settings: server=192.168.1.74, host=rpi-tv11, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[WARNING] [SignageApp] python_functions: Local playlist file not found. -[INFO] [SignageApp] MediaPlayer: Loaded local playlist: [], Version: 0 -[WARNING] [SignageApp] MediaPlayer: No local playlist found. Attempting to load demo playlist... -[INFO] [SignageApp] MediaPlayer: Demo playlist loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.74:5000/api/playlists with params: {'hostname': '', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.74, host=rpi-tv11, quick=8887779, port=5000 -[INFO] [SignageApp] Screen size set to 1920x1080 -[INFO] [SignageApp] MediaPlayer: Starting on_enter method. -[INFO] [SignageApp] MediaPlayer: Loaded server settings: server=192.168.1.74, host=rpi-tv11, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[WARNING] [SignageApp] python_functions: Local playlist file not found. -[INFO] [SignageApp] MediaPlayer: Loaded local playlist: [], Version: 0 -[WARNING] [SignageApp] MediaPlayer: No local playlist found. Attempting to load demo playlist... -[INFO] [SignageApp] MediaPlayer: Demo playlist loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.74:5000/api/playlists with params: {'hostname': 'rpi-tv11', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.74, host=rpi-tv11, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[WARNING] [SignageApp] python_functions: Local playlist file not found. -[WARNING] [SignageApp] No local playlist found, creating demo content -[INFO] [SignageApp] Created demo playlist with 9 images -[INFO] [SignageApp] Playing media: left-arrow-green.png -2025-08-05 12:22:33 - STARTED: left-arrow-green.png -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: pause.png -2025-08-05 12:22:38 - STARTED: pause.png -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: home_icon.png -2025-08-05 12:22:44 - STARTED: home_icon.png -[INFO] [SignageApp] Playing media: play.png -2025-08-05 12:22:49 - STARTED: play.png -[INFO] [SignageApp] Playing media: demo1.jpg -2025-08-05 12:22:54 - STARTED: demo1.jpg -[INFO] [SignageApp] Playing media: demo2.jpeg -2025-08-05 12:22:59 - STARTED: demo2.jpeg -[INFO] [SignageApp] Playing media: left-arrow-blue.png -2025-08-05 12:23:04 - STARTED: left-arrow-blue.png -[INFO] [SignageApp] Playing media: right-arrow-blue.png -2025-08-05 12:23:09 - STARTED: right-arrow-blue.png -[INFO] [SignageApp] Playing media: right-arrow-green.png -2025-08-05 12:23:15 - STARTED: right-arrow-green.png -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: left-arrow-green.png -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-05 12:23:20 - STARTED: left-arrow-green.png -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.74:5000/api/playlists with params: {'hostname': 'rpi-tv11', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='192.168.1.74', port=5000): Max retries exceeded with url: /api/playlists?hostname=rpi-tv11&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 113] No route to host')) -[INFO] [SignageApp] Playing media: pause.png -2025-08-05 12:23:25 - STARTED: pause.png -[INFO] [SignageApp] Playing media: home_icon.png -2025-08-05 12:23:30 - STARTED: home_icon.png -[INFO] [SignageApp] Playing media: play.png -2025-08-05 12:23:35 - STARTED: play.png -[INFO] [SignageApp] Playing media: demo1.jpg -2025-08-05 12:23:40 - STARTED: demo1.jpg -[INFO] [SignageApp] Playing media: demo2.jpeg -2025-08-05 12:23:45 - STARTED: demo2.jpeg -[INFO] [SignageApp] Playing media: left-arrow-blue.png -2025-08-05 12:23:51 - STARTED: left-arrow-blue.png -[INFO] [SignageApp] Playing media: right-arrow-blue.png -2025-08-05 12:23:56 - STARTED: right-arrow-blue.png -[INFO] [SignageApp] Playing media: right-arrow-green.png -2025-08-05 12:24:01 - STARTED: right-arrow-green.png -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: left-arrow-green.png -2025-08-05 12:24:06 - STARTED: left-arrow-green.png -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.74:5000/api/playlists with params: {'hostname': 'rpi-tv11', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='192.168.1.74', port=5000): Max retries exceeded with url: /api/playlists?hostname=rpi-tv11&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 113] No route to host')) -[INFO] [SignageApp] Playing media: pause.png -2025-08-05 12:24:11 - STARTED: pause.png -[INFO] [SignageApp] Playing media: home_icon.png -2025-08-05 12:24:16 - STARTED: home_icon.png -[INFO] [SignageApp] Playing media: play.png -2025-08-05 12:24:21 - STARTED: play.png -[INFO] [SignageApp] Playing media: demo1.jpg -2025-08-05 12:24:26 - STARTED: demo1.jpg -[INFO] [SignageApp] Playing media: demo2.jpeg -2025-08-05 12:24:31 - STARTED: demo2.jpeg -[INFO] [SignageApp] Playing media: left-arrow-blue.png -2025-08-05 12:24:37 - STARTED: left-arrow-blue.png -[INFO] [SignageApp] Playing media: right-arrow-blue.png -2025-08-05 12:24:42 - STARTED: right-arrow-blue.png -[INFO] [SignageApp] Playing media: right-arrow-green.png -2025-08-05 12:24:47 - STARTED: right-arrow-green.png -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: left-arrow-green.png -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-05 12:24:52 - STARTED: left-arrow-green.png -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.74:5000/api/playlists with params: {'hostname': 'rpi-tv11', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='192.168.1.74', port=5000): Max retries exceeded with url: /api/playlists?hostname=rpi-tv11&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 113] No route to host')) -[INFO] [SignageApp] Playing media: pause.png -2025-08-05 12:24:57 - STARTED: pause.png -[INFO] [SignageApp] Playing media: home_icon.png -2025-08-05 12:25:02 - STARTED: home_icon.png -[INFO] [SignageApp] Playing media: play.png -2025-08-05 12:25:07 - STARTED: play.png -[INFO] [SignageApp] Playing media: demo1.jpg -2025-08-05 12:25:12 - STARTED: demo1.jpg -[INFO] [SignageApp] Playing media: demo2.jpeg -2025-08-05 12:25:17 - STARTED: demo2.jpeg -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Configuration saved via settings window -[INFO] [SignageApp] Playing media: left-arrow-blue.png -2025-08-05 12:25:23 - STARTED: left-arrow-blue.png -[INFO] [SignageApp] Playing media: right-arrow-blue.png -2025-08-05 12:25:28 - STARTED: right-arrow-blue.png -[INFO] [SignageApp] Playing media: right-arrow-green.png -2025-08-05 12:25:33 - STARTED: right-arrow-green.png -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: left-arrow-green.png -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-05 12:25:38 - STARTED: left-arrow-green.png -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.74:5000/api/playlists with params: {'hostname': 'rpi-tv11', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='192.168.1.74', port=5000): Max retries exceeded with url: /api/playlists?hostname=rpi-tv11&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 113] No route to host')) -[INFO] [SignageApp] Playing media: pause.png -2025-08-05 12:25:43 - STARTED: pause.png -[INFO] [SignageApp] Playing media: home_icon.png -2025-08-05 12:25:48 - STARTED: home_icon.png -[INFO] [SignageApp] Playing media: play.png -2025-08-05 12:25:50 - STARTED: play.png -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: demo1.jpg -2025-08-05 12:25:55 - STARTED: demo1.jpg -[INFO] [SignageApp] Playing media: demo2.jpeg -2025-08-05 12:26:01 - STARTED: demo2.jpeg -[INFO] [SignageApp] Playing media: left-arrow-blue.png -2025-08-05 12:26:06 - STARTED: left-arrow-blue.png -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[WARNING] [SignageApp] python_functions: Local playlist file not found. -[WARNING] [SignageApp] No local playlist found, creating demo content -[INFO] [SignageApp] Created demo playlist with 9 images -[INFO] [SignageApp] Playing media: left-arrow-green.png -2025-08-05 12:29:21 - STARTED: left-arrow-green.png -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: pause.png -2025-08-05 12:29:26 - STARTED: pause.png -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: home_icon.png -2025-08-05 12:29:31 - STARTED: home_icon.png -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: play.png -2025-08-05 12:29:36 - STARTED: play.png -[INFO] [SignageApp] Playing media: demo1.jpg -2025-08-05 12:29:41 - STARTED: demo1.jpg -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[ERROR] [SignageApp] python_functions: Configuration file ./Resurse/app_config.txt not found. -[INFO] [SignageApp] python_functions: Configuration loaded: server=, host=, quick=, port= -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.245, host=tv-holba1, port=5000 -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': 'har_page_001.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_001.jpg'}, {'duration': 20, 'file_name': 'har_page_002.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_002.jpg'}, {'duration': 20, 'file_name': 'har_page_003.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_003.jpg'}, {'duration': 20, 'file_name': 'har_page_004.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_004.jpg'}, {'duration': 20, 'file_name': 'har_page_005.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_005.jpg'}, {'duration': 20, 'file_name': 'har_page_006.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_006.jpg'}, {'duration': 20, 'file_name': 'har_page_007.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_007.jpg'}, {'duration': 20, 'file_name': 'har_page_008.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_008.jpg'}, {'duration': 20, 'file_name': 'har_page_009.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_009.jpg'}, {'duration': 20, 'file_name': 'har_page_010.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_010.jpg'}], 'playlist_version': 4} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 4. -[INFO] [SignageApp] Server playlist found with 10 items, version 4 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: Created directory /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse for media files. -[INFO] [SignageApp] python_functions: Successfully downloaded har_page_001.jpg to /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/har_page_001.jpg -[INFO] [SignageApp] python_functions: Successfully downloaded har_page_002.jpg to /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/har_page_002.jpg -[INFO] [SignageApp] python_functions: Successfully downloaded har_page_003.jpg to /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/har_page_003.jpg -[INFO] [SignageApp] python_functions: Successfully downloaded har_page_004.jpg to /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/har_page_004.jpg -[INFO] [SignageApp] python_functions: Successfully downloaded har_page_005.jpg to /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/har_page_005.jpg -[INFO] [SignageApp] python_functions: Successfully downloaded har_page_006.jpg to /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/har_page_006.jpg -[INFO] [SignageApp] python_functions: Successfully downloaded har_page_007.jpg to /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/har_page_007.jpg -[INFO] [SignageApp] python_functions: Successfully downloaded har_page_008.jpg to /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/har_page_008.jpg -[INFO] [SignageApp] python_functions: Successfully downloaded har_page_009.jpg to /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/har_page_009.jpg -[INFO] [SignageApp] python_functions: Successfully downloaded har_page_010.jpg to /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/har_page_010.jpg -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 4. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'har_page_001.jpg', 'url': 'static/resurse/har_page_001.jpg', 'duration': 20}, {'file_name': 'har_page_002.jpg', 'url': 'static/resurse/har_page_002.jpg', 'duration': 20}, {'file_name': 'har_page_003.jpg', 'url': 'static/resurse/har_page_003.jpg', 'duration': 20}, {'file_name': 'har_page_004.jpg', 'url': 'static/resurse/har_page_004.jpg', 'duration': 20}, {'file_name': 'har_page_005.jpg', 'url': 'static/resurse/har_page_005.jpg', 'duration': 20}, {'file_name': 'har_page_006.jpg', 'url': 'static/resurse/har_page_006.jpg', 'duration': 20}, {'file_name': 'har_page_007.jpg', 'url': 'static/resurse/har_page_007.jpg', 'duration': 20}, {'file_name': 'har_page_008.jpg', 'url': 'static/resurse/har_page_008.jpg', 'duration': 20}, {'file_name': 'har_page_009.jpg', 'url': 'static/resurse/har_page_009.jpg', 'duration': 20}, {'file_name': 'har_page_010.jpg', 'url': 'static/resurse/har_page_010.jpg', 'duration': 20}], 'version': 4} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 10 items from server -[INFO] [SignageApp] Playing media: har_page_001.jpg from static/resurse/har_page_001.jpg -2025-08-05 13:52:51 - STARTED: har_page_001.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': 'har_page_001.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_001.jpg'}, {'duration': 20, 'file_name': 'har_page_002.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_002.jpg'}, {'duration': 20, 'file_name': 'har_page_003.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_003.jpg'}, {'duration': 20, 'file_name': 'har_page_004.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_004.jpg'}, {'duration': 20, 'file_name': 'har_page_005.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_005.jpg'}, {'duration': 20, 'file_name': 'har_page_006.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_006.jpg'}, {'duration': 20, 'file_name': 'har_page_007.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_007.jpg'}, {'duration': 20, 'file_name': 'har_page_008.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_008.jpg'}, {'duration': 20, 'file_name': 'har_page_009.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_009.jpg'}, {'duration': 20, 'file_name': 'har_page_010.jpg', 'url': 'http://192.168.1.245:5000/media/har_page_010.jpg'}], 'playlist_version': 4} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 4. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'har_page_001.jpg', 'url': 'static/resurse/har_page_001.jpg', 'duration': 20}, {'file_name': 'har_page_002.jpg', 'url': 'static/resurse/har_page_002.jpg', 'duration': 20}, {'file_name': 'har_page_003.jpg', 'url': 'static/resurse/har_page_003.jpg', 'duration': 20}, {'file_name': 'har_page_004.jpg', 'url': 'static/resurse/har_page_004.jpg', 'duration': 20}, {'file_name': 'har_page_005.jpg', 'url': 'static/resurse/har_page_005.jpg', 'duration': 20}, {'file_name': 'har_page_006.jpg', 'url': 'static/resurse/har_page_006.jpg', 'duration': 20}, {'file_name': 'har_page_007.jpg', 'url': 'static/resurse/har_page_007.jpg', 'duration': 20}, {'file_name': 'har_page_008.jpg', 'url': 'static/resurse/har_page_008.jpg', 'duration': 20}, {'file_name': 'har_page_009.jpg', 'url': 'static/resurse/har_page_009.jpg', 'duration': 20}, {'file_name': 'har_page_010.jpg', 'url': 'static/resurse/har_page_010.jpg', 'duration': 20}], 'version': 4} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] python_functions: Cleaning unused media files... -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File har_page_001.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File har_page_002.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File har_page_003.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File har_page_004.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File har_page_005.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File har_page_006.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File har_page_007.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File har_page_008.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File har_page_009.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File har_page_010.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 4. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'har_page_001.jpg', 'url': 'static/resurse/har_page_001.jpg', 'duration': 20}, {'file_name': 'har_page_002.jpg', 'url': 'static/resurse/har_page_002.jpg', 'duration': 20}, {'file_name': 'har_page_003.jpg', 'url': 'static/resurse/har_page_003.jpg', 'duration': 20}, {'file_name': 'har_page_004.jpg', 'url': 'static/resurse/har_page_004.jpg', 'duration': 20}, {'file_name': 'har_page_005.jpg', 'url': 'static/resurse/har_page_005.jpg', 'duration': 20}, {'file_name': 'har_page_006.jpg', 'url': 'static/resurse/har_page_006.jpg', 'duration': 20}, {'file_name': 'har_page_007.jpg', 'url': 'static/resurse/har_page_007.jpg', 'duration': 20}, {'file_name': 'har_page_008.jpg', 'url': 'static/resurse/har_page_008.jpg', 'duration': 20}, {'file_name': 'har_page_009.jpg', 'url': 'static/resurse/har_page_009.jpg', 'duration': 20}, {'file_name': 'har_page_010.jpg', 'url': 'static/resurse/har_page_010.jpg', 'duration': 20}], 'version': 4} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Playing media: har_page_001.jpg from static/resurse/har_page_001.jpg -2025-08-05 13:53:08 - STARTED: har_page_001.jpg -[INFO] [SignageApp] Playing media: har_page_002.jpg from static/resurse/har_page_002.jpg -2025-08-05 13:53:15 - STARTED: har_page_002.jpg -[INFO] [SignageApp] Playing media: har_page_003.jpg from static/resurse/har_page_003.jpg -2025-08-05 13:53:17 - STARTED: har_page_003.jpg -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.245, host=tv-holba1, port=5000 -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] Server playlist found with 2 items, version 5 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: Successfully downloaded 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg to /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Successfully downloaded wp2782770-1846651530.jpg to /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 13:55:59 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from static/resurse/wp2782770-1846651530.jpg -2025-08-05 13:56:19 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.245, host=tv-holba1, port=5000 -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] Server playlist found with 2 items, version 5 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File wp2782770-1846651530.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 14:03:41 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from static/resurse/wp2782770-1846651530.jpg -2025-08-05 14:04:01 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.245, host=tv-holba1, port=5000 -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] Server playlist found with 2 items, version 5 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File wp2782770-1846651530.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 14:09:20 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-05 14:09:40 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-05 14:09:56 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-05 14:10:16 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-05 14:10:32 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-05 14:10:52 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-05 14:11:09 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-05 14:11:29 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 14:11:45 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-05 14:12:05 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.245, host=tv-holba1, port=5000 -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}, {'duration': 5, 'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'http://192.168.1.245:5000/media/SampleVideo_1280x720_1mb.mp4'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] Server playlist found with 3 items, version 5 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File wp2782770-1846651530.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Successfully downloaded SampleVideo_1280x720_1mb.mp4 to /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 3 items from server -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 14:24:44 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-05 14:25:04 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-05 14:25:20 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 14:25:25 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}, {'duration': 5, 'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'http://192.168.1.245:5000/media/SampleVideo_1280x720_1mb.mp4'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-05 14:25:46 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-05 14:26:02 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-05 14:26:07 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}, {'duration': 5, 'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'http://192.168.1.245:5000/media/SampleVideo_1280x720_1mb.mp4'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.245, host=tv-holba1, port=5000 -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}, {'duration': 5, 'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'http://192.168.1.245:5000/media/SampleVideo_1280x720_1mb.mp4'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] Server playlist found with 3 items, version 5 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File wp2782770-1846651530.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File SampleVideo_1280x720_1mb.mp4 already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 3 items from server -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 14:40:29 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-05 14:40:50 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-05 14:41:06 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-05 14:41:27 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}, {'duration': 5, 'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'http://192.168.1.245:5000/media/SampleVideo_1280x720_1mb.mp4'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-05 14:41:47 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-05 14:42:03 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-05 14:42:25 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}, {'duration': 5, 'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'http://192.168.1.245:5000/media/SampleVideo_1280x720_1mb.mp4'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-05 14:42:45 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-05 14:43:01 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-05 14:43:21 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}, {'duration': 5, 'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'http://192.168.1.245:5000/media/SampleVideo_1280x720_1mb.mp4'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-05 14:43:42 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-05 14:43:58 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 14:44:18 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}, {'duration': 5, 'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'http://192.168.1.245:5000/media/SampleVideo_1280x720_1mb.mp4'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-05 14:44:38 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-05 14:44:54 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-05 14:45:15 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}, {'duration': 5, 'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'http://192.168.1.245:5000/media/SampleVideo_1280x720_1mb.mp4'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.245, host=tv-holba1, port=5000 -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}, {'duration': 5, 'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'http://192.168.1.245:5000/media/SampleVideo_1280x720_1mb.mp4'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] Server playlist found with 3 items, version 5 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File wp2782770-1846651530.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File SampleVideo_1280x720_1mb.mp4 already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 3 items from server -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 15:13:11 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-05 15:13:31 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-05 15:13:47 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-05 15:14:08 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}, {'duration': 5, 'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'http://192.168.1.245:5000/media/SampleVideo_1280x720_1mb.mp4'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.245, host=tv-holba1, port=5000 -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}, {'duration': 5, 'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'http://192.168.1.245:5000/media/SampleVideo_1280x720_1mb.mp4'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] Server playlist found with 3 items, version 5 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File wp2782770-1846651530.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File SampleVideo_1280x720_1mb.mp4 already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 3 items from server -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 15:34:34 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.245, host=tv-holba1, port=5000 -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$ReP1AQ/YknPWyoFLGwSgH.80kBv.Bm13XdRUTALyA6vD20T1vEOl.', 'playlist': [{'duration': 20, 'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'http://192.168.1.245:5000/media/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg'}, {'duration': 15, 'file_name': 'wp2782770-1846651530.jpg', 'url': 'http://192.168.1.245:5000/media/wp2782770-1846651530.jpg'}, {'duration': 5, 'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'http://192.168.1.245:5000/media/SampleVideo_1280x720_1mb.mp4'}], 'playlist_version': 5} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] Server playlist found with 3 items, version 5 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File wp2782770-1846651530.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File SampleVideo_1280x720_1mb.mp4 already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 5. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 3 items from server -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 15:35:55 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.245, host=tv-holba1, port=5000 -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='192.168.1.245', port=5000): Max retries exceeded with url: /api/playlists?hostname=tv-holba1&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[WARNING] [SignageApp] Server returned empty playlist -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Loaded existing local playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 15:58:32 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.245, host=tv-holba1, port=5000 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='192.168.1.245', port=5000): Max retries exceeded with url: /api/playlists?hostname=tv-holba1&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 16:04:48 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-05 16:05:08 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-05 16:05:24 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.245, host=tv-holba1, port=5000 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='192.168.1.245', port=5000): Max retries exceeded with url: /api/playlists?hostname=tv-holba1&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 16:15:53 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-05 16:16:14 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-05 16:16:30 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.245, host=tv-holba1, port=5000 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='192.168.1.245', port=5000): Max retries exceeded with url: /api/playlists?hostname=tv-holba1&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 16:28:45 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.245, host=tv-holba1, port=5000 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='192.168.1.245', port=5000): Max retries exceeded with url: /api/playlists?hostname=tv-holba1&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 16:34:00 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Loading configuration in settings window -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Config loaded: {'screen_orientation': 'Landscape', 'screen_name': 'tv-holba1', 'quickconnect_key': '8887779', 'server_ip': '192.168.1.245', 'port': '5000', 'screen_w': '1920', 'screen_h': '1080', 'playlist_version': 5} -[INFO] [SignageApp] Configuration values loaded successfully in settings -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-05 16:34:20 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.245, host=tv-holba1, port=5000 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='192.168.1.245', port=5000): Max retries exceeded with url: /api/playlists?hostname=tv-holba1&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 16:44:37 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.245, host=tv-holba1, port=5000 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='192.168.1.245', port=5000): Max retries exceeded with url: /api/playlists?hostname=tv-holba1&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 17:00:43 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Loading configuration in settings window -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Config loaded: {'screen_orientation': 'Landscape', 'screen_name': 'tv-holba1', 'quickconnect_key': '8887779', 'server_ip': '192.168.1.245', 'port': '5000', 'screen_w': '1920', 'screen_h': '1080', 'playlist_version': 5} -[INFO] [SignageApp] Configuration values loaded successfully in settings -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.245, host=tv-holba1, quick=8887779, port=5000 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.245, host=tv-holba1, port=5000 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.245:5000/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-server.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-server.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-server.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='digi-server.moto-adv.com', port=8880): Max retries exceeded with url: /api/playlists?hostname=tv-terasa&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known')) -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-05 19:12:35 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Loading configuration in settings window -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Config loaded: {'screen_orientation': 'Landscape', 'screen_name': 'tv-terasa', 'quickconnect_key': '8887779', 'server_ip': 'digi-server.moto-adv.com', 'port': '8880', 'screen_w': '1920', 'screen_h': '1080', 'playlist_version': 5} -[INFO] [SignageApp] Configuration values loaded successfully in settings -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-05 19:12:55 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-05 19:13:10 - STARTED: SampleVideo_1280x720_1mb.mp4 -[ERROR] [SignageApp] Error playing video /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4: name 'ImageTk' is not defined -[INFO] [SignageApp] Fetching playlist from URL: http://digi-server.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='digi-server.moto-adv.com', port=8880): Max retries exceeded with url: /api/playlists?hostname=tv-terasa&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known')) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-05 19:13:16 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-server.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='digi-server.moto-adv.com', port=8880): Max retries exceeded with url: /api/playlists?hostname=tv-terasa&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known')) -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-server.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] Loading configuration in settings window -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Config loaded: {'screen_orientation': 'Landscape', 'screen_name': 'tv-terasa', 'quickconnect_key': '8887779', 'server_ip': 'digi-server.moto-adv.com', 'port': '8880', 'screen_w': '1920', 'screen_h': '1080', 'playlist_version': 5} -[INFO] [SignageApp] Configuration values loaded successfully in settings -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-server.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-server.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-server.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='digi-server.moto-adv.com', port=8880): Max retries exceeded with url: /api/playlists?hostname=tv-terasa&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known')) -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-06 01:11:39 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-06 01:11:59 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-06 01:12:14 - STARTED: SampleVideo_1280x720_1mb.mp4 -[ERROR] [SignageApp] Error playing video /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4: name 'ImageTk' is not defined -[INFO] [SignageApp] Loading configuration in settings window -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Config loaded: {'screen_orientation': 'Landscape', 'screen_name': 'tv-terasa', 'quickconnect_key': '8887779', 'server_ip': 'digi-server.moto-adv.com', 'port': '8880', 'screen_w': '1920', 'screen_h': '1080', 'playlist_version': 5} -[INFO] [SignageApp] Configuration values loaded successfully in settings -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-06 01:12:20 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-server.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='digi-server.moto-adv.com', port=8880): Max retries exceeded with url: /api/playlists?hostname=tv-terasa&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known')) -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-06 01:12:40 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-06 01:12:55 - STARTED: SampleVideo_1280x720_1mb.mp4 -[ERROR] [SignageApp] Error playing video /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4: name 'ImageTk' is not defined -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-06 01:13:00 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-server.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='digi-server.moto-adv.com', port=8880): Max retries exceeded with url: /api/playlists?hostname=tv-terasa&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known')) -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-server.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] Loading configuration in enhanced settings window -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Config loaded: {'screen_orientation': 'Landscape', 'screen_name': 'tv-terasa', 'quickconnect_key': '8887779', 'server_ip': 'digi-server.moto-adv.com', 'port': '8880', 'screen_w': '1920', 'screen_h': '1080', 'playlist_version': 5} -[INFO] [SignageApp] Configuration values loaded successfully in enhanced settings -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-server.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-server.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-server.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='digi-server.moto-adv.com', port=8880): Max retries exceeded with url: /api/playlists?hostname=tv-terasa&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known')) -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-06 01:31:08 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-06 01:31:28 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-server.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] Loading configuration in enhanced settings window -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Config loaded: {'screen_orientation': 'Landscape', 'screen_name': 'tv-terasa', 'quickconnect_key': '8887779', 'server_ip': 'digi-server.moto-adv.com', 'port': '8880', 'screen_w': '1920', 'screen_h': '1080', 'playlist_version': 5} -[INFO] [SignageApp] Configuration values loaded successfully in enhanced settings -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-server.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-server.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-server.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-server.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='digi-server.moto-adv.com', port=8880): Max retries exceeded with url: /api/playlists?hostname=tv-terasa&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known')) -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-06 01:51:49 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Loading configuration in enhanced settings window -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Config loaded: {'screen_orientation': 'Landscape', 'screen_name': 'tv-terasa', 'quickconnect_key': '8887779', 'server_ip': 'digi-server.moto-adv.com', 'port': '8880', 'screen_w': '1920', 'screen_h': '1080', 'playlist_version': 5} -[INFO] [SignageApp] Configuration values loaded successfully in enhanced settings -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-06 01:52:09 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-06 01:52:24 - STARTED: SampleVideo_1280x720_1mb.mp4 -[ERROR] [SignageApp] Error playing video /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4: name 'ImageTk' is not defined -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-06 01:52:30 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-server.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='digi-server.moto-adv.com', port=8880): Max retries exceeded with url: /api/playlists?hostname=tv-terasa&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known')) -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-06 01:52:50 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-06 01:53:05 - STARTED: SampleVideo_1280x720_1mb.mp4 -[ERROR] [SignageApp] Error playing video /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4: name 'ImageTk' is not defined -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-06 01:53:05 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-server.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='digi-server.moto-adv.com', port=8880): Max retries exceeded with url: /api/playlists?hostname=tv-terasa&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known')) -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-server.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-server.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-server.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-server.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='digi-server.moto-adv.com', port=8880): Max retries exceeded with url: /api/playlists?hostname=tv-terasa&quickconnect_code=8887779 (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known')) -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-06 02:02:39 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg ((1600, 1000)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loading configuration in enhanced settings window -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Config loaded: {'screen_orientation': 'Landscape', 'screen_name': 'tv-terasa', 'quickconnect_key': '8887779', 'server_ip': 'digi-signage.moto-adv.com', 'port': '8880', 'screen_w': '1920', 'screen_h': '1080', 'playlist_version': 5} -[INFO] [SignageApp] Configuration values loaded successfully in enhanced settings -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-06 02:14:39 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 3840x2160, Mode: fit, Offset: (192, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-06 02:15:03 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 3840x2160, Mode: fit, Offset: (192, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-06 02:15:23 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Video dimensions: 1280x720, Screen dimensions: 3840x2160 -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-06 02:17:55 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 3840x2160, Mode: fit, Offset: (192, 0)) -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-06 02:20:20 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-06 02:20:40 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-06 02:20:57 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Video dimensions: 1280x720, Screen dimensions: 1920x1080 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-06 02:21:44 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 10:13:23 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 10:13:35 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 10:13:38 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Video dimensions: 1280x720, Screen dimensions: 1920x1080 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 11:10:25 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 11:10:45 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 11:11:01 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting VLC for video: /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC finished: /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -2025-08-22 11:11:09 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Loading configuration in enhanced settings window -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Config loaded: {'screen_orientation': 'Landscape', 'screen_name': 'tv-terasa', 'quickconnect_key': '8887779', 'server_ip': 'digi-signage.moto-adv.com', 'port': '8880', 'screen_w': '1920', 'screen_h': '1080', 'playlist_version': 5} -[INFO] [SignageApp] Configuration values loaded successfully in enhanced settings -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 11:11:29 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 11:11:45 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting VLC for video: /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 11:26:00 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] Loading configuration in enhanced settings window -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Config loaded: {'screen_orientation': 'Landscape', 'screen_name': 'tv-terasa', 'quickconnect_key': '8887779', 'server_ip': 'digi-signage.moto-adv.com', 'port': '8880', 'screen_w': '1920', 'screen_h': '1080', 'playlist_version': 5} -[INFO] [SignageApp] Configuration values loaded successfully in enhanced settings -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 12:01:27 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] Loading configuration in enhanced settings window -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Config loaded: {'screen_orientation': 'Landscape', 'screen_name': 'tv-terasa', 'quickconnect_key': '8887779', 'server_ip': 'digi-signage.moto-adv.com', 'port': '8880', 'screen_w': '1920', 'screen_h': '1080', 'playlist_version': 5} -[INFO] [SignageApp] Configuration values loaded successfully in enhanced settings -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 12:02:45 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Media resumed -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 12:14:24 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 12:14:45 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 13:13:56 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] Loading configuration in enhanced settings window -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Config loaded: {'screen_orientation': 'Landscape', 'screen_name': 'tv-terasa', 'quickconnect_key': '8887779', 'server_ip': 'digi-signage.moto-adv.com', 'port': '8880', 'screen_w': '1920', 'screen_h': '1080', 'playlist_version': 5} -[INFO] [SignageApp] Configuration values loaded successfully in enhanced settings -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.22, host=tv-holba1, quick=8887779, port=80 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.22, host=tv-holba1, port=80 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.22:80/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 404 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 13:49:35 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] Loading configuration in enhanced settings window -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Config loaded: {'screen_orientation': 'Landscape', 'screen_name': 'tv-holba1', 'quickconnect_key': '8887779', 'server_ip': '192.168.1.22', 'port': '80', 'screen_w': '1920', 'screen_h': '1080', 'playlist_version': 0} -[INFO] [SignageApp] Configuration values loaded successfully in enhanced settings -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 13:52:26 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Media resumed -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 13:52:29 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 13:52:45 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting VLC for video: /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC finished: /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/signage-player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 13:52:53 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.22:80/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 404 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=192.168.1.22, host=tv-holba1, quick=8887779, port=80 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=192.168.1.22, host=tv-holba1, port=80 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://192.168.1.22:80/api/playlists with params: {'hostname': 'tv-holba1', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 20:07:54 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[WARNING] [SignageApp] PIL not available - showing text placeholder for image -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 20:08:07 - STARTED: wp2782770-1846651530.jpg -[WARNING] [SignageApp] PIL not available - showing text placeholder for image -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 20:08:10 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting VLC for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[ERROR] [SignageApp] VLC error: 'NoneType' object has no attribute 'media_player_new' -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 20:08:11 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[WARNING] [SignageApp] PIL not available - showing text placeholder for image -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 20:08:17 - STARTED: wp2782770-1846651530.jpg -[WARNING] [SignageApp] PIL not available - showing text placeholder for image -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 20:08:18 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting VLC for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[ERROR] [SignageApp] VLC error: 'NoneType' object has no attribute 'media_player_new' -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -2025-08-22 20:08:19 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[WARNING] [SignageApp] PIL not available - showing text placeholder for image -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] Loading configuration in enhanced settings window -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Config loaded: {'screen_orientation': 'Landscape', 'screen_name': 'tv-terasa', 'quickconnect_key': '8887779', 'server_ip': 'digi-signage.moto-adv.com', 'port': '8880', 'screen_w': '1920', 'screen_h': '1080', 'playlist_version': 0} -[INFO] [SignageApp] Configuration values loaded successfully in enhanced settings -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 20:10:31 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 20:10:51 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 20:11:07 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting VLC for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[ERROR] [SignageApp] VLC error: 'NoneType' object has no attribute 'media_player_new' -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 20:11:08 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 20:11:31 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 20:11:47 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting VLC for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[ERROR] [SignageApp] VLC error: 'NoneType' object has no attribute 'media_player_new' -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 20:11:48 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 20:12:09 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 20:12:24 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Media resumed -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 20:12:40 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting VLC for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[ERROR] [SignageApp] VLC error: 'NoneType' object has no attribute 'media_player_new' -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 20:12:41 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 20:13:02 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 20:13:18 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting VLC for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[ERROR] [SignageApp] VLC error: 'NoneType' object has no attribute 'media_player_new' -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 20:13:19 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 20:20:19 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 20:20:40 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 20:20:56 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting VLC for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 20:21:03 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 20:22:56 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 20:23:17 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 20:23:33 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 20:23:40 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 21:55:09 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 21:55:30 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 21:57:07 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 5} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 22:21:01 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 0} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 22:33:08 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:33:29 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:33:45 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 22:33:52 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:34:13 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:34:29 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -2025-08-22 22:34:36 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:34:56 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:35:12 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 22:35:19 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:35:40 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:35:56 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 22:36:02 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:36:23 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:36:39 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 22:36:46 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:37:06 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:37:22 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -2025-08-22 22:37:29 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:37:50 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:38:06 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 22:38:13 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:38:33 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:38:49 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 22:38:56 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:39:17 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:39:33 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 22:39:40 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:40:00 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:40:16 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 22:40:23 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:40:43 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No new playlist on the server. Local version: 0, Server version: 0 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 0} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 22:46:40 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=http://digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='http', port=80): Max retries exceeded with url: /digi-signage.moto-adv.com:8880/api/playlists?hostname=tv-terasa&quickconnect_code=8887779 (Caused by NameResolutionError(": Failed to resolve 'http' ([Errno -2] Name or service not known)")) -[INFO] [SignageApp] No new playlist on the server. Local version: 0, Server version: 0 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 0} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=http://digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist: HTTPConnectionPool(host='http', port=80): Max retries exceeded with url: /digi-signage.moto-adv.com:8880/api/playlists?hostname=tv-terasa&quickconnect_code=8887779 (Caused by NameResolutionError(": Failed to resolve 'http' ([Errno -2] Name or service not known)")) -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 22:47:16 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No new playlist on the server. Local version: 0, Server version: 0 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 0} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 22:49:45 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:50:05 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:50:22 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 22:50:29 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:50:49 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:51:06 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 22:51:13 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:51:34 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:51:50 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 22:51:57 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:52:18 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:52:34 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -2025-08-22 22:52:41 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:53:03 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:53:19 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 22:53:26 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:53:47 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:54:03 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 22:54:10 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:54:31 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:54:47 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 22:54:54 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:55:15 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:55:32 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 22:55:39 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:55:59 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:56:16 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-22 22:56:23 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:56:43 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:57:00 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 22:57:07 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:57:27 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:57:44 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 22:57:51 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:58:11 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:58:28 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 22:58:35 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:58:55 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:59:12 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -2025-08-22 22:59:19 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 22:59:39 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 22:59:56 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-22 23:00:03 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 23:00:24 - STARTED: wp2782770-1846651530.jpg -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 23:00:40 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -2025-08-22 23:00:48 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-22 23:01:09 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-22 23:01:26 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -2025-08-22 23:01:33 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1018, Mode: fit, Offset: (146, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No new playlist on the server. Local version: 0, Server version: 0 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 0} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-23 15:14:33 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlist with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[INFO] [SignageApp] No new playlist on the server. Local version: 0, Server version: 0 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 0} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlist with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 522 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-23 15:46:23 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-23 15:46:44 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-23 15:47:00 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com:8880/api/playlist with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -2025-08-23 15:47:08 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlist with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 404 -[INFO] [SignageApp] No new playlist on the server. Local version: 0, Server version: 0 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 0} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlist with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 404 -[WARNING] [SignageApp] Server returned empty playlist, falling back to local playlist -[INFO] [SignageApp] Loaded fallback playlist with 3 items -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -2025-08-23 15:59:41 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: wp2782770-1846651530.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg -2025-08-23 16:00:02 - STARTED: wp2782770-1846651530.jpg -[INFO] [SignageApp] Successfully displayed image: wp2782770-1846651530.jpg (Original: (3840, 2400), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] Playing media: SampleVideo_1280x720_1mb.mp4 from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -2025-08-23 16:00:18 - STARTED: SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] Starting system VLC subprocess for video: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] VLC subprocess finished: /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-23 16:00:26 - STARTED: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlist with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[ERROR] [SignageApp] Failed to fetch playlist. Status Code: 404 -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Successfully displayed image: 1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg (Original: (1600, 1000), Screen: 1920x1080, Mode: fit, Offset: (96, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] A new playlist is available on the server: version 29 (local: 0) -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': '1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'url': 'static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg', 'duration': 20}, {'file_name': 'wp2782770-1846651530.jpg', 'url': 'static/resurse/wp2782770-1846651530.jpg', 'duration': 15}, {'file_name': 'SampleVideo_1280x720_1mb.mp4', 'url': 'static/resurse/SampleVideo_1280x720_1mb.mp4', 'duration': 5}], 'version': 0} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 3 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: Successfully downloaded Cindrel_1.jpg to /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -[INFO] [SignageApp] python_functions: Successfully downloaded trans_cindrel_4.jpg to /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 16:09:09 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 16:09:20 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -2025-08-23 16:09:32 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 16:14:39 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 16:14:50 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-23 16:15:01 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 16:15:13 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-23 16:15:24 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 16:18:39 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 16:24:29 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 16:28:43 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 16:28:55 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 16:41:13 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 17:07:13 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 17:07:24 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-23 17:07:36 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 17:08:21 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 17:14:27 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 17:33:48 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 17:43:13 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 19:05:19 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 20:02:07 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 20:02:19 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 20:09:22 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 20:09:33 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 20:14:22 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Loaded fallback playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 20:14:23 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 20:17:05 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Loaded fallback playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 20:17:07 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 20:19:40 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 20:19:52 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 20:32:25 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 20:32:37 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 21:19:00 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 21:19:12 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-23 21:19:23 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 21:24:58 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 21:25:10 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 21:47:36 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 21:47:48 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 21:54:52 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 21:54:55 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 21:55:06 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 21:55:18 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 21:55:29 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-23 21:55:40 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 21:55:52 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-23 21:56:03 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 21:56:14 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 21:59:34 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 21:59:37 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 21:59:48 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:00:03 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:00:07 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 22:00:18 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -2025-08-23 22:00:29 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 22:00:40 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:03:03 - STARTED: Cindrel_1.jpg -[ERROR] [SignageApp] Failed to show image /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg: 'NoneType' object has no attribute 'place_forget' -[ERROR] [SignageApp] Failed to fetch playlist from server: 'NoneType' object has no attribute 'config', using fallback playlist -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:03:08 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:11:50 - STARTED: Cindrel_1.jpg -[ERROR] [SignageApp] Failed to show image /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg: 'NoneType' object has no attribute 'place_forget' -[ERROR] [SignageApp] Failed to fetch playlist from server: 'NoneType' object has no attribute 'config', using fallback playlist -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:11:56 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:15:02 - STARTED: Cindrel_1.jpg -[ERROR] [SignageApp] Failed to show image /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg: 'NoneType' object has no attribute 'place_forget' -[ERROR] [SignageApp] Failed to fetch playlist from server: 'NoneType' object has no attribute 'config', using fallback playlist -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:15:08 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:18:35 - STARTED: Cindrel_1.jpg -[ERROR] [SignageApp] Failed to show image /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg: 'NoneType' object has no attribute 'place_forget' -[ERROR] [SignageApp] Failed to fetch playlist from server: 'NoneType' object has no attribute 'config', using fallback playlist -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No new playlist on the server. Local version: 29, Server version: 29 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:18:41 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:29:18 - STARTED: Cindrel_1.jpg -[ERROR] [SignageApp] Failed to show image /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg: 'NoneType' object has no attribute 'place_forget' -[ERROR] [SignageApp] Failed to fetch playlist from server: 'NoneType' object has no attribute 'config', using fallback playlist -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:29:22 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 22:29:33 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:29:46 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:29:30 - STARTED: Cindrel_1.jpg -[ERROR] [SignageApp] Failed to show image /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg: 'NoneType' object has no attribute 'place_forget' -[ERROR] [SignageApp] Failed to fetch playlist from server: 'NoneType' object has no attribute 'config', using fallback playlist -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:31:09 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 22:31:21 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:31:33 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 22:31:44 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:35:06 - STARTED: Cindrel_1.jpg -[ERROR] [SignageApp] Failed to show image /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg: 'NoneType' object has no attribute 'place_forget' -[ERROR] [SignageApp] Failed to fetch playlist from server: 'NoneType' object has no attribute 'config', using fallback playlist -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:35:10 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:38:07 - STARTED: Cindrel_1.jpg -[ERROR] [SignageApp] Failed to show image /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg: 'NoneType' object has no attribute 'place_forget' -[ERROR] [SignageApp] Failed to fetch playlist from server: 'NoneType' object has no attribute 'config', using fallback playlist -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:38:12 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:41:32 - STARTED: Cindrel_1.jpg -[ERROR] [SignageApp] Failed to show image /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg: 'NoneType' object has no attribute 'place_forget' -[ERROR] [SignageApp] Failed to fetch playlist from server: 'NoneType' object has no attribute 'config', using fallback playlist -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:41:35 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 22:41:47 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[WARNING] [SignageApp] Splash video not found or splash_frame missing: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:47:39 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:47:41 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 22:47:52 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:49:37 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 22:49:38 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 23:09:28 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 23:09:39 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] show() called for video: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Video file exists, attempting to play: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] VLC play() called -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, starting player app... -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 23:14:18 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 23:14:29 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 23:14:42 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] show() called for video: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Video file exists, attempting to play: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Using window_id for set_xwindow: 18874374 -[INFO] [SignageApp] [SplashScreen] VLC play() called -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, starting player app... -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 23:18:38 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 23:18:49 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] show() called for video: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Checking existence of: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Current working directory: /home/pi/Desktop/tkinter_player/tkinter_app/src -[INFO] [SignageApp] [SplashScreen] Listdir resources: ['left-arrow-green.png', 'pause.png', 'home_icon.png', 'play.png', 'log.txt', 'demo1.jpg', 'intro.mp4', 'demo2.jpeg', 'local_playlist.json', 'left-arrow-blue.png', 'right-arrow-blue.png', 'intro1.mp4', 'right-arrow-green.png', 'demo_playlist.json', 'app_config.txt'] -[INFO] [SignageApp] [SplashScreen] Video file exists, attempting to play: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Using window_id for set_xwindow: 18874374 -[INFO] [SignageApp] [SplashScreen] VLC play() called -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, starting player app... -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 23:22:50 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 23:23:01 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] [SplashScreen] Standalone test: video_path=/home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] show() called for video: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Checking existence of: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Current working directory: /home/pi/Desktop/tkinter_player -[INFO] [SignageApp] [SplashScreen] Listdir resources: ['left-arrow-green.png', 'pause.png', 'home_icon.png', 'play.png', 'log.txt', 'demo1.jpg', 'intro.mp4', 'demo2.jpeg', 'local_playlist.json', 'left-arrow-blue.png', 'right-arrow-blue.png', 'intro1.mp4', 'right-arrow-green.png', 'demo_playlist.json', 'app_config.txt'] -[INFO] [SignageApp] [SplashScreen] Video file exists, attempting to play: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Using window_id for set_xwindow: 18874374 -[INFO] [SignageApp] [SplashScreen] VLC play() called -[INFO] [SignageApp] [SplashScreen] Standalone test: Splash finished, exiting app. -[INFO] [SignageApp] [VLC TEST] Attempting to play video: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [VLC TEST] player.play() called. Waiting for video to finish... -[INFO] [SignageApp] [VLC TEST] Playback ended with state: State.Ended -[INFO] [SignageApp] [VLC TEST] Done. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Running splash as standalone VLC subprocess: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Launching: cvlc --fullscreen --no-osd --no-video-title-show --play-and-exit --quiet /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] VLC splash finished. -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, starting player app... -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 23:31:26 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 23:31:37 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Running splash as standalone VLC subprocess: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Launching: cvlc --fullscreen --no-osd --no-video-title-show --play-and-exit --quiet /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] VLC splash finished. -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, starting player app... -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 23:34:11 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 23:34:22 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Running splash as standalone VLC subprocess: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Launching: cvlc --fullscreen --no-osd --no-video-title-show --play-and-exit --quiet /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] VLC splash finished. -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, fetching playlist... -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] [MAIN] Playlist loaded: [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}] -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 23:39:24 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 23:39:35 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 23:39:48 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Running splash as standalone VLC subprocess: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] [SplashScreen] Launching: cvlc --fullscreen --no-osd --no-video-title-show --play-and-exit --quiet /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] [SplashScreen] VLC splash finished. -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, waiting for playlist... -[INFO] [SignageApp] [MAIN] Playlist loaded: [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}] -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 23:42:09 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 23:42:20 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Running splash as standalone VLC subprocess: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] [SplashScreen] Launching: cvlc --fullscreen --no-osd --no-video-title-show --play-and-exit --quiet /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] [SplashScreen] VLC splash finished. -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, waiting for playlist... -[INFO] [SignageApp] [MAIN] Playlist loaded: [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}] -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 23:47:20 - STARTED: Cindrel_1.jpg -[ERROR] [SignageApp] Failed to show image /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg: 'SimpleMediaPlayerApp' object has no attribute 'scale_image_to_screen' -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 23:47:25 - STARTED: trans_cindrel_4.jpg -[ERROR] [SignageApp] Failed to show image /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg: 'SimpleMediaPlayerApp' object has no attribute 'scale_image_to_screen' -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 23:47:31 - STARTED: Cindrel_1.jpg -[ERROR] [SignageApp] Failed to show image /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg: 'SimpleMediaPlayerApp' object has no attribute 'scale_image_to_screen' -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 23:47:36 - STARTED: trans_cindrel_4.jpg -[ERROR] [SignageApp] Failed to show image /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg: 'SimpleMediaPlayerApp' object has no attribute 'scale_image_to_screen' -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] No playlist updates available -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 23:47:42 - STARTED: Cindrel_1.jpg -[ERROR] [SignageApp] Failed to show image /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg: 'SimpleMediaPlayerApp' object has no attribute 'scale_image_to_screen' -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-23 23:47:47 - STARTED: trans_cindrel_4.jpg -[ERROR] [SignageApp] Failed to show image /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg: 'SimpleMediaPlayerApp' object has no attribute 'scale_image_to_screen' -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Running splash as standalone VLC subprocess: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] [SplashScreen] Launching: cvlc --fullscreen --no-osd --no-video-title-show --play-and-exit --quiet /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] [SplashScreen] VLC splash finished. -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, waiting for playlist... -[INFO] [SignageApp] [MAIN] Playlist loaded: [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}] -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-23 23:50:18 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] Media paused -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] [SplashScreen] Running splash as standalone VLC subprocess: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] [SplashScreen] Launching: cvlc --fullscreen --no-osd --no-video-title-show --play-and-exit --quiet /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] [SplashScreen] VLC splash finished. -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, waiting for playlist... -[INFO] [SignageApp] [MAIN] Playlist loaded: [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}] -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] Loaded playlist with 2 items -[INFO] [SignageApp] Starting Simple Tkinter Media Player -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Application exit requested -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Running splash as standalone VLC subprocess: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Launching: cvlc --fullscreen --no-osd --no-video-title-show --play-and-exit --quiet /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] [SplashScreen] VLC splash finished. -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, waiting for playlist... -[INFO] [SignageApp] [MAIN] Playlist loaded: [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}] -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-24 00:01:21 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] [MAIN] Player UI and playback started. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] [SplashScreen] Running splash as standalone VLC subprocess: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] [SplashScreen] Launching: cvlc --fullscreen --no-osd --no-video-title-show --play-and-exit --quiet /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] [SplashScreen] VLC splash finished. -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, waiting for playlist... -[INFO] [SignageApp] [MAIN] Playlist loaded: [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}] -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-24 00:04:00 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] [MAIN] Player UI and playback started. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-24 00:04:11 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-24 00:04:23 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Running splash as standalone VLC subprocess: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] [SplashScreen] Launching: cvlc --fullscreen --no-osd --no-video-title-show --play-and-exit --quiet /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] [SplashScreen] VLC splash finished. -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, waiting for playlist... -[INFO] [SignageApp] [MAIN] Playlist loaded: [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}] -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-24 00:06:44 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] [MAIN] Player UI and playback started. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-24 00:06:56 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Running splash as standalone VLC subprocess: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] [SplashScreen] Launching: cvlc --fullscreen --no-osd --no-video-title-show --play-and-exit --quiet /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}], 'playlist_version': 29} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] Server playlist found with 2 items, version 29 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 29. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] [SplashScreen] VLC splash finished. -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, waiting for playlist... -[INFO] [SignageApp] [MAIN] Playlist loaded: [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}] -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-24 00:08:44 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] [MAIN] Player UI and playback started. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-24 00:08:55 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Running splash as standalone VLC subprocess: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Launching: cvlc --fullscreen --no-osd --no-video-title-show --play-and-exit --quiet /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 29} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}, {'duration': 14, 'file_name': '101394-video-1080.mp4', 'url': 'http://digi-signage.moto-adv.com/media/101394-video-1080.mp4'}], 'playlist_version': 30} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 30. -[INFO] [SignageApp] Server playlist found with 3 items, version 30 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[ERROR] [SignageApp] python_functions: Failed to download 101394-video-1080.mp4. Status Code: 404 -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 30. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 30} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] [SplashScreen] VLC splash finished. -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, waiting for playlist... -[INFO] [SignageApp] [MAIN] Playlist loaded: [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}] -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-24 17:50:25 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] [MAIN] Player UI and playback started. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-24 17:50:36 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-24 17:50:47 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-24 17:50:58 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-24 17:51:09 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 30} -[INFO] [SignageApp] [SplashScreen] Running splash as standalone VLC subprocess: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Launching: cvlc --fullscreen --no-osd --no-video-title-show --play-and-exit --quiet /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}, {'duration': 14, 'file_name': '101394-video-1080.mp4', 'url': 'http://digi-signage.moto-adv.com/media/101394-video-1080.mp4'}], 'playlist_version': 30} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 30. -[INFO] [SignageApp] Server playlist found with 3 items, version 30 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[ERROR] [SignageApp] python_functions: Failed to download 101394-video-1080.mp4. Status Code: 404 -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 30. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 30} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] [SplashScreen] VLC splash finished. -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, waiting for playlist... -[INFO] [SignageApp] [MAIN] Playlist loaded: [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}] -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-24 17:52:11 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] [MAIN] Player UI and playback started. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-24 17:52:23 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] [SplashScreen] Running splash as standalone VLC subprocess: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 30} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] [SplashScreen] Launching: cvlc --fullscreen --no-osd --no-video-title-show --play-and-exit --quiet /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}, {'duration': 14, 'file_name': '101394-video-1080.mp4', 'url': 'http://digi-signage.moto-adv.com/media/101394-video-1080.mp4'}], 'playlist_version': 30} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 30. -[INFO] [SignageApp] Server playlist found with 3 items, version 30 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[ERROR] [SignageApp] python_functions: Failed to download 101394-video-1080.mp4. Status Code: 404 -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 30. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 30} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] [SplashScreen] VLC splash finished. -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, waiting for playlist... -[INFO] [SignageApp] [MAIN] Playlist loaded: [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}] -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-24 17:57:39 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] [MAIN] Player UI and playback started. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-24 17:57:50 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-24 17:58:02 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-24 17:58:13 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] python_functions: Configuration loaded: server=digi-signage.moto-adv.com, host=tv-terasa, quick=8887779, port=8880 -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] [MAIN] About to show splash screen: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 30} -[INFO] [SignageApp] [SplashScreen] Running splash as standalone VLC subprocess: /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] [SplashScreen] Launching: cvlc --fullscreen --no-osd --no-video-title-show --play-and-exit --quiet /home/pi/Desktop/tkinter_player/tkinter_app/resources/intro1.mp4 -[INFO] [SignageApp] Found fallback playlist with 2 items -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Initializing with settings: server=digi-signage.moto-adv.com, host=tv-terasa, port=8880 -[INFO] [SignageApp] Attempting to connect to server... -[INFO] [SignageApp] Fetching playlist from URL: http://digi-signage.moto-adv.com/api/playlists with params: {'hostname': 'tv-terasa', 'quickconnect_code': '8887779'} -[INFO] [SignageApp] Server response: {'hashed_quickconnect': '$2b$12$UQzlEHNWudAB4P08Le3YJeWHrZHJkWL44kRQpZ53kt.fDLTcrPzGm', 'playlist': [{'duration': 10, 'file_name': 'Cindrel_1.jpg', 'url': 'http://digi-signage.moto-adv.com/media/Cindrel_1.jpg'}, {'duration': 10, 'file_name': 'trans_cindrel_4.jpg', 'url': 'http://digi-signage.moto-adv.com/media/trans_cindrel_4.jpg'}, {'duration': 14, 'file_name': '101394-video-1080.mp4', 'url': 'http://digi-signage.moto-adv.com/media/101394-video-1080.mp4'}], 'playlist_version': 30} -[INFO] [SignageApp] Fetched updated playlist from server. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 30. -[INFO] [SignageApp] Server playlist found with 3 items, version 30 -[INFO] [SignageApp] python_functions: Starting media file download... -[INFO] [SignageApp] python_functions: File Cindrel_1.jpg already exists. Skipping download. -[INFO] [SignageApp] python_functions: File trans_cindrel_4.jpg already exists. Skipping download. -[ERROR] [SignageApp] python_functions: Failed to download 101394-video-1080.mp4. Status Code: 404 -[INFO] [SignageApp] python_functions: Starting save_local_playlist function. -[INFO] [SignageApp] python_functions: Updated local playlist with server data. -[INFO] [SignageApp] python_functions: Finished save_local_playlist function. -[INFO] [SignageApp] python_functions: Finished media file download and updated local playlist. -[INFO] [SignageApp] python_functions: Updated playlist version in app_config.txt to 30. -[INFO] [SignageApp] python_functions: Starting load_local_playlist function. -[INFO] [SignageApp] python_functions: Local playlist loaded: {'playlist': [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}], 'version': 30} -[INFO] [SignageApp] python_functions: Finished load_local_playlist function successfully. -[INFO] [SignageApp] Successfully loaded 2 items from server -[INFO] [SignageApp] [SplashScreen] VLC splash finished. -[INFO] [SignageApp] [MAIN] splash.show() called, entering mainloop... -[INFO] [SignageApp] [MAIN] Splash finished, waiting for playlist... -[INFO] [SignageApp] [MAIN] Playlist loaded: [{'file_name': 'Cindrel_1.jpg', 'url': 'static/resurse/Cindrel_1.jpg', 'duration': 10}, {'file_name': 'trans_cindrel_4.jpg', 'url': 'static/resurse/trans_cindrel_4.jpg', 'duration': 10}] -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-24 18:10:56 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1080, Mode: fit, Offset: (240, 0)) -[INFO] [SignageApp] [MAIN] Player UI and playback started. -[INFO] [SignageApp] python_functions: Starting load_config function. -[INFO] [SignageApp] python_functions: Configuration file loaded successfully. -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-24 18:11:09 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] Playing media: Cindrel_1.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/Cindrel_1.jpg -2025-08-24 18:11:20 - STARTED: Cindrel_1.jpg -[INFO] [SignageApp] Successfully displayed image: Cindrel_1.jpg (Original: (4096, 3072), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) -[INFO] [SignageApp] Playing media: trans_cindrel_4.jpg from /home/pi/Desktop/tkinter_player/tkinter_app/src/static/resurse/trans_cindrel_4.jpg -2025-08-24 18:11:25 - STARTED: trans_cindrel_4.jpg -[INFO] [SignageApp] Successfully displayed image: trans_cindrel_4.jpg (Original: (4000, 3000), Screen: 1920x1018, Mode: fit, Offset: (281, 0)) - \ No newline at end of file diff --git a/tkinter_app/resources/pause.png b/tkinter_app/resources/pause.png deleted file mode 100644 index 97c06c9..0000000 Binary files a/tkinter_app/resources/pause.png and /dev/null differ diff --git a/tkinter_app/resources/play.png b/tkinter_app/resources/play.png deleted file mode 100644 index 00391ae..0000000 Binary files a/tkinter_app/resources/play.png and /dev/null differ diff --git a/tkinter_app/resources/right-arrow-blue.png b/tkinter_app/resources/right-arrow-blue.png deleted file mode 100644 index 6d98721..0000000 Binary files a/tkinter_app/resources/right-arrow-blue.png and /dev/null differ diff --git a/tkinter_app/resources/right-arrow-green.png b/tkinter_app/resources/right-arrow-green.png deleted file mode 100644 index 2560948..0000000 Binary files a/tkinter_app/resources/right-arrow-green.png and /dev/null differ diff --git a/tkinter_app/src/__pycache__/logging_config.cpython-311.pyc b/tkinter_app/src/__pycache__/logging_config.cpython-311.pyc deleted file mode 100644 index cccbea2..0000000 Binary files a/tkinter_app/src/__pycache__/logging_config.cpython-311.pyc and /dev/null differ diff --git a/tkinter_app/src/__pycache__/media_playback_controller.cpython-311.pyc b/tkinter_app/src/__pycache__/media_playback_controller.cpython-311.pyc deleted file mode 100644 index 0011a31..0000000 Binary files a/tkinter_app/src/__pycache__/media_playback_controller.cpython-311.pyc and /dev/null differ diff --git a/tkinter_app/src/__pycache__/player_app.cpython-311.pyc b/tkinter_app/src/__pycache__/player_app.cpython-311.pyc deleted file mode 100644 index b73ee68..0000000 Binary files a/tkinter_app/src/__pycache__/player_app.cpython-311.pyc and /dev/null differ diff --git a/tkinter_app/src/__pycache__/player_ui.cpython-311.pyc b/tkinter_app/src/__pycache__/player_ui.cpython-311.pyc deleted file mode 100644 index 6053d66..0000000 Binary files a/tkinter_app/src/__pycache__/player_ui.cpython-311.pyc and /dev/null differ diff --git a/tkinter_app/src/__pycache__/playlist_manager.cpython-311.pyc b/tkinter_app/src/__pycache__/playlist_manager.cpython-311.pyc deleted file mode 100644 index 090230f..0000000 Binary files a/tkinter_app/src/__pycache__/playlist_manager.cpython-311.pyc and /dev/null differ diff --git a/tkinter_app/src/__pycache__/python_functions.cpython-311.pyc b/tkinter_app/src/__pycache__/python_functions.cpython-311.pyc deleted file mode 100644 index 9dee730..0000000 Binary files a/tkinter_app/src/__pycache__/python_functions.cpython-311.pyc and /dev/null differ diff --git a/tkinter_app/src/__pycache__/settings_screen.cpython-311.pyc b/tkinter_app/src/__pycache__/settings_screen.cpython-311.pyc deleted file mode 100644 index 00636b5..0000000 Binary files a/tkinter_app/src/__pycache__/settings_screen.cpython-311.pyc and /dev/null differ diff --git a/tkinter_app/src/__pycache__/splash_screen.cpython-311.pyc b/tkinter_app/src/__pycache__/splash_screen.cpython-311.pyc deleted file mode 100644 index 8691f9f..0000000 Binary files a/tkinter_app/src/__pycache__/splash_screen.cpython-311.pyc and /dev/null differ diff --git a/tkinter_app/src/__pycache__/virtual_keyboard.cpython-311.pyc b/tkinter_app/src/__pycache__/virtual_keyboard.cpython-311.pyc deleted file mode 100644 index 34cc275..0000000 Binary files a/tkinter_app/src/__pycache__/virtual_keyboard.cpython-311.pyc and /dev/null differ diff --git a/tkinter_app/src/logging_config.py b/tkinter_app/src/logging_config.py deleted file mode 100644 index 8710312..0000000 --- a/tkinter_app/src/logging_config.py +++ /dev/null @@ -1,27 +0,0 @@ -import logging -import os - -# Path to the log file -# Update the path to point to the new resources directory -LOG_FILE_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'resources', 'log.txt') - -# Create a logger instance -Logger = logging.getLogger('SignageApp') -Logger.setLevel(logging.INFO) # Set the logging level to INFO - -# Create a file handler to write logs to the log.txt file -file_handler = logging.FileHandler(LOG_FILE_PATH, mode='a') # Append logs to the file -file_handler.setLevel(logging.INFO) - -# Create a formatter for the log messages -formatter = logging.Formatter('[%(levelname)s] [%(name)s] %(message)s') -file_handler.setFormatter(formatter) - -# Add the file handler to the logger -Logger.addHandler(file_handler) - -# Optionally, add a stream handler to log messages to the console -stream_handler = logging.StreamHandler() -stream_handler.setLevel(logging.INFO) -stream_handler.setFormatter(formatter) -Logger.addHandler(stream_handler) \ No newline at end of file diff --git a/tkinter_app/src/main.py b/tkinter_app/src/main.py deleted file mode 100644 index 96408c9..0000000 --- a/tkinter_app/src/main.py +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env python3 -""" -Main entry point for the tkinter-based signage player application. -This file acts as the main executable for launching the tkinter player. -""" -import os -import sys - -# Add the current directory to the path so we can import our modules -sys.path.append(os.path.dirname(os.path.abspath(__file__))) - - -from logging_config import Logger -from player_ui import PlayerUI -from media_playback_controller import MediaPlaybackController -from splash_screen import SplashScreen -from playlist_manager import PlaylistManager -from threading import Thread -from settings_screen import SettingsWindow - -if __name__ == "__main__": - import tkinter as tk - root = tk.Tk() - playlist_manager = PlaylistManager() - playlist_manager.fetch_playlist() # Start fetching playlist in parallel with splash - intro_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'resources', 'intro1.mp4') - preload_result = {} - def preload_first_media(playlist): - if playlist and len(playlist) > 0: - first_item = playlist[0] - file_path = first_item.get('url', '') - if file_path and os.path.exists(file_path): - try: - from PIL import Image - if file_path.lower().endswith(('.jpg', '.jpeg', '.png', '.bmp', '.gif')): - img = Image.open(file_path) - img.load() # Force decode - preload_result['image'] = img - except Exception as e: - Logger.warning(f"[MAIN] Preload failed: {e}") - Logger.info(f"[MAIN] About to show splash screen: {intro_path}") - def start_player(): - Logger.info("[MAIN] Splash finished, waiting for playlist...") - playlist = playlist_manager.wait_for_playlist() - Logger.info(f"[MAIN] Playlist loaded: {playlist}") - Thread(target=preload_first_media, args=(playlist,), daemon=True).start() - # Create playback first so we can reference its methods in callbacks - playback = MediaPlaybackController(app=None, ui=None) # UI will be set after - def open_settings(): - SettingsWindow(root, None) - def show_exit(): - root.quit() - control_callbacks = { - 'prev': playback.previous_media, - 'play_pause': playback.toggle_play_pause, - 'next': playback.next_media, - 'settings': open_settings, - 'exit': show_exit - } - ui = PlayerUI(root, control_callbacks=control_callbacks) - ui.setup_window() # Ensure fullscreen and geometry - ui.bind_show_controls_on_activity() # Bind activity to show controls - playback.ui = ui # Set UI reference now that it's created - playback.set_playlist(playlist or []) - playback.play_current_media() - Logger.info("[MAIN] Player UI and playback started.") - splash = SplashScreen(root, intro_path, duration=10) - splash.show(on_finish=start_player) - Logger.info("[MAIN] splash.show() called, entering mainloop...") - root.mainloop() \ No newline at end of file diff --git a/tkinter_app/src/media_playback_controller.py b/tkinter_app/src/media_playback_controller.py deleted file mode 100644 index ab58078..0000000 --- a/tkinter_app/src/media_playback_controller.py +++ /dev/null @@ -1,146 +0,0 @@ -import threading -import os -from logging_config import Logger -from PIL import Image, ImageTk - -class MediaPlaybackController: - def __init__(self, app, ui): - self.app = app # Reference to SimpleMediaPlayerApp - self.ui = ui # Reference to PlayerUI - self.auto_advance_timer = None - self.current_index = 0 - self.playlist = [] - self.scaling_mode = 'fit' - - def set_playlist(self, playlist): - self.playlist = playlist - self.current_index = 0 - - def play_current_media(self): - if not self.playlist or self.current_index >= len(self.playlist): - self.show_no_content_message() - return - media = self.playlist[self.current_index] - file_path = media.get('url', '') - file_name = media.get('file_name', '') - duration = media.get('duration', 10) - if file_path.startswith('static/resurse/'): - absolute_path = os.path.join(os.path.dirname(__file__), file_path) - file_path = absolute_path - Logger.info(f"Playing media: {file_name} from {file_path}") - self.log_event(file_name, "STARTED") - self.cancel_timers() - if file_path.startswith('text://'): - self.show_text_content(file_path[7:], duration) - elif file_path.lower().endswith(('.mp4', '.avi', '.mov', '.mkv')): - self.play_video(file_path) - elif os.path.exists(file_path) and file_path.lower().endswith(('.jpg', '.jpeg', '.png', '.gif', '.bmp')): - self.show_image(file_path, duration) - else: - Logger.error(f"Unsupported or missing media: {file_path}") - self.ui.status_label.config(text=f"Missing or unsupported media:\n{file_name}") - self.auto_advance_timer = self.ui.root.after(5000, self.next_media) - - def play_video(self, file_path): - self.ui.status_label.place_forget() - def run_vlc_subprocess(): - import subprocess - try: - Logger.info(f"Starting system VLC subprocess for video: {file_path}") - vlc_cmd = [ - 'cvlc', - '--fullscreen', - '--no-osd', - '--no-video-title-show', - '--play-and-exit', - '--quiet', - file_path - ] - proc = subprocess.Popen(vlc_cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - proc.wait() - Logger.info(f"VLC subprocess finished: {file_path}") - except Exception as e: - Logger.error(f"VLC subprocess error: {e}") - finally: - self.ui.root.after_idle(lambda: setattr(self, 'auto_advance_timer', self.ui.root.after(1000, self.next_media))) - threading.Thread(target=run_vlc_subprocess, daemon=True).start() - - def show_image(self, file_path, duration): - try: - self.ui.status_label.place_forget() - self.ui.status_label.config(text="") - img = Image.open(file_path) - original_size = img.size - screen_width = self.ui.root.winfo_width() - screen_height = self.ui.root.winfo_height() - if screen_width <= 1 or screen_height <= 1: - screen_width = 1920 - screen_height = 1080 - final_img, offset = self.ui.scale_image_to_screen(img, screen_width, screen_height, self.scaling_mode) - photo = ImageTk.PhotoImage(final_img) - self.ui.image_label.config(image=photo) - self.ui.image_label.image = photo - Logger.info(f"Successfully displayed image: {os.path.basename(file_path)} " - f"(Original: {original_size}, Screen: {screen_width}x{screen_height}, " - f"Mode: {self.scaling_mode}, Offset: {offset})") - self.auto_advance_timer = self.ui.root.after( - int(duration * 1000), - self.next_media - ) - except Exception as e: - Logger.error(f"Failed to show image {file_path}: {e}") - self.ui.image_label.config(image='') - self.ui.status_label.config(text=f"Image Error:\n{os.path.basename(file_path)}\n{str(e)}") - self.ui.status_label.place(relx=0.5, rely=0.5, anchor='center') - self.auto_advance_timer = self.ui.root.after(5000, self.next_media) - - def show_text_content(self, text, duration): - self.ui.image_label.config(image='') - self.ui.status_label.config(text=text) - self.auto_advance_timer = self.ui.root.after( - int(duration * 1000), - self.next_media - ) - - def next_media(self): - self.cancel_timers() - if not self.playlist: - return - self.current_index = (self.current_index + 1) % len(self.playlist) - self.play_current_media() - - def previous_media(self): - self.cancel_timers() - if not self.playlist: - return - self.current_index = (self.current_index - 1) % len(self.playlist) - self.play_current_media() - - def toggle_play_pause(self): - self.app.is_paused = not self.app.is_paused - if self.app.is_paused: - self.ui.play_pause_btn.config(text="â–ļ Play") - self.cancel_timers() - else: - self.ui.play_pause_btn.config(text="⏸ Pause") - self.play_current_media() - Logger.info(f"Media {'paused' if self.app.is_paused else 'resumed'}") - - def cancel_timers(self): - if self.auto_advance_timer: - self.ui.root.after_cancel(self.auto_advance_timer) - self.auto_advance_timer = None - - def show_no_content_message(self): - self.ui.status_label.config(text="No content available.") - - def log_event(self, file_name, event): - import datetime - try: - timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') - log_message = f"{timestamp} - {event}: {file_name}\n" - log_file = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'resources', 'log.txt') - with open(log_file, 'a') as f: - f.write(log_message) - except Exception as e: - Logger.error(f"Failed to log event: {e}") diff --git a/tkinter_app/src/player_app.py b/tkinter_app/src/player_app.py deleted file mode 100644 index 02cbc4f..0000000 --- a/tkinter_app/src/player_app.py +++ /dev/null @@ -1,407 +0,0 @@ -# player_app.py -# Main player application logic moved from tkinter_simple_player.py - -import tkinter as tk -from tkinter import ttk, messagebox, simpledialog -import threading -import time -import os -import json -import datetime -from pathlib import Path -import subprocess -import sys -import requests # Required for server communication -import queue -from media_playback_controller import MediaPlaybackController -try: - import vlc # For video playback with hardware acceleration -except Exception as e: - vlc = None - print(f"WARNING: VLC not available: {e}. Video playback may be limited.") - -try: - from PIL import Image, ImageTk - PIL_AVAILABLE = True -except ImportError: - PIL_AVAILABLE = False - print("WARNING: PIL not available. Image display functionality will be limited.") - -from python_functions import ( - load_local_playlist, download_media_files, clean_unused_files, - save_local_playlist, update_config_playlist_version, fetch_server_playlist, - load_config -) -from logging_config import Logger -from virtual_keyboard import VirtualKeyboard, TouchOptimizedEntry, TouchOptimizedButton -from settings_screen import SettingsWindow -from splash_screen import SplashScreen -from player_ui import PlayerUI - -CONFIG_FILE = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'resources', 'app_config.txt') - - -class SimpleMediaPlayerApp: - def __init__(self, root): - self.root = root - self.running = True - self.is_paused = False - self.is_fullscreen = True - self.playlist = [] - self.current_index = 0 - self.scaling_mode = 'fit' - self.auto_advance_timer = None - self.hide_controls_timer = None - self.settings_window = None - # UI extraction - self.ui = PlayerUI(root, control_callbacks={ - 'prev': self.previous_media, - 'play_pause': self.toggle_play_pause, - 'next': self.next_media, - 'settings': self.open_settings, - 'exit': self.show_exit_dialog - }) - self.content_frame = self.ui.content_frame - self.image_label = self.ui.image_label - self.status_label = self.ui.status_label - self.play_pause_btn = self.ui.play_pause_btn - self.prev_btn = self.ui.prev_btn - self.next_btn = self.ui.next_btn - self.exit_btn = self.ui.exit_btn - self.settings_btn = self.ui.settings_btn - self.playback = MediaPlaybackController(self, self.ui) - self.setup_window() - self.start_player_logic() - - def start_player_logic(self): - # Start playlist/server thread - self._playlist_ready = threading.Event() - self._playlist_data = None - def fetch_playlist_logic(): - fallback_playlist = None - try: - local_playlist_data = load_local_playlist() - fallback_playlist = local_playlist_data.get('playlist', []) - if fallback_playlist: - Logger.info(f"Found fallback playlist with {len(fallback_playlist)} items") - except Exception as e: - Logger.warning(f"No fallback playlist available: {e}") - config = load_config() - server = config.get("server_ip", "") - host = config.get("screen_name", "") - quick = config.get("quickconnect_key", "") - port = config.get("port", "") - Logger.info(f"Initializing with settings: server={server}, host={host}, port={port}") - playlist = None - # Try to fetch from server - if server and host and quick and port: - try: - Logger.info("Attempting to connect to server...") - server_playlist_data = fetch_server_playlist() - server_playlist = server_playlist_data.get('playlist', []) - server_version = server_playlist_data.get('version', 0) - if server_playlist: - Logger.info(f"Server playlist found with {len(server_playlist)} items, version {server_version}") - download_media_files(server_playlist, server_version) - update_config_playlist_version(server_version) - local_playlist_data = load_local_playlist() - playlist = local_playlist_data.get('playlist', []) - if playlist: - Logger.info(f"Successfully loaded {len(playlist)} items from server") - else: - Logger.warning("Server playlist was empty, falling back to local playlist") - else: - Logger.warning("Server returned empty playlist, falling back to local playlist") - except Exception as e: - Logger.error(f"Failed to fetch playlist from server: {e}, using fallback playlist") - if not playlist: - playlist = fallback_playlist - if not playlist: - playlist = None - self._playlist_data = playlist - self._playlist_ready.set() - threading.Thread(target=fetch_playlist_logic, daemon=True).start() - self._playlist_ready.wait() - playlist = self._playlist_data - if playlist and len(playlist) > 0: - self.playlist = playlist - Logger.info(f"Loaded playlist with {len(self.playlist)} items") - self.play_current_media() - else: - Logger.warning("No playlist available, loading demo content") - self.load_demo_or_local_playlist() - self.start_periodic_checks() - - def setup_window(self): - self.root.title("Simple Signage Player") - self.root.configure(bg='black') - try: - config = load_config() - width = int(config.get('screen_w', 1920)) - height = int(config.get('screen_h', 1080)) - self.scaling_mode = config.get('scaling_mode', 'fit') - except: - width, height = 800, 600 - self.scaling_mode = 'fit' - self.root.geometry(f"{width}x{height}") - self.root.attributes('-fullscreen', True) - self.root.bind('', self.on_key_press) - self.root.bind('', self.on_mouse_click) - self.root.bind('', self.on_mouse_motion) - self.root.focus_set() - - def play_current_media(self): - self.playback.play_current_media() - - def play_video(self, file_path): - self.playback.play_video(file_path) - - def show_image(self, file_path, duration): - self.playback.show_image(file_path, duration) - - def show_text_content(self, text, duration): - self.playback.show_text_content(text, duration) - - def next_media(self): - self.playback.next_media() - - def previous_media(self): - self.playback.previous_media() - - def toggle_play_pause(self): - self.playback.toggle_play_pause() - - def cancel_timers(self): - self.playback.cancel_timers() - - def show_no_content_message(self): - self.playback.show_no_content_message() - - def log_event(self, file_name, event): - self.playback.log_event(file_name, event) - - def show_controls(self): - if self.ui.control_frame: - self.ui.control_frame.place(relx=0.98, rely=0.98, anchor='se') - - def hide_controls(self): - if self.ui.control_frame: - self.ui.control_frame.place_forget() - - def schedule_hide_controls(self): - if self.hide_controls_timer: - self.root.after_cancel(self.hide_controls_timer) - self.hide_controls_timer = self.root.after(10000, self.hide_controls) - - def on_mouse_click(self, event): - self.show_controls() - self.schedule_hide_controls() - - def on_mouse_motion(self, event): - self.show_controls() - self.schedule_hide_controls() - - def on_key_press(self, event): - key = event.keysym.lower() - if key == 'f': - self.toggle_fullscreen() - elif key == 'space': - self.toggle_play_pause() - elif key == 'left': - self.previous_media() - elif key == 'right': - self.next_media() - elif key == 'escape': - self.show_exit_dialog() - elif key == '1': - self.set_scaling_mode('fit') - elif key == '2': - self.set_scaling_mode('fill') - elif key == '3': - self.set_scaling_mode('stretch') - elif event.state & 0x4: - if key == 's': - self.open_settings() - self.show_controls() - self.schedule_hide_controls() - - def set_scaling_mode(self, mode): - old_mode = self.scaling_mode - self.scaling_mode = mode - Logger.info(f"Scaling mode changed from '{old_mode}' to '{mode}'") - self.status_label.config(text=f"Scaling Mode: {mode.title()}\n" - f"1=Fit 2=Fill 3=Stretch") - self.status_label.place(relx=0.5, rely=0.05, anchor='center') - self.root.after(2000, lambda: self.status_label.place_forget()) - if self.playlist and 0 <= self.current_index < len(self.playlist): - self.cancel_timers() - self.play_current_media() - - def toggle_fullscreen(self): - self.is_fullscreen = not self.is_fullscreen - self.root.attributes('-fullscreen', self.is_fullscreen) - - def open_settings(self): - if hasattr(self, 'settings_window') and self.settings_window and self.settings_window.winfo_exists(): - self.settings_window.lift() - return - if not self.is_paused: - self.toggle_play_pause() - self.settings_window = SettingsWindow(self.root, self) - def on_settings_close(): - if self.is_paused: - self.toggle_play_pause() - self.settings_window.protocol("WM_DELETE_WINDOW", on_settings_close) - - def show_exit_dialog(self): - try: - config = load_config() - quickconnect_key = config.get('quickconnect_key', '') - except: - quickconnect_key = '' - exit_dialog = tk.Toplevel(self.root) - exit_dialog.title("Exit Application") - exit_dialog.geometry("400x200") - exit_dialog.configure(bg='#2d2d2d') - exit_dialog.transient(self.root) - exit_dialog.grab_set() - exit_dialog.resizable(False, False) - self.center_dialog_on_screen(exit_dialog, 400, 200) - header_frame = tk.Frame(exit_dialog, bg='#cc0000', height=60) - header_frame.pack(fill=tk.X) - header_frame.pack_propagate(False) - icon_label = tk.Label(header_frame, text="⚠", font=('Arial', 20, 'bold'), - fg='white', bg='#cc0000') - icon_label.pack(side=tk.LEFT, padx=15, pady=15) - title_label = tk.Label(header_frame, text="Exit Application", - font=('Arial', 14, 'bold'), fg='white', bg='#cc0000') - title_label.pack(side=tk.LEFT, pady=15) - content_frame = tk.Frame(exit_dialog, bg='#2d2d2d', padx=20, pady=20) - content_frame.pack(fill=tk.BOTH, expand=True) - prompt_label = tk.Label(content_frame, text="Enter password to exit:", - font=('Arial', 11), fg='white', bg='#2d2d2d') - prompt_label.pack(pady=(0, 10)) - password_var = tk.StringVar() - password_entry = tk.Entry(content_frame, textvariable=password_var, - font=('Arial', 11), show='*', width=25, - bg='#404040', fg='white', insertbackground='white', - relief=tk.FLAT, bd=5) - password_entry.pack(pady=(0, 15)) - password_entry.focus_set() - button_frame = tk.Frame(content_frame, bg='#2d2d2d') - button_frame.pack(fill=tk.X) - def check_password(): - if password_var.get() == quickconnect_key: - exit_dialog.destroy() - self.exit_application() - elif password_var.get(): - error_label.config(text="✗ Incorrect password", fg='#ff4444') - password_entry.delete(0, tk.END) - password_entry.focus_set() - def cancel_exit(): - exit_dialog.destroy() - error_label = tk.Label(content_frame, text="", font=('Arial', 9), - bg='#2d2d2d') - error_label.pack() - cancel_btn = tk.Button(button_frame, text="Cancel", command=cancel_exit, - bg='#555555', fg='white', font=('Arial', 10, 'bold'), - relief=tk.FLAT, padx=20, pady=8, width=10) - cancel_btn.pack(side=tk.RIGHT, padx=(10, 0)) - exit_btn = tk.Button(button_frame, text="Exit", command=check_password, - bg='#cc0000', fg='white', font=('Arial', 10, 'bold'), - relief=tk.FLAT, padx=20, pady=8, width=10) - exit_btn.pack(side=tk.RIGHT) - password_entry.bind('', lambda e: check_password()) - exit_dialog.bind('', lambda e: cancel_exit()) - - def exit_application(self): - Logger.info("Application exit requested") - self.running = False - self.root.quit() - self.root.destroy() - - def center_dialog_on_screen(self, dialog, width, height): - dialog.update_idletasks() - screen_width = dialog.winfo_screenwidth() - screen_height = dialog.winfo_screenheight() - center_x = int((screen_width - width) / 2) - center_y = int((screen_height - height) / 2) - center_x = max(0, min(center_x, screen_width - width)) - center_y = max(0, min(center_y, screen_height - height)) - dialog.geometry(f"{width}x{height}+{center_x}+{center_y}") - dialog.lift() - dialog.focus_force() - return center_x, center_y - - def check_playlist_updates(self): - try: - config = load_config() - local_version = config.get('playlist_version', 0) - server_playlist_data = fetch_server_playlist() - server_version = server_playlist_data.get('version', 0) - if server_version > local_version: - Logger.info(f"Updating playlist: {local_version} -> {server_version}") - local_playlist_data = load_local_playlist() - clean_unused_files(local_playlist_data.get('playlist', [])) - download_media_files( - server_playlist_data.get('playlist', []), - server_version - ) - local_playlist_data = load_local_playlist() - self.playlist = local_playlist_data.get('playlist', []) - self.current_index = 0 - Logger.info("Playlist updated successfully") - self.play_current_media() - else: - Logger.info("No playlist updates available") - except requests.exceptions.ConnectTimeout: - Logger.warning("Server connection timeout during update check - continuing with current playlist") - except requests.exceptions.ConnectionError: - Logger.warning("Cannot connect to server during update check - continuing with current playlist") - except requests.exceptions.Timeout: - Logger.warning("Server request timeout during update check - continuing with current playlist") - except Exception as e: - Logger.warning(f"Failed to check playlist updates: {e} - continuing with current playlist") - - def log_event(self, file_name, event): - try: - timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') - log_message = f"{timestamp} - {event}: {file_name}\n" - log_file = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'resources', 'log.txt') - with open(log_file, 'a') as f: - f.write(log_message) - except Exception as e: - Logger.error(f"Failed to log event: {e}") - - def start_periodic_checks(self): - def check_loop(): - while self.running: - try: - time.sleep(300) - if self.running: - self.check_playlist_updates() - except Exception as e: - Logger.error(f"Error in periodic check: {e}") - threading.Thread(target=check_loop, daemon=True).start() - - def next_media(self): - self.cancel_timers() - if not self.playlist: - return - self.current_index = (self.current_index + 1) % len(self.playlist) - # At end of playlist, check for updates - if self.current_index == 0: - self.check_playlist_updates() - self.play_current_media() - - def run(self): - Logger.info("Starting Simple Tkinter Media Player") - try: - self.root.mainloop() - except KeyboardInterrupt: - self.exit_application() - except Exception as e: - Logger.error(f"Application error: {e}") - print(f"Error: {e}") - - diff --git a/tkinter_app/src/player_app_backup_before_refactor.py b/tkinter_app/src/player_app_backup_before_refactor.py deleted file mode 100644 index 304ad8d..0000000 --- a/tkinter_app/src/player_app_backup_before_refactor.py +++ /dev/null @@ -1,833 +0,0 @@ -# player_app.py -# Main player application logic moved from tkinter_simple_player.py - -import tkinter as tk -from tkinter import ttk, messagebox, simpledialog -import threading -import time -import os -import json -import datetime -from pathlib import Path -import subprocess -import sys -import requests # Required for server communication -import queue -import vlc # For video playback with hardware acceleration - -try: - from PIL import Image, ImageTk - PIL_AVAILABLE = True -except ImportError: - PIL_AVAILABLE = False - print("WARNING: PIL not available. Image display functionality will be limited.") - -from python_functions import ( - load_local_playlist, download_media_files, clean_unused_files, - save_local_playlist, update_config_playlist_version, fetch_server_playlist, - load_config -) -from logging_config import Logger -from virtual_keyboard import VirtualKeyboard, TouchOptimizedEntry, TouchOptimizedButton -from settings_screen import SettingsWindow - -CONFIG_FILE = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'resources', 'app_config.txt') - - -class SimpleMediaPlayerApp: - def __init__(self, root): - self.root = root - self.running = True - self.is_paused = False - self.is_fullscreen = True - self.playlist = [] - self.current_index = 0 - self.scaling_mode = 'fit' - self.auto_advance_timer = None - self.hide_controls_timer = None - self.control_frame = None - self.settings_window = None - self.content_frame = None - self.image_label = None - self.status_label = None - self.play_pause_btn = None - self.prev_btn = None - self.next_btn = None - self.exit_btn = None - self.settings_btn = None - self.setup_window() - self.play_splash_then_start() - - def play_splash_then_start(self): - # Start playlist/server thread - self._playlist_ready = threading.Event() - self._playlist_data = None - def fetch_playlist_logic(): - fallback_playlist = None - try: - local_playlist_data = load_local_playlist() - fallback_playlist = local_playlist_data.get('playlist', []) - if fallback_playlist: - Logger.info(f"Found fallback playlist with {len(fallback_playlist)} items") - except Exception as e: - Logger.warning(f"No fallback playlist available: {e}") - config = load_config() - server = config.get("server_ip", "") - host = config.get("screen_name", "") - quick = config.get("quickconnect_key", "") - port = config.get("port", "") - Logger.info(f"Initializing with settings: server={server}, host={host}, port={port}") - playlist = None - # Try to fetch from server - if server and host and quick and port: - try: - Logger.info("Attempting to connect to server...") - server_playlist_data = fetch_server_playlist() - server_playlist = server_playlist_data.get('playlist', []) - server_version = server_playlist_data.get('version', 0) - if server_playlist: - Logger.info(f"Server playlist found with {len(server_playlist)} items, version {server_version}") - download_media_files(server_playlist, server_version) - update_config_playlist_version(server_version) - local_playlist_data = load_local_playlist() - playlist = local_playlist_data.get('playlist', []) - if playlist: - Logger.info(f"Successfully loaded {len(playlist)} items from server") - else: - Logger.warning("Server playlist was empty, falling back to local playlist") - else: - Logger.warning("Server returned empty playlist, falling back to local playlist") - except Exception as e: - Logger.error(f"Failed to fetch playlist from server: {e}, using fallback playlist") - if not playlist: - playlist = fallback_playlist - if not playlist: - playlist = None - self._playlist_data = playlist - self._playlist_ready.set() - threading.Thread(target=fetch_playlist_logic, daemon=True).start() - # Only play intro on first playlist loop - self._first_playlist_loop = True - self.setup_ui() - self._playlist_ready.wait() - playlist = self._playlist_data - if playlist and len(playlist) > 0: - self.playlist = playlist - Logger.info(f"Loaded playlist with {len(self.playlist)} items") - self.play_current_media() - else: - Logger.warning("No playlist available, loading demo content") - self.load_demo_or_local_playlist() - self.start_periodic_checks() - - # _after_splash is now handled inline in play_splash_then_start - - - def setup_window(self): - self.root.title("Simple Signage Player") - self.root.configure(bg='black') - try: - config = load_config() - width = int(config.get('screen_w', 1920)) - height = int(config.get('screen_h', 1080)) - self.scaling_mode = config.get('scaling_mode', 'fit') - except: - width, height = 800, 600 - self.scaling_mode = 'fit' - self.root.geometry(f"{width}x{height}") - self.root.attributes('-fullscreen', True) - self.root.bind('', self.on_key_press) - self.root.bind('', self.on_mouse_click) - self.root.bind('', self.on_mouse_motion) - self.root.focus_set() - - def setup_ui(self): - self.content_frame = tk.Frame(self.root, bg='black') - self.content_frame.pack(fill=tk.BOTH, expand=True) - self.image_label = tk.Label(self.content_frame, bg='black') - self.image_label.pack(fill=tk.BOTH, expand=True) - self.status_label = tk.Label( - self.content_frame, - bg='black', - fg='white', - font=('Arial', 20), - text="" - ) - self.create_control_panel() - self.show_controls() - self.schedule_hide_controls() - - # --- FULL METHOD BODIES FROM tkinter_simple_player_old.py BELOW --- - def create_control_panel(self): - """Create touch-optimized control panel with larger buttons""" - self.control_frame = tk.Frame( - self.root, - bg='#1a1a1a', - bd=2, - relief=tk.RAISED, - padx=15, - pady=15 - ) - self.control_frame.place(relx=0.98, rely=0.98, anchor='se') - button_config = { - 'bg': '#333333', - 'fg': 'white', - 'activebackground': '#555555', - 'activeforeground': 'white', - 'relief': tk.FLAT, - 'borderwidth': 0, - 'width': 10, - 'height': 3, - 'font': ('Segoe UI', 10, 'bold'), - 'cursor': 'hand2' - } - self.prev_btn = tk.Button( - self.control_frame, - text="⏎ Prev", - command=self.previous_media, - **button_config - ) - self.prev_btn.grid(row=0, column=0, padx=5) - self.play_pause_btn = tk.Button( - self.control_frame, - text="⏸ Pause" if not self.is_paused else "â–ļ Play", - command=self.toggle_play_pause, - bg='#27ae60', - activebackground='#35d974', - **{k: v for k, v in button_config.items() if k not in ['bg', 'activebackground']} - ) - self.play_pause_btn.grid(row=0, column=1, padx=5) - self.next_btn = tk.Button( - self.control_frame, - text="Next ⏭", - command=self.next_media, - **button_config - ) - self.next_btn.grid(row=0, column=2, padx=5) - self.settings_btn = tk.Button( - self.control_frame, - text="âš™ī¸ Settings", - command=self.open_settings, - bg='#9b59b6', - activebackground='#bb8fce', - **{k: v for k, v in button_config.items() if k not in ['bg', 'activebackground']} - ) - self.settings_btn.grid(row=0, column=3, padx=5) - self.exit_btn = tk.Button( - self.control_frame, - text="❌ EXIT", - command=self.show_exit_dialog, - bg='#e74c3c', - fg='white', - activebackground='#ec7063', - activeforeground='white', - relief=tk.FLAT, - borderwidth=0, - width=8, - height=3, - font=('Segoe UI', 10, 'bold'), - cursor='hand2' - ) - self.exit_btn.grid(row=0, column=4, padx=5) - for button in [self.prev_btn, self.play_pause_btn, self.next_btn, self.settings_btn, self.exit_btn]: - self.add_touch_feedback_to_control_button(button) - - def scale_image_to_screen(self, img, screen_width, screen_height, mode='fit'): - img_width, img_height = img.size - if mode == 'stretch': - return img.resize((screen_width, screen_height), Image.LANCZOS), (0, 0) - elif mode == 'fill': - screen_ratio = screen_width / screen_height - img_ratio = img_width / img_height - if img_ratio > screen_ratio: - new_height = screen_height - new_width = int(screen_height * img_ratio) - x_offset = (screen_width - new_width) // 2 - y_offset = 0 - else: - new_width = screen_width - new_height = int(screen_width / img_ratio) - x_offset = 0 - y_offset = (screen_height - new_height) // 2 - img_resized = img.resize((new_width, new_height), Image.LANCZOS) - final_img = Image.new('RGB', (screen_width, screen_height), 'black') - if new_width > screen_width: - crop_x = (new_width - screen_width) // 2 - img_resized = img_resized.crop((crop_x, 0, crop_x + screen_width, new_height)) - x_offset = 0 - if new_height > screen_height: - crop_y = (new_height - screen_height) // 2 - img_resized = img_resized.crop((0, crop_y, new_width, crop_y + screen_height)) - y_offset = 0 - final_img.paste(img_resized, (x_offset, y_offset)) - return final_img, (x_offset, y_offset) - else: - screen_ratio = screen_width / screen_height - img_ratio = img_width / img_height - if img_ratio > screen_ratio: - new_width = screen_width - new_height = int(screen_width / img_ratio) - else: - new_height = screen_height - new_width = int(screen_height * img_ratio) - img_resized = img.resize((new_width, new_height), Image.LANCZOS) - final_img = Image.new('RGB', (screen_width, screen_height), 'black') - x_offset = (screen_width - new_width) // 2 - y_offset = (screen_height - new_height) // 2 - final_img.paste(img_resized, (x_offset, y_offset)) - return final_img, (x_offset, y_offset) - - def add_touch_feedback_to_control_button(self, button): - original_bg = button.cget('bg') - def on_press(e): - button.configure(relief=tk.SUNKEN) - def on_release(e): - button.configure(relief=tk.FLAT) - def on_enter(e): - button.configure(relief=tk.RAISED) - def on_leave(e): - button.configure(relief=tk.FLAT) - button.bind("", on_press) - button.bind("", on_release) - button.bind("", on_enter) - button.bind("", on_leave) - - def initialize_playlist_from_server(self): - # No-op: logic now handled in play_splash_then_start - pass - def _play_intro_splash(self, on_finish=None, duration=5): - """Embed intro1.mp4 as splash video in splash_frame using python-vlc. If video ends early, pause last frame until 'duration' seconds.""" - intro_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'resources', 'intro1.mp4') - self._splash_ended = False - def finish(): - self._stop_intro_splash() - if on_finish: - self.root.after(0, on_finish) - def on_end(event=None): - if not self._splash_ended: - self._splash_ended = True - # Pause on last frame - if hasattr(self, '_splash_player') and self._splash_player: - self._splash_player.set_pause(1) - if os.path.exists(intro_path) and hasattr(self, 'splash_frame'): - try: - self._splash_vlc_instance = vlc.Instance('--no-osd', '--no-video-title-show', '--quiet') - self._splash_media = self._splash_vlc_instance.media_new(intro_path) - self._splash_player = self._splash_vlc_instance.media_player_new() - self._splash_player.set_media(self._splash_media) - self.splash_frame.update_idletasks() - window_id = self.splash_frame.winfo_id() - self._splash_player.set_xwindow(window_id) - # Attach event for end of video - event_manager = self._splash_player.event_manager() - event_manager.event_attach(vlc.EventType.MediaPlayerEndReached, on_end) - self._splash_player.play() - self.root.after(int(duration * 1000), finish) - except Exception as e: - Logger.warning(f"Could not play splash video with python-vlc: {e}") - finish() - else: - Logger.warning(f"Splash video not found or splash_frame missing: {intro_path}") - finish() - config = load_config() - server = config.get("server_ip", "") - host = config.get("screen_name", "") - quick = config.get("quickconnect_key", "") - port = config.get("port", "") - Logger.info(f"Initializing with settings: server={server}, host={host}, port={port}") - if not server or not host or not quick or not port: - Logger.warning("Missing server configuration, using fallback playlist") - self._stop_intro_splash() - self.load_fallback_playlist(fallback_playlist) - return - server_connection_successful = False - try: - Logger.info("Attempting to connect to server...") - server_playlist_data = fetch_server_playlist() - server_playlist = server_playlist_data.get('playlist', []) - server_version = server_playlist_data.get('version', 0) - if server_playlist: - Logger.info(f"Server playlist found with {len(server_playlist)} items, version {server_version}") - server_connection_successful = True - download_media_files(server_playlist, server_version) - update_config_playlist_version(server_version) - local_playlist_data = load_local_playlist() - self.playlist = local_playlist_data.get('playlist', []) - if self.playlist: - Logger.info(f"Successfully loaded {len(self.playlist)} items from server") - self._stop_intro_splash() - self.play_current_media() - return - else: - Logger.warning("Server playlist was empty, falling back to local playlist") - else: - Logger.warning("Server returned empty playlist, falling back to local playlist") - except requests.exceptions.ConnectTimeout: - Logger.error("Server connection timeout, using fallback playlist") - except requests.exceptions.ConnectionError: - Logger.error("Cannot connect to server, using fallback playlist") - except requests.exceptions.Timeout: - Logger.error("Server request timeout, using fallback playlist") - except Exception as e: - Logger.error(f"Failed to fetch playlist from server: {e}, using fallback playlist") - if not server_connection_successful: - self._stop_intro_splash() - self.load_fallback_playlist(fallback_playlist) - def _stop_intro_splash(self): - """Stop the intro splash video if running (python-vlc version).""" - if hasattr(self, '_splash_player') and self._splash_player: - try: - self._splash_player.stop() - except Exception: - pass - self._splash_player = None - if hasattr(self, '_splash_vlc_instance'): - self._splash_vlc_instance = None - - def load_fallback_playlist(self, fallback_playlist): - if fallback_playlist and len(fallback_playlist) > 0: - self.playlist = fallback_playlist - Logger.info(f"Loaded fallback playlist with {len(self.playlist)} items") - self.play_current_media() - else: - Logger.warning("No fallback playlist available, loading demo content") - self.load_demo_or_local_playlist() - - def load_demo_or_local_playlist(self): - local_playlist_data = load_local_playlist() - self.playlist = local_playlist_data.get('playlist', []) - if self.playlist: - Logger.info(f"Loaded existing local playlist with {len(self.playlist)} items") - self.play_current_media() - return - Logger.info("No local playlist found, loading demo content") - self.create_demo_content() - if self.playlist: - self.play_current_media() - else: - self.show_no_content_message() - - def create_demo_content(self): - demo_images = [] - static_dir = os.path.join(os.path.dirname(__file__), 'static', 'resurse') - if os.path.exists(static_dir): - for file in os.listdir(static_dir): - if file.lower().endswith(('.jpg', '.jpeg', '.png', '.gif')): - full_path = os.path.join(static_dir, file) - demo_images.append({ - 'file_name': file, - 'url': full_path, - 'duration': 5 - }) - if not demo_images: - demo_dir = './Resurse' - if os.path.exists(demo_dir): - for file in os.listdir(demo_dir): - if file.lower().endswith(('.jpg', '.jpeg', '.png', '.gif')): - demo_images.append({ - 'file_name': file, - 'url': os.path.join(demo_dir, file), - 'duration': 5 - }) - if demo_images: - self.playlist = demo_images - Logger.info(f"Created demo playlist with {len(demo_images)} images") - else: - self.playlist = [{ - 'file_name': 'Demo Text', - 'url': 'text://Welcome to Tkinter Media Player!\n\nPlease configure server settings', - 'duration': 5 - }] - - def show_no_content_message(self): - self.image_label.config(image='') - self.status_label.config( - text="No media content available.\nPress Settings to configure server connection." - ) - self.status_label.place(relx=0.5, rely=0.5, anchor='center') - - def show_error_message(self, message): - self.image_label.config(image='') - self.status_label.config(text=f"Error: {message}") - self.status_label.place(relx=0.5, rely=0.5, anchor='center') - - def play_current_media(self): - # On first playlist loop, play intro splash, then continue playlist - if getattr(self, '_first_playlist_loop', False): - self._first_playlist_loop = False - # Create splash_frame for intro video - self.splash_frame = tk.Frame(self.root, bg='black') - self.splash_frame.pack(fill=tk.BOTH, expand=True) - self.root.update_idletasks() - def after_intro(): - if hasattr(self, 'splash_frame') and self.splash_frame: - self.splash_frame.destroy() - self.splash_frame = None - self._play_current_media_after_intro() - self._play_intro_splash(on_finish=after_intro, duration=5) - return - self._play_current_media_after_intro() - - def _play_current_media_after_intro(self): - if not self.playlist or self.current_index >= len(self.playlist): - self.show_no_content_message() - return - media = self.playlist[self.current_index] - file_path = media.get('url', '') - file_name = media.get('file_name', '') - duration = media.get('duration', 10) - if file_path.startswith('static/resurse/'): - absolute_path = os.path.join(os.path.dirname(__file__), file_path) - file_path = absolute_path - Logger.info(f"Playing media: {file_name} from {file_path}") - self.log_event(file_name, "STARTED") - self.cancel_timers() - if file_path.startswith('text://'): - self.show_text_content(file_path[7:], duration) - elif file_path.lower().endswith(('.mp4', '.avi', '.mov', '.mkv')): - self.play_video(file_path) - elif os.path.exists(file_path) and file_path.lower().endswith(('.jpg', '.jpeg', '.png', '.gif', '.bmp')): - self.show_image(file_path, duration) - else: - Logger.error(f"Unsupported or missing media: {file_path}") - self.status_label.config(text=f"Missing or unsupported media:\n{file_name}") - self.auto_advance_timer = self.root.after(5000, self.next_media) - - def play_video(self, file_path): - self.status_label.place_forget() - def run_vlc_subprocess(): - try: - Logger.info(f"Starting system VLC subprocess for video: {file_path}") - vlc_cmd = [ - 'cvlc', - '--fullscreen', - '--no-osd', - '--no-video-title-show', - '--play-and-exit', - '--quiet', - file_path - ] - proc = subprocess.Popen(vlc_cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - proc.wait() - Logger.info(f"VLC subprocess finished: {file_path}") - except Exception as e: - Logger.error(f"VLC subprocess error: {e}") - finally: - self.root.after_idle(lambda: setattr(self, 'auto_advance_timer', self.root.after(1000, self.next_media))) - threading.Thread(target=run_vlc_subprocess, daemon=True).start() - - def _update_video_frame(self, photo): - try: - self.image_label.config(image=photo) - self.image_label.image = photo - except Exception as e: - Logger.error(f"Error updating video frame: {e}") - - def _show_video_error(self, error_msg): - try: - self.status_label.config(text=f"Video Error:\n{error_msg}") - self.status_label.place(relx=0.5, rely=0.5, anchor='center') - self.auto_advance_timer = self.root.after(5000, self.next_media) - except Exception as e: - Logger.error(f"Error showing video error: {e}") - self.auto_advance_timer = self.root.after(5000, self.next_media) - - def show_text_content(self, text, duration): - self.image_label.config(image='') - self.status_label.config(text=text) - self.auto_advance_timer = self.root.after( - int(duration * 1000), - self.next_media - ) - - def show_image(self, file_path, duration): - try: - self.status_label.place_forget() - self.status_label.config(text="") - if PIL_AVAILABLE: - img = Image.open(file_path) - original_size = img.size - screen_width = self.root.winfo_width() - screen_height = self.root.winfo_height() - if screen_width <= 1 or screen_height <= 1: - screen_width = 1920 - screen_height = 1080 - final_img, offset = self.scale_image_to_screen(img, screen_width, screen_height, self.scaling_mode) - photo = ImageTk.PhotoImage(final_img) - self.image_label.config(image=photo) - self.image_label.image = photo - Logger.info(f"Successfully displayed image: {os.path.basename(file_path)} " - f"(Original: {original_size}, Screen: {screen_width}x{screen_height}, " - f"Mode: {self.scaling_mode}, Offset: {offset})") - else: - self.image_label.config(image='') - self.status_label.config(text=f"IMAGE: {os.path.basename(file_path)}\n\n(Install PIL for image display)") - self.status_label.place(relx=0.5, rely=0.5, anchor='center') - Logger.warning("PIL not available - showing text placeholder for image") - self.auto_advance_timer = self.root.after( - int(duration * 1000), - self.next_media - ) - except Exception as e: - Logger.error(f"Failed to show image {file_path}: {e}") - self.image_label.config(image='') - self.status_label.config(text=f"Image Error:\n{os.path.basename(file_path)}\n{str(e)}") - self.status_label.place(relx=0.5, rely=0.5, anchor='center') - self.auto_advance_timer = self.root.after(5000, self.next_media) - - def next_media(self): - self.cancel_timers() - if not self.playlist: - return - self.current_index = (self.current_index + 1) % len(self.playlist) - if self.current_index == 0: - threading.Thread(target=self.check_playlist_updates, daemon=True).start() - self.play_current_media() - - def previous_media(self): - self.cancel_timers() - if not self.playlist: - return - self.current_index = (self.current_index - 1) % len(self.playlist) - self.play_current_media() - - def toggle_play_pause(self): - self.is_paused = not self.is_paused - if self.is_paused: - self.play_pause_btn.config(text="â–ļ Play") - self.cancel_timers() - else: - self.play_pause_btn.config(text="⏸ Pause") - self.play_current_media() - Logger.info(f"Media {'paused' if self.is_paused else 'resumed'}") - - def cancel_timers(self): - if self.auto_advance_timer: - self.root.after_cancel(self.auto_advance_timer) - self.auto_advance_timer = None - - def show_controls(self): - if self.control_frame: - self.control_frame.place(relx=0.98, rely=0.98, anchor='se') - - def hide_controls(self): - if self.control_frame: - self.control_frame.place_forget() - - def schedule_hide_controls(self): - if self.hide_controls_timer: - self.root.after_cancel(self.hide_controls_timer) - self.hide_controls_timer = self.root.after(10000, self.hide_controls) - - def on_mouse_click(self, event): - self.show_controls() - self.schedule_hide_controls() - - def on_mouse_motion(self, event): - self.show_controls() - self.schedule_hide_controls() - - def on_key_press(self, event): - key = event.keysym.lower() - if key == 'f': - self.toggle_fullscreen() - elif key == 'space': - self.toggle_play_pause() - elif key == 'left': - self.previous_media() - elif key == 'right': - self.next_media() - elif key == 'escape': - self.show_exit_dialog() - elif key == '1': - self.set_scaling_mode('fit') - elif key == '2': - self.set_scaling_mode('fill') - elif key == '3': - self.set_scaling_mode('stretch') - elif event.state & 0x4: - if key == 's': - self.open_settings() - self.show_controls() - self.schedule_hide_controls() - - def set_scaling_mode(self, mode): - old_mode = self.scaling_mode - self.scaling_mode = mode - Logger.info(f"Scaling mode changed from '{old_mode}' to '{mode}'") - self.status_label.config(text=f"Scaling Mode: {mode.title()}\n" - f"1=Fit 2=Fill 3=Stretch") - self.status_label.place(relx=0.5, rely=0.05, anchor='center') - self.root.after(2000, lambda: self.status_label.place_forget()) - if self.playlist and 0 <= self.current_index < len(self.playlist): - self.cancel_timers() - self.play_current_media() - - def toggle_fullscreen(self): - self.is_fullscreen = not self.is_fullscreen - self.root.attributes('-fullscreen', self.is_fullscreen) - - def open_settings(self): - if hasattr(self, 'settings_window') and self.settings_window and self.settings_window.winfo_exists(): - self.settings_window.lift() - return - if not self.is_paused: - self.toggle_play_pause() - self.settings_window = SettingsWindow(self.root, self) - def on_settings_close(): - if self.is_paused: - self.toggle_play_pause() - self.settings_window.protocol("WM_DELETE_WINDOW", on_settings_close) - - def show_exit_dialog(self): - try: - config = load_config() - quickconnect_key = config.get('quickconnect_key', '') - except: - quickconnect_key = '' - exit_dialog = tk.Toplevel(self.root) - exit_dialog.title("Exit Application") - exit_dialog.geometry("400x200") - exit_dialog.configure(bg='#2d2d2d') - exit_dialog.transient(self.root) - exit_dialog.grab_set() - exit_dialog.resizable(False, False) - self.center_dialog_on_screen(exit_dialog, 400, 200) - header_frame = tk.Frame(exit_dialog, bg='#cc0000', height=60) - header_frame.pack(fill=tk.X) - header_frame.pack_propagate(False) - icon_label = tk.Label(header_frame, text="⚠", font=('Arial', 20, 'bold'), - fg='white', bg='#cc0000') - icon_label.pack(side=tk.LEFT, padx=15, pady=15) - title_label = tk.Label(header_frame, text="Exit Application", - font=('Arial', 14, 'bold'), fg='white', bg='#cc0000') - title_label.pack(side=tk.LEFT, pady=15) - content_frame = tk.Frame(exit_dialog, bg='#2d2d2d', padx=20, pady=20) - content_frame.pack(fill=tk.BOTH, expand=True) - prompt_label = tk.Label(content_frame, text="Enter password to exit:", - font=('Arial', 11), fg='white', bg='#2d2d2d') - prompt_label.pack(pady=(0, 10)) - password_var = tk.StringVar() - password_entry = tk.Entry(content_frame, textvariable=password_var, - font=('Arial', 11), show='*', width=25, - bg='#404040', fg='white', insertbackground='white', - relief=tk.FLAT, bd=5) - password_entry.pack(pady=(0, 15)) - password_entry.focus_set() - button_frame = tk.Frame(content_frame, bg='#2d2d2d') - button_frame.pack(fill=tk.X) - def check_password(): - if password_var.get() == quickconnect_key: - exit_dialog.destroy() - self.exit_application() - elif password_var.get(): - error_label.config(text="✗ Incorrect password", fg='#ff4444') - password_entry.delete(0, tk.END) - password_entry.focus_set() - def cancel_exit(): - exit_dialog.destroy() - error_label = tk.Label(content_frame, text="", font=('Arial', 9), - bg='#2d2d2d') - error_label.pack() - cancel_btn = tk.Button(button_frame, text="Cancel", command=cancel_exit, - bg='#555555', fg='white', font=('Arial', 10, 'bold'), - relief=tk.FLAT, padx=20, pady=8, width=10) - cancel_btn.pack(side=tk.RIGHT, padx=(10, 0)) - exit_btn = tk.Button(button_frame, text="Exit", command=check_password, - bg='#cc0000', fg='white', font=('Arial', 10, 'bold'), - relief=tk.FLAT, padx=20, pady=8, width=10) - exit_btn.pack(side=tk.RIGHT) - password_entry.bind('', lambda e: check_password()) - exit_dialog.bind('', lambda e: cancel_exit()) - - def exit_application(self): - Logger.info("Application exit requested") - self.running = False - self.root.quit() - self.root.destroy() - - def center_dialog_on_screen(self, dialog, width, height): - dialog.update_idletasks() - screen_width = dialog.winfo_screenwidth() - screen_height = dialog.winfo_screenheight() - center_x = int((screen_width - width) / 2) - center_y = int((screen_height - height) / 2) - center_x = max(0, min(center_x, screen_width - width)) - center_y = max(0, min(center_y, screen_height - height)) - dialog.geometry(f"{width}x{height}+{center_x}+{center_y}") - dialog.lift() - dialog.focus_force() - return center_x, center_y - - def check_playlist_updates(self): - try: - config = load_config() - local_version = config.get('playlist_version', 0) - server_playlist_data = fetch_server_playlist() - server_version = server_playlist_data.get('version', 0) - if server_version > local_version: - Logger.info(f"Updating playlist: {local_version} -> {server_version}") - local_playlist_data = load_local_playlist() - clean_unused_files(local_playlist_data.get('playlist', [])) - download_media_files( - server_playlist_data.get('playlist', []), - server_version - ) - local_playlist_data = load_local_playlist() - self.playlist = local_playlist_data.get('playlist', []) - self.current_index = 0 - Logger.info("Playlist updated successfully") - self.play_current_media() - else: - Logger.info("No playlist updates available") - except requests.exceptions.ConnectTimeout: - Logger.warning("Server connection timeout during update check - continuing with current playlist") - except requests.exceptions.ConnectionError: - Logger.warning("Cannot connect to server during update check - continuing with current playlist") - except requests.exceptions.Timeout: - Logger.warning("Server request timeout during update check - continuing with current playlist") - except Exception as e: - Logger.warning(f"Failed to check playlist updates: {e} - continuing with current playlist") - - def log_event(self, file_name, event): - try: - timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') - log_message = f"{timestamp} - {event}: {file_name}\n" - log_file = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'resources', 'log.txt') - with open(log_file, 'a') as f: - f.write(log_message) - except Exception as e: - Logger.error(f"Failed to log event: {e}") - - def start_periodic_checks(self): - def check_loop(): - while self.running: - try: - time.sleep(300) - if self.running: - self.check_playlist_updates() - except Exception as e: - Logger.error(f"Error in periodic check: {e}") - threading.Thread(target=check_loop, daemon=True).start() - - def next_media(self): - self.cancel_timers() - if not self.playlist: - return - self.current_index = (self.current_index + 1) % len(self.playlist) - # At end of playlist, check for updates - if self.current_index == 0: - self.check_playlist_updates() - self.play_current_media() - - def run(self): - Logger.info("Starting Simple Tkinter Media Player") - try: - self.root.mainloop() - except KeyboardInterrupt: - self.exit_application() - except Exception as e: - Logger.error(f"Application error: {e}") - print(f"Error: {e}") - - diff --git a/tkinter_app/src/player_ui.py b/tkinter_app/src/player_ui.py deleted file mode 100644 index 6d9b815..0000000 --- a/tkinter_app/src/player_ui.py +++ /dev/null @@ -1,189 +0,0 @@ -import tkinter as tk -from PIL import Image - -class PlayerUI: - def __init__(self, root, control_callbacks=None): - self.root = root - self.control_frame = None - self.content_frame = None - self.image_label = None - self.status_label = None - self.play_pause_btn = None - self.prev_btn = None - self.next_btn = None - self.exit_btn = None - self.settings_btn = None - self.hide_controls_timer = None - # Set fullscreen and geometry before packing widgets - self.root.title("Simple Signage Player") - self.root.configure(bg='black') - try: - config = None - try: - from python_functions import load_config - config = load_config() - except Exception: - pass - width = int(config.get('screen_w', 1920)) if config else 1920 - height = int(config.get('screen_h', 1080)) if config else 1080 - self.scaling_mode = config.get('scaling_mode', 'fit') if config else 'fit' - except: - width, height = 1920, 1080 - self.scaling_mode = 'fit' - self.root.geometry(f"{width}x{height}") - self.root.attributes('-fullscreen', True) - self.root.focus_set() - self.setup_ui(control_callbacks) - - def setup_ui(self, control_callbacks=None): - self.content_frame = tk.Frame(self.root, bg='black') - self.content_frame.pack(fill=tk.BOTH, expand=True) - self.image_label = tk.Label(self.content_frame, bg='black') - self.image_label.pack(fill=tk.BOTH, expand=True) - self.status_label = tk.Label( - self.content_frame, - bg='black', - fg='white', - font=('Arial', 20), - text="" - ) - self.create_control_panel(control_callbacks) - self.show_controls() - self.schedule_hide_controls() - - def create_control_panel(self, control_callbacks=None): - self.control_frame = tk.Frame( - self.root, - bg='#1a1a1a', - bd=2, - relief=tk.RAISED, - padx=15, - pady=15 - ) - self.control_frame.place(relx=0.98, rely=0.98, anchor='se') - button_config = { - 'bg': '#333333', - 'fg': 'white', - 'activebackground': '#555555', - 'activeforeground': 'white', - 'relief': tk.FLAT, - 'borderwidth': 0, - 'width': 10, - 'height': 3, - 'font': ('Segoe UI', 10, 'bold'), - 'cursor': 'hand2' - } - self.prev_btn = tk.Button( - self.control_frame, - text="⏎ Prev", - command=control_callbacks.get('prev') if control_callbacks else None, - **button_config - ) - self.prev_btn.grid(row=0, column=0, padx=5) - self.play_pause_btn = tk.Button( - self.control_frame, - text="⏸ Pause", - command=control_callbacks.get('play_pause') if control_callbacks else None, - bg='#27ae60', - activebackground='#35d974', - **{k: v for k, v in button_config.items() if k not in ['bg', 'activebackground']} - ) - self.play_pause_btn.grid(row=0, column=1, padx=5) - self.next_btn = tk.Button( - self.control_frame, - text="Next ⏭", - command=control_callbacks.get('next') if control_callbacks else None, - **button_config - ) - self.next_btn.grid(row=0, column=2, padx=5) - self.settings_btn = tk.Button( - self.control_frame, - text="âš™ī¸ Settings", - command=control_callbacks.get('settings') if control_callbacks else None, - bg='#9b59b6', - activebackground='#bb8fce', - **{k: v for k, v in button_config.items() if k not in ['bg', 'activebackground']} - ) - self.settings_btn.grid(row=0, column=3, padx=5) - self.exit_btn = tk.Button( - self.control_frame, - text="❌ EXIT", - command=control_callbacks.get('exit') if control_callbacks else None, - bg='#e74c3c', - fg='white', - activebackground='#ec7063', - activeforeground='white', - relief=tk.FLAT, - borderwidth=0, - width=8, - height=3, - font=('Segoe UI', 10, 'bold'), - cursor='hand2' - ) - self.exit_btn.grid(row=0, column=4, padx=5) - - def show_controls(self): - if self.control_frame: - self.control_frame.place(relx=0.98, rely=0.98, anchor='se') - - def hide_controls(self): - if self.control_frame: - self.control_frame.place_forget() - - def schedule_hide_controls(self): - if self.hide_controls_timer: - self.root.after_cancel(self.hide_controls_timer) - self.hide_controls_timer = self.root.after(10000, self.hide_controls) - - def scale_image_to_screen(self, img, screen_width, screen_height, mode='fit'): - img_width, img_height = img.size - if mode == 'stretch': - return img.resize((screen_width, screen_height), Image.LANCZOS), (0, 0) - elif mode == 'fill': - screen_ratio = screen_width / screen_height - img_ratio = img_width / img_height - if img_ratio > screen_ratio: - new_height = screen_height - new_width = int(screen_height * img_ratio) - x_offset = (screen_width - new_width) // 2 - y_offset = 0 - else: - new_width = screen_width - new_height = int(screen_width / img_ratio) - x_offset = 0 - y_offset = (screen_height - new_height) // 2 - img_resized = img.resize((new_width, new_height), Image.LANCZOS) - final_img = Image.new('RGB', (screen_width, screen_height), 'black') - if new_width > screen_width: - crop_x = (new_width - screen_width) // 2 - img_resized = img_resized.crop((crop_x, 0, crop_x + screen_width, new_height)) - x_offset = 0 - if new_height > screen_height: - crop_y = (new_height - screen_height) // 2 - img_resized = img_resized.crop((0, crop_y, new_width, crop_y + screen_height)) - y_offset = 0 - final_img.paste(img_resized, (x_offset, y_offset)) - return final_img, (x_offset, y_offset) - else: - screen_ratio = screen_width / screen_height - img_ratio = img_width / img_height - if img_ratio > screen_ratio: - new_width = screen_width - new_height = int(screen_width / img_ratio) - else: - new_height = screen_height - new_width = int(screen_height * img_ratio) - img_resized = img.resize((new_width, new_height), Image.LANCZOS) - final_img = Image.new('RGB', (screen_width, screen_height), 'black') - x_offset = (screen_width - new_width) // 2 - y_offset = (screen_height - new_height) // 2 - final_img.paste(img_resized, (x_offset, y_offset)) - return final_img, (x_offset, y_offset) - - def bind_show_controls_on_activity(self): - def on_activity(event=None): - self.show_controls() - self.schedule_hide_controls() - self.root.bind('', on_activity) - self.root.bind('', on_activity) - self.root.bind('', on_activity) diff --git a/tkinter_app/src/playlist_manager.py b/tkinter_app/src/playlist_manager.py deleted file mode 100644 index ee3c76e..0000000 --- a/tkinter_app/src/playlist_manager.py +++ /dev/null @@ -1,59 +0,0 @@ -import threading -from logging_config import Logger -from python_functions import ( - load_local_playlist, download_media_files, update_config_playlist_version, fetch_server_playlist, load_config -) - -class PlaylistManager: - def __init__(self): - self._playlist_ready = threading.Event() - self._playlist_data = None - - def fetch_playlist(self): - def fetch_logic(): - fallback_playlist = None - try: - local_playlist_data = load_local_playlist() - fallback_playlist = local_playlist_data.get('playlist', []) - if fallback_playlist: - Logger.info(f"Found fallback playlist with {len(fallback_playlist)} items") - except Exception as e: - Logger.warning(f"No fallback playlist available: {e}") - config = load_config() - server = config.get("server_ip", "") - host = config.get("screen_name", "") - quick = config.get("quickconnect_key", "") - port = config.get("port", "") - Logger.info(f"Initializing with settings: server={server}, host={host}, port={port}") - playlist = None - if server and host and quick and port: - try: - Logger.info("Attempting to connect to server...") - server_playlist_data = fetch_server_playlist() - server_playlist = server_playlist_data.get('playlist', []) - server_version = server_playlist_data.get('version', 0) - if server_playlist: - Logger.info(f"Server playlist found with {len(server_playlist)} items, version {server_version}") - download_media_files(server_playlist, server_version) - update_config_playlist_version(server_version) - local_playlist_data = load_local_playlist() - playlist = local_playlist_data.get('playlist', []) - if playlist: - Logger.info(f"Successfully loaded {len(playlist)} items from server") - else: - Logger.warning("Server playlist was empty, falling back to local playlist") - else: - Logger.warning("Server returned empty playlist, falling back to local playlist") - except Exception as e: - Logger.error(f"Failed to fetch playlist from server: {e}, using fallback playlist") - if not playlist: - playlist = fallback_playlist - if not playlist: - playlist = None - self._playlist_data = playlist - self._playlist_ready.set() - threading.Thread(target=fetch_logic, daemon=True).start() - - def wait_for_playlist(self): - self._playlist_ready.wait() - return self._playlist_data diff --git a/tkinter_app/src/python_functions.py b/tkinter_app/src/python_functions.py deleted file mode 100644 index 648ebf9..0000000 --- a/tkinter_app/src/python_functions.py +++ /dev/null @@ -1,216 +0,0 @@ -import os -import json -import requests -from logging_config import Logger # Import the shared logger -import bcrypt -import time -import re - -# Update paths to use the new directory structure -CONFIG_FILE = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'resources', 'app_config.txt') -LOCAL_PLAYLIST_FILE = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'resources', 'local_playlist.json') - -def load_config(): - """Load configuration from app_config.txt.""" - Logger.info("python_functions: Starting load_config function.") - if os.path.exists(CONFIG_FILE): - try: - with open(CONFIG_FILE, 'r') as file: - Logger.info("python_functions: Configuration file loaded successfully.") - return json.load(file) - except json.JSONDecodeError as e: - Logger.error(f"python_functions: Failed to parse configuration file. Error: {e}") - return {} - else: - Logger.error(f"python_functions: Configuration file {CONFIG_FILE} not found.") - return {} - Logger.info("python_functions: Finished load_config function.") - -# Load configuration and initialize variables -config_data = load_config() -server = config_data.get("server_ip", "") -host = config_data.get("screen_name", "") -quick = config_data.get("quickconnect_key", "") -port = config_data.get("port", "") - -Logger.info(f"python_functions: Configuration loaded: server={server}, host={host}, quick={quick}, port={port}") - -def load_local_playlist(): - """Load the playlist and version from local storage.""" - Logger.info("python_functions: Starting load_local_playlist function.") - if os.path.exists(LOCAL_PLAYLIST_FILE): - try: - with open(LOCAL_PLAYLIST_FILE, 'r') as local_file: - local_playlist = json.load(local_file) - Logger.info(f"python_functions: Local playlist loaded: {local_playlist}") - if isinstance(local_playlist, dict) and 'playlist' in local_playlist and 'version' in local_playlist: - Logger.info("python_functions: Finished load_local_playlist function successfully.") - return local_playlist # Return the full playlist data - else: - Logger.error("python_functions: Invalid local playlist structure.") - return {'playlist': [], 'version': 0} - except json.JSONDecodeError as e: - Logger.error(f"python_functions: Failed to parse local playlist file. Error: {e}") - return {'playlist': [], 'version': 0} - else: - Logger.warning("python_functions: Local playlist file not found.") - return {'playlist': [], 'version': 0} - Logger.info("python_functions: Finished load_local_playlist function.") - -def save_local_playlist(playlist): - """Save the updated playlist locally.""" - Logger.info("python_functions: Starting save_local_playlist function.") - Logger.debug(f"python_functions: Playlist to save: {playlist}") - if not playlist or 'playlist' not in playlist: - Logger.error("python_functions: Invalid playlist data. Cannot save local playlist.") - return - - try: - with open(LOCAL_PLAYLIST_FILE, 'w') as local_file: - json.dump(playlist, local_file, indent=4) # Ensure proper formatting - Logger.info("python_functions: Updated local playlist with server data.") - except IOError as e: - Logger.error(f"python_functions: Failed to save local playlist: {e}") - Logger.info("python_functions: Finished save_local_playlist function.") - -def fetch_server_playlist(): - """Fetch the updated playlist from the server.""" - try: - # Use port only if server is an IP address - ip_pattern = r'^\d+\.\d+\.\d+\.\d+$' - if re.match(ip_pattern, server): - server_url = f'http://{server}:{port}/api/playlists' # fixed endpoint - else: - server_url = f'http://{server}/api/playlists' # fixed endpoint - params = { - 'hostname': host, - 'quickconnect_code': quick - } - Logger.info(f"Fetching playlist from URL: {server_url} with params: {params}") - response = requests.get(server_url, params=params) - - if response.status_code == 200: - response_data = response.json() - Logger.info(f"Server response: {response_data}") - playlist = response_data.get('playlist', []) - version = response_data.get('playlist_version', None) - hashed_quickconnect = response_data.get('hashed_quickconnect', None) - - if version is not None and hashed_quickconnect is not None: - if bcrypt.checkpw(quick.encode('utf-8'), hashed_quickconnect.encode('utf-8')): - Logger.info("Fetched updated playlist from server.") - - # Update the playlist version in app_config.txt - update_config_playlist_version(version) - - return {'playlist': playlist, 'version': version} - else: - Logger.error("Quickconnect code validation failed.") - else: - Logger.error("Failed to retrieve playlist or hashed quickconnect from the response.") - else: - Logger.error(f"Failed to fetch playlist. Status Code: {response.status_code}") - except requests.exceptions.RequestException as e: - Logger.error(f"Failed to fetch playlist: {e}") - - return {'playlist': [], 'version': 0} - -def download_media_files(playlist, version): - """Download media files from the server and update the local playlist.""" - Logger.info("python_functions: Starting media file download...") - base_dir = os.path.join(os.path.dirname(__file__), 'static', 'resurse') # Path to the local folder - if not os.path.exists(base_dir): - os.makedirs(base_dir) - Logger.info(f"python_functions: Created directory {base_dir} for media files.") - - updated_playlist = [] # List to store updated media entries - - for media in playlist: - file_name = media.get('file_name', '') - file_url = media.get('url', '') - duration = media.get('duration', 10) # Default duration if not provided - local_path = os.path.join(base_dir, file_name) # Local file path - - Logger.debug(f"python_functions: Preparing to download {file_name} from {file_url}...") - - if os.path.exists(local_path): - Logger.info(f"python_functions: File {file_name} already exists. Skipping download.") - else: - try: - response = requests.get(file_url, timeout=10) - if response.status_code == 200: - with open(local_path, 'wb') as file: - file.write(response.content) - Logger.info(f"python_functions: Successfully downloaded {file_name} to {local_path}") - else: - Logger.error(f"python_functions: Failed to download {file_name}. Status Code: {response.status_code}") - continue - except requests.exceptions.RequestException as e: - Logger.error(f"python_functions: Error downloading {file_name}: {e}") - continue - - # Update the playlist entry to point to the local file path - updated_media = { - 'file_name': file_name, - 'url': f"static/resurse/{file_name}", # Update URL to local path - 'duration': duration - } - Logger.debug(f"python_functions: Updated media entry: {updated_media}") - updated_playlist.append(updated_media) - - # Save the updated playlist locally - save_local_playlist({'playlist': updated_playlist, 'version': version}) - Logger.info("python_functions: Finished media file download and updated local playlist.") - -def clean_unused_files(playlist): - """Remove unused media files from the resource folder.""" - Logger.info("python_functions: Cleaning unused media files...") - base_dir = os.path.join(os.path.dirname(__file__), 'static', 'resurse') - if not os.path.exists(base_dir): - Logger.debug(f"python_functions: Directory {base_dir} does not exist. No files to clean.") - return - - playlist_files = {media.get('file_name', '') for media in playlist} - all_files = set(os.listdir(base_dir)) - unused_files = all_files - playlist_files - - for file_name in unused_files: - file_path = os.path.join(base_dir, file_name) - try: - os.remove(file_path) - Logger.info(f"python_functions: Deleted unused file: {file_path}") - except OSError as e: - Logger.error(f"python_functions: Failed to delete {file_path}: {e}") - -def update_config_playlist_version(version): - """Update the playlist version in app_config.txt.""" - if not os.path.exists(CONFIG_FILE): - Logger.error(f"python_functions: Configuration file {CONFIG_FILE} not found.") - return - - try: - with open(CONFIG_FILE, 'r') as file: - config_data = json.load(file) - - config_data['playlist_version'] = version # Add or update the playlist version - - with open(CONFIG_FILE, 'w') as file: - json.dump(config_data, file, indent=4) - Logger.info(f"python_functions: Updated playlist version in app_config.txt to {version}.") - except (IOError, json.JSONDecodeError) as e: - Logger.error(f"python_functions: Failed to update playlist version in app_config.txt. Error: {e}") - -def check_for_new_server_playlist(): - """Check if the server has a new playlist version compared to app_config.txt.""" - config = load_config() - local_version = config.get('playlist_version', 0) - server_data = fetch_server_playlist() - server_version = server_data.get('version', 0) - if server_version > local_version: - print(f"A new playlist is available on the server: version {server_version} (local: {local_version})") - Logger.info(f"A new playlist is available on the server: version {server_version} (local: {local_version})") - return True - else: - print(f"No new playlist on the server. Local version: {local_version}, Server version: {server_version}") - Logger.info(f"No new playlist on the server. Local version: {local_version}, Server version: {server_version}") - return False \ No newline at end of file diff --git a/tkinter_app/src/settings_screen.py b/tkinter_app/src/settings_screen.py deleted file mode 100644 index 477878a..0000000 --- a/tkinter_app/src/settings_screen.py +++ /dev/null @@ -1,1171 +0,0 @@ -# settings_screen.py -""" -SettingsWindow class and related settings UI logic for the Tkinter Simple Media Player. -""" - -import tkinter as tk -from tkinter import ttk, messagebox -import os -import json -import requests -from logging_config import Logger -from python_functions import ( - load_local_playlist, download_media_files, clean_unused_files, - save_local_playlist, update_config_playlist_version, fetch_server_playlist, - load_config -) -from virtual_keyboard import VirtualKeyboard, TouchOptimizedEntry, TouchOptimizedButton - -class SettingsWindow: - def __init__(self, parent, app): - self.parent = parent - self.app = app - self.window = tk.Toplevel(parent) - - # Initialize virtual keyboard for touch displays - self.virtual_keyboard = VirtualKeyboard(self.window, dark_theme=True) - - self.setup_window() - self.create_widgets() - self.load_config() - - # Setup touch optimization - self.setup_touch_optimization() - - def setup_window(self): - """Setup settings window with enhanced dark theme""" - self.window.title("đŸŽŦ Signage Player Settings") - self.window.geometry("900x700") - - # Enhanced dark theme colors - self.colors = { - 'bg_primary': '#1e2124', # Very dark background - 'bg_secondary': '#2f3136', # Slightly lighter background - 'bg_tertiary': '#36393f', # Card backgrounds - 'accent': '#7289da', # Discord-like blue accent - 'accent_hover': '#677bc4', # Darker accent for hover - 'success': '#43b581', # Green for success - 'warning': '#faa61a', # Orange for warnings - 'danger': '#f04747', # Red for errors - 'text_primary': '#ffffff', # White text - 'text_secondary': '#b9bbbe', # Gray text - 'text_muted': '#72767d', # Muted text - 'border': '#202225' # Border color - } - - self.window.configure(bg=self.colors['bg_primary']) - self.window.transient(self.parent) - self.window.grab_set() - - # Set window properties - self.window.resizable(True, True) - self.window.minsize(700, 500) - - # Set window icon if available - try: - # Try to use a simple emoji icon - self.window.iconname("đŸŽŦ") - except: - pass - - # Center the window on screen using helper method - self.center_window_on_screen(self.window, 900, 700) - - # Add subtle window border effect - self.window.configure(highlightbackground=self.colors['border'], highlightthickness=1) - - def create_widgets(self): - """Create settings widgets with enhanced dark theme styling""" - # Configure enhanced custom styles - style = ttk.Style() - style.theme_use('clam') - # Enhanced dark theme styles - style.configure('Dark.TNotebook', - background=self.colors['bg_secondary'], - borderwidth=0, - tabmargins=[2, 5, 2, 0]) - style.configure('Dark.TNotebook.Tab', - padding=[20, 12], - font=('Segoe UI', 11, 'bold'), - background=self.colors['bg_tertiary'], - foreground=self.colors['text_secondary'], - borderwidth=1, - focuscolor='none') - style.map('Dark.TNotebook.Tab', - background=[('selected', self.colors['accent']), - ('active', self.colors['accent_hover'])], - foreground=[('selected', self.colors['text_primary']), - ('active', self.colors['text_primary'])]) - style.configure('Dark.TFrame', background=self.colors['bg_secondary']) - style.configure('Dark.TLabel', - background=self.colors['bg_secondary'], - foreground=self.colors['text_primary'], - font=('Segoe UI', 10)) - style.configure('Dark.TEntry', - fieldbackground=self.colors['bg_tertiary'], - foreground=self.colors['text_primary'], - bordercolor=self.colors['border'], - lightcolor=self.colors['bg_tertiary'], - darkcolor=self.colors['bg_tertiary'], - font=('Segoe UI', 10), - insertcolor=self.colors['text_primary']) - - # Main container frame - main_frame = tk.Frame(self.window, bg=self.colors['bg_primary']) - main_frame.pack(fill=tk.BOTH, expand=True, padx=0, pady=0) - - # Header section with gradient-like effect - header_frame = tk.Frame(main_frame, bg=self.colors['bg_secondary'], height=80) - header_frame.pack(fill=tk.X, padx=0, pady=0) - header_frame.pack_propagate(False) - - # Title with enhanced styling - title_container = tk.Frame(header_frame, bg=self.colors['bg_secondary']) - title_container.pack(expand=True, fill=tk.BOTH) - - title_label = tk.Label(title_container, - text="đŸŽŦ Digital Signage Control Center", - font=('Segoe UI', 24, 'bold'), - fg=self.colors['text_primary'], - bg=self.colors['bg_secondary']) - title_label.pack(expand=True) - - subtitle_label = tk.Label(title_container, - text="Configure your digital signage display settings", - font=('Segoe UI', 11), - fg=self.colors['text_secondary'], - bg=self.colors['bg_secondary']) - subtitle_label.pack() - - # Content area - content_frame = tk.Frame(main_frame, bg=self.colors['bg_primary']) - content_frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=20) - - # Create enhanced notebook with dark theme - notebook = ttk.Notebook(content_frame, style='Dark.TNotebook') - notebook.pack(fill=tk.BOTH, expand=True, pady=(0, 20)) - - # Create tabs with enhanced styling - self.create_connection_tab_enhanced(notebook) - self.create_display_tab_enhanced(notebook) - self.create_advanced_tab_enhanced(notebook) - self.create_logs_tab_enhanced(notebook) - self.create_about_tab_enhanced(notebook) - - # Enhanced bottom button section - self.create_bottom_controls(content_frame) - - # Load initial data - self.load_logs() - - def create_connection_tab_enhanced(self, notebook): - """Create enhanced connection settings tab""" - tab_frame = tk.Frame(notebook, bg=self.colors['bg_secondary']) - notebook.add(tab_frame, text="🌐 Connection") - - # Create scrollable content - canvas = tk.Canvas(tab_frame, bg=self.colors['bg_secondary'], highlightthickness=0) - scrollbar = tk.Scrollbar(tab_frame, orient="vertical", command=canvas.yview, - bg=self.colors['bg_tertiary'], troughcolor=self.colors['bg_primary']) - scrollable_frame = tk.Frame(canvas, bg=self.colors['bg_secondary']) - - scrollable_frame.bind("", lambda e: canvas.configure(scrollregion=canvas.bbox("all"))) - canvas.create_window((0, 0), window=scrollable_frame, anchor="nw") - canvas.configure(yscrollcommand=scrollbar.set) - # Pack canvas and scrollbar so content is visible - canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) - scrollbar.pack(side=tk.RIGHT, fill=tk.Y) - - # --- Compact Server Connection Section (no card, all fields labeled, test button visible) --- - config = load_config() - server_val = config.get('server_ip', '') - port_val = config.get('port', '') - - connect_section = tk.Frame(scrollable_frame, bg=self.colors['bg_tertiary']) - connect_section.pack(fill=tk.X, pady=10, padx=10) - - # Server and Port row - server_port_row = tk.Frame(connect_section, bg=self.colors['bg_tertiary']) - server_port_row.pack(fill=tk.X, pady=6) - - if not hasattr(self, 'server_ip_var'): - self.server_ip_var = tk.StringVar(value=server_val) - server_label = tk.Label(server_port_row, text="Server:", font=('Segoe UI', 12, 'bold'), bg=self.colors['bg_tertiary'], fg=self.colors['text_primary'], width=10, anchor='w') - server_label.pack(side=tk.LEFT, padx=(0, 2)) - server_entry = TouchOptimizedEntry(server_port_row, virtual_keyboard=self.virtual_keyboard, textvariable=self.server_ip_var, width=28, font=('Segoe UI', 12), bg=self.colors['bg_primary'], fg=self.colors['text_primary'], insertbackground=self.colors['accent'], relief=tk.FLAT, bd=10) - server_entry.pack(side=tk.LEFT, padx=(0, 8), pady=5) - self.add_placeholder(server_entry, "e.g., digi-server.example.com") - - if not hasattr(self, 'port_var'): - self.port_var = tk.StringVar(value=port_val) - port_label = tk.Label(server_port_row, text="Port:", font=('Segoe UI', 12, 'bold'), bg=self.colors['bg_tertiary'], fg=self.colors['text_primary'], width=6, anchor='w') - port_label.pack(side=tk.LEFT, padx=(0, 2)) - port_entry = TouchOptimizedEntry(server_port_row, virtual_keyboard=self.virtual_keyboard, textvariable=self.port_var, width=8, font=('Segoe UI', 12), bg=self.colors['bg_primary'], fg=self.colors['text_primary'], insertbackground=self.colors['accent'], relief=tk.FLAT, bd=10) - port_entry.pack(side=tk.LEFT, pady=5) - self.add_placeholder(port_entry, "8880") - - # Logic: enable port only if server is IP (not ending with .com) - def update_port_state(*args): - server_val = self.server_ip_var.get().strip() - if server_val.endswith('.com') or ('.' in server_val and not server_val.replace('.', '').isdigit()): - port_entry.config(state='disabled') - else: - port_entry.config(state='normal') - self.server_ip_var.trace_add('write', update_port_state) - update_port_state() - - # Device Name row (compact) - device_row = tk.Frame(connect_section, bg=self.colors['bg_tertiary']) - device_row.pack(fill=tk.X, pady=6) - screen_name_val = config.get('screen_name', '') - if not hasattr(self, 'screen_name_var'): - self.screen_name_var = tk.StringVar(value=screen_name_val) - screen_label = tk.Label(device_row, text="Device Name:", font=('Segoe UI', 12, 'bold'), bg=self.colors['bg_tertiary'], fg=self.colors['text_primary'], width=14, anchor='w') - screen_label.pack(side=tk.LEFT, padx=(0, 2)) - screen_entry = TouchOptimizedEntry(device_row, virtual_keyboard=self.virtual_keyboard, textvariable=self.screen_name_var, width=22, font=('Segoe UI', 12), bg=self.colors['bg_primary'], fg=self.colors['text_primary'], insertbackground=self.colors['accent'], relief=tk.FLAT, bd=10, state='readonly') - screen_entry.pack(side=tk.LEFT, padx=(0, 8), pady=5) - self.add_placeholder(screen_entry, "e.g., lobby-display-01") - - # QuickConnect Key row (compact) - quickconnect_val = config.get('quickconnect_key', '') - if not hasattr(self, 'quickconnect_var'): - self.quickconnect_var = tk.StringVar(value=quickconnect_val) - quick_label = tk.Label(device_row, text="QuickConnect Key:", font=('Segoe UI', 12, 'bold'), bg=self.colors['bg_tertiary'], fg=self.colors['text_primary'], width=16, anchor='w') - quick_label.pack(side=tk.LEFT, padx=(0, 2)) - quick_entry = TouchOptimizedEntry(device_row, virtual_keyboard=self.virtual_keyboard, textvariable=self.quickconnect_var, width=18, font=('Segoe UI', 12), bg=self.colors['bg_primary'], fg=self.colors['text_primary'], insertbackground=self.colors['accent'], relief=tk.FLAT, bd=10, state='readonly') - quick_entry.pack(side=tk.LEFT, pady=5) - quick_entry.configure(show='*') - self.add_placeholder(quick_entry, "Enter your access key") - # Make device fields editable by default (no Edit button) - screen_entry.config(state='normal') - quick_entry.config(state='normal', show='') - - # --- Row for Test Connection and Save Settings buttons --- - btn_row = tk.Frame(connect_section, bg=self.colors['bg_tertiary']) - btn_row.pack(fill=tk.X, pady=(10, 0)) - - # Test Connection button - test_btn = self.create_action_button(btn_row, "🔗 Test Connection", self.test_connection, self.colors['accent']) - test_btn.pack(side=tk.LEFT, padx=(0, 10)) - - # Save Settings button with color logic - save_btn_color = self.colors['accent'] - save_btn = tk.Button( - btn_row, text="💾 Save Settings", font=('Segoe UI', 12, 'bold'), - bg=save_btn_color, fg=self.colors['text_primary'], - activebackground=save_btn_color, activeforeground=self.colors['text_primary'], - relief=tk.RAISED, bd=2, padx=16, pady=6, cursor='hand2', - ) - save_btn.pack(side=tk.LEFT) - - def set_save_btn_color(color): - save_btn.config(bg=color, activebackground=color) - - def save_settings_and_test(): - # Save current values to config - config['server_ip'] = self.server_ip_var.get().strip() - config['port'] = self.port_var.get().strip() - config['screen_name'] = self.screen_name_var.get().strip() - config['quickconnect_key'] = self.quickconnect_var.get().strip() - # Save to app_config.txt - try: - with open(APP_CONFIG_PATH, 'w') as f: - for k, v in config.items(): - f.write(f"{k}={v}\n") - except Exception as e: - set_save_btn_color('red') - return - # Test server availability - import requests - server = config['server_ip'] - port = config['port'] - url = f"http://{server}:{port}/api/playlist/version" - try: - resp = requests.get(url, timeout=3) - if resp.status_code == 200: - set_save_btn_color('green') - else: - set_save_btn_color('red') - except Exception: - set_save_btn_color('red') - - save_btn.config(command=save_settings_and_test) - - test_btn.pack(side=tk.LEFT, padx=5) - - canvas.pack(side="left", fill="both", expand=True, padx=20, pady=20) - scrollbar.pack(side="right", fill="y") - - def create_display_tab_enhanced(self, notebook): - """Create enhanced display settings tab""" - tab_frame = tk.Frame(notebook, bg=self.colors['bg_secondary']) - notebook.add(tab_frame, text="đŸ–ŧī¸ Display") - - main_container = tk.Frame(tab_frame, bg=self.colors['bg_secondary']) - main_container.pack(fill=tk.BOTH, expand=True, padx=20, pady=20) - - # Resolution settings card - resolution_card = self.create_settings_card(main_container, "đŸ–Ĩī¸ Screen Resolution", - "Configure display resolution settings") - - # Resolution input fields - resolution_inputs = tk.Frame(resolution_card, bg=self.colors['bg_tertiary']) - resolution_inputs.pack(fill=tk.X, pady=10) - - self.create_input_field(resolution_inputs, "Width (px):", "screen_w_var", - width=15, placeholder="1920") - self.create_input_field(resolution_inputs, "Height (px):", "screen_h_var", - width=15, placeholder="1080") - - # Preset buttons with enhanced styling - presets_frame = tk.Frame(resolution_card, bg=self.colors['bg_tertiary']) - presets_frame.pack(fill=tk.X, pady=15) - - tk.Label(presets_frame, text="Quick Presets:", - font=('Segoe UI', 11, 'bold'), - bg=self.colors['bg_tertiary'], - fg=self.colors['text_primary']).pack(anchor=tk.W, pady=(0, 10)) - - preset_buttons = tk.Frame(presets_frame, bg=self.colors['bg_tertiary']) - preset_buttons.pack(anchor=tk.W) - - presets = [("📱 HD", "1366", "768"), ("đŸ’ģ Full HD", "1920", "1080"), - ("đŸ–Ĩī¸ 4K", "3840", "2160"), ("đŸ“ē Classic", "1024", "768")] - - for preset_name, width, height in presets: - btn = self.create_preset_button(preset_buttons, preset_name, width, height) - btn.pack(side=tk.LEFT, padx=3, pady=2) - - # Scaling mode settings card - scaling_card = self.create_settings_card(main_container, "📐 Image/Video Scaling", - "Configure how images and videos are displayed on screen") - - # Scaling mode options - self.scaling_mode_var = tk.StringVar(value=self.app.scaling_mode if hasattr(self.app, 'scaling_mode') else 'fit') - - scaling_label = tk.Label(scaling_card, text="Scaling Mode:", - font=('Segoe UI', 12, 'bold'), - bg=self.colors['bg_tertiary'], - fg=self.colors['text_primary']) - scaling_label.pack(anchor=tk.W, pady=(0, 10)) - - scaling_options = tk.Frame(scaling_card, bg=self.colors['bg_tertiary']) - scaling_options.pack(fill=tk.X, pady=5) - - # Radio buttons for scaling modes - modes = [ - ("fit", "đŸ–ŧī¸ Fit", "Maintain aspect ratio, add black bars if needed"), - ("fill", "🔍 Fill", "Maintain aspect ratio, crop to fill entire screen"), - ("stretch", "â†”ī¸ Stretch", "Ignore aspect ratio, stretch to fill screen") - ] - - for mode_value, mode_label, mode_desc in modes: - mode_frame = tk.Frame(scaling_options, bg=self.colors['bg_tertiary']) - mode_frame.pack(fill=tk.X, pady=2) - - radio_btn = tk.Radiobutton(mode_frame, - text=mode_label, - variable=self.scaling_mode_var, - value=mode_value, - bg=self.colors['bg_tertiary'], - fg=self.colors['text_primary'], - font=('Segoe UI', 11, 'bold'), - selectcolor=self.colors['bg_primary'], - activebackground=self.colors['bg_tertiary'], - activeforeground=self.colors['text_primary'], - command=lambda: self.update_scaling_mode()) - radio_btn.pack(side=tk.LEFT, anchor=tk.W) - - desc_label = tk.Label(mode_frame, text=f" - {mode_desc}", - font=('Segoe UI', 9), - bg=self.colors['bg_tertiary'], - fg=self.colors['text_secondary']) - desc_label.pack(side=tk.LEFT, anchor=tk.W, padx=(10, 0)) - - # Keyboard shortcuts info - shortcuts_frame = tk.Frame(scaling_card, bg=self.colors['bg_tertiary']) - shortcuts_frame.pack(fill=tk.X, pady=(15, 0)) - - shortcuts_label = tk.Label(shortcuts_frame, - text="💡 Tip: Use keyboard shortcuts 1, 2, 3 to quickly change scaling mode during playback", - font=('Segoe UI', 9, 'italic'), - bg=self.colors['bg_tertiary'], - fg=self.colors['text_muted'], - wraplength=400) - shortcuts_label.pack(anchor=tk.W) - - def update_scaling_mode(self): - """Update the scaling mode in the main app""" - new_mode = self.scaling_mode_var.get() - if hasattr(self.app, 'set_scaling_mode'): - self.app.set_scaling_mode(new_mode) - else: - self.app.scaling_mode = new_mode - - def create_advanced_tab_enhanced(self, notebook): - """Create enhanced advanced settings tab""" - tab_frame = tk.Frame(notebook, bg=self.colors['bg_secondary']) - notebook.add(tab_frame, text="âš™ī¸ Advanced") - - main_container = tk.Frame(tab_frame, bg=self.colors['bg_secondary']) - main_container.pack(fill=tk.BOTH, expand=True, padx=20, pady=20) - - # Sync settings card - sync_card = self.create_settings_card(main_container, "🔄 Synchronization", - "Configure automatic content updates") - - self.create_input_field(sync_card, "Auto-refresh (minutes):", "refresh_interval_var", - width=15, placeholder="15") - - # Performance settings card - perf_card = self.create_settings_card(main_container, "⚡ Performance", - "Optimize playback performance") - - self.hardware_accel_var = tk.BooleanVar(value=True) - self.create_checkbox(perf_card, "Enable hardware acceleration", self.hardware_accel_var) - self.settings_window = SettingsWindow(self.root, self, dark_theme=True) - self.cache_media_var = tk.BooleanVar(value=True) - self.create_checkbox(perf_card, "Cache media files locally", self.cache_media_var) - - self.auto_retry_var = tk.BooleanVar(value=True) - self.create_checkbox(perf_card, "Auto-retry failed downloads", self.auto_retry_var) - - def create_logs_tab_enhanced(self, notebook): - """Create enhanced logs tab""" - tab_frame = tk.Frame(notebook, bg=self.colors['bg_secondary']) - notebook.add(tab_frame, text="📋 Logs") - - main_container = tk.Frame(tab_frame, bg=self.colors['bg_secondary']) - main_container.pack(fill=tk.BOTH, expand=True, padx=20, pady=20) - - # Log header - log_header = tk.Frame(main_container, bg=self.colors['bg_secondary']) - log_header.pack(fill=tk.X, pady=(0, 15)) - - tk.Label(log_header, text="📋 Application Logs", - font=('Segoe UI', 16, 'bold'), - bg=self.colors['bg_secondary'], - fg=self.colors['text_primary']).pack(side=tk.LEFT) - - refresh_btn = self.create_action_button(log_header, "🔄 Refresh Logs", - self.load_logs, self.colors['accent']) - refresh_btn.pack(side=tk.RIGHT) - - # Log display area - log_container = tk.Frame(main_container, bg=self.colors['bg_tertiary'], - relief=tk.FLAT, bd=2) - log_container.pack(fill=tk.BOTH, expand=True) - - self.log_text = tk.Text(log_container, - font=('Consolas', 9), - bg=self.colors['bg_primary'], - fg=self.colors['text_primary'], - insertbackground=self.colors['accent'], - selectbackground=self.colors['accent'], - selectforeground=self.colors['text_primary'], - relief=tk.FLAT, - bd=10, - wrap=tk.WORD) - - log_scrollbar = tk.Scrollbar(log_container, command=self.log_text.yview, - bg=self.colors['bg_tertiary']) - self.log_text.configure(yscrollcommand=log_scrollbar.set) - - self.log_text.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) - log_scrollbar.pack(side=tk.RIGHT, fill=tk.Y) - - def create_about_tab_enhanced(self, notebook): - """Create enhanced about tab""" - tab_frame = tk.Frame(notebook, bg=self.colors['bg_secondary']) - notebook.add(tab_frame, text="â„šī¸ About") - - main_container = tk.Frame(tab_frame, bg=self.colors['bg_secondary']) - main_container.pack(fill=tk.BOTH, expand=True, padx=40, pady=40) - - # App branding section - branding_frame = tk.Frame(main_container, bg=self.colors['bg_secondary']) - branding_frame.pack(fill=tk.X, pady=(0, 40)) - - # Large app icon - icon_label = tk.Label(branding_frame, text="đŸŽŦ", - font=('Segoe UI Emoji', 64), - bg=self.colors['bg_secondary'], - fg=self.colors['accent']) - icon_label.pack() - - # App title and version - title_label = tk.Label(branding_frame, text="Digital Signage Player", - font=('Segoe UI', 24, 'bold'), - bg=self.colors['bg_secondary'], - fg=self.colors['text_primary']) - title_label.pack(pady=(10, 5)) - - version_label = tk.Label(branding_frame, text="Version 2.1 - Enhanced Dark Edition", - font=('Segoe UI', 12), - bg=self.colors['bg_secondary'], - fg=self.colors['text_secondary']) - version_label.pack() - - # Feature highlights - features_text = ( - "🚀 Features:\n" - "â€ĸ Modern dark theme interface\n" - "â€ĸ High-resolution media display\n" - "â€ĸ Remote playlist management\n" - "â€ĸ Real-time content synchronization\n" - "â€ĸ Hardware acceleration support\n" - "â€ĸ Cross-platform compatibility\n" - "â€ĸ Advanced logging and diagnostics\n\n" - "âŒ¨ī¸ Keyboard Shortcuts:\n" - "F11 - Toggle fullscreen mode\n" - "Space - Play/Pause media\n" - "← → - Navigate between media\n" - "1 - Set scaling mode to Fit (maintain aspect ratio with black bars)\n" - "2 - Set scaling mode to Fill (maintain aspect ratio, crop to fill screen)\n" - "3 - Set scaling mode to Stretch (ignore aspect ratio, stretch to fill)\n" - "Ctrl+S - Open settings panel\n" - "Escape - Exit application (password protected)\n\n" - "Built with â¤ī¸ using Python & Tkinter" - ) - - features_label = tk.Label(main_container, text=features_text, - justify=tk.LEFT, - font=('Segoe UI', 11), - bg=self.colors['bg_secondary'], - fg=self.colors['text_primary'], - wraplength=600) - features_label.pack(anchor=tk.W) - - def create_bottom_controls(self, parent): - """Create enhanced bottom control buttons""" - controls_frame = tk.Frame(parent, bg=self.colors['bg_secondary'], - relief=tk.FLAT, bd=1) - controls_frame.pack(fill=tk.X, pady=(10, 0)) - - # Left side buttons - left_buttons = tk.Frame(controls_frame, bg=self.colors['bg_secondary']) - left_buttons.pack(side=tk.LEFT, padx=10, pady=15) - - save_btn = self.create_action_button(left_buttons, "💾 Save Configuration", - self.save_config, self.colors['success']) - save_btn.pack(side=tk.LEFT, padx=5) - - test_btn = self.create_action_button(left_buttons, "🔗 Test Connection", - self.test_connection, self.colors['accent']) - test_btn.pack(side=tk.LEFT, padx=5) - - refresh_btn = self.create_action_button(left_buttons, "🔄 Refresh Playlist", - self.force_playlist_refresh, self.colors['warning']) - refresh_btn.pack(side=tk.LEFT, padx=5) - - # Right side buttons - right_buttons = tk.Frame(controls_frame, bg=self.colors['bg_secondary']) - right_buttons.pack(side=tk.RIGHT, padx=10, pady=15) - - cancel_btn = self.create_action_button(right_buttons, "❌ Cancel", - self.window.destroy, self.colors['danger']) - cancel_btn.pack(side=tk.RIGHT, padx=5) - - # Status display - self.status_frame = tk.Frame(parent, bg=self.colors['bg_primary']) - self.status_frame.pack(fill=tk.X, pady=(10, 0)) - - self.connection_status = tk.Label(self.status_frame, - text="Ready to configure your digital signage settings", - bg=self.colors['bg_primary'], - fg=self.colors['text_secondary'], - font=('Segoe UI', 9)) - self.connection_status.pack(anchor=tk.W, padx=10, pady=5) - - def create_settings_card(self, parent, title, description): - """Create a settings card with enhanced styling""" - card_frame = tk.Frame(parent, bg=self.colors['bg_tertiary'], - relief=tk.FLAT, bd=2) - card_frame.pack(fill=tk.X, pady=(0, 20), padx=5) - - # Card header - header_frame = tk.Frame(card_frame, bg=self.colors['bg_tertiary']) - header_frame.pack(fill=tk.X, padx=20, pady=(15, 5)) - - title_label = tk.Label(header_frame, text=title, - font=('Segoe UI', 14, 'bold'), - bg=self.colors['bg_tertiary'], - fg=self.colors['text_primary']) - title_label.pack(anchor=tk.W) - - desc_label = tk.Label(header_frame, text=description, - font=('Segoe UI', 9), - bg=self.colors['bg_tertiary'], - fg=self.colors['text_secondary']) - desc_label.pack(anchor=tk.W, pady=(2, 0)) - - # Card content area - content_frame = tk.Frame(card_frame, bg=self.colors['bg_tertiary']) - content_frame.pack(fill=tk.X, padx=20, pady=(10, 15)) - - return content_frame - - def create_input_field(self, parent, label_text, var_name, width=35, placeholder="", password=False): - """Create a touch-optimized input field with virtual keyboard support""" - field_frame = tk.Frame(parent, bg=self.colors['bg_tertiary']) - field_frame.pack(fill=tk.X, pady=12) # Increased padding for touch - - label = tk.Label(field_frame, text=label_text, - font=('Segoe UI', 12, 'bold'), # Larger font for touch - bg=self.colors['bg_tertiary'], - fg=self.colors['text_primary'], - width=18, anchor='w') - label.pack(side=tk.LEFT) - - # Create StringVar if it doesn't exist - if not hasattr(self, var_name): - setattr(self, var_name, tk.StringVar()) - - var = getattr(self, var_name) - - # Use touch-optimized entry with virtual keyboard - entry = TouchOptimizedEntry(field_frame, - virtual_keyboard=self.virtual_keyboard, - textvariable=var, - width=width, - font=('Segoe UI', 12), # Larger font - bg=self.colors['bg_primary'], - fg=self.colors['text_primary'], - insertbackground=self.colors['accent'], - relief=tk.FLAT, - bd=10) # Larger border for easier touch - - if password: - entry.configure(show='*') - - entry.pack(side=tk.LEFT, padx=(15, 0), pady=5) - - # Add placeholder text effect - if placeholder: - self.add_placeholder(entry, placeholder) - - return entry - - def create_checkbox(self, parent, text, variable): - """Create a checkbox with dark theme styling""" - cb_frame = tk.Frame(parent, bg=self.colors['bg_tertiary']) - cb_frame.pack(fill=tk.X, pady=5) - - checkbox = tk.Checkbutton(cb_frame, text=text, variable=variable, - bg=self.colors['bg_tertiary'], - fg=self.colors['text_primary'], - font=('Segoe UI', 10), - selectcolor=self.colors['bg_primary'], - activebackground=self.colors['bg_tertiary'], - activeforeground=self.colors['text_primary']) - checkbox.pack(anchor=tk.W, padx=5) - - def create_action_button(self, parent, text, command, color): - """Create a touch-optimized action button with enhanced styling""" - button = TouchOptimizedButton(parent, - text=text, - command=command, - bg=color, - fg=self.colors['text_primary'], - font=('Segoe UI', 12, 'bold'), # Larger font - relief=tk.FLAT, - padx=25, # Larger padding for touch - pady=15, # Larger padding for touch - cursor='hand2', - bd=3) - - # Add enhanced hover effects for touch feedback - def on_enter(e): - button.configure(bg=self.lighten_color(color), relief=tk.RAISED) - - def on_leave(e): - button.configure(bg=color, relief=tk.FLAT) - - def on_press(e): - button.configure(relief=tk.SUNKEN) - - def on_release(e): - button.configure(relief=tk.FLAT) - - button.bind("", on_enter) - button.bind("", on_leave) - button.bind("", on_press) - button.bind("", on_release) - - return button - - def create_preset_button(self, parent, text, width, height): - """Create a touch-optimized preset resolution button""" - button = TouchOptimizedButton(parent, - text=text, - command=lambda: self.set_resolution_preset(width, height), - bg=self.colors['bg_primary'], - fg=self.colors['text_primary'], - font=('Segoe UI', 10, 'bold'), - relief=tk.FLAT, - padx=20, # Larger for touch - pady=10, # Larger for touch - cursor='hand2') - - def on_enter(e): - button.configure(bg=self.colors['accent'], relief=tk.RAISED) - - def on_leave(e): - button.configure(bg=self.colors['bg_primary'], relief=tk.FLAT) - - def on_press(e): - button.configure(relief=tk.SUNKEN) - - def on_release(e): - button.configure(relief=tk.FLAT) - - button.bind("", on_enter) - button.bind("", on_leave) - button.bind("", on_press) - button.bind("", on_release) - - return button - - def add_placeholder(self, entry, placeholder_text): - """Add placeholder text to entry widget""" - entry.insert(0, placeholder_text) - entry.configure(fg=self.colors['text_muted']) - - def on_focus_in(event): - if entry.get() == placeholder_text: - entry.delete(0, tk.END) - entry.configure(fg=self.colors['text_primary']) - - def on_focus_out(event): - if not entry.get(): - entry.insert(0, placeholder_text) - entry.configure(fg=self.colors['text_muted']) - - entry.bind('', on_focus_in) - entry.bind('', on_focus_out) - - def lighten_color(self, color): - """Lighten a hex color for hover effects""" - color = color.lstrip('#') - rgb = tuple(int(color[i:i+2], 16) for i in (0, 2, 4)) - lighter_rgb = tuple(min(255, int(c * 1.2)) for c in rgb) - return f"#{lighter_rgb[0]:02x}{lighter_rgb[1]:02x}{lighter_rgb[2]:02x}" - - def center_window_on_screen(self, window, width, height): - """Center a window on screen regardless of screen size""" - window.update_idletasks() # Ensure geometry is calculated - screen_width = window.winfo_screenwidth() - screen_height = window.winfo_screenheight() - - # Calculate center position - center_x = int((screen_width - width) / 2) - center_y = int((screen_height - height) / 2) - - # Ensure the window doesn't go off-screen on smaller displays - center_x = max(0, min(center_x, screen_width - width)) - center_y = max(0, min(center_y, screen_height - height)) - - window.geometry(f"{width}x{height}+{center_x}+{center_y}") - - # Bring to front and focus - window.lift() - window.focus_force() - - return center_x, center_y - - def setup_touch_optimization(self): - """Setup touch-friendly optimizations""" - # Hide virtual keyboard when clicking outside input fields - def hide_keyboard_on_click(event): - # Check if click is not on an entry widget - if not isinstance(event.widget, (tk.Entry, TouchOptimizedEntry)): - self.virtual_keyboard.hide_keyboard() - - self.window.bind("", hide_keyboard_on_click, "+") - - # Make window touch-friendly by increasing minimum size - self.window.minsize(800, 600) - - # Override window close to hide keyboard first - original_destroy = self.window.destroy - def enhanced_destroy(): - self.virtual_keyboard.hide_keyboard() - original_destroy() - - self.window.destroy = enhanced_destroy - self.window.protocol("WM_DELETE_WINDOW", enhanced_destroy) - - def set_resolution_preset(self, width, height): - """Set resolution to preset values with visual feedback""" - self.screen_w_var.set(width) - self.screen_h_var.set(height) - self.connection_status.configure( - text=f"✅ Resolution preset applied: {width}x{height}", - fg=self.colors['success'] - ) - - # Reset status color after 3 seconds - self.window.after(3000, lambda: self.connection_status.configure( - fg=self.colors['text_secondary'] - )) - - def load_config(self): - """Load current configuration with enhanced feedback""" - try: - Logger.info("Loading configuration in enhanced settings window") - config = load_config() - Logger.info(f"Config loaded: {config}") - - # Set values for connection settings - if hasattr(self, 'screen_name_var'): - self.screen_name_var.set(config.get('screen_name', '')) - if hasattr(self, 'server_ip_var'): - self.server_ip_var.set(config.get('server_ip', '')) - if hasattr(self, 'port_var'): - self.port_var.set(config.get('port', '8880')) - if hasattr(self, 'quickconnect_var'): - self.quickconnect_var.set(config.get('quickconnect_key', '')) - - # Set values for display settings - if hasattr(self, 'screen_w_var'): - self.screen_w_var.set(config.get('screen_w', '1920')) - if hasattr(self, 'screen_h_var'): - self.screen_h_var.set(config.get('screen_h', '1080')) - if hasattr(self, 'scaling_mode_var'): - self.scaling_mode_var.set(config.get('scaling_mode', 'fit')) - - # Set values for advanced settings - if hasattr(self, 'refresh_interval_var'): - self.refresh_interval_var.set(config.get('refresh_interval', '15')) - if hasattr(self, 'hardware_accel_var'): - self.hardware_accel_var.set(config.get('hardware_acceleration', True)) - if hasattr(self, 'cache_media_var'): - self.cache_media_var.set(config.get('cache_media', True)) - if hasattr(self, 'auto_retry_var'): - self.auto_retry_var.set(config.get('auto_retry', True)) - - # Update status with success message - if hasattr(self, 'connection_status'): - self.connection_status.configure( - text="✅ Configuration loaded successfully", - fg=self.colors['success'] - ) - # Reset status color after 3 seconds - self.window.after(3000, lambda: self.connection_status.configure( - fg=self.colors['text_secondary'] - )) - - Logger.info("Configuration values loaded successfully in enhanced settings") - - except Exception as e: - Logger.error(f"Failed to load config in enhanced settings: {e}") - - # Set default values if loading fails - if hasattr(self, 'screen_name_var'): - self.screen_name_var.set('') - if hasattr(self, 'server_ip_var'): - self.server_ip_var.set('') - if hasattr(self, 'port_var'): - self.port_var.set('8880') - if hasattr(self, 'quickconnect_var'): - self.quickconnect_var.set('') - if hasattr(self, 'screen_w_var'): - self.screen_w_var.set('1920') - if hasattr(self, 'screen_h_var'): - self.screen_h_var.set('1080') - - # Set advanced defaults - if hasattr(self, 'refresh_interval_var'): - self.refresh_interval_var.set('15') - if hasattr(self, 'hardware_accel_var'): - self.hardware_accel_var.set(True) - if hasattr(self, 'cache_media_var'): - self.cache_media_var.set(True) - if hasattr(self, 'auto_retry_var'): - self.auto_retry_var.set(True) - - # Show error message with enhanced styling - if hasattr(self, 'connection_status'): - self.connection_status.configure( - text=f"âš ī¸ Warning: Could not load existing config: {str(e)[:50]}...", - fg=self.colors['warning'] - ) - - def save_config(self): - """Save configuration with enhanced feedback""" - try: - # Load existing config or create new one - try: - config = load_config() - except: - config = {} - - # Update with new values from the enhanced interface - if hasattr(self, 'screen_name_var'): - config['screen_name'] = self.screen_name_var.get() - if hasattr(self, 'server_ip_var'): - config['server_ip'] = self.server_ip_var.get() - if hasattr(self, 'port_var'): - config['port'] = self.port_var.get() - if hasattr(self, 'quickconnect_var'): - config['quickconnect_key'] = self.quickconnect_var.get() - if hasattr(self, 'screen_w_var'): - config['screen_w'] = self.screen_w_var.get() - if hasattr(self, 'screen_h_var'): - config['screen_h'] = self.screen_h_var.get() - - # Save advanced settings if they exist - if hasattr(self, 'refresh_interval_var'): - config['refresh_interval'] = self.refresh_interval_var.get() - if hasattr(self, 'hardware_accel_var'): - config['hardware_acceleration'] = self.hardware_accel_var.get() - if hasattr(self, 'cache_media_var'): - config['cache_media'] = self.cache_media_var.get() - if hasattr(self, 'auto_retry_var'): - config['auto_retry'] = self.auto_retry_var.get() - - # Save display settings - if hasattr(self, 'scaling_mode_var'): - config['scaling_mode'] = self.scaling_mode_var.get() - # Also update the main app's scaling mode - if hasattr(self.app, 'scaling_mode'): - self.app.scaling_mode = self.scaling_mode_var.get() - - # Ensure directory exists - config_dir = os.path.dirname(CONFIG_FILE) - os.makedirs(config_dir, exist_ok=True) - - with open(CONFIG_FILE, 'w') as f: - json.dump(config, f, indent=4) - - Logger.info(f"Enhanced configuration saved to {CONFIG_FILE}") - - # Show enhanced success message - self.show_enhanced_success_message("Configuration saved successfully!") - - # Ask if user wants to refresh playlist now - if messagebox.askyesno("Refresh Playlist", - "Configuration saved! Would you like to refresh the playlist from server now?", - icon='question'): - self.force_playlist_refresh() - - self.window.destroy() - - except Exception as e: - Logger.error(f"Failed to save enhanced configuration: {e}") - self.show_enhanced_error_message(f"Failed to save configuration: {e}") - - def show_enhanced_success_message(self, message): - """Show an enhanced success message with dark theme""" - success_window = tk.Toplevel(self.window) - success_window.title("Success") - success_window.geometry("400x150") - success_window.configure(bg=self.colors['bg_primary']) - success_window.transient(self.window) - success_window.grab_set() - success_window.resizable(False, False) - - # Center the window using helper method - self.center_window_on_screen(success_window, 400, 150) - - # Main frame - main_frame = tk.Frame(success_window, bg=self.colors['bg_primary'], padx=30, pady=20) - main_frame.pack(fill=tk.BOTH, expand=True) - - # Success icon - icon_label = tk.Label(main_frame, text="✅", font=('Segoe UI Emoji', 32), - fg=self.colors['success'], bg=self.colors['bg_primary']) - icon_label.pack(pady=(0, 10)) - - # Success message - msg_label = tk.Label(main_frame, text=message, font=('Segoe UI', 12, 'bold'), - fg=self.colors['text_primary'], bg=self.colors['bg_primary'], - wraplength=340, justify=tk.CENTER) - msg_label.pack(pady=(0, 20)) - - # OK button - ok_btn = self.create_action_button(main_frame, "OK", success_window.destroy, - self.colors['success']) - ok_btn.pack() - - # Auto-close after 3 seconds - success_window.after(3000, success_window.destroy) - - def show_enhanced_error_message(self, message): - """Show an enhanced error message with dark theme""" - error_window = tk.Toplevel(self.window) - error_window.title("Error") - error_window.geometry("400x150") - error_window.configure(bg=self.colors['bg_primary']) - error_window.transient(self.window) - error_window.grab_set() - error_window.resizable(False, False) - - # Center the window using helper method - self.center_window_on_screen(error_window, 400, 150) - - # Main frame - main_frame = tk.Frame(error_window, bg=self.colors['bg_primary'], padx=30, pady=20) - main_frame.pack(fill=tk.BOTH, expand=True) - - # Error icon - icon_label = tk.Label(main_frame, text="❌", font=('Segoe UI Emoji', 32), - fg=self.colors['danger'], bg=self.colors['bg_primary']) - icon_label.pack(pady=(0, 10)) - - # Error message - msg_label = tk.Label(main_frame, text=message, font=('Segoe UI', 11), - fg=self.colors['text_primary'], bg=self.colors['bg_primary'], - wraplength=340, justify=tk.CENTER) - msg_label.pack(pady=(0, 20)) - - # OK button - ok_btn = self.create_action_button(main_frame, "OK", error_window.destroy, - self.colors['danger']) - ok_btn.pack() - - def show_success_message(self, message): - """Show a modern success message""" - success_window = tk.Toplevel(self.window) - success_window.title("Success") - success_window.geometry("300x120") - success_window.configure(bg='#2d5a2d') - success_window.transient(self.window) - success_window.grab_set() - - # Center the window using helper method - self.center_window_on_screen(success_window, 300, 120) - - # Success icon and message - icon_label = tk.Label(success_window, text="✓", font=('Arial', 24, 'bold'), - fg='white', bg='#2d5a2d') - icon_label.pack(pady=10) - - msg_label = tk.Label(success_window, text=message, font=('Arial', 10), - fg='white', bg='#2d5a2d', wraplength=250) - msg_label.pack(pady=5) - - ok_btn = tk.Button(success_window, text="OK", command=success_window.destroy, - bg='#4d7d4d', fg='white', font=('Arial', 10, 'bold'), - relief=tk.FLAT, padx=20, pady=5) - ok_btn.pack(pady=10) - - def force_playlist_refresh(self): - """Force refresh of playlist from server""" - try: - # Show connection message - self.connection_status.configure(text="Refreshing playlist from server...") - self.window.update() - - # Fetch server playlist - server_playlist_data = fetch_server_playlist() - server_playlist = server_playlist_data.get('playlist', []) - server_version = server_playlist_data.get('version', 0) - - if server_playlist: - # Clean old files - local_playlist_data = load_local_playlist() - clean_unused_files(local_playlist_data.get('playlist', [])) - - # Download new content - download_media_files(server_playlist, server_version) - update_config_playlist_version(server_version) - - # Let the app know to reload - self.app.playlist = load_local_playlist().get('playlist', []) - self.app.current_index = 0 # Reset to beginning - - self.connection_status.configure(text=f"Playlist refreshed! Downloaded {len(server_playlist)} media files.") - - # Force the app to play the current media - if self.app.playlist: - self.app.play_current_media() - else: - self.connection_status.configure(text="Server returned empty playlist. Check server connection settings.") - - except Exception as e: - self.connection_status.configure(text=f"Error refreshing playlist: {str(e)[:50]}...") - Logger.error(f"Failed to refresh playlist: {e}") - - def test_connection(self): - """Test server connection""" - try: - self.connection_status.configure(text="Testing connection...") - self.window.update() - - server_ip = self.server_ip_var.get() - port = self.port_var.get() - screen_name = self.screen_name_var.get() - quickconnect = self.quickconnect_var.get() - - if not all([server_ip, port, screen_name, quickconnect]): - self.connection_status.configure(text="Please fill all connection fields") - return - - url = f"http://{server_ip}:{port}/api/playlists" - params = { - 'hostname': screen_name, - 'quickconnect_code': quickconnect - } - - response = requests.get(url, params=params, timeout=10) - - if response.status_code == 200: - data = response.json() - version = data.get('playlist_version', 'Unknown') - num_items = len(data.get('playlist', [])) - self.connection_status.configure( - text=f"✓ Connected! Server playlist version: {version}, {num_items} media items available" - ) - else: - self.connection_status.configure( - text=f"✗ Connection failed (Status: {response.status_code})" - ) - - except Exception as e: - self.connection_status.configure(text=f"✗ Connection error: {str(e)[:50]}...") - - def load_logs(self): - """Load recent log entries""" - try: - # Update to use the resources directory - log_file = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'resources', 'log.txt') - - if os.path.exists(log_file): - with open(log_file, 'r') as f: - lines = f.readlines() - - # Show last 20 lines - recent_lines = lines[-20:] if len(lines) > 20 else lines - - self.log_text.delete(1.0, tk.END) - self.log_text.insert(tk.END, ''.join(recent_lines)) - self.log_text.see(tk.END) - else: - self.log_text.delete(1.0, tk.END) - self.log_text.insert(tk.END, "No log file found") - - except Exception as e: - self.log_text.delete(1.0, tk.END) - self.log_text.insert(tk.END, f"Error loading logs: {e}") - - def load_playlist_view(self): - """Load playlist items into treeview""" - try: - # Clear existing items - for item in self.playlist_view.get_children(): - self.playlist_view.delete(item) - except Exception as e: - Logger.error(f"Failed to load playlist view: {e}") - messagebox.showerror("Error", f"Failed to load playlist: {e}") - - def show_video_placeholder(self, filename, duration): - """Show placeholder for video files""" - self.image_label.config(image='') - self.status_label.config(text="") # Clear any status text for cleaner display - - # Schedule next media - self.auto_advance_timer = self.root.after( - int(duration * 1000), - self.next_media - ) diff --git a/tkinter_app/src/splash_screen.py b/tkinter_app/src/splash_screen.py deleted file mode 100644 index 92fcbc3..0000000 --- a/tkinter_app/src/splash_screen.py +++ /dev/null @@ -1,48 +0,0 @@ -import os -import subprocess -import time -import tkinter as tk -from logging_config import Logger - -class SplashScreen: - def __init__(self, root, video_path, duration=5): - self.root = root - self.video_path = video_path - self.duration = duration - - def show(self, on_finish=None): - Logger.info(f"[SplashScreen] Running splash as standalone VLC subprocess: {self.video_path}") - if os.path.exists(self.video_path): - try: - vlc_cmd = [ - 'cvlc', - '--fullscreen', - '--no-osd', - '--no-video-title-show', - '--play-and-exit', - '--quiet', - self.video_path - ] - Logger.info(f"[SplashScreen] Launching: {' '.join(vlc_cmd)}") - proc = subprocess.Popen(vlc_cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) - proc.wait() # Remove timeout for immediate transition - Logger.info("[SplashScreen] VLC splash finished.") - except Exception as e: - Logger.warning(f"[SplashScreen] VLC splash failed: {e}") - else: - Logger.warning(f"[SplashScreen] Splash video not found: {self.video_path}") - if on_finish: - self.root.after(0, on_finish) - -if __name__ == "__main__": - root = tk.Tk() - # Use the same logic as main.py to resolve the video path - base_dir = os.path.dirname(os.path.dirname(__file__)) - video_path = os.path.join(base_dir, 'resources', 'intro1.mp4') - Logger.info(f"[SplashScreen] Standalone test: video_path={video_path}") - def on_finish(): - Logger.info("[SplashScreen] Standalone test: Splash finished, exiting app.") - root.destroy() - splash = SplashScreen(root, video_path, duration=10) - splash.show(on_finish=on_finish) - root.mainloop() diff --git a/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg b/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg deleted file mode 100644 index ad8cba1..0000000 Binary files a/tkinter_app/src/static/resurse/1307306470-nature_wallpaper_hd_hd_nature_3-3828209637.jpg and /dev/null differ diff --git a/tkinter_app/src/static/resurse/Cindrel_1.jpg b/tkinter_app/src/static/resurse/Cindrel_1.jpg deleted file mode 100644 index 2579223..0000000 Binary files a/tkinter_app/src/static/resurse/Cindrel_1.jpg and /dev/null differ diff --git a/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 b/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 deleted file mode 100644 index ed139d6..0000000 Binary files a/tkinter_app/src/static/resurse/SampleVideo_1280x720_1mb.mp4 and /dev/null differ diff --git a/tkinter_app/src/static/resurse/trans_cindrel_4.jpg b/tkinter_app/src/static/resurse/trans_cindrel_4.jpg deleted file mode 100644 index 6897121..0000000 Binary files a/tkinter_app/src/static/resurse/trans_cindrel_4.jpg and /dev/null differ diff --git a/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg b/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg deleted file mode 100644 index d6613fb..0000000 Binary files a/tkinter_app/src/static/resurse/wp2782770-1846651530.jpg and /dev/null differ diff --git a/tkinter_app/src/virtual_keyboard.py b/tkinter_app/src/virtual_keyboard.py deleted file mode 100644 index 911c26b..0000000 --- a/tkinter_app/src/virtual_keyboard.py +++ /dev/null @@ -1,360 +0,0 @@ -#!/usr/bin/env python3 -""" -Virtual Keyboard Component for Touch Displays -Provides an on-screen keyboard for touch-friendly input -""" -import tkinter as tk -from tkinter import ttk - -class VirtualKeyboard: - def __init__(self, parent, target_entry=None, dark_theme=True): - self.parent = parent - self.target_entry = target_entry - self.dark_theme = dark_theme - self.keyboard_window = None - self.caps_lock = False - self.shift_pressed = False - - # Define color schemes - if dark_theme: - self.colors = { - 'bg_primary': '#1e2124', - 'bg_secondary': '#2f3136', - 'bg_tertiary': '#36393f', - 'accent': '#7289da', - 'accent_hover': '#677bc4', - 'text_primary': '#ffffff', - 'text_secondary': '#b9bbbe', - 'key_normal': '#4f545c', - 'key_hover': '#5865f2', - 'key_special': '#ed4245', - 'key_function': '#57f287' - } - else: - self.colors = { - 'bg_primary': '#ffffff', - 'bg_secondary': '#f8f9fa', - 'bg_tertiary': '#e9ecef', - 'accent': '#0d6efd', - 'accent_hover': '#0b5ed7', - 'text_primary': '#000000', - 'text_secondary': '#6c757d', - 'key_normal': '#dee2e6', - 'key_hover': '#0d6efd', - 'key_special': '#dc3545', - 'key_function': '#198754' - } - - def show_keyboard(self, entry_widget=None): - """Show the virtual keyboard""" - if entry_widget: - self.target_entry = entry_widget - - if self.keyboard_window and self.keyboard_window.winfo_exists(): - self.keyboard_window.lift() - return - - self.create_keyboard() - - def hide_keyboard(self): - """Hide the virtual keyboard""" - if self.keyboard_window and self.keyboard_window.winfo_exists(): - self.keyboard_window.destroy() - self.keyboard_window = None - - def create_keyboard(self): - """Create the virtual keyboard window""" - self.keyboard_window = tk.Toplevel(self.parent) - self.keyboard_window.title("Virtual Keyboard") - self.keyboard_window.configure(bg=self.colors['bg_primary']) - self.keyboard_window.resizable(False, False) - - # Make keyboard stay on top - self.keyboard_window.attributes('-topmost', True) - - # Position keyboard at bottom of screen - self.position_keyboard() - - # Create keyboard layout - self.create_keyboard_layout() - - # Bind events - self.keyboard_window.protocol("WM_DELETE_WINDOW", self.hide_keyboard) - - def position_keyboard(self): - """Position keyboard at bottom center of screen""" - self.keyboard_window.update_idletasks() - - # Get screen dimensions - screen_width = self.keyboard_window.winfo_screenwidth() - screen_height = self.keyboard_window.winfo_screenheight() - - # Keyboard dimensions - kb_width = 800 - kb_height = 300 - - # Position at bottom center - x = (screen_width - kb_width) // 2 - y = screen_height - kb_height - 50 # 50px from bottom - - self.keyboard_window.geometry(f"{kb_width}x{kb_height}+{x}+{y}") - - def create_keyboard_layout(self): - """Create the keyboard layout""" - main_frame = tk.Frame(self.keyboard_window, bg=self.colors['bg_primary'], padx=10, pady=10) - main_frame.pack(fill=tk.BOTH, expand=True) - - # Title bar - title_frame = tk.Frame(main_frame, bg=self.colors['bg_secondary'], height=40) - title_frame.pack(fill=tk.X, pady=(0, 10)) - title_frame.pack_propagate(False) - - title_label = tk.Label(title_frame, text="âŒ¨ī¸ Virtual Keyboard", - font=('Segoe UI', 12, 'bold'), - bg=self.colors['bg_secondary'], fg=self.colors['text_primary']) - title_label.pack(side=tk.LEFT, padx=10, pady=10) - - # Close button - close_btn = tk.Button(title_frame, text="✕", command=self.hide_keyboard, - bg=self.colors['key_special'], fg=self.colors['text_primary'], - font=('Segoe UI', 12, 'bold'), relief=tk.FLAT, width=3) - close_btn.pack(side=tk.RIGHT, padx=10, pady=5) - - # Keyboard rows - self.create_keyboard_rows(main_frame) - - def create_keyboard_rows(self, parent): - """Create keyboard rows""" - # Define keyboard layout - rows = [ - ['`', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', 'Backspace'], - ['Tab', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\\'], - ['Caps', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', "'", 'Enter'], - ['Shift', 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', 'Shift'], - ['Ctrl', 'Alt', 'Space', 'Alt', 'Ctrl'] - ] - - # Special keys with different sizes - special_keys = { - 'Backspace': 2, - 'Tab': 1.5, - 'Enter': 2, - 'Caps': 1.8, - 'Shift': 2.3, - 'Ctrl': 1.2, - 'Alt': 1.2, - 'Space': 6 - } - - for row_index, row in enumerate(rows): - row_frame = tk.Frame(parent, bg=self.colors['bg_primary']) - row_frame.pack(fill=tk.X, pady=2) - - for key in row: - width = special_keys.get(key, 1) - self.create_key_button(row_frame, key, width) - - def create_key_button(self, parent, key, width=1): - """Create a keyboard key button""" - # Determine key type and color - if key in ['Backspace', 'Tab', 'Enter', 'Caps', 'Shift', 'Ctrl', 'Alt']: - bg_color = self.colors['key_function'] - elif key == 'Space': - bg_color = self.colors['key_normal'] - else: - bg_color = self.colors['key_normal'] - - # Calculate button width - base_width = 4 - button_width = int(base_width * width) - - # Display text for special keys - display_text = { - 'Backspace': 'âŒĢ', - 'Tab': 'â‡Ĩ', - 'Enter': '⏎', - 'Caps': 'â‡Ē', - 'Shift': '⇧', - 'Ctrl': 'Ctrl', - 'Alt': 'Alt', - 'Space': '___' - }.get(key, key.upper() if self.caps_lock or self.shift_pressed else key) - - button = tk.Button(parent, text=display_text, - command=lambda k=key: self.key_pressed(k), - bg=bg_color, fg=self.colors['text_primary'], - font=('Segoe UI', 10, 'bold'), - relief=tk.FLAT, bd=1, - width=button_width, height=2) - - # Add hover effects - def on_enter(e, btn=button): - btn.configure(bg=self.colors['key_hover']) - - def on_leave(e, btn=button): - btn.configure(bg=bg_color) - - button.bind("", on_enter) - button.bind("", on_leave) - - button.pack(side=tk.LEFT, padx=1, pady=1) - - def key_pressed(self, key): - """Handle key press""" - if not self.target_entry: - return - - if key == 'Backspace': - current_pos = self.target_entry.index(tk.INSERT) - if current_pos > 0: - self.target_entry.delete(current_pos - 1) - - elif key == 'Tab': - self.target_entry.insert(tk.INSERT, '\t') - - elif key == 'Enter': - # Try to trigger any bound return event - self.target_entry.event_generate('') - - elif key == 'Caps': - self.caps_lock = not self.caps_lock - self.update_key_display() - - elif key == 'Shift': - self.shift_pressed = not self.shift_pressed - self.update_key_display() - - elif key == 'Space': - self.target_entry.insert(tk.INSERT, ' ') - - elif key in ['Ctrl', 'Alt']: - # These could be used for key combinations in the future - pass - - else: - # Regular character - char = key.upper() if self.caps_lock or self.shift_pressed else key - - # Handle shifted characters - if self.shift_pressed and not self.caps_lock: - shift_map = { - '1': '!', '2': '@', '3': '#', '4': '$', '5': '%', - '6': '^', '7': '&', '8': '*', '9': '(', '0': ')', - '-': '_', '=': '+', '[': '{', ']': '}', '\\': '|', - ';': ':', "'": '"', ',': '<', '.': '>', '/': '?', - '`': '~' - } - char = shift_map.get(key, char) - - self.target_entry.insert(tk.INSERT, char) - - # Reset shift after character input - if self.shift_pressed: - self.shift_pressed = False - self.update_key_display() - - def update_key_display(self): - """Update key display based on caps lock and shift state""" - # This would update the display of keys, but for simplicity - # we'll just recreate the keyboard when needed - pass - - -class TouchOptimizedEntry(tk.Entry): - """Entry widget optimized for touch displays with virtual keyboard""" - - def __init__(self, parent, virtual_keyboard=None, **kwargs): - # Make entry larger for touch - kwargs.setdefault('font', ('Segoe UI', 12)) - kwargs.setdefault('relief', tk.FLAT) - kwargs.setdefault('bd', 8) - - super().__init__(parent, **kwargs) - - self.virtual_keyboard = virtual_keyboard - - # Bind focus events to show/hide keyboard - self.bind('', self.on_focus_in) - self.bind('', self.on_click) - - def on_focus_in(self, event): - """Show virtual keyboard when entry gets focus""" - if self.virtual_keyboard: - self.virtual_keyboard.show_keyboard(self) - - def on_click(self, event): - """Show virtual keyboard when entry is clicked""" - if self.virtual_keyboard: - self.virtual_keyboard.show_keyboard(self) - - -class TouchOptimizedButton(tk.Button): - """Button widget optimized for touch displays""" - - def __init__(self, parent, **kwargs): - # Make buttons larger for touch - kwargs.setdefault('font', ('Segoe UI', 11, 'bold')) - kwargs.setdefault('relief', tk.FLAT) - kwargs.setdefault('padx', 20) - kwargs.setdefault('pady', 12) - kwargs.setdefault('cursor', 'hand2') - - super().__init__(parent, **kwargs) - - # Add touch feedback - self.bind('', self.on_touch_down) - self.bind('', self.on_touch_up) - - def on_touch_down(self, event): - """Visual feedback when button is touched""" - self.configure(relief=tk.SUNKEN) - - def on_touch_up(self, event): - """Reset visual feedback when touch is released""" - self.configure(relief=tk.FLAT) - - -# Test the virtual keyboard -if __name__ == "__main__": - def test_virtual_keyboard(): - root = tk.Tk() - root.title("Virtual Keyboard Test") - root.geometry("600x400") - root.configure(bg='#2f3136') - - # Create virtual keyboard instance - vk = VirtualKeyboard(root, dark_theme=True) - - # Test frame - test_frame = tk.Frame(root, bg='#2f3136', padx=20, pady=20) - test_frame.pack(fill=tk.BOTH, expand=True) - - # Title - tk.Label(test_frame, text="🎮 Touch Display Test", - font=('Segoe UI', 16, 'bold'), - bg='#2f3136', fg='white').pack(pady=20) - - # Test entries - tk.Label(test_frame, text="Click entries to show virtual keyboard:", - bg='#2f3136', fg='white', font=('Segoe UI', 12)).pack(pady=10) - - entry1 = TouchOptimizedEntry(test_frame, vk, width=30, bg='#36393f', - fg='white', insertbackground='white') - entry1.pack(pady=10) - - entry2 = TouchOptimizedEntry(test_frame, vk, width=30, bg='#36393f', - fg='white', insertbackground='white') - entry2.pack(pady=10) - - # Test buttons - TouchOptimizedButton(test_frame, text="Show Keyboard", - command=lambda: vk.show_keyboard(entry1), - bg='#7289da', fg='white').pack(pady=10) - - TouchOptimizedButton(test_frame, text="Hide Keyboard", - command=vk.hide_keyboard, - bg='#ed4245', fg='white').pack(pady=5) - - root.mainloop() - - test_virtual_keyboard() diff --git a/tkinter_app/src/vlc_test_standalone.py b/tkinter_app/src/vlc_test_standalone.py deleted file mode 100644 index d163284..0000000 --- a/tkinter_app/src/vlc_test_standalone.py +++ /dev/null @@ -1,30 +0,0 @@ -import vlc -import time -import os -from logging_config import Logger - -if __name__ == "__main__": - video_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'resources', 'intro1.mp4') - Logger.info(f"[VLC TEST] Attempting to play video: {video_path}") - if not os.path.exists(video_path): - Logger.error(f"[VLC TEST] File does not exist: {video_path}") - exit(1) - instance = vlc.Instance('--no-osd', '--no-video-title-show', '--quiet', '--fullscreen') - player = instance.media_player_new() - media = instance.media_new(video_path) - player.set_media(media) - player.play() - Logger.info("[VLC TEST] player.play() called. Waiting for video to finish...") - # Wait for video to finish (max 30 seconds) - start = time.time() - while True: - state = player.get_state() - if state in (vlc.State.Ended, vlc.State.Error): - Logger.info(f"[VLC TEST] Playback ended with state: {state}") - break - if time.time() - start > 30: - Logger.warning("[VLC TEST] Timeout waiting for video to finish.") - break - time.sleep(0.2) - player.stop() - Logger.info("[VLC TEST] Done.")