This commit is contained in:
parent
ccc0ee4d61
commit
cc703e3a5d
@ -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:
|
||||
|
||||
@ -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(),
|
||||
})
|
||||
|
||||
|
||||
|
||||
@ -15,15 +15,17 @@
|
||||
<span class="icon">📋</span>All
|
||||
</a>
|
||||
{% for code, name in languages %}
|
||||
{% if code != 'plaintext' %}
|
||||
{% if code != 'plaintext' and code in gist_language_codes %}
|
||||
<a href="/gists?language={{ code }}" class="sidebar-link {% if current_language == code %}active{% endif %}">
|
||||
<span class="icon">📝</span>{{ name }}
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if 'plaintext' in gist_language_codes %}
|
||||
<a href="/gists?language=plaintext" class="sidebar-link {% if current_language == 'plaintext' %}active{% endif %}">
|
||||
<span class="icon">📝</span>Plain Text
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% if user %}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user