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 %}
{% endif %}
{% endfor %}
+ {% if 'plaintext' in gist_language_codes %}
+ {% endif %}
{% if user %}