Newer
Older
medialib-manager / app.py
from flask import Flask, render_template, request, jsonify
import os
import json
from mediascan import load_config, save_config, list_media_files, filter_media_files, human_readable_size, get_media_info_with_ffprobe, media_get_from_cache, media_create_cache, media_remove_cache, get_single_media_by_path
from urllib.parse import unquote

app = Flask(__name__)

# Load configuration
CONFIG_FILE = 'config.json'
config = load_config(CONFIG_FILE)

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

@app.route("/single")
def single_media():
    # Получаем путь из строки запроса
    path = request.args.get("path", "")  # Значение параметра "path"
    if not path:
        return "Path not provided", 400

    # Декодируем путь
    path_to_mediafile = unquote(path)
    media_file = get_single_media_by_path(path_to_mediafile)
    # return jsonify(media_file)
    return render_template('single.html', file=media_file)

@app.route('/media-list/clear-cache')
def media_list_clear_cache():
    return jsonify({"status": media_remove_cache(config["cache_dir"])})

@app.route('/media-list', methods=['GET'])
def media_list():
    filtered_files = media_get_from_cache(config["cache_dir"])
    if filtered_files == None:
        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"], file["size_bytes"] = 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"}

    media_create_cache(config["cache_dir"], filtered_files)
    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_FILE, config)
        return jsonify({"status": "success"})
    return jsonify(config)

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