updated to download
This commit is contained in:
@@ -32,38 +32,91 @@ class MediaPlayer(Screen):
|
|||||||
|
|
||||||
def on_enter(self):
|
def on_enter(self):
|
||||||
self.load_playlist()
|
self.load_playlist()
|
||||||
|
self.download_media_files()
|
||||||
self.play_media()
|
self.play_media()
|
||||||
|
|
||||||
def load_playlist(self):
|
def load_playlist(self):
|
||||||
# Load playlist from the server or local storage
|
# Load playlist from the server or local storage
|
||||||
try:
|
try:
|
||||||
Logger.debug("Attempting to load playlist from server...")
|
Logger.debug("Attempting to load playlist from server...")
|
||||||
response = requests.get('http://192.168.0.115:5000/api/playlist')
|
server_ip = 'http://192.168.0.115:5000'
|
||||||
response.raise_for_status() # Raise an exception for HTTP errors
|
hostname = 'player1.local'
|
||||||
if response.headers.get('Content-Type') == 'application/json':
|
quickconnect_code = 'Initial01!'
|
||||||
Logger.debug(f"Server response: {response.text}") # Log the response content
|
url = f'{server_ip}/api/playlists'
|
||||||
self.playlist = response.json()
|
params = {
|
||||||
|
'hostname': "TvHolBa1",
|
||||||
|
'quickconnect_code': quickconnect_code
|
||||||
|
}
|
||||||
|
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}')
|
||||||
|
|
||||||
|
# Check if the request was successful
|
||||||
|
if response.status_code == 200:
|
||||||
|
try:
|
||||||
|
# Parse the JSON response
|
||||||
|
self.playlist = response.json().get('playlist', [])
|
||||||
|
Logger.debug(f'Playlist: {self.playlist}')
|
||||||
|
except json.JSONDecodeError as e:
|
||||||
|
Logger.error(f'Failed to parse JSON response: {e}')
|
||||||
else:
|
else:
|
||||||
Logger.warning(f"Unexpected content type: {response.headers.get('Content-Type')}")
|
Logger.error(f'Failed to retrieve playlist: {response.text}')
|
||||||
except requests.exceptions.RequestException as e:
|
except requests.exceptions.RequestException as e:
|
||||||
Logger.error(f"Failed to load playlist: {e}")
|
Logger.error(f"Failed to load playlist: {e}")
|
||||||
except json.JSONDecodeError as e:
|
|
||||||
Logger.error(f"Failed to parse playlist JSON: {e}")
|
def download_media_files(self):
|
||||||
|
base_dir = '/home/pi/media/files' # Update this to a directory with write permissions
|
||||||
|
if not os.path.exists(base_dir):
|
||||||
|
os.makedirs(base_dir)
|
||||||
|
|
||||||
|
for media in self.playlist:
|
||||||
|
file_name = media.get('file_name', '')
|
||||||
|
file_url = f"http://192.168.0.115:5000/media/{file_name}" # Update this to the correct URL
|
||||||
|
file_path = os.path.join(base_dir, file_name)
|
||||||
|
|
||||||
|
try:
|
||||||
|
response = requests.get(file_url)
|
||||||
|
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}")
|
||||||
|
else:
|
||||||
|
Logger.error(f"Failed to download {file_name}: {response.status_code}")
|
||||||
|
except requests.exceptions.RequestException as e:
|
||||||
|
Logger.error(f"Failed to download {file_name}: {e}")
|
||||||
|
|
||||||
def play_media(self):
|
def play_media(self):
|
||||||
if self.playlist:
|
if self.playlist:
|
||||||
media = self.playlist[self.current_index]
|
media = self.playlist[self.current_index]
|
||||||
if media['type'] == 'video':
|
file_name = media.get('file_name', '')
|
||||||
self.video_player.source = media['url']
|
file_extension = os.path.splitext(file_name)[1].lower()
|
||||||
|
duration = media.get('duration', 10) # Default duration is 10 seconds
|
||||||
|
|
||||||
|
# Define the base directory for media files
|
||||||
|
base_dir = '/path/to/media/files' # Update this to the correct path
|
||||||
|
file_path = os.path.join(base_dir, file_name)
|
||||||
|
|
||||||
|
if file_extension in ['.mp4', '.avi', '.mov']:
|
||||||
|
self.video_player.source = file_path
|
||||||
self.video_player.play()
|
self.video_player.play()
|
||||||
self.image_display.source = ''
|
self.image_display.source = ''
|
||||||
elif media['type'] == 'image':
|
elif file_extension in ['.jpg', '.jpeg', '.png', '.gif']:
|
||||||
self.image_display.source = media['url']
|
self.image_display.source = file_path
|
||||||
self.video_player.source = ''
|
self.video_player.source = ''
|
||||||
self.image_display.reload()
|
self.image_display.reload()
|
||||||
|
Clock.schedule_once(self.next_media, duration)
|
||||||
|
else:
|
||||||
|
Logger.error(f"Unsupported media type for file: {file_name}")
|
||||||
|
|
||||||
|
def next_media(self, dt):
|
||||||
|
self.current_index = (self.current_index + 1) % len(self.playlist)
|
||||||
|
self.play_media()
|
||||||
|
|
||||||
def check_playlist_updates(self, dt):
|
def check_playlist_updates(self, dt):
|
||||||
self.load_playlist()
|
self.load_playlist()
|
||||||
|
self.download_media_files()
|
||||||
self.play_media()
|
self.play_media()
|
||||||
|
|
||||||
class MediaPlayerApp(App):
|
class MediaPlayerApp(App):
|
||||||
|
|||||||
Reference in New Issue
Block a user