Синхронизация
Когда вы работаете офлайн, Scripvio сохраняет изменения в локальной очереди (SQLite на устройстве). Как только сеть возвращается, приложение автоматически опустошает эту очередь на сервер — без ручного шага в большинстве случаев.
Автоматический запуск
Заголовок раздела «Автоматический запуск»sequenceDiagram participant A as App participant L as Локальная очередь participant S as Сервер Note over A: Потеря сети A->>L: Заметки, журнал, трекер в очереди Note over A: Сеть обнаружена A->>A: Баннер Синхронизация… A->>S: flushOfflineQueue (notes) A->>S: flushOfflineQueue (journal) A->>S: flushOfflineQueue (tracking) S-->>A: Серверные id, ACK A->>L: Очередь очищена или уменьшена| Событие | Поведение |
|---|---|
| Локальное изменение | Счётчик очереди +1 — баннер Изменения ожидают…, если онлайн без sync |
| Возврат сети | Баннер Синхронизация с сервером…, затем загрузка |
| Успех | Баннер исчезает (очередь = 0) |
| Частичный / полный сбой | Сбой синхронизации… — очередь сохранена, повтор при следующем онлайн |
Приложение непрерывно слушает изменения подключения (connectivity_plus).
Что в очереди?
Заголовок раздела «Что в очереди?»Очередь объединяет несколько типов операций:
| Домен | Примеры операций |
|---|---|
| Заметки | Создания (local_…), патчи, удаления |
| Разделы | Создание, обновление, изменение порядка |
| Ссылки заметок | Структурированные стихи (local_verse_…) |
| Журнал | Создания, правки, ожидающая публикация |
| Трекер | Созданные или обновлённые чтения, молитвы, медитации |
| Напоминания (настройки) | Сохранение отложено, если API недоступен |
Один глобальный баннер отражает сумму этих очередей (не счётчик по типу в интерфейсе).
Порядок и логика отправки
Заголовок раздела «Порядок и логика отправки»| Принцип | Деталь |
|---|---|
| Последовательный flush | Заметки → журнал → трекер (при каждом переподключении) |
| Создание перед патчем | Заметка local_… создаётся на сервере до зависимых патчей |
| Сбой сети | Строки остаются в очереди (treatDioFailureAsDeferredSync: timeout, 5xx, нет сети) |
| Отменённый запрос | По умолчанию не ставится в очередь |
Порядок вручную не управляется; приложение и сервер обрабатывают зависимости (напр. ACK патча заметки).
После успешной синхронизации
Заголовок раздела «После успешной синхронизации»| Эффект | Где видно |
|---|---|
local_… → серверный id | Списки Создать, редакторы |
| Ожидающая публикация применена | Запись появляется в Библиотеке после обновления |
| Панель Трекера | Обновлена (график, календарь) |
| Ожидающие ссылки | Значки «ожидание» сняты |
Уведомления (необязательно)
Заголовок раздела «Уведомления (необязательно)»В зависимости от Уведомлений аккаунта:
- Push: может сигнализировать об окончании sync или сбое (конфигурация сервера / Firebase);
- Email: возможна сводка после sync (эволюция продукта).
Личные напоминания Трекера — локальные, независимы от этой синхронизации контента.
Публикация и sync
Заголовок раздела «Публикация и sync»| Офлайн-действие | Сообщение пользователю | После sync |
|---|---|---|
| Опубликовать заметку | Публикация в очереди (офлайн). | Заметка опубликована в Библиотеке |
| Опубликовать журнал | Публикация в очереди (офлайн). | Запись журнала опубликована |
Пока сервер не подтвердил публикацию, Библиотека может не показывать контент как опубликованный.
Несколько устройств
Заголовок раздела «Несколько устройств»| Ситуация | Риск |
|---|---|
| Одна заметка на телефоне A (офлайн) и планшете B (онлайн) | Возможен конфликт — последняя sync или правила сервера |
| Только чтение на B при работе на A | B видит старую версию, пока A не синхронизируется |
Сбой синхронизации
Заголовок раздела «Сбой синхронизации»| Симптом | Вероятная причина | Действия |
|---|---|---|
| Баннер Сбой синхронизации… | API 5xx, timeout, нестабильная сеть | Оставаться онлайн; переоткрыть приложение |
| Очередь не уменьшается | Повторяющаяся ошибка на элементе | Записать сообщение; поддержка |
| Данные всё ещё видны локально | Нормально | Ничего не «теряется» на устройстве, пока не выйдете |
| Принудительный выход офлайн | Диалог предупреждения | Подтверждать только если принимаете потерю локальных данных |
Подсказки редактора могут показывать Ожидание синхронизации или Сбой sync — всё ещё сохранено на этом устройстве на некоторых стихах.
Действия, зависящие от sync
Заголовок раздела «Действия, зависящие от sync»| Действие | Связь с sync |
|---|---|
| Экспорт PDF | Предлагает Синхронизировать перед экспортом, если очередь не пуста |
| Поиск → Добавить стих | Нужна заметка/журнал уже на сервере |
| Связь Трекер ↔ журнал | После стабильных серверных id |
| Обновление профиля | Pull профиля = сеть |
Выход и локальная очистка
Заголовок раздела «Выход и локальная очистка»При выходе Scripvio может очистить кэш и локальную очередь на этом устройстве (особенно при подтверждении офлайн с несинхронизированными данными).
При входе на новом устройстве: загрузка данных аккаунта + начальный кэш (типы событий и т. д.).
→ Профиль
Проверить, что всё синхронизировано
Заголовок раздела «Проверить, что всё синхронизировано»| Индикатор | Состояние «OK» |
|---|---|
| Баннер офлайн/sync | Отсутствует |
Заметка local_… | Заменена числовым / серверным UUID id |
| Публикация | Видна в Библиотеке |
| Экспорт PDF | Разрешён без диалога предварительной sync |
Если баннер Ожидание сохраняется онлайн: оставьте приложение на переднем плане или переоткройте его.
Можно ли синхронизировать вручную?
Отдельной кнопки в текущем интерфейсе нет — переподключение и открытие приложения перезапускает flush.
Как долго хранится очередь?
До успеха, выхода (очистка) или переустановки.
Sync использует много данных?
Отправляет изменения (JSON), а не весь каталог — разумно на мобильном.
Фоновая sync на iOS/Android?
Зависит от ОС; переоткрытие Scripvio после сети — наиболее надёжно.
Связанные руководства
Заголовок раздела «Связанные руководства»| Тема | Ссылка |
|---|---|
| Офлайн-режим | Офлайн-режим |
| FAQ | Офлайн и синхронизация |
| Заметки | Черновик и публикация |
| Библиотека | Черновики и опубликованное |