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)