mirror of
https://github.com/Dictionarry-Hub/profilarr.git
synced 2026-01-22 19:01:02 +01:00
140 lines
5.2 KiB
Python
140 lines
5.2 KiB
Python
from flask import Blueprint, jsonify, request
|
|
import logging
|
|
from .utils import (
|
|
get_media_management_data,
|
|
save_media_management_data,
|
|
update_media_management_data,
|
|
get_all_media_management_data,
|
|
MEDIA_MANAGEMENT_CATEGORIES
|
|
)
|
|
from .sync import (
|
|
sync_naming_config,
|
|
sync_media_management_config,
|
|
sync_quality_definitions
|
|
)
|
|
from ..arr.manager import get_arr_config
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
media_management_bp = Blueprint('media_management', __name__)
|
|
|
|
|
|
@media_management_bp.route('/api/media-management', methods=['GET'])
|
|
def get_all_media_management():
|
|
"""Get all media management data for all categories"""
|
|
try:
|
|
data = get_all_media_management_data()
|
|
return jsonify(data), 200
|
|
except Exception as e:
|
|
logger.error(f"Error retrieving media management data: {e}")
|
|
return jsonify({'error': str(e)}), 500
|
|
|
|
|
|
@media_management_bp.route('/api/media-management/<category>', methods=['GET'])
|
|
def get_media_management(category):
|
|
"""Get media management data for a specific category"""
|
|
if category not in MEDIA_MANAGEMENT_CATEGORIES:
|
|
return jsonify({'error': f'Invalid category: {category}'}), 400
|
|
|
|
try:
|
|
data = get_media_management_data(category)
|
|
return jsonify(data), 200
|
|
except Exception as e:
|
|
logger.error(f"Error retrieving {category}: {e}")
|
|
return jsonify({'error': str(e)}), 500
|
|
|
|
|
|
@media_management_bp.route('/api/media-management/<category>', methods=['PUT'])
|
|
def update_media_management(category):
|
|
"""Update media management data for a specific category"""
|
|
if category not in MEDIA_MANAGEMENT_CATEGORIES:
|
|
return jsonify({'error': f'Invalid category: {category}'}), 400
|
|
|
|
try:
|
|
data = request.get_json()
|
|
if not data:
|
|
return jsonify({'error': 'No data provided'}), 400
|
|
|
|
updated_data = update_media_management_data(category, data)
|
|
return jsonify(updated_data), 200
|
|
except Exception as e:
|
|
logger.error(f"Error updating {category}: {e}")
|
|
return jsonify({'error': str(e)}), 500
|
|
|
|
|
|
@media_management_bp.route('/api/media-management/sync', methods=['POST'])
|
|
def sync_media_management():
|
|
"""Sync media management data to arr instance"""
|
|
try:
|
|
data = request.get_json()
|
|
if not data:
|
|
return jsonify({'error': 'No data provided'}), 400
|
|
|
|
arr_id = data.get('arr_id')
|
|
categories = data.get('categories', [])
|
|
|
|
if not arr_id:
|
|
return jsonify({'error': 'arr_id is required'}), 400
|
|
|
|
if not categories:
|
|
return jsonify({'error': 'categories list is required'}), 400
|
|
|
|
# Validate categories
|
|
invalid_categories = [cat for cat in categories if cat not in MEDIA_MANAGEMENT_CATEGORIES]
|
|
if invalid_categories:
|
|
return jsonify({'error': f'Invalid categories: {invalid_categories}'}), 400
|
|
|
|
# Get arr config
|
|
arr_result = get_arr_config(arr_id)
|
|
if not arr_result.get('success'):
|
|
return jsonify({'error': 'Arr configuration not found'}), 404
|
|
|
|
arr_config = arr_result.get('data')
|
|
base_url = arr_config['arrServer']
|
|
api_key = arr_config['apiKey']
|
|
arr_type = arr_config['type']
|
|
|
|
results = {}
|
|
|
|
# Sync each requested category
|
|
for category in categories:
|
|
try:
|
|
# Get the current media management data for this category
|
|
category_data = get_media_management_data(category)
|
|
|
|
if category == 'naming':
|
|
arr_type_data = category_data.get(arr_type, {})
|
|
success, message = sync_naming_config(base_url, api_key, arr_type, arr_type_data)
|
|
elif category == 'misc':
|
|
arr_type_data = category_data.get(arr_type, {})
|
|
success, message = sync_media_management_config(base_url, api_key, arr_type, arr_type_data)
|
|
elif category == 'quality_definitions':
|
|
# Quality definitions has a nested structure: qualityDefinitions -> arr_type -> qualities
|
|
quality_defs = category_data.get('qualityDefinitions', {}).get(arr_type, {})
|
|
success, message = sync_quality_definitions(base_url, api_key, arr_type, quality_defs)
|
|
else:
|
|
success, message = False, f"Unknown category: {category}"
|
|
|
|
results[category] = {
|
|
'success': success,
|
|
'message': message
|
|
}
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error syncing {category}: {e}")
|
|
results[category] = {
|
|
'success': False,
|
|
'message': str(e)
|
|
}
|
|
|
|
# Determine overall success
|
|
overall_success = all(result['success'] for result in results.values())
|
|
|
|
return jsonify({
|
|
'success': overall_success,
|
|
'results': results
|
|
}), 200
|
|
|
|
except Exception as e:
|
|
logger.error(f"Error in media management sync: {e}")
|
|
return jsonify({'error': str(e)}), 500 |