From df13e5ca8e07d7d78279babaa558399c993a8b8c Mon Sep 17 00:00:00 2001 From: ske087 Date: Thu, 27 Mar 2025 09:55:32 +0200 Subject: [PATCH] finish --- settings.json | 1 - src/Resurse/log.txt | 91 ++++++++++++++++++ .../python_functions.cpython-311.pyc | Bin 6963 -> 7960 bytes src/media_player.py | 32 +++++- src/python_functions.py | 55 ++++++----- src/settings.json | 1 - 6 files changed, 149 insertions(+), 31 deletions(-) delete mode 100644 settings.json create mode 100644 src/Resurse/log.txt delete mode 100644 src/settings.json diff --git a/settings.json b/settings.json deleted file mode 100644 index 585d118..0000000 --- a/settings.json +++ /dev/null @@ -1 +0,0 @@ -{"settings": {"quick_connect_code": "", "server_ip": ""}} \ No newline at end of file diff --git a/src/Resurse/log.txt b/src/Resurse/log.txt new file mode 100644 index 0000000..08d14f2 --- /dev/null +++ b/src/Resurse/log.txt @@ -0,0 +1,91 @@ +2025-03-27 08:17:12 - STARTED: car_modular.jpg +2025-03-27 08:17:27 - STOPPED: car_modular.jpg +2025-03-27 08:17:27 - STARTED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 08:17:27 - STOPPED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 08:17:27 - STARTED: harting_contactor.jpg +2025-03-27 08:17:47 - STOPPED: harting_contactor.jpg +2025-03-27 08:17:47 - STARTED: car_modular.jpg +2025-03-27 08:18:07 - STOPPED: car_modular.jpg +2025-03-27 08:18:07 - STARTED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 08:20:58 - STOPPED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 08:20:58 - STARTED: harting_contactor.jpg +2025-03-27 08:21:18 - STOPPED: harting_contactor.jpg +2025-03-27 08:21:18 - STARTED: car_modular.jpg +2025-03-27 08:21:38 - STOPPED: car_modular.jpg +2025-03-27 08:21:38 - STARTED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 08:22:09 - STARTED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 08:24:29 - STOPPED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 08:24:29 - STARTED: harting_contactor.jpg +2025-03-27 08:24:49 - STOPPED: harting_contactor.jpg +2025-03-27 08:24:49 - STARTED: car_modular.jpg +2025-03-27 08:24:58 - STOPPED: car_modular.jpg +2025-03-27 08:24:58 - STARTED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 08:25:09 - STOPPED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 08:25:09 - STARTED: harting_contactor.jpg +2025-03-27 09:18:55 - STARTED: car_modular.jpg +2025-03-27 09:19:11 - STOPPED: car_modular.jpg +2025-03-27 09:19:11 - STARTED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:19:12 - STOPPED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:19:12 - STARTED: harting_contactor.jpg +2025-03-27 09:19:31 - STOPPED: harting_contactor.jpg +2025-03-27 09:19:31 - STARTED: car_modular.jpg +2025-03-27 09:19:51 - STOPPED: car_modular.jpg +2025-03-27 09:19:51 - STARTED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:22:42 - STOPPED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:22:42 - STARTED: harting_contactor.jpg +2025-03-27 09:23:02 - STOPPED: harting_contactor.jpg +2025-03-27 09:23:02 - STARTED: car_modular.jpg +2025-03-27 09:23:22 - STOPPED: car_modular.jpg +2025-03-27 09:23:22 - STARTED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:26:13 - STOPPED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:26:13 - STARTED: harting_contactor.jpg +2025-03-27 09:26:33 - STOPPED: harting_contactor.jpg +2025-03-27 09:26:33 - STARTED: car_modular.jpg +2025-03-27 09:26:53 - STOPPED: car_modular.jpg +2025-03-27 09:26:53 - STARTED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:29:44 - STOPPED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:29:44 - STARTED: harting_contactor.jpg +2025-03-27 09:30:04 - STOPPED: harting_contactor.jpg +2025-03-27 09:30:04 - STARTED: car_modular.jpg +2025-03-27 09:30:24 - STOPPED: car_modular.jpg +2025-03-27 09:30:24 - STARTED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:33:15 - STOPPED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:33:15 - STARTED: harting_contactor.jpg +2025-03-27 09:33:35 - STOPPED: harting_contactor.jpg +2025-03-27 09:33:35 - STARTED: car_modular.jpg +2025-03-27 09:33:55 - STOPPED: car_modular.jpg +2025-03-27 09:33:55 - STARTED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:36:46 - STOPPED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:36:46 - STARTED: harting_contactor.jpg +2025-03-27 09:37:06 - STOPPED: harting_contactor.jpg +2025-03-27 09:37:06 - STARTED: car_modular.jpg +2025-03-27 09:37:26 - STOPPED: car_modular.jpg +2025-03-27 09:37:26 - STARTED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:40:17 - STOPPED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:40:17 - STARTED: harting_contactor.jpg +2025-03-27 09:40:37 - STOPPED: harting_contactor.jpg +2025-03-27 09:40:37 - STARTED: car_modular.jpg +2025-03-27 09:40:57 - STOPPED: car_modular.jpg +2025-03-27 09:40:57 - STARTED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:43:48 - STOPPED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:43:48 - STARTED: harting_contactor.jpg +2025-03-27 09:44:08 - STOPPED: harting_contactor.jpg +2025-03-27 09:44:08 - STARTED: car_modular.jpg +2025-03-27 09:44:28 - STOPPED: car_modular.jpg +2025-03-27 09:44:28 - STARTED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:47:18 - STOPPED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:47:18 - STARTED: harting_contactor.jpg +2025-03-27 09:47:38 - STOPPED: harting_contactor.jpg +2025-03-27 09:47:38 - STARTED: car_modular.jpg +2025-03-27 09:47:58 - STOPPED: car_modular.jpg +2025-03-27 09:47:58 - STARTED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:50:49 - STOPPED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:50:49 - STARTED: harting_contactor.jpg +2025-03-27 09:51:09 - STOPPED: harting_contactor.jpg +2025-03-27 09:51:09 - STARTED: car_modular.jpg +2025-03-27 09:51:29 - STOPPED: car_modular.jpg +2025-03-27 09:51:29 - STARTED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:54:20 - STOPPED: SampleVideo_1280x720_30mb.mp4 +2025-03-27 09:54:20 - STARTED: harting_contactor.jpg +2025-03-27 09:54:40 - STOPPED: harting_contactor.jpg +2025-03-27 09:54:40 - STARTED: car_modular.jpg diff --git a/src/__pycache__/python_functions.cpython-311.pyc b/src/__pycache__/python_functions.cpython-311.pyc index a558a830a3a6ce8ca02b7c4ac9109197ecb944fd..682a8bd753e0455df6de1c994c462b8333617f10 100644 GIT binary patch literal 7960 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 delta 3500 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 diff --git a/src/media_player.py b/src/media_player.py index 4869c22..1b515c8 100644 --- a/src/media_player.py +++ b/src/media_player.py @@ -11,6 +11,7 @@ from kivy.logger import Logger # Import Logger for logging messages from kivy.lang import Builder # Import Builder for loading KV files import os # Import os for file and directory operations import json # Import json for handling JSON data +import datetime # Import datetime for timestamping logs # Import functions from python_functions.py from python_functions import load_playlist, download_media_files, clean_unused_files @@ -30,6 +31,8 @@ class MediaPlayer(Screen): self.current_index = 0 # Index of the currently playing media self.video_player = self.ids.video_player # Reference to the Video widget self.image_display = self.ids.image_display # Reference to the Image widget + self.log_file = os.path.join(os.path.dirname(__file__), 'Resurse', 'log.txt') # Path to the log file + # Schedule periodic updates to check for playlist updates Clock.schedule_interval(self.check_playlist_updates, 300) # Every 5 minutes # Bind key events to handle fullscreen toggle @@ -62,6 +65,14 @@ class MediaPlayer(Screen): clean_unused_files(self.playlist) # Remove unused files from the resource folder self.play_media() # Start playing media + def log_event(self, file_name, event): + """Log the start or stop event of a media file.""" + timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # Get the current timestamp + log_message = f"{timestamp} - {event}: {file_name}\n" # Format the log message + with open(self.log_file, 'a') as log: # Open the log file in append mode + log.write(log_message) # Write the log message + Logger.info(f"Logged event: {log_message.strip()}") # Log the event to the console + def play_media(self): """Play the current media in the playlist.""" if self.playlist: @@ -76,6 +87,9 @@ class MediaPlayer(Screen): Logger.info(f"Playing media: {file_path}") + # Log the start of the media + self.log_event(file_name, "STARTED") + # Determine the type of media and play it if file_extension in ['.mp4', '.avi', '.mov']: self.play_video(file_path) # Play video @@ -104,15 +118,25 @@ class MediaPlayer(Screen): def next_media(self, dt): """Move to the next media in the playlist.""" + # Log the stop of the current media + current_media = self.playlist[self.current_index].get('file_name', '') + self.log_event(current_media, "STOPPED") + + # Move to the next media self.current_index = (self.current_index + 1) % len(self.playlist) # Increment the index self.play_media() # Play the next media def check_playlist_updates(self, dt): """Check for updates to the playlist.""" - self.playlist = load_playlist() # Reload the playlist - download_media_files(self.playlist) # Download new media files - clean_unused_files(self.playlist) # Remove unused files - self.play_media() # Restart media playback + new_playlist = load_playlist() # Load the new playlist + if new_playlist != self.playlist: # Compare the new playlist with the current one + Logger.info("Playlist updated. Changes detected.") + self.playlist = new_playlist # Update the playlist + download_media_files(self.playlist) # Download new media files + clean_unused_files(self.playlist) # Remove unused files + self.play_media() # Restart media playback + else: + Logger.info("Playlist update skipped. No changes detected.") class SettingsScreen(Screen): """Settings screen for configuring the app.""" diff --git a/src/python_functions.py b/src/python_functions.py index 0a30d05..9ffeb7b 100644 --- a/src/python_functions.py +++ b/src/python_functions.py @@ -9,9 +9,10 @@ def load_config(): """Load configuration from app_config.txt.""" if os.path.exists(CONFIG_FILE): with open(CONFIG_FILE, 'r') as file: + Logger.info("python_functions: Configuration file loaded successfully.") return json.load(file) else: - Logger.error(f"Configuration file {CONFIG_FILE} not found.") + Logger.error(f"python_functions: Configuration file {CONFIG_FILE} not found.") return { "screen_orientation": "Landscape", "screen_name": "", @@ -32,46 +33,48 @@ if server and host and quick and port: else: config_status = "not_ok" -Logger.info(f"Configuration loaded: server={server}, host={host}, quick={quick}, port={port}") -Logger.info(f"Configuration status: {config_status}") +Logger.info(f"python_functions: Configuration loaded: server={server}, host={host}, quick={quick}, port={port}") +Logger.info(f"python_functions: Configuration status: {config_status}") def load_playlist(): - # Load playlist from the server or local storage + """Load playlist from the server or local storage.""" try: - Logger.debug("Attempting to load playlist from server...") - server_ip = f'http://{server}:{port}' - hostname = host - quickconnect_code = quick - url = f'{server_ip}/api/playlists' + Logger.info("python_functions: Attempting to load playlist from server...") + server_ip = f'{server}:{port}' # Construct the server IP with port + url = f'http://{server_ip}/api/playlists' params = { - 'hostname': hostname, - 'quickconnect_code': quickconnect_code + 'hostname': host, + 'quickconnect_code': quick } response = requests.get(url, params=params) - + # Print the raw response content and status code for debugging - Logger.debug(f'Status Code: {response.status_code}') - Logger.debug(f'Response Content: {response.text}') - + Logger.debug(f"python_functions: Status Code: {response.status_code}") + Logger.debug(f"python_functions: Response Content: {response.text}") + # Check if the request was successful if response.status_code == 200: try: # Parse the JSON response playlist = response.json().get('playlist', []) - Logger.debug(f'Playlist: {playlist}') + Logger.info("python_functions: Playlist loaded successfully.") + Logger.debug(f"python_functions: Loaded playlist: {playlist}") return playlist except json.JSONDecodeError as e: - Logger.error(f'Failed to parse JSON response: {e}') + Logger.error(f"python_functions: Failed to parse JSON response: {e}") else: - Logger.error(f'Failed to retrieve playlist: {response.text}') + Logger.error(f"python_functions: Failed to retrieve playlist: {response.text}") except requests.exceptions.RequestException as e: - Logger.error(f"Failed to load playlist: {e}") + Logger.error(f"python_functions: Failed to load playlist: {e}") return [] def download_media_files(playlist): + """Download media files from the playlist.""" + Logger.info("python_functions: Starting media file download...") base_dir = os.path.join(os.path.dirname(__file__), 'static', 'resurse') # Update this to the correct path if not os.path.exists(base_dir): os.makedirs(base_dir) + Logger.info(f"python_functions: Created directory {base_dir} for media files.") for media in playlist: file_name = media.get('file_name', '') @@ -83,16 +86,18 @@ def download_media_files(playlist): if response.status_code == 200: with open(file_path, 'wb') as file: file.write(response.content) - Logger.debug(f"Downloaded {file_name} to {file_path}") + Logger.info(f"python_functions: Downloaded {file_name} to {file_path}") else: - Logger.error(f"Failed to download {file_name}: {response.status_code}") + Logger.error(f"python_functions: Failed to download {file_name}: {response.status_code}") except requests.exceptions.RequestException as e: - Logger.error(f"Failed to download {file_name}: {e}") + Logger.error(f"python_functions: Failed to download {file_name}: {e}") 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') # Update this to the correct path if not os.path.exists(base_dir): - Logger.debug(f"Directory {base_dir} does not exist. No files to clean.") + Logger.debug(f"python_functions: Directory {base_dir} does not exist. No files to clean.") return # Get all file names from the playlist @@ -109,6 +114,6 @@ def clean_unused_files(playlist): file_path = os.path.join(base_dir, file_name) try: os.remove(file_path) - Logger.debug(f"Deleted unused file: {file_path}") + Logger.info(f"python_functions: Deleted unused file: {file_path}") except OSError as e: - Logger.error(f"Failed to delete {file_path}: {e}") \ No newline at end of file + Logger.error(f"python_functions: Failed to delete {file_path}: {e}") \ No newline at end of file diff --git a/src/settings.json b/src/settings.json deleted file mode 100644 index 585d118..0000000 --- a/src/settings.json +++ /dev/null @@ -1 +0,0 @@ -{"settings": {"quick_connect_code": "", "server_ip": ""}} \ No newline at end of file