[{"data":1,"prerenderedAt":144},["ShallowReactive",2],{"project-pt-durvald":3},{"id":4,"title":5,"author":6,"body":7,"company":121,"date":122,"description":123,"extension":124,"highlight":125,"meta":126,"navigation":125,"path":127,"priority":128,"role":129,"section":130,"seo":131,"sitemap":132,"stem":133,"tags":134,"thumbnail":141,"year":142,"__hash__":143},"work\u002Fwork\u002Fpt\u002Fdurvald.md","Durvald","Salguento",{"type":8,"value":9,"toc":110},"minimark",[10,15,19,30,34,37,40,44,60,63,67,74,77,81,84,88,91,94,98,101],[11,12,14],"h2",{"id":13},"contexto","Contexto",[16,17,18],"p",{},"Durvald é um player desktop local-first para Windows, macOS e Linux, criado para devolver ao usuário o controle sobre sua coleção de música. Em vez de depender do catálogo e da conectividade de um serviço de streaming, o aplicativo indexa arquivos locais, organiza artistas e lançamentos e mantém filas, playlists e histórico no próprio dispositivo.",[16,20,21,26],{},[22,23],"img",{"alt":24,"src":25},"Interface do Durvald com biblioteca de álbuns e player persistente.","\u002Fimg\u002Fwork\u002Fdurvald\u002Fcover-durvald.jpeg",[27,28,29],"em",{},"Interface e identidade visual do Durvald.",[11,31,33],{"id":32},"problema-técnico","Problema técnico",[16,35,36],{},"Uma biblioteca local combina tarefas com características diferentes: leitura intensiva de arquivos e metadados, reprodução de áudio em tempo real, persistência transacional e uma interface que precisa responder imediatamente. Executar tudo no processo da interface bloquearia a UI e misturaria responsabilidades nativas com a camada de apresentação.",[16,38,39],{},"A solução separa responsabilidades por uma fronteira IPC. SolidJS cuida da apresentação e do estado reativo; comandos Tauri encaminham operações privilegiadas para Rust. O núcleo processa arquivos, controla o áudio, mantém a fila e persiste dados sem acoplar esses detalhes aos componentes visuais.",[11,41,43],{"id":42},"arquitetura","Arquitetura",[16,45,46,47,51,52,55,56,59],{},"O frontend é organizado em páginas, componentes, hooks e stores. A comunicação com o backend ocorre por ",[48,49,50],"code",{},"invoke",", enquanto eventos como ",[48,53,54],{},"progress-update"," e ",[48,57,58],{},"song-changed"," levam mudanças do player de volta à interface.",[16,61,62],{},"No processo nativo, Tokio coordena tarefas assíncronas; Kira faz streaming de MP3, OGG, FLAC e WAV; Lofty extrai tags, propriedades técnicas e capas; e SQLite armazena biblioteca, playlists, fila, histórico, configurações e a última sessão. Operações bloqueantes do banco usam pool de conexões e tarefas dedicadas.",[11,64,66],{"id":65},"reprodução-e-continuidade","Reprodução e continuidade",[16,68,69,70,73],{},"O player mantém uma fila ",[48,71,72],{},"VecDeque",", histórico em memória e a faixa atual. Mudanças também são espelhadas no SQLite. Um loop assíncrono detecta o fim de cada faixa, inicia o próximo item e emite o novo estado para a interface.",[16,75,76],{},"A última sessão registra faixa, progresso, volume, shuffle, repeat, snapshot da fila e contexto de origem. Isso permite retomar a experiência após fechar o aplicativo.",[11,78,80],{"id":79},"integração-e-segurança","Integração e segurança",[16,82,83],{},"A integração Last.fm implementa autenticação por token, “now playing”, scrobble e retry offline. Um rate limiter serializa chamadas para respeitar o intervalo da API. No macOS, segredos ficam no Keychain; no Windows e Linux, são cifrados com AES-256-GCM e vinculados à máquina e ao usuário. Os arquivos de áudio permanecem locais.",[11,85,87],{"id":86},"aplicativo-desktop-multiplataforma","Aplicativo desktop multiplataforma",[16,89,90],{},"O Durvald funciona nativamente em Windows, macOS e Linux. O Tauri combina a interface SolidJS com o núcleo Rust em uma aplicação desktop única, mantendo acesso controlado ao sistema de arquivos, reprodução de áudio e armazenamento de credenciais em cada sistema operacional.",[16,92,93],{},"O pipeline de produção valida TypeScript antes de gerar, com Vite, os recursos da interface que serão incorporados ao aplicativo. O núcleo Rust é verificado com Cargo e o Tauri produz os instaladores específicos de cada plataforma.",[11,95,97],{"id":96},"limites-e-evolução","Limites e evolução",[16,99,100],{},"O aplicativo já está funcional nos três sistemas operacionais suportados. As próximas etapas de qualidade são introduzir testes automatizados para stores, comandos e persistência, além de formalizar migrations do banco. A indexação também depende da consistência dos metadados presentes nos arquivos do usuário.",[16,102,103],{},[104,105,109],"a",{":rel":106,":target":107,"href":108},"noreferrer","_blank","https:\u002F\u002Fgithub.com\u002Fsalguento\u002Fdurvald","GitHub",{"title":111,"searchDepth":112,"depth":112,"links":113},"",2,[114,115,116,117,118,119,120],{"id":13,"depth":112,"text":14},{"id":32,"depth":112,"text":33},{"id":42,"depth":112,"text":43},{"id":65,"depth":112,"text":66},{"id":79,"depth":112,"text":80},{"id":86,"depth":112,"text":87},{"id":96,"depth":112,"text":97},"Autoral","2026-07","Player de música local-first com interface SolidJS e núcleo nativo em Rust","md",true,{},"\u002Fwork\u002Fpt\u002Fdurvald","2","Desenvolvedor Full Stack","featured",{"title":5,"description":123},{"loc":127},"work\u002Fpt\u002Fdurvald",[135,136,137,138,139,140],"TypeScript","SolidJS","Rust","Tauri","SQLite","Last.fm","\u002Fimg\u002Fwork\u002Fdurvald\u002Fcover-durvald-card.png",2025,"XR5XP4wIk-BtMjUySV9ksGuLeiIQwRR6Vd3_0nAVuus",1785351609745]