This commit is contained in:
Jesús Pavón Abián
2026-02-02 15:01:36 +01:00
parent c357ce4ae5
commit aca1e07f84
4 changed files with 87 additions and 9 deletions

View File

@@ -12,9 +12,46 @@ from sessions import base
from sessions import session_exceptions as Exceptions
import output
import application
import languageHandler
log = logging.getLogger("sessions.blueskiSession")
class Language:
"""Simple language object with code and name attributes, mimicking Mastodon.py format."""
def __init__(self, code: str, name: str):
self.code = code
self.name = name
def __repr__(self):
return f"Language({self.code}, {self.name})"
def get_supported_languages():
"""Returns the list of supported languages with translated names."""
return [
Language("", _("Not set")),
Language("en", _("English")),
Language("es", _("Spanish")),
Language("fr", _("French")),
Language("de", _("German")),
Language("it", _("Italian")),
Language("pt", _("Portuguese")),
Language("ja", _("Japanese")),
Language("ko", _("Korean")),
Language("zh", _("Chinese")),
Language("ru", _("Russian")),
Language("ar", _("Arabic")),
Language("hi", _("Hindi")),
Language("nl", _("Dutch")),
Language("pl", _("Polish")),
Language("tr", _("Turkish")),
Language("uk", _("Ukrainian")),
Language("ca", _("Catalan")),
Language("eu", _("Basque")),
Language("gl", _("Galician")),
]
# Optional import of atproto. Code handles absence gracefully.
try:
from atproto import Client as AtpClient # type: ignore
@@ -39,6 +76,8 @@ class Session(base.baseSession):
self.char_limit = 300
self.api = None
self.poller = None
self.supported_languages = get_supported_languages()
self.default_language = languageHandler.curLang[:2]
# Subscribe to pub/sub events from the poller
pub.subscribe(self.on_notification, "blueski.notification_received")

View File

@@ -4,9 +4,12 @@ Utility functions for Bluesky session.
"""
import logging
import re
log = logging.getLogger("sessions.blueski.utils")
url_re = re.compile(r'https?://[^\s<>\[\]()"\',]+[^\s<>\[\]()"\',.:;!?]')
def g(obj, key, default=None):
"""Helper to get attribute from dict or object."""
@@ -254,6 +257,14 @@ def find_urls(post):
if uri and uri not in urls:
urls.append(uri)
# Also search plain text for URLs using regex (fallback)
text = g(record, "text", "")
if text:
text_urls = url_re.findall(text)
for u in text_urls:
if u not in urls:
urls.append(u)
return urls