Picoripi Companion (мобільний PWA та синхронізація)
Мова: English · Українська
Picoripi Companion дозволяє перекладачам переглядати, редагувати та затверджувати терміни глосарію безпосередньо зі смартфона (iOS Safari чи Android Chrome) або планшета. Система складається з мобільного прогресивного веб-додатка (PWA), легкого сервера на FastAPI та вбудованого у настільний Picoripi механізму автоматичної фонової синхронізації.
Десктопна реалізація: core/companion_sync.py, ui/settings/companion_mixin.py. Сервер та веб-додаток: companion/server/, companion/web/. Детальний гайд розгортання: companion/README.md.
1. Налаштування на десктопі
Адреса та параметри сервера налаштовуються у вікні Settings → Companion (Ctrl+P):
| Налаштування | Призначення |
|---|---|
| Companion Server URL | Адреса вашого інстансу Companion, наприклад http://127.0.0.1:8000 або http://<server-ip>:8000. Зберігається у settings.json (companion_server_url). |
| API Token / PIN | Токен безпеки Bearer (типово: picoripi). Зберігається у settings.json (companion_api_token). |
| Automatically sync on project open and close | Чекбокс (companion_auto_sync, увімкнено типово). Автоматично підтримує узгодженість локального та серверного глосаріїв. |
| Test Connection | Перевірка доступності сервера та коректності токена. |
Автоматичний фоновий робочий процес (Auto-Sync)
Коли параметр Automatically sync on project open and close увімкнено:
- Авто-pull при запуску: через 600 мс після завантаження інтерфейсу або під час відкриття будь-якого проєкту Picoripi асинхронно запускає потік CompanionPullWorker. Якщо на телефоні було підтверджено або відредаговано терміни, локальний glossary.json оновлюється (із попереднім створенням резервної копії glossary.json.bak), структури даних гаряче оновлюються в пам'яті (glossary_mgr.refresh_from_disk()), оновлюється підсвічування синтаксису в редакторах та перезавантажується відкритий діалог глосарію.
- Розумне порівняння (Diff): якщо локальні та віддалені терміни вже однакові, changed_count = 0, і зайвий запис на диск повністю опускається зі статусом: Companion: glossary is in sync with server..
- Авто-push для нового проєкту: якщо на сервері ще немає термінів для поточного проєкту, а локальний проєкт уже містить глосарій, Picoripi автоматично відправляє його на сервер для негайної доступності з телефона.
- Авто-push при збереженні та виході: збереження змін (Ctrl+S), закриття проєкту, закриття діалогу глосарію або вихід із програми автоматично запускають фоновий CompanionPushWorker, який вивантажує оновлені терміни, контекстні репліки гри та референсні переклади на сервер.
- Дебаунс та стабільність: усі запити захищені 3-секундним дебаунсом та перевіркою existing_worker.isRunning(), що запобігає стану гонитви та повторним запитам. Тимчасова відсутність інтернету чи вимкнений сервер не викликають модальних помилок і не блокують роботу в програмі.
- Ручні дії теж виконуються у фоні: Push, Pull і Test Server Connection (вікно глосарію та Налаштування) показують невелике вікно перебігу з кнопкою Cancel; скасування спрацьовує одразу, а скасований pull не чіпає локальний глосарій. Після розв'язання конфліктів злиття фіксує той самий фоновий потік.
- Вихід не чекає на сервер, що мовчить: вікно синхронізації під час виходу здається після 6 секунд без відповіді й закривається; Skip закриває його негайно.
2. Ручна синхронізація на десктопі
Перекладач може запустити синхронізацію вручну в будь-який момент:
1. Відкрийте вікно глосарію (Glossary… / Ctrl+G).
2. Натисніть кнопку [☁ Companion Sync...] на нижній панелі.
3. Оберіть потрібну дію:
- ⬆ Push Glossary & Context to Mobile Companion: вивантажує поточні терміни, згенеровані ШІ варіанти, цитати з гри та референсні переклади на сервер.
- ⬇ Pull Reviewed Glossary from Mobile Companion: завантажує узгоджені на телефоні терміни на комп'ютер, створює локальний бекап .bak, оновлює glossary.json та гаряче перезавантажує відкриті вікна.
3. Мобільний PWA-інтерфейс та робота зі смартфона
Відкрийте http://<your-server-ip>:8000 у браузері вашого смартфона.
Встановлення як автономного додатка (PWA)
- iOS (Safari): Натисніть кнопку «Поділитися» ➔ На початковий екран (Add to Home Screen).
- Android (Chrome): Відкрийте меню (⋮) ➔ Встановити додаток (Install app) або Додати на головний екран.
Додаток запускається у повноекранному автономному режимі без адресного рядка браузера.
Основні можливості мобільного інтерфейсу
- Шапка: Компактна неонова зелена крапка статусу підключення (
.status-dot), список швидкого вибору проєкту та дія оновлення. - Категорії: Горизонтальна стрічка вкладок (
All,Characters,Locations,Itemsтощо) з лічильниками термінів. - Пошук та фільтри: Швидкий живий пошук і перемикач Needs review, який показує лише непідтверджені терміни (підтверджені терміни суворо виключаються, навіть якщо вони мають альтернативні варіанти в історії).
- Екран рев'ю терміна:
- Сенсорна навігація: Великі кнопки переходу «назад / вперед» (
[◀]та[▶]з сенсорною зоною не менше 44×38px), тактильна анімація та лічильник прогресу (X / Y). - Картка оригіналу (
О:): Відображає оригінальний термін із копіюванням у буфер одним тапом. - Поле перекладу (
П:): Зручне поле введення адаптованого розміру. - Головна дія — кнопка "✓ Confirm & Next": Підтверджує статус терміна, зберігає його та миттєво переходить до наступного неперевіреного запису.
- Пропоновані варіанти ШІ: Інтерактивні картки з перекладами та аргументацією; тап по картці одразу підставляє варіант у поле перекладу.
- Акордеони контексту та лору: Згортні секції для динамічного опису лору гри (з реальною заміною плейсхолдера
{{TERM}}), нотаток користувача й ШІ та діалогових реплік із гри з цитатами англійського оригіналу та референсного перекладу. - Ергономіка розміщення: Захист правилом
flex-shrink: 0унеможливлює сплющення нижніх блоків, природний інерційний скролінг (-webkit-overflow-scrolling: touch) та врахування безпечних зон екрана смартфонів (safe-area insets).
4. Розгортання сервера
Бекенд Companion працює на Python 3.10+ (FastAPI + Uvicorn) і зберігає глосарії проєктів у теці projects/, яку створює поруч із кодом сервера (companion/server/), з обов'язковим автоматичним збереженням бекапу .bak перед кожною модифікацією.
Варіант А: Docker Compose (Рекомендовано)
- На сервері Ubuntu/Debian:
bash git clone https://github.com/rashevskyv/Picoripi.git cd Picoripi/companion/server docker compose up -d --build - Сервер стане доступним на порту
8000.
Варіант Б: Нативний сервіс systemd на Ubuntu
- Запустіть готовий скрипт встановлення:
bash cd Picoripi sudo ./companion/server/install_ubuntu.sh <SECRET_TOKEN> 8000 - Керування сервісом:
bash sudo systemctl status picoripi-companion sudo systemctl restart picoripi-companion
5. Чого не робити
- Не залишайте типовий токен
picoripiу загальнодоступній мережі Інтернет. Задайте власний секретнийPICORIPI_COMPANION_TOKEN. - Не редагуйте один і той самий термін одночасно на комп'ютері та телефоні без попередньої синхронізації.
- Не вимикайте опцію
companion_auto_sync, якщо активно користуєтеся мобільним рев'ю паралельно з відкритим десктопним додатком.