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
This commit is contained in:
Deployment System
2026-01-17 18:13:59 +02:00
parent 49393d9a73
commit 9c0a45afab

View File

@@ -458,6 +458,56 @@ def update_playlist_content_edit_enabled(playlist_id: int, content_id: int):
return jsonify({'success': False, 'message': str(e)}), 500 return jsonify({'success': False, 'message': str(e)}), 500
@content_bp.route('/playlist/<int:playlist_id>/update-duration/<int:content_id>', 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') @content_bp.route('/upload-media-page')
@login_required @login_required
def upload_media_page(): def upload_media_page():