diff --git a/abogen/web/app.py b/abogen/web/app.py index 85814a0..4e913a2 100644 --- a/abogen/web/app.py +++ b/abogen/web/app.py @@ -109,7 +109,7 @@ def create_app(config: Optional[dict[str, Any]] = None) -> Flask: app.register_blueprint(jobs_bp, url_prefix="/jobs") app.register_blueprint(settings_bp, url_prefix="/settings") app.register_blueprint(voices_bp, url_prefix="/voices") - app.register_blueprint(entities_bp, url_prefix="/entities") + app.register_blueprint(entities_bp, url_prefix="/overrides") app.register_blueprint(books_bp, url_prefix="/find-books") app.register_blueprint(api_bp, url_prefix="/api") diff --git a/abogen/web/routes/entities.py b/abogen/web/routes/entities.py index 6a6b93a..5daadf3 100644 --- a/abogen/web/routes/entities.py +++ b/abogen/web/routes/entities.py @@ -16,6 +16,7 @@ from abogen.pronunciation_store import ( delete_override as delete_pronunciation_override, save_override as save_pronunciation_override, get_override_stats, + all_overrides, ) entities_bp = Blueprint("entities", __name__) @@ -128,13 +129,46 @@ def upsert_global_override() -> ResponseReturnValue: def entities_page() -> str: settings = load_settings() lang = request.args.get("lang") or settings.get("language", "en") + voice_filter = request.args.get("voice", "") + pronunciation_filter = request.args.get("pronunciation", "") + options = template_options() stats = get_override_stats(lang) + + overrides = all_overrides(lang) + + if voice_filter == "assigned": + overrides = [o for o in overrides if o.get("voice")] + elif voice_filter == "unassigned": + overrides = [o for o in overrides if not o.get("voice")] + + if pronunciation_filter == "defined": + overrides = [o for o in overrides if o.get("pronunciation")] + elif pronunciation_filter == "undefined": + overrides = [o for o in overrides if not o.get("pronunciation")] + + voice_filter_options = [ + {"value": "", "label": "All voices"}, + {"value": "assigned", "label": "Assigned"}, + {"value": "unassigned", "label": "Unassigned"}, + ] + pronunciation_filter_options = [ + {"value": "", "label": "All pronunciations"}, + {"value": "defined", "label": "Defined"}, + {"value": "undefined", "label": "Undefined"}, + ] + language_label = options["languages"].get(lang, lang) return render_template( "entities.html", language=lang, language_label=language_label, + options=options, languages=options["languages"].items(), stats=stats, + overrides=overrides, + voice_filter=voice_filter, + pronunciation_filter=pronunciation_filter, + voice_filter_options=voice_filter_options, + pronunciation_filter_options=pronunciation_filter_options, )