Closed Lamarcke closed 2 years ago
Atualização: aparentemente, o servidor Infura
de download aceita requisições de download diretamente do axios. Os outros são bloqueados pelo CORS.
Isso muda muita coisa: o plano agora é baixar o livro para o usuario, removendo a necessidade do "trabalho" manual.
Também estou trabalhando em uma melhora da tipagem principal do site, que é o Book
(esse type define todos os elementos existentes em um possível resultado de pesquisa, e é usado em todo o site).
Os livros dos resultados de pesquisa e da biblioteca possuiam inconsistência quanto a chave de autores, na pesquisa, essa se chamava author(s)
, e na biblioteca authors
. Isso se deve ao fato de o MongoDB realizar uma conversão ao inserir dados nos documentos.
Mudanças foram feitas no Biblioterra para acomodar essa nova mudança.
interface Book {
series: string;
title: string;
authors: string;
language: string;
file: string;
mirror1: string;
mirror2?: string;
md5: string;
topic: string;
extension: string;
size: string;
}
O sistema de leitura online já se encontra em um estado aceitável, mas eu gostaria de realizar um pouco mais de polimento antes de liberar para o publico.
Acabo de descobrir que um outro servidor de download também aceita as requisições do Bibliomar. Esse servidor, assim como o principal, não possui limitações quanto a CORS, e por isso podemos realizar o download nele também.
Estou implementando uma nova tentativa de download caso a primeira no servidor principal falhe.
Atualização: Uma mudança no schema de resultados do Biblioterra foi realizada, agora, além das propriedas anteriores (title, authors) um dado resultado de pesquisa ou entrada de biblioteca do usuario também pode conter:
progress: str | None
A partir desse progress, que é uma string epubcifi (ela é usada para determinar a localização atual pelo EpubJS), nós podemos definir se:
Dito isto, a definição do tipo Book
já foi atualizada:
interface Book {
series: string;
title: string;
authors: string;
language: string;
file: string;
mirror1: string;
mirror2?: string;
md5: string;
topic: string;
extension: string;
size: string;
// NEW
// This is only valid for library entries, and is only used in reader components. The value is an epubcifi string.
progress?: string;
}
O progresso do sistema de sincronização está bom.
Refiz a tipagem do SavedBooks
por completo, manter dois valores (arrayBuffer e informações do livro), que são instrínsicamente unidos separados apenas causou dor de cabeça.
Agora, esse é um objeto SavedBooks padrão:
// Describes a SavedBooks object, which will be used to save up to 3 books in localForage.
export type SavedBooks = {
firstBook: SavedBookEntry | null;
secondBook: SavedBookEntry | null;
thirdBook: SavedBookEntry | null;
};
E essa é a interface do objeto que vai dentro de cada parametro:
// Describes a given entry in SavedBooks, this entry is an object containing these properties.
export interface SavedBookEntry {
arrayBuffer: ArrayBuffer;
bookInfo: Book;
}
Sinceramente, estou apenas finalizando a interface do menu de aparência do leitor, e configurar states que vão ser enviados pelos livros da biblioteca (assim que vamos saber quais livros rastrear o progresso)
Falta pouco.
O leitor está finalizado.
Falta, porém, testar e confirmar a existência de quaisquer problemas.
Vamos prosseguir o trabalho da branch themes aqui.
A nova versão do site está finalizada. Basta organizar o processo de merge.
O componente está bem diferente da versão inicial, basta checar os comentários para verificar o que foi feito.