Contexto e Desafios
Ao gerenciar cartões de estudo no Anki, a integridade dos recursos de mídia (como imagens e áudios) é fundamental. O sistema possui uma ferramenta nativa para auditar e corrigir arquivos ausentes ou órfãos. No entanto, em ambientes macOS, arquivos ocultos como .DS_Store podem poluir o diretório de mídia. Este artigo explora como a arquitetura do Anki lida com essas anomalias do sistema operacional durante a verificação.
Fluxo de Verificação de Mídia
A orquestração da auditoria de mídia é gerenciada pela classe MediaManager, localizada em pylib/anki/media.py. O ponto de entrada para essa operação delega a tarefa pesada para o backend escrito em Rust.
def verify_media_integrity(self) -> CheckMediaResponse:
backend_response = self.collection._backend.check_media()
return backend_response
Ao invés de processar a verificação no frontend Python, o método invoca check_media() no backend, retornando um objeto CheckMediaResponse com o diagnóstico completo.
Mecanismo de Filtragem e Extração via Regex
Para identificar quais arquivos estão sendo ativamente utilizados, o Anki analisa o conteúdo HTML das notas. Em pylib/anki/media.py, a extração dos nomes de arquivos é realizada através de expressões regulares:
extracted_files = []
for pattern in self.compiled_patterns:
for result in re.finditer(pattern, html_content):
file_name = result.group("fname")
is_remote = bool(re.match(r"^(https?|ftp)://", file_name, re.IGNORECASE))
if not is_remote or allow_remote_links:
extracted_files.append(file_name)
Este trecho itera sobre os padrões compilados para capturar atributos src e tags [sound:]. Note que a filtragem de arquivos de sistema como .DS_Store não ocorre nesta etapa de extração de texto, pois o foco aqui é apenas mapear as referências existentes no conteúdo das notas.
Lógica de Processamento no Backend
A exclusão de arquivos gerados pelo sistema operacional, como .DS_Store, é tratada durante a varredura do diretório físico, operação executada pelo backend em rslib/src/media/. O fluxo de auditoria segue estas etapas:
- Compilação da lista de referências de mídia extraídas das notas.
- Leitura do diretório
collection.mediano sistema de arquivos. - Aplicação de filtros para ignorar arquivos ocultos (aqueles que iniciam com
.) e diretórios. - Comparação entre as referências e os arquivos físicos válidos para detectar itens órfãos ou ausentes.
Melhores Práticas para Gerenciamento
Para manter a base de dados limpa e evitar falsos positivos durante a sincronização, é recomendável adotar as seguintes práticas:
- Executar limpezas periódicas no diretório de mídia utilizando ferramentas nativas do terminal para remover arquivos
.DS_Store. - Utilizar a interface de verificação de mídia (
qt/aqt/mediacheck.py) para validar a integridade dos recursos antes de grandes sincronizações. - Configurar ferramentas de sincronização de arquivos para ignorar explicitamente arquivos ocultos do sistema operacional.