Skip to content

Latest commit

 

History

History
147 lines (96 loc) · 7.8 KB

README.es.md

File metadata and controls

147 lines (96 loc) · 7.8 KB

LibGen Mobile

F-Droid GitHub

Este es un cliente móvil no oficial para el servicio de Library Genesis. Es un proyecto independiente. Y además es Open Source, así que toda colaboración es bienvenida.

La app está desarrollada con Flutter y está disponible en FDroid.

De momento, el desarrollo está enfocado sólo en Android.

English version

Funcionalidades

  • Buscar libros en las secciones SciTech o Fiction de Library Genesis, ya sea por título, autor, serie, editorial, ISBN o MD5
  • En SciTech, ordenar resultados por relevancia, título, año, páginas o tamaño de archivo, y definir criterios de orden según el tipo seleccionado (más nuevos primero, más livianos, etc)
  • En Ficción, filtrar por extensión del archivo: Epub, Mobi, AZW, AZW3, FB2, PDF, RTF y TXT; filtrar por lenguage, entre una gran cantidad de opciones; y también es posible usar la opción "Comodín" para buscar usando cada palabra como comodín
  • Ver detalles acerca de los libros (dependiendo de la metadadata provista, algunos campos pueden no estar presentes): portada, título, autor, descripción, índice, año, volumen, serie, edición, editorial, ciudad, páginas, idioma, ISBN, DOI, tamaño del archivo y extensión del archivo
  • Mostrar historial de búsqueda a modo de sugerencias
  • Cambiar entre tema claro y oscuro
  • Mostrar pop-up con información de la app
  • La interfaz está disponible en múltiples idiomas: alemán (DE), inglés (US), español (ES), francés (FR), japonés (JP), polaco (PL), portugués (BR) y chino (CN, simplificado)
  • Y por supuesto, descargar cualquier libro. Se ofrecen múltiples opciones de descarga.

TODO

La siguiente es una lisata con nuevas funcionalidades deseables, dentro de los alcances del proyecto. No obstante, toda idea y feedback es bienvenido.

  • Buscar libros en otras secciones de LibGen (SciTech y Fiction ya están cubiertas)
  • Permitir cambiar de idioma, en lugar de sólo usar el del sistema
  • Traducir a otros idiomas (ver arriba la lista de idiomas ya cubiertos)
  • Mejoras de UI (animaciones más fluidas, colores, estructura, fuentes, etc)
  • Filtrar por tipo de archivo (ya implementado en Fiction, pero puede requerir un esfuerzo adicional hacerlo también en SciTech)

Se sugiere enviar primero un issue para discutir ideas, en lugar de enviar directamente un PR

Entorno de ejecución

Flutter y Dart

  • Flutter: versión 2.0.4 (channel stable)
  • Dart: versión 2.12.2

Configuraciones

Los diferentes entornos de desarrollo de la app (basicamente, development y production) son manejados por medio de las compile time variables (consultar artículo). La única variable a considerar por ahora es LIBGEN_MOBILE_API. Esto nos permite pasar la URL de la API de desarrollo o producción directamente desde la terminal.

Notar también que esta app está usando multiples flavors, por tanto se debe especificar al ejecutar la app. De lo contrario, ocurrirá el error "Gradle build failed to produce an .apk file".

Para ejecutar la app con la compile time variable más el flavor correcto se debe usar el siguiente comando:

flutter run --dart-define=LIBGEN_API_URL=<VALUE> --flavor local

Finalment, en VSCode, es buena idea definir un archivo launch.json para la depuración. Dicho archivo podría contener lo siguiente:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "emulator",
            "request": "launch",
            "type": "dart",
            "args": [
                "--dart-define=LIBGEN_API_URL=http://10.0.2.2:3000",
                "--flavor",
                "local"
            ]
        },
    ]
}

Estas flags también funcionan con flutter build apk y otros comandos similares.

IMPORTANTE

En caso de ejecutar la aplicación en un dispositivo físico, se requiere usar como valor para LIBGEN_API_URL la IP privada de la máquina en la que se está ejecutando el servidor. "http://10.0.2.2:3000" sólo permitirá la conexión a emuladores, ya que están dentro de la misma red.

API de LibGen

Library Genesis no dispone de una API pública con la que trabajar, por lo que se decidió crear un backend para consumir. Actualmente está alojado en Heroku.

Revisar repo para ejecutar una instancia propia y poder así pasar a la app la correspondiente URL como compile time variable. Es un proyecto ExpressJS; basta con clonar (o fork) el repo, instalar dependencias y ejecutar con npm start.

Durante el desarrollo, se creó un fork de esta librería no oficial para Libgen, a fin de poder acceder a los datos. Este es el repo de la versión modificada.

Dependencias

La siguiente es una lista de todos los paquetes oficiales y de terceros en uso hasta ahora.

Traducciones

  • flutter_localizations:
    • sdk: flutter
  • intl: ^0.17.1

En adición, para generar el boilerplate se usó el plugin de VScode Flutter Intl. De este modo, se recomienda usar el mismo plugin para generar automáticamente el nuevo código para las nuevas traducciones. Por desgracia, la documentación oficial parece estar desactualizada.

Peticiones a API

Manejo del estado

Descargas

Para las descargas, se está usando un fork del paquete flutter_downloader. Ver pubspec.yaml para más detalles.

Descargar desde el navegador

Renderizar contenido HTML

Para renderizar HTML, se está usando un fork del paquete simple_html_css. Ver pubspec.yaml para más detalles.

Almacenamiento local

Generación automática de código

Otros