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:
@@ -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():
|
||||||
|
|||||||
Reference in New Issue
Block a user