OpenWave 0.1.5 - Fluidez

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_add tanto 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 Player foi 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/except refinados 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 como self.is_scanning e timeouts para entradas de texto.
  • openwave/ui_builder.py: Melhorias na consistência visual dos seletores.