From 9c0a45afab0afece1425ab18ce4cfe0fd58d0f17 Mon Sep 17 00:00:00 2001 From: Deployment System Date: Sat, 17 Jan 2026 18:13:59 +0200 Subject: [PATCH] Add missing update-duration endpoint for playlist content - Create new endpoint to handle duration updates for playlist content items - Validates duration is at least 1 second - Updates duration in playlist_content association table - Increments playlist version for sync tracking - Fixes issue where duration spinner buttons were returning save errors --- app/blueprints/content.py | 50 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/app/blueprints/content.py b/app/blueprints/content.py index 9804115..ff45392 100644 --- a/app/blueprints/content.py +++ b/app/blueprints/content.py @@ -458,6 +458,56 @@ def update_playlist_content_edit_enabled(playlist_id: int, content_id: int): return jsonify({'success': False, 'message': str(e)}), 500 +@content_bp.route('/playlist//update-duration/', methods=['POST']) +@login_required +def update_playlist_content_duration(playlist_id: int, content_id: int): + """Update content duration in playlist.""" + playlist = Playlist.query.get_or_404(playlist_id) + + try: + content = Content.query.get_or_404(content_id) + + # Get duration from request + try: + duration = int(request.form.get('duration', 10)) + except (ValueError, TypeError): + return jsonify({'success': False, 'message': 'Invalid duration value'}), 400 + + # Validate duration (minimum 1 second) + if duration < 1: + return jsonify({'success': False, 'message': 'Duration must be at least 1 second'}), 400 + + from app.models.playlist import playlist_content + from sqlalchemy import update + + # Update duration in association table + stmt = update(playlist_content).where( + (playlist_content.c.playlist_id == playlist_id) & + (playlist_content.c.content_id == content_id) + ).values(duration=duration) + db.session.execute(stmt) + + # Increment playlist version + playlist.increment_version() + + db.session.commit() + cache.clear() + + log_action('info', f'Updated duration={duration}s for "{content.filename}" in playlist "{playlist.name}"') + + return jsonify({ + 'success': True, + 'message': 'Duration updated', + 'duration': duration, + 'version': playlist.version + }) + + except Exception as e: + db.session.rollback() + log_action('error', f'Error updating duration: {str(e)}') + return jsonify({'success': False, 'message': str(e)}), 500 + + @content_bp.route('/upload-media-page') @login_required def upload_media_page():