Pular para conteúdo

Referência — Boundary IPC

Catálogo dos comandos (invoke), eventos (emit) e tipos que cruzam a fronteira Rust ↔ TypeScript. Fonte de verdade do lado Rust: src-tauri/src/commands.rs e src-tauri/src/events.rs. Fonte de verdade do lado TS: src/types/ipc.ts (tipos) e src/lib/ipc.ts (wrappers de invoke). Sobre por que esse espelhamento é manual e quando isso deve mudar, veja Geração automática da boundary IPC.

Comandos

Comandos marcados desktop só existem em builds desktop; no mobile o wrapper TS correspondente não deve ser chamado (não há stub — a ausência é intencional, ao contrário dos comandos "espelhados com stub" descritos em Como adicionar suporte a uma plataforma). Comandos marcados mobile-only têm uma variante desktop que sempre retorna erro (mantendo a boundary idêntica entre plataformas).

Diagnóstico

Comando Retorno Descrição
health_check HealthStatus Verificação mínima de que a boundary está funcional; inclui isMobile.

Autenticação

Comando Retorno Descrição
connect_google_drive AuthStatus Abre o consentimento OAuth2 e aguarda autorização. Desktop: loopback TCP. Mobile: deep link slot2sync://oauth. Emite auth:status.
get_auth_status AuthStatus Status atual sem disparar fluxo interativo (só consulta o keyring/SecretStore).
disconnect_google_drive AuthStatus Remove o refresh token e limpa o cache de IDs de pasta (é por conta Google). Emite auth:status.

Emuladores — detecção e cadastro

Comando Retorno Descrição
pick_emulator_folder mobile-only String Abre o seletor nativo SAF e retorna a URI da árvore concedida.
detect_emulator_mobile mobile-only Option<EmulatorProfile> Reconhece o emulador numa árvore SAF testando o catálogo de profiles.toml via chamadas assíncronas ao plugin nativo.
detect_emulator Option<EmulatorProfile> Reconhece o emulador numa pasta do filesystem (desktop) via marcadores declarados em profiles.toml.
add_emulator EmulatorProfile Detecta e registra o emulador. No mobile usa o caminho assíncrono (URI SAF); no desktop, detect_emulator.
add_emulator_manual EmulatorProfile Registra um emulador com pastas informadas manualmente (fallback quando a detecção falha). Não sobrescreve um já existente.
discover_emulators Vec<DiscoveredEmulator> Varre locais conhecidos e (no Windows) o registro por emuladores do catálogo instalados. Não persiste — é sugestão.
list_emulators Vec<EmulatorProfile> Emuladores registrados.
remove_emulator void Remove o emulador do sync (manifest, categorias, conflitos, fila, stats). Não apaga nada no Drive nem localmente.

Jogos e estatísticas

Comando Retorno Descrição
list_synced_games Vec<SyncedGame> Jogos sincronizados, agregados do manifest, com serial traduzido para nome quando conhecido.
get_emulator_stats Option<EmulatorStats> Contadores acumulados de um emulador. None = nunca houve atividade.
list_emulator_stats Vec<EmulatorStats> Contadores acumulados de todos os emuladores com atividade.

Sincronização e conflitos

Comando Retorno Descrição
sync_now SyncSummary Sync manual (bidirecional), gatilho manual.
get_last_sync Option<LastSync> Último sync concluído nesta execução do app.
list_conflicts Vec<Conflict> Conflitos pendentes (ambos os lados mudaram desde o último sync).
resolve_conflict void Resolve um conflito mantendo local ou drive; desbloqueia o sync do emulador.
list_pending_ops Vec<PendingOp> Fila offline visível: arquivos cuja transferência falhou e será refeita.
retry_pending_op void Zera tentativas/backoff de uma pendência (inclusive mortas), liberando retry no próximo sync.

Categorias e exclusões por emulador

Comando Retorno Descrição
get_emulator_categories SyncCategories Categorias habilitadas (saves/savestates/config) para um emulador.
set_emulator_categories void Define quais categorias sincronizar.
set_exclude_patterns void Define padrões glob de exclusão do emulador; valida cada padrão antes de gravar.

Configurações globais

Comando Retorno Descrição
get_settings Settings Configurações do usuário; autostart é lido do SO (só desktop) e injetado na resposta.
set_autostart desktop void Liga/desliga início automático com o sistema (persistido pelo SO).
set_triggers void Liga/desliga os gatilhos automáticos de sync (startup/emulatorStart/emulatorStop). O sync manual nunca é afetado.
set_notification_level void Define o nível de notificações nativas.
set_device_name void Define o nome amigável deste dispositivo (não pode ser vazio).
set_backup_retention_days void Retenção dos backups locais em dias (0 = para sempre). Limpeza roda no próximo startup.
set_max_backup_versions void Máximo de versões arquivadas por arquivo no histórico (mínimo 1).
set_bandwidth_limits void Limites de upload/download em KB/s (0 = ilimitado); aplicados na próxima operação.
set_scan_interval_minutes void Intervalo do scan periódico em minutos (0 = desativado); o timer relê a cada ciclo.

Backups e versionamento

Comando Retorno Descrição
open_backup_folder desktop void Abre a pasta de backups locais no gerenciador de arquivos do SO (cria se não existir).
reveal_backup_path desktop void Mostra um arquivo de backup específico no gerenciador de arquivos; recusa caminhos fora da árvore de backups.
list_file_versions Vec<FileVersion> Versões arquivadas de um arquivo no histórico pré-download, mais recentes primeiro.
restore_version void Restaura uma versão arquivada por cima do arquivo atual. O estado atual é arquivado antes (nada se perde); mtime atualizado para o próximo sync reenviar ao Drive.
list_backups Vec<BackupEntry> Histórico de backups criados antes de sobrescritas (primeiro sync / resolução de conflito). Só leitura.

Avisos dispensáveis

Comando Retorno Descrição
list_dismissed_notices Vec<String> IDs de banners informativos que o usuário já dispensou.
dismiss_notice void Dispensa um banner de forma persistente e idempotente.

Eventos

Evento Payload Quando dispara
sync:started SyncStarted Início de um sync (qualquer gatilho).
sync:progress SyncProgress A cada arquivo transferido, com bytes acumulados da categoria em andamento.
sync:completed SyncSummary Fim de um sync bem-sucedido.
sync:error SyncErrorEvent Erro que interrompeu o sync. emulator: null = erro geral, não específico de um emulador.
sync:conflict Conflict Conflito detectado (ambos os lados mudaram).
auth:status AuthStatus Após connect_google_drive/disconnect_google_drive.
emulator:status EmulatorStatusEvent Emulador monitorado abriu ou fechou (process watcher).

Tipos compartilhados

Ver src/types/ipc.ts para a forma exata de cada interface (é o espelho TS oficial, gerado manualmente a partir das structs Rust com #[serde(rename_all = "camelCase")]). Tipos principais: HealthStatus, AuthStatus, Settings + TriggerSettings + NotificationLevel, EmulatorProfile + DiscoveredEmulator + DiscoverySource, SyncCategories, SyncedGame, EmulatorStats, SyncSummary + SyncProgress + SyncStarted + SyncDirection + LastSync, Conflict + ConflictResolution, PendingOp, FileVersion, BackupEntry.

Erros

Todo comando que falha rejeita com o shape AppErrorPayload { code, message, detail }. code é um enum fechado — ver a lista completa em src/types/ipc.ts (AppErrorPayload.code) e sua origem em src-tauri/src/error.rs::AppError. Adicionar uma variante exige atualizar os dois lados; o frontend localiza a mensagem pelo code e anexa o detail (texto técnico sem prefixo — caminho, nome, mensagem de lib).

Manutenção do contrato

O espelhamento é manual: toda mudança numa struct/enum/comando do lado Rust precisa da edição correspondente em src/types/ipc.ts e src/lib/ipc.ts. Não há checagem automática de drift entre os dois lados — a mitigação atual são testes de serialização do lado Rust. Ver Geração automática da boundary IPC para a decisão em aberto de adotar geração automática (ts-rs/tauri-specta).