Cache

Panorama técnico de tudo que o InkShelf guarda em disco fora do banco Room, por que existe cada cache, e como ele sabe quando um dado guardado não serve mais.

O que é cacheado

CacheOndePor quê
Miniaturas de capacache/covers/{fileId}.jpgEvita reabrir e decodificar o arquivo de origem toda vez que uma capa precisa ser exibida — ver Sistema de Capas
Arquivo de arquivo compactado reaproveitávelcache/reader_archives/{fileId}.{ext}Uma cópia local do CBZ/CBR/PDF de origem, para não reabrir a URI do SAF a cada página virada
Índice de páginas do arquivocache/reader_archives/{fileId}.index (companheiro do arquivo acima)Lista já resolvida de entradas de página em ordem natural, para não reler o índice do arquivo compactado inteiro a cada abertura
Páginas extraídascache/pages/{fileId}/Páginas individuais já decodificadas, quando aplicável ao formato
Livro EPUB extraídocache/epub_books/HTML dos capítulos e imagens já descompactados do EPUB de origem
Paginação de capítulo EPUBTabela chapter_pagination_cache (Room, não é arquivo em disco)Contagem de páginas por capítulo, sob uma combinação de zoom/viewport — ver Modelo de Dados

Validação por impressão digital, não por tempo

O arquivo compactado reaproveitável e seu índice de páginas não expiram por tempo — eles são validados por uma "impressão digital" do arquivo de origem, calculada a partir de metadados do próprio SAF (data de última modificação + tamanho, concatenados). Antes de reaproveitar um arquivo em cache, o app recalcula essa impressão digital do arquivo original e compara com a que foi salva no momento do cache; se não baterem — porque o arquivo original foi substituído ou modificado fora do app —, o cache é descartado e reconstruído do zero. Isso evita tanto reprocessamento desnecessário (arquivo não mudou, reaproveita) quanto dados obsoletos (arquivo mudou, detecta e invalida).

As capas seguem uma lógica mais simples: permanecem em cache indefinidamente até serem explicitamente invalidadas (ação "atualizar capa", limpeza manual, ou remoção do arquivo da biblioteca).

Limite de tamanho e remoção automática

Um limite configurável de armazenamento (ver Armazenamento) aciona remoção automática por LRU — os arquivos cujo carimbo de modificação mais recente (aproximação de "última vez lido") é mais antigo são removidos primeiro — mas essa política atua só sobre o cache do leitor (páginas + arquivos reaproveitáveis), não sobre capas nem sobre o banco de dados. O cálculo do orçamento disponível para o leitor desconta o espaço ocupado pelo que não pode ser removido automaticamente, para que o limite configurado pelo usuário reflita o consumo total real do app, não só a fração removível.

Limpeza ligada ao ciclo de vida da biblioteca

Além do limite de tamanho, todo cache (capas, páginas, arquivos reaproveitáveis, EPUBs extraídos) é podado sempre que a biblioteca é sincronizada: arquivos que saíram da biblioteca — apagados, movidos pra fora, ou porque a pasta raiz foi removida — têm seu cache correspondente apagado nessa mesma passada, sem esperar o limite de tamanho ser atingido. Ver Scanner.