feat: adiciona funcionalidade de remoção de faixas externas e atualiza o layout da UI

This commit is contained in:
2026-02-28 14:48:02 -03:00
parent 4aa7cf2dd4
commit 02c6d8ede2
9 changed files with 401 additions and 138 deletions
+18 -9
View File
@@ -1,7 +1,7 @@
# Progresso de Implementação
**Data:** 28/02/2026
**Status:** Fases 16 concluídas + exportação de faixa implementada — compilando, testes passando, aplicação executável
**Status:** Fases 16 concluídas + exportação de faixa + exibição/remoção de faixas adicionadas + layout responsivo + progresso em tempo real — compilando, testes passando, aplicação executável
**Referência:** DEVELOPMENT_PLAN.md v1.0
---
@@ -11,8 +11,11 @@
Todas as 6 fases do plano de desenvolvimento foram implementadas. O projeto compila sem erros,
31 testes unitários passam e a aplicação pode ser executada com `cargo run`.
Após a conclusão das fases, foi implementada a funcionalidade de exportação de faixa de áudio
ou legenda diretamente da lista de faixas existentes.
Após a conclusão das fases, foram implementadas funcionalidades adicionais:
- Exportação de faixa de áudio ou legenda diretamente da lista de faixas existentes
- Exibição das faixas externas adicionadas com opção de remoção individual
- Layout responsivo com painéis fixos (cabeçalho, rodapé, barra lateral) e área central com scroll
- Progresso em tempo real via `run_ffmpeg_async` (Opção A: `std::sync::mpsc` em toda a cadeia)
---
@@ -65,6 +68,7 @@ src/
│ ├── adjust_sync.rs — altera SyncOffset de faixa externa
│ ├── edit_existing_track_sync.rs — altera SyncOffset de faixa existente
│ ├── export_track.rs — exporta faixa de áudio ou legenda para arquivo
│ ├── remove_track.rs — remove faixa externa do projeto pelo TrackId
│ ├── set_track_language.rs — altera idioma de faixa externa
│ └── generate_output.rs — constrói comando e delega ao MediaProcessorPort
@@ -91,8 +95,7 @@ src/
├── mod.rs
├── video_selector.rs — seleção do vídeo base
├── output_selector.rs — seleção do arquivo de saída (.mkv)
├── existing_track_list.rs — lista faixas detectadas + edição de offset
├── add_audio_track_form.rs — formulário: áudio externo
├── existing_track_list.rs — lista faixas detectadas + edição de offset│ ├── added_track_list.rs — lista faixas externas adicionadas + botão remover ├── add_audio_track_form.rs — formulário: áudio externo
├── add_subtitle_form.rs — formulário: legenda externa
├── sync_offset_field.rs — campo de atraso em segundos
├── language_field.rs — campo de idioma ISO 639-2
@@ -101,7 +104,7 @@ src/
---
## Testes Unitários (31/31 passando)
## Testes Unitários (33/33 passando)
### Domain — Value Objects
| Teste | Resultado |
@@ -154,6 +157,12 @@ src/
| `export_track::exporta_legenda_output_e_ultimo_argumento` | ✅ |
| `export_track::rejeita_faixa_de_video` — retorna erro para `TrackKind::Video` | ✅ |
### Application — RemoveTrack
| Teste | Resultado |
|-------|-----------|
| `remove_track::remove_faixa_existente` — faixa removida do Vec | ✅ |
| `remove_track::erro_se_id_inexistente` — retorna erro se id não existe | ✅ |
---
## Dependências (Cargo.toml)
@@ -184,8 +193,8 @@ rfd = "0.14"
### Funcional
- [x] Exportar faixa de áudio ou legenda existente para arquivo separado
- [ ] Exibição de faixas externas adicionadas com opção de remover
- [ ] Progresso em tempo real via `run_ffmpeg_async` (infrastructure já implementada, UI usa thread bloqueante por ora)
- [x] Exibição de faixas externas adicionadas com opção de remover
- [x] Progresso em tempo real via `run_ffmpeg_async` `run_ffmpeg_async` usa `std::sync::mpsc::Sender<String>`; `start_generation` cria tokio Runtime + thread encaminhadora; cada linha de stderr do FFmpeg aparece no log antes do término
- [ ] Exibição do comando gerado em modo debug
### Qualidade
@@ -194,7 +203,7 @@ rfd = "0.14"
- [ ] Corrigir warnings de `unused` e `dead_code` remanescentes
### UI
- [ ] Layout responsivo mais refinado (scroll nas listas longas)
- [x] Layout responsivo mais refinado
- [ ] Persistência do estado do projeto em disco (serde já disponível)
- [ ] Mensagens de erro mais amigáveis na UI