Nesta versão, o núcleo do projeto foi completamente reestruturado para melhorar a manutenibilidade, testabilidade e separação de conceitos. O antigo arquivo monolítico app.py foi dividido em um pacote estruturado chamado openwave/, composto por 7 novos módulos especializados.
Nova Estrutura de Arquivos e Responsabilidades
Abaixo está a divisão da arquitetura do aplicativo e o papel de cada novo módulo:
| Arquivo / Módulo | Responsabilidade |
|---|---|
app.py |
Ponto de entrada: Apenas inicializa o GTK e abre a janela principal. |
openwave/constants.py |
Configurações: Centraliza versão, URLs e extensões de áudio suportadas. |
openwave/utils.py |
Funções puras: normalize_text, read_audio_metadata, ensure_dir, parse_version. |
openwave/updater.py |
Atualizações: Verificação de updates e download/restart em background. |
openwave/dialogs.py |
Componentes visuais: Diálogos reutilizáveis como PlaylistDialog e show_about_dialog. |
openwave/player.py |
Core de Áudio: Classe Player que encapsula o pipeline GStreamer com callbacks desacoplados. |
openwave/ui_builder.py |
Design/Estilo: Gerenciamento de CSS e funções puras de UI (build_header, sidebar_section, add_sidebar_row). |
openwave/window.py |
Orquestrador: Classe OpenWave, agora muito menor, focada apenas em coordenar os módulos. |
Benefícios Práticos desta Refatoração
- Testabilidade Isolada: A classe
Playeragora pode ser testada separadamente e seu backend pode ser substituído (ex: por outro motor de áudio) sem a necessidade de tocar na janela do app. - Execução em Background Isolada da UI: O módulo
updater.pypode ser importado e testado de forma independente, sem precisar renderizar a interface GTK. - Facilidade em Ajustes Visuais: O CSS e os builders da barra lateral (sidebar) ficaram centralizados em
ui_builder.py, tornando as modificações estéticas muito mais fáceis de ajustar visualmente. - Manutenção Segura: Adicionar um novo diálogo em
dialogs.pyficou mais seguro, eliminando o risco de quebrar a lógica principal de reprodução de áudio.