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, "follows", "idx_follows_following", ["following_uid"])
|
||||||
_index(db, "password_resets", "idx_password_resets_token", ["token"])
|
_index(db, "password_resets", "idx_password_resets_token", ["token"])
|
||||||
_index(db, "gists", "idx_gists_user_uid", ["user_uid"])
|
_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_resource", ["resource_type", "resource_uid"])
|
||||||
_index(db, "attachments", "idx_attachments_target", ["target_type", "target_uid"])
|
_index(db, "attachments", "idx_attachments_target", ["target_type", "target_uid"])
|
||||||
|
|
||||||
@ -319,6 +320,23 @@ def get_site_stats() -> dict:
|
|||||||
return stats
|
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):
|
def resolve_by_slug(table, slug):
|
||||||
entry = table.find_one(slug=slug)
|
entry = table.find_one(slug=slug)
|
||||||
if not entry:
|
if not entry:
|
||||||
|
|||||||
@ -4,7 +4,7 @@ from datetime import datetime, timezone
|
|||||||
from fastapi import APIRouter, Request, HTTPException, Form
|
from fastapi import APIRouter, Request, HTTPException, Form
|
||||||
from devplacepy.models import GistForm, GistEditForm
|
from devplacepy.models import GistForm, GistEditForm
|
||||||
from fastapi.responses import HTMLResponse, RedirectResponse
|
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.content import load_detail, edit_content_item, delete_content_item, enrich_items
|
||||||
from devplacepy.templating import templates
|
from devplacepy.templating import templates
|
||||||
from devplacepy.utils import generate_uid, get_current_user, require_user, make_combined_slug, create_mention_notifications
|
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,
|
"total_count": total_count,
|
||||||
"current_language": language,
|
"current_language": language,
|
||||||
"languages": LANGUAGES,
|
"languages": LANGUAGES,
|
||||||
|
"gist_language_codes": get_gist_languages(),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -15,15 +15,17 @@
|
|||||||
<span class="icon">📋</span>All
|
<span class="icon">📋</span>All
|
||||||
</a>
|
</a>
|
||||||
{% for code, name in languages %}
|
{% 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 %}">
|
<a href="/gists?language={{ code }}" class="sidebar-link {% if current_language == code %}active{% endif %}">
|
||||||
<span class="icon">📝</span>{{ name }}
|
<span class="icon">📝</span>{{ name }}
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
{% if 'plaintext' in gist_language_codes %}
|
||||||
<a href="/gists?language=plaintext" class="sidebar-link {% if current_language == 'plaintext' %}active{% endif %}">
|
<a href="/gists?language=plaintext" class="sidebar-link {% if current_language == 'plaintext' %}active{% endif %}">
|
||||||
<span class="icon">📝</span>Plain Text
|
<span class="icon">📝</span>Plain Text
|
||||||
</a>
|
</a>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% if user %}
|
{% if user %}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user