Newer
Older
medialib-manager / app.py
from flask import Flask, render_template, request, jsonify
import os
import json
from mediascan import list_media_files, filter_media_files, human_readable_size, get_media_info_with_ffprobe

app = Flask(__name__)

# Load configuration
CONFIG_FILE = 'config.json'
def load_config():
    if os.path.exists(CONFIG_FILE):
        with open(CONFIG_FILE, 'r') as f:
            return json.load(f)
    else:
        return {"directories": []}

def save_config(config):
    with open(CONFIG_FILE, 'w') as f:
        json.dump(config, f, indent=4)

config = load_config()

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/media-list', methods=['GET'])
def media_list():
    media_files = list_media_files(config.get("directories", []))
    allowed_formats = config.get("allowed_formats", [])
    filtered_files = filter_media_files(media_files, allowed_formats)
    
    # Add detailed media info
    for file in filtered_files:
        file["size"], file["size_unit"] = human_readable_size(file["size"])
        file_info = get_media_info_with_ffprobe(file["path"])
        if file_info:
            file["info"] = file_info
        else:
            file["info"] = {"error": "Failed to retrieve media info"}

    return jsonify(filtered_files)

@app.route('/configure', methods=['GET', 'POST'])
def configure():
    if request.method == 'POST':
        directories = request.json.get('directories', [])
        allowed_formats = request.json.get('allowed_formats', [])
        config['directories'] = directories
        config['allowed_formats'] = allowed_formats
        save_config(config)
        return jsonify({"status": "success"})
    return jsonify(config)

if __name__ == '__main__':
    app.run(debug=True)