Esta versão traz melhorias significativas na estabilidade, fluidez da interface (UI) e desempenho geral do OpenWave. O foco principal foi eliminar travamentos ao carregar grandes bibliotecas musicais e otimizar o consumo de recursos do sistema.
O que há de novo?
Escaneamento de Biblioteca em Background (Não-Bloqueante)
- Antes: Ao selecionar uma pasta com milhares de músicas, a interface do OpenWave congelava até que o Mutagen terminasse de ler os metadados de todos os arquivos.
- Agora: O processo de varredura e indexação de arquivos foi movido para uma thread secundária assíncrona (
threading.Thread). A interface permanece 100% responsiva, exibindo um estado visual de carregamento inteligente enquanto processa as faixas em segundo plano.
Busca Otimizada com Debounce (Redução de CPU)
- Implementado um mecanismo de debounce (atraso controlado de 300ms) usando
GLib.timeout_addtanto na busca global de faixas quanto no filtro de artistas. - A interface agora aguarda o usuário terminar de digitar antes de disparar a filtragem na listagem, evitando renderizações consecutivas desnecessárias e reduzindo drasticamente o uso de CPU.
Desacoplamento do Motor de Áudio (Player)
- A classe
Playerfoi completamente isolada da lógica da interface gráfica (Gtk.Window). - Toda a comunicação interna do barramento do GStreamer (mensagens de TAG, Fim de Faixa/EOS, Erros e Progresso) agora utiliza um padrão baseado em callbacks puros definidos externamente (
on_tag_found_cb,on_eos_cb, etc.), facilitando a manutenção e futuros testes automatizados.
Polimento na Interface e Gerenciamento de Estado
- Sincronização de Seleção: Correção de concorrências visuais (travamentos em loops de eventos) ao alternar entre as visões de Álbum, Artista e Playlists através da sidebar.
- Proteção contra Falhas: Adicionada maior resiliência com blocos
try/exceptrefinados em consultas críticas de tempo/duração no pipeline do GStreamer, prevenindo crashes inesperados no fechamento do app.
Detalhes Técnicos das Alterações
openwave/player.py: Remoção de referências diretas à janela principal; encapsulamento estrito do loop de progresso (_tick) e timer.openwave/window.py: Implementação do_scan_worker, adoção de flags de controle comoself.is_scanninge timeouts para entradas de texto.openwave/ui_builder.py: Melhorias na consistência visual dos seletores.