From cc703e3a5dd06aa03ab766e01d5a866d6609f406 Mon Sep 17 00:00:00 2001 From: retoor Date: Sat, 23 May 2026 09:00:52 +0200 Subject: [PATCH] Update --- devplacepy/database.py | 18 ++++++++++++++++++ devplacepy/routers/gists.py | 3 ++- devplacepy/templates/gists.html | 4 +++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/devplacepy/database.py b/devplacepy/database.py index bf3b3c3..b7dd3e9 100644 --- a/devplacepy/database.py +++ b/devplacepy/database.py @@ -57,6 +57,7 @@ def init_db(): _index(db, "follows", "idx_follows_following", ["following_uid"]) _index(db, "password_resets", "idx_password_resets_token", ["token"]) _index(db, "gists", "idx_gists_user_uid", ["user_uid"]) + _index(db, "gists", "idx_gists_language", ["language"]) _index(db, "attachments", "idx_attachments_resource", ["resource_type", "resource_uid"]) _index(db, "attachments", "idx_attachments_target", ["target_type", "target_uid"]) @@ -319,6 +320,23 @@ def get_site_stats() -> dict: return stats +_gist_languages_cache = TTLCache(ttl=60) + + +def get_gist_languages() -> set[str]: + cached = _gist_languages_cache.get("codes") + if cached is not None: + return cached + codes: set[str] = set() + if "gists" in db.tables: + for row in db.query("SELECT DISTINCT language FROM gists"): + language = row.get("language") + if language: + codes.add(language) + _gist_languages_cache.set("codes", codes) + return codes + + def resolve_by_slug(table, slug): entry = table.find_one(slug=slug) if not entry: diff --git a/devplacepy/routers/gists.py b/devplacepy/routers/gists.py index 61c1eea..4eec2b7 100644 --- a/devplacepy/routers/gists.py +++ b/devplacepy/routers/gists.py @@ -4,7 +4,7 @@ from datetime import datetime, timezone from fastapi import APIRouter, Request, HTTPException, Form from devplacepy.models import GistForm, GistEditForm from fastapi.responses import HTMLResponse, RedirectResponse -from devplacepy.database import get_table, get_users_by_uids +from devplacepy.database import get_table, get_users_by_uids, get_gist_languages from devplacepy.content import load_detail, edit_content_item, delete_content_item, enrich_items from devplacepy.templating import templates from devplacepy.utils import generate_uid, get_current_user, require_user, make_combined_slug, create_mention_notifications @@ -65,6 +65,7 @@ async def gists_page(request: Request, language: str = None, user_uid: str = Non "total_count": total_count, "current_language": language, "languages": LANGUAGES, + "gist_language_codes": get_gist_languages(), }) diff --git a/devplacepy/templates/gists.html b/devplacepy/templates/gists.html index 3951441..983160f 100644 --- a/devplacepy/templates/gists.html +++ b/devplacepy/templates/gists.html @@ -15,15 +15,17 @@ 📋All {% for code, name in languages %} - {% if code != 'plaintext' %} + {% if code != 'plaintext' and code in gist_language_codes %} 📝{{ name }} {% endif %} {% endfor %} + {% if 'plaintext' in gist_language_codes %} 📝Plain Text + {% endif %} {% if user %}