Версия: 1.1.0 | Платформа: Windows (PyQt6) | Python: ≥ 3.12
Aite Commander — десктопное приложение для управления закладками и ссылками, построенное по принципу иерархической организации. Название и философия вдохновлены Total Commander, но вместо файловой системы используется 4-уровневая структура: Сфера → Раздел → Категория → Ссылка.
База данных — SQLite с WAL-режимом и memory-mapped I/O. Интерфейс построен на PyQt6.
Четырёхуровневая модель организации:
| Уровень | Таблица | Описание |
|---|---|---|
| Сфера | sphere |
Верхний уровень группировки (AI, Работа, Учёба, Личное и др.) |
| Раздел | section |
Подраздел внутри сферы |
| Категория | category |
Категория внутри раздела |
| Ссылка | link |
Конкретная ссылка внутри категории |
Все уровни поддерживают:
- CRUD-операции (создание, чтение, обновление, удаление)
- Порядок позиционирования (сортировка)
- Иконки для каждого элемента
- Каскадное удаление (при удалении родителя удаляются все вложенные элементы)
| Тип | Описание |
|---|---|
web |
Веб-ссылка (URL) |
file |
Файл на диске |
folder |
Папка |
program |
Программа/приложение |
script |
Скрипт |
- Создание, редактирование, удаление ссылок
- Диалог создания/редактирования ссылки с полями: имя, URL, тип, аргументы, браузер, иконка
- Массовые операции: пакетное создание, обновление, удаление, перемещение (до 5000 элементов за раз, настраивается через
limits.bulk_operation_max_batch_size) - Уникальность:
UNIQUE(category_id, name, url, args)
- Панель Избранное в верхней панели быстрого доступа (лимит:
ui.max_favorites, по умолчанию 10) - Панель Недавние — ссылки, использованные в последнее время
- Переключение статуса «Избранное» одним кликом
- Полноценный текстовый поиск по имени, URL, заметкам и аргументам ссылок
- Дебаунс 300 мс для плавной работы (
main_window._SEARCH_DEBOUNCE_MS)
- Поле заметок для каждой ссылки
- Редактирование заметок через контекстное меню
- Левая панель — дерево Сфер → Разделов → Категорий
- Высококачественная отрисовка иконок через кастомный делегат
- Drag & Drop для переупорядочивания и перемещения элементов
- Центральная область — визуальная сетка категорий (Tiles)
- Кастомный делегат с отрисовкой иконки + имени
- Hover-эффекты, контекстное меню
- Ленивая загрузка иконок
- Табличный вид ссылок с колонками: Избранное, Имя, Последнее открытие, Заметки
- Дисковый кэш иконок с LRU-политикой (лимит файлов: 500, настраивается через
icon_cache_max_files) - Drag & Drop для перемещения ссылок
- Панель Избранного и Недавних
- Панель быстрого добавления
- Переключатель Сфер (Spheres Bar)
- Путь к текущему элементу
- Статус базы данных
- Количество ссылок
- Потокобезопасное управление соединениями (thread-local)
- WAL journal mode для производительности
- NORMAL synchronous, 256 MB memory-mapped I/O
- Настраиваемый размер кэша через переменную окружения
APP_DB_CACHE_SIZE_KIB - Контекстный менеджер транзакций с автооткатом
- Проверка здоровья соединения (ping)
- Логирование времени выполнения всех операций
- 6 миграций: начальная схема, добавление
browser_key, изменение уникального ограничения, индексы NOCASE, индексы производительности, индекс позиции избранного - Автоматический запуск миграций при инициализации
- Автоматическое создание резервных копий SQLite
- Настраиваемое максимальное количество копий
- Восстановление из резервной копии с проверкой целостности
- Фоновое создание/восстановление копий через воркеры
- Экспорт всей структуры (Сферы → Разделы → Категории → Ссылки) вложенным JSON
- Импорт полной структуры с восстановлением иерархии
- Экспорт отдельного раздела или категории
- Поддержка пакетов
.zipс иконками (StructureShareService)
- Парсинг HTML-экспорта закладок из всех основных браузеров (Netscape формат)
- Извлечение ссылок с категориями
- Обработка base64-иконок
- Нормализация URL
- Обнаружение профилей Chrome, Edge, Firefox
- Асинхронное сканирование профилей
- Постоянный кэш профилей
- Извлечение иконок из профилей браузеров
- Полный стек отмены для операций со структурой и ссылками
- Макрокоманды для группировки операций
- Команды: создание, обновление, удаление, пакетные операции ссылок
- Команды структуры: вставка разделов, вставка категорий
- UndoDispatcher — диспетчер результатов отмены/повтора (регионы инвалидации, уведомления об ошибках)
- Перетаскивание в дереве структуры для переупорядочивания
- Перетаскивание ссылок между категориями
- Кастомные pixmap для перетаскивания
- MoveOperationsHandler для обработки операций перемещения
| Тема | Описание |
|---|---|
| Light | Светлая тема |
| Dark | Тёмная тема |
| Dreamy Room | Декоративная тема |
| Matrix | Хакерская тема (зелёный на чёрном) |
| Violet Pulse | Фиолетовая тема |
- Загрузка QSS-файлов с LRU-кэшированием
- Блоки переопределения стилей
- Инъекция размера шрифта
- Пользовательские темы в отдельной директории
- Импорт тем из
.zip-пакетов с валидацией - Регистр тем (ThemeRegistry) с кэшированием метаданных
- English (Английский)
- Ukrainian (Украинский)
- Russian (Русский)
- French (Французский)
- Spanish (Испанский)
- German (Немецкий)
- Переключение языка без перезапуска приложения
LanguageService— синглтон с сигналомlanguageChanged- Миксин
ReTranslatableдля автоматического обновления текста UI - Файлы переводов:
.ts(исходные) и.qm(компилированные)
40+ зарегистрированных комбинаций клавиш:
| Категория | Примеры |
|---|---|
| Глобальные | F1–F8, Ctrl+Alt+комбинации |
| Таблица | Ctrl+A, Ctrl+F, Ctrl+X, Ctrl+C, Ctrl+V, Ctrl+N, Ctrl+D |
| Редактирование | Ctrl+Z, Ctrl+Y, Ctrl+X, Ctrl+C, Ctrl+V, Del, Ctrl+A |
| Панель доступности | Alt+1–9 |
- Полностью настраиваемые через настройки
- Обнаружение конфликтов между комбинациями
- Централизованный реестр
HotkeyManager
Поделиться ссылками через 10 каналов:
| Платформа | Способ |
|---|---|
| Telegram | t.me/share/url |
| X (Twitter) | twitter.com/intent/tweet |
facebook.com/sharer |
|
linkedin.com/sharing |
|
pinterest.com/pin/create |
|
api.whatsapp.com/send |
|
| Viber | viber://forward (с фоллбэкоп на буфер обмена) |
| Email (mailto) | mailto: с шаблоном |
| Email Client | Открытие системного почтового клиента |
| Gmail | mail.google.com/mail |
| Буфер обмена | Копирование текста |
- Фоновая проверка доступности ссылок (DNS, HTTP-статус, SSL)
- BadUrlCheckWorker — многопоточный воркер
- Диалог BadUrlCleanupDialog с прогрессом
- Пакетное удаление недоступных ссылок
- Автоматическая загрузка фавиконов для веб-ссылок
- IconRefreshWorker — фоновый пул потоков
- Кэширование иконок с LRU и негативным кэшем
- Миграция иконок ICO → PNG
- QSettings (INI-формат) — тема, размер шрифта, горячие клавиши, макс. кол-во резервных копий, последний выбор в дереве, сортировка таблицы
- settings.json — общие настройки приложения (пути, лимиты, интервалы)
- Размеры окон и панелей
- Размеры иконок и плиток
- Лимиты панелей
- Задержки запуска
- Настройки логирования
- Параметры базы данных
- WAL mode — параллельное чтение/запись в SQLite
- Memory-mapped I/O (256 МБ) — быстрый доступ к данным
- LRU-кэши — для иконок, QSS, тем
- TTLCache (cachetools) — кэш структуры: maxsize=128, TTL=300 сек (5 мин)
- Ленивая загрузка — иконки загружаются по мере необходимости
- Фоновые воркеры — все тяжёлые операции в фоновом потоке
- Дебаунс поиска — 300 мс
- Кэширование структуры — 5 минут TTL (cachetools)
- Потокобезопасные соединения — thread-local management
- MVC/MVP с паттерном Facade
- Слой сервисов — изоляция бизнес-логики от UI
- Слой бизнес-контроллеров — StructureBusinessLogic, LinksBusinessLogic
- UI-контроллеры — ActionController, MenuController, ThemeController, TopPanelsController и др.
- Модульность — чёткое разделение на controllers, models, views, services, core
- Result[T] тип — обработка ошибок со статусами SUCCESS/FAILURE/PARTIAL
- UnitOfWork — декоратор транзакций для методов сервисов
| Диалог | Назначение |
|---|---|
| EntityDialogs (SectionDialog, CategoryDialog) | Создание/редактирование разделов и категорий |
| NoteDialog | Редактирование заметок к ссылкам |
| SettingsDialog | Настройки приложения (тема, шрифт, хоткеи) |
| LinkDialog | Создание/редактирование ссылок |
| ChromeProfileDialog | Выбор профиля Chrome |
| BrowserProfileDialog | Выбор профиля браузера для импорта закладок |
| ImportBrowserDialog | Импорт закладок из браузера |
| FileSearchDialog | Поиск файлов на диске |
| RestoreDbDialog | Выбор и восстановление резервной копии БД |
| BadUrlCleanupDialog | Проверка и удаление недоступных URL |
| AsyncOperationDialog | Прогресс для асинхронных операций |
| DatabaseDialogs | Подтверждение очистки избранного, восстановления БД, выбор файлов для импорта/экспорта |
37 тестовых файлов, покрывающих:
- Операции с БД (восстановление соединения, закрытие, миграции)
- Батч-операции (атомарность, команды, сервис)
- Структурные операции (кэш, сортировка, отложенные ссылки)
- UI-компоненты (стили, темы, контекстное меню, снимки дерева)
- Операции со ссылками (контроллер, обработка диалогов, команды)
- Импорт/экспорт (импорт HTML из браузера)
- Избранные/категории
- Строка состояния
- Обновление иконок, проверка URL
- Защита архитектурного импорта
| Аргумент | Описание |
|---|---|
--debug |
Режим отладки |
--log-level |
Уровень логирования |
--no-gui |
Запуск без графического интерфейса |
--version |
Версия приложения |
- Инициализация: логирование, глобальный обработчик ошибок
- Запуск Qt: создание QApplication с HiDPI
- Ресурсы: загрузка иконок, тем, переводов
- БД: инициализация SQLite, запуск миграций, дефолтные данные
- Профили: ленивая загрузка профилей браузеров
- Работа: основной цикл Qt
- Завершение: грамотное закрытие с приоритетными обработчиками
Aite Commander — это полнофункциональный менеджер закладок с:
- 4-уровневой иерархической организацией
- 5 типами ссылок (веб, файл, папка, программа, скрипт)
- Импортом из всех основных браузеров
- 5 темами оформления и 6 языками
- Полным Undo/Redo и Drag & Drop
- Социальным шарингом через 10 каналов
- Автоматическим обновлением фавиконов и проверкой ссылок
- Резервным копированием и восстановлением БД
- 40+ горячими клавишами
- 37 тестовыми файлами