Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 40 additions & 3 deletions src/blueprints/playlist.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,18 @@ def add_plugin():
return jsonify({"error": "Failed to add to playlist"}), 500

device_config.write_config()

# If adding to the currently active playlist
refresh_info = device_config.get_refresh_info()
if (
refresh_info.refresh_type == "Playlist"
and refresh_info.playlist == playlist
):
# Log that plugin was added to active playlist
logger.info(
f"Plugin '{instance_name}' added to active playlist '{playlist}'"
)

except Exception as e:
return jsonify({"error": f"An error occurred: {str(e)}"}), 500
return jsonify({"success": True, "message": "Scheduled refresh configured."})
Expand Down Expand Up @@ -119,6 +131,8 @@ def create_playlist():
def update_playlist(playlist_name):
device_config = current_app.config['DEVICE_CONFIG']
playlist_manager = device_config.get_playlist_manager()
refresh_info = device_config.get_refresh_info()
refresh_task = current_app.config["REFRESH_TASK"]

data = request.get_json()

Expand All @@ -134,11 +148,34 @@ def update_playlist(playlist_name):
if not playlist:
return jsonify({"error": f"Playlist '{playlist_name}' does not exist"}), 400

# Check if this is the currently active playlist
is_active_playlist = (
refresh_info.playlist == playlist_name
and refresh_info.refresh_type == "Playlist"
)

result = playlist_manager.update_playlist(playlist_name, new_name, start_time, end_time)
if not result:
return jsonify({"error": "Failed to delete playlist"}), 500
return jsonify({"error": "Failed to update playlist"}), 500
device_config.write_config()

# If the updated playlist is currently active, trigger a refresh
if is_active_playlist:
from refresh_task import PlaylistRefresh

# Update refresh_info with new playlist name if it changed
if playlist_name != new_name:
refresh_info.playlist = new_name
# Get the currently displayed plugin instance
if playlist.plugins and refresh_info.plugin_instance:
plugin_instance = playlist.find_plugin(
refresh_info.plugin_id, refresh_info.plugin_instance
)
if plugin_instance:
refresh_task.manual_update(
PlaylistRefresh(playlist, plugin_instance, force=True)
)

return jsonify({"success": True, "message": f"Updated playlist '{playlist_name}'!"})

@playlist_bp.route('/delete_playlist/<string:playlist_name>', methods=['DELETE'])
Expand All @@ -147,8 +184,8 @@ def delete_playlist(playlist_name):
playlist_manager = device_config.get_playlist_manager()

if not playlist_name:
return jsonify({"error": f"Playlist name is required"}), 400
return jsonify({"error": "Playlist name is required"}), 400

playlist = playlist_manager.get_playlist(playlist_name)
if not playlist:
return jsonify({"error": f"Playlist '{playlist_name}' does not exist"}), 400
Expand Down
55 changes: 52 additions & 3 deletions src/blueprints/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ def plugin_page(plugin_id):
# add plugin instance settings to the template to prepopulate
template_params["plugin_settings"] = plugin_instance.settings
template_params["plugin_instance"] = plugin_instance_name
template_params["plugin_refresh"] = plugin_instance.refresh

template_params["playlists"] = playlist_manager.get_playlist_names()
except Exception as e:
Expand Down Expand Up @@ -84,16 +85,64 @@ def update_plugin_instance(instance_name):

if not instance_name:
raise RuntimeError("Instance name is required")

plugin_id = form_data.get("plugin_id")

# Get existing plugin instance to check for duplicate filenames
plugin_instance = playlist_manager.find_plugin(plugin_id, instance_name)
if not plugin_instance:
return jsonify({"error": f"Plugin instance: {instance_name} does not exist"}), 500

# For image_upload plugin, check for duplicate filenames
if plugin_id == "image_upload":
existing_files = plugin_instance.settings.get('imageFiles[]', [])
existing_filenames = [os.path.basename(f) for f in existing_files]

# Check for duplicates in new uploads
duplicates = []
for key, file in request.files.items(multi=True):
if key == 'imageFiles[]' and file.filename:
filename = os.path.basename(file.filename)
if filename in existing_filenames:
duplicates.append(filename)

if duplicates:
return jsonify({"error": f"Duplicate files detected: {', '.join(duplicates)}. These files already exist for this instance."}), 400

plugin_settings = form_data
plugin_settings.update(handle_request_files(request.files, request.form))

plugin_id = plugin_settings.pop("plugin_id")
plugin_instance = playlist_manager.find_plugin(plugin_id, instance_name)
if not plugin_instance:
return jsonify({"error": f"Plugin instance: {instance_name} does not exist"}), 500

# Handle refresh settings if provided
refresh_settings_json = plugin_settings.pop("refresh_settings", None)
refresh_settings = {}
if refresh_settings_json:
refresh_settings = json.loads(refresh_settings_json)

plugin_instance.settings = plugin_settings

# Update refresh settings if provided
if refresh_settings:
plugin_instance.refresh = refresh_settings

device_config.write_config()

# Check if this plugin instance is currently active and trigger refresh
refresh_info = device_config.get_refresh_info()
if (refresh_info.refresh_type == "Playlist" and
refresh_info.plugin_id == plugin_id and
refresh_info.plugin_instance == instance_name):

refresh_task = current_app.config['REFRESH_TASK']
from refresh_task import PlaylistRefresh

# Find the playlist containing this plugin
for playlist in playlist_manager.playlists:
if playlist.find_plugin(plugin_id, instance_name):
refresh_task.manual_update(PlaylistRefresh(playlist, plugin_instance, force=True))
break

except Exception as e:
return jsonify({"error": f"An error occurred: {str(e)}"}), 500
return jsonify({"success": True, "message": f"Updated plugin instance {instance_name}."})
Expand Down
Loading