Pular para o conteúdo principal

Arquitetura do aplicativo

Na versão 1.0.0, o Playtrove é um aplicativo Tauri 2: a parte de trás é escrita em Rust e a interface continua em React e TypeScript, com estilos Tailwind/shadcn, exibida pelo WebView2 do Windows. Os dados ficam em SQLite, pelo rusqlite, com o SQLite embutido no aplicativo. Até a 0.7.x, o Playtrove usava Electron; a interface é a mesma.

As partes​

ParteResponsabilidade
src/rendererTelas, componentes React, busca e apresentação dos dados
src/renderer/lib/tauriApi.tsPonte que monta window.api e liga cada função a um comando do Rust
src-tauri/srcJanela, SQLite, arquivos, emuladores, controle e integrações externas, com um módulo Rust por assunto
src/sharedTipos, nomes dos avisos, idiomas e o contrato AppApi (ipc.ts)

A interface chama window.api. A ponte transforma cada função num comando do Rust de mesmo nome, em snake_case: games.setStatus chama games_set_status, em src-tauri/src/commands.rs. Os comandos conferem os valores recebidos antes de usá-los e devolvem os erros já no idioma do aplicativo. No sentido contrário, o Rust emite avisos; depois de uma alteração na biblioteca, por exemplo, library:changed faz a interface recarregar os dados.

A interface só fala com o Rust por esses comandos: ela não lê o disco nem abre endereços por conta própria. As imagens dos jogos chegam por um protocolo do aplicativo, restrito à sua pasta de imagens.

Dados e integrações​

O Rust mantém uma conexão SQLite local. Migrações atualizam a estrutura dos dados; as oito primeiras são as mesmas das versões em Electron, na mesma ordem, para que o banco da 0.7.x abra direto. Uma mudança de esquema deve acrescentar uma migração, preservando as já publicadas.

Os módulos de metadados consultam IGDB, SteamGridDB e libretro-thumbnails; os de conquistas consultam RetroAchievements e leem os arquivos locais do RPCS3. As chaves das APIs são protegidas pelo Windows (DPAPI), no mesmo formato do armazenamento seguro do Electron, para que as chaves salvas na 0.7.x continuem válidas. O DualSense é lido pelo Rust com a biblioteca hidapi.

As atualizações passam pelo atualizador do Tauri, que só instala versões assinadas com a chave do projeto.

Testes e código de referência​

TestesO que conferem
Vitest (tests/unit)A lógica da interface, os dicionários dos dois idiomas e os textos que o Rust usa
Rust (cargo test)A lógica da parte de trás, no fim de cada módulo, com banco em memória e pastas temporárias
Playwright (tests/app)Os fluxos no aplicativo em Tauri, compilado para testes e aberto com dados temporários

As integrações externas são substituídas por serviços e arquivos fictícios, e os testes nunca abrem um emulador de verdade.

Para detalhes da versão documentada, consulte o mapa do projeto em v1.0.0, o contrato da interface e os comandos do Rust.

O código em desenvolvimento pode ter organização e comportamentos posteriores aos deste guia. Veja como contribuir para preparar o ambiente.