# Модуль обновлений

Модуль обновлений обеспечивает комплексную функциональность управления обновлениями приложения для Timeline Studio, обрабатывая автоматические обновления, уведомления и пользовательские предпочтения для процесса обновления.

## Обзор

Этот модуль управляет полным жизненным циклом обновлений от проверки наличия обновлений до их загрузки и установки, предоставляя пользователям плавный и контролируемый опыт обновления через систему updater Tauri.

## Архитектура

### Компоненты

- **`update-manager.tsx`** - Основной интерфейс управления обновлениями с элементами управления
- **`update-notification.tsx`** - Toast уведомления о статусе обновлений и действиях
- **`update-settings.tsx`** - Пользовательские предпочтения поведения и планирования обновлений
- **`update-status-indicator.tsx`** - Визуальный индикатор текущего статуса обновления

### Сервисы

- **`update-machine.ts`** - XState машина состояний для управления состояниями и переходами обновлений
- **`update-service.ts`** - Основная логика обновлений и интеграция с Tauri updater

### Хуки

- **`use-update-manager.ts`** - Основной хук, предоставляющий функциональность управления обновлениями

## Возможности

### Управление обновлениями
- **Автоматическая проверка обновлений** - Периодические фоновые проверки новых версий
- **Ручная проверка обновлений** - Инициированное пользователем обнаружение обновлений
- **Управление загрузкой** - Отслеживание прогресса загрузки обновлений
- **Контроль установки** - Управляемая установка обновлений с подтверждением пользователя

### Пользовательский опыт
- **Уведомления об обновлениях** - Ненавязчивые уведомления о доступных обновлениях
- **Индикаторы прогресса** - Прогресс загрузки и установки в реальном времени
- **Контроль настроек** - Пользовательские предпочтения поведения обновлений
- **Визуализация статуса** - Четкое указание текущего состояния обновления

### Состояния обновлений (XState машина)
- `idle` - Нет активности обновлений
- `checking` - Проверка доступных обновлений
- `available` - Обновление доступно для загрузки
- `downloading` - Обновление загружается
- `downloaded` - Обновление готово к установке
- `installing` - Обновление устанавливается
- `error` - Произошла ошибка в процессе обновления

## Использование

### Основное управление обновлениями

```typescript
import { useUpdateManager } from '@/features/updates';

function App() {
  const {
    state,
    checkForUpdates,
    downloadUpdate,
    installUpdate,
    dismissUpdate
  } = useUpdateManager();

  return (
    <div>
      <button onClick={checkForUpdates}>
        Проверить обновления
      </button>
      
      {state === 'available' && (
        <button onClick={downloadUpdate}>
          Загрузить обновление
        </button>
      )}
      
      {state === 'downloaded' && (
        <button onClick={installUpdate}>
          Установить и перезапустить
        </button>
      )}
    </div>
  );
}
```

### Конфигурация настроек обновлений

```typescript
import { UpdateSettings } from '@/features/updates';

function SettingsPage() {
  return (
    <UpdateSettings
      autoCheck={true}
      checkInterval="daily"
      autoDownload={false}
      autoInstall={false}
      notificationPreferences={{
        showAvailable: true,
        showProgress: true,
        showErrors: true
      }}
    />
  );
}
```

## Интеграция с Tauri

Модуль интегрируется с встроенной системой updater Tauri:

```rust
// Конфигурация updater в tauri.conf.json
{
  "updater": {
    "active": true,
    "endpoints": ["https://releases.timeline-studio.com/updates"],
    "dialog": false,
    "pubkey": "your-public-key-here"
  }
}
```

## Опции конфигурации

### Настройки обновлений
- **Автопроверка** - Включить/отключить автоматическую проверку обновлений
- **Интервал проверки** - Частота проверки обновлений (каждый час, день, неделю)
- **Автозагрузка** - Автоматически загружать доступные обновления
- **Автоустановка** - Автоматически устанавливать загруженные обновления
- **Настройки уведомлений** - Контроль того, какие события обновлений показывать в уведомлениях

### Каналы обновлений
- **Стабильный** - Только production релизы
- **Бета** - Бета версии с новыми возможностями
- **Альфа** - Development сборки (требует opt-in)

## Обработка ошибок

Модуль предоставляет комплексную обработку ошибок для:
- **Сетевых проблем** - Неудачные проверки обновлений или загрузки
- **Ошибок установки** - Проблемы во время установки обновления
- **Конфликтов версий** - Несовместимые версии обновлений
- **Ошибок разрешений** - Недостаточные привилегии для установки

## Функции безопасности

- **Проверка подписи** - Все обновления криптографически подписаны
- **Валидация контрольной суммы** - Загруженные файлы проверяются перед установкой
- **Безопасные каналы** - Только HTTPS коммуникация для проверки обновлений
- **Согласие пользователя** - Явное подтверждение пользователя для установок

## Тестирование

### Тестирование компонентов
```bash
# Запуск тестов компонентов обновлений
bun run test src/features/updates/components

# Тест машины состояний обновлений
bun run test src/features/updates/services/update-machine.test.ts
```

### Mock сервер обновлений
```typescript
// Тестирование с mock ответами обновлений
const mockUpdateService = {
  checkForUpdates: vi.fn().mockResolvedValue({
    available: true,
    version: '1.2.0',
    downloadUrl: 'https://example.com/update.zip'
  })
};
```

## Будущие улучшения

### Планируемые возможности
- **Дифференциальные обновления** - Загрузка только измененных файлов для более быстрых обновлений
- **Возможность отката** - Способность вернуться к предыдущим версиям
- **Планирование обновлений** - Планирование обновлений на определенное время
- **Ограничение пропускной способности** - Контроль скорости загрузки обновлений
- **Многоязычная поддержка** - Локализованные сообщения и UI обновлений

### Продвинутые возможности
- **Фоновые обновления** - Тихие обновления с минимальным нарушением работы пользователя
- **Каналы обновлений** - Переключение между stable/beta/alpha каналами
- **Пользовательские источники обновлений** - Поддержка корпоративных серверов обновлений
- **Аналитика обновлений** - Отслеживание успешности и производительности обновлений

## Зависимости

- **@tauri-apps/api** - Интеграция с системой Tauri
- **xstate** - Управление машинами состояний
- **react** - UI компоненты и хуки
- **tailwindcss** - Стилизация и анимации

## Лучшие практики

1. **Контроль пользователя** - Всегда предоставлять пользователю контроль над установкой обновлений
2. **Обратная связь по прогрессу** - Показывать четкий прогресс во время загрузок и установки
3. **Восстановление после ошибок** - Предоставлять опции для повтора неудачных операций
4. **Безопасность данных** - Обеспечивать сохранность пользовательских данных во время обновлений
5. **Тестирование** - Тщательно тестировать сценарии обновлений перед релизом