Архитектура и дизайн

2 минуты чтения

fedtail спроектирован для тех, кто помнит Juick и Point.im и устал от хаотичной ленты с обрывками чужих разговоров в современных микроблогах.

Ключевые архитектурные принципы

  1. Ничего не дёргается. Открыл ленту — стоишь на первом непрочитанном. Пришло новое — позиция не меняется, просто растёт счётчик. Читаешь строго по хронологии, как RSS.
  2. Каждый ответ знает, на что он отвечает. Над ответом — полоска с началом исходного поста, клик открывает весь тред деревом.
  3. Ленты строго разделены. Люди отдельно, боты отдельно, ответы мне отдельно от прочих упоминаний.
  4. Приватно по умолчанию. Новый пост — только подписчикам. Ответ никогда не может быть публичнее исходного.
  5. Любое поведение — ключ в конфиге. Окна настроек нет и не будет. По умолчанию поведение настроено продуманно; привычный режим «как у всех» включается простым флагом.
  6. К чужим серверам — без вашего токена. Всё, что fedtail подтягивает с сервера автора напрямую по ActivityPub, запрашивается анонимно: удаленный сервер видит только IP-адрес.
  7. Ядро не зависит от GUI. Интерфейсы — подключаемые плагины: классическое окно на Qt, терминальный TUI, браузерный веб-интерфейс.
  8. Один профиль — один аккаунт. Второй аккаунт — второй профиль (--profile); при необходимости несколько профилей объединяются в одном окне (ui.merge).
  9. Взрослые разбираются сами (режим arts). Режим в честь @arts, создателя Point.im: контент отображается без навязчивой внешней опеки.

Устройство ядра и компонентов

  • Ядро (fedtail/core): полностью изолировано от графического интерфейса. Общается с фронтендами асинхронно через события (events) и futures.
  • Хранилище данных: локальная реляционная база данных SQLite (~/.local/share/fedtail/<профиль>/). В ней хранятся закэшированные посты, связи тредов, состояние прочитанности и подписки на треды.
  • Цикл опроса (Polling): периодический сбор обновлений с инстанса по Mastodon API с защитой от дубликатов и сохранением курсоров.
  • Сборка тредов (Thread Reassembly): если в треде отсутствуют промежуточные комментарии (потому что ваш домашний сервер их не зафедерировал), fedtail анонимно запрашивает недостающие ActivityPub-объекты непосредственно у сервера автора.
  • Фронтенды (fedtail/frontends):
    • qt — основной десктопный интерфейс на PySide6 (Qt).
    • tui — легковесный текстовый консольный интерфейс.
    • web — локальный HTTP-сервер со встроенным веб-интерфейсом.
    • cli — утилиты командной строки (fedtail lanes, fedtail show, fedtail tail, fedtail post).