feat: ordenación y datos enriquecidos en las estanterías (autor, valoración, fechas…) #13

Closed
HBB wants to merge 2 commits from HBB:feat/shelf-title-sort into main
First-time contributor

Añade opciones de ordenación y muestra más datos por libro en las estanterías.
Son dos commits que pueden revisarse por separado.

1. Ordenación por título (A-Z / Z-A)

Menú de ordenación en la cabecera del listado, con orden predeterminado (el del
servidor), título A-Z y Z-A. Se ordena en el cliente sobre el campo sortTitle
que ya trae el .json, con un Collator (nivel PRIMARY) para respetar el orden
alfabético del idioma (æ/ø/å, etc.) e ignorar mayúsculas y acentos. El endpoint
.json ignora ?sort=, así que la ordenación no puede delegarse en el servidor.

2. Autor, valoración, páginas, idioma y fecha

  • Páginas e idioma se leen del propio Edition del .json (que ya los trae);
    el idioma se muestra como bandera, con reserva a texto.
  • Autor, valoración (con medias estrellas) y fechas de lectura (ISO) se
    obtienen raspando la página del libro (BookWyrmScraper.scrapeBookEnrichment)
    y se cachean localmente por id. La primera vez que se abre un estante se
    rellenan los libros que faltan uno a uno, de forma suave, con una barra de
    progreso; luego queda cacheado. Al abrir un libro se refrescan sus datos, y
    hay una opción de «Actualizar datos».
  • Nuevas ordenaciones en leídos: por fecha de fin y por valoración.
  • En leídos, si hay fecha de inicio y de fin, se muestra la duración «(N días)».

Como el .json ignora ?sort=, ordenar y enriquecer requieren cargar todas las
páginas, por lo que el detalle carga la estantería completa en lugar de paginar
de forma perezosa (adecuado para estanterías personales).

Textos traducidos a todos los idiomas disponibles. Probado en dispositivo sobre
la v1.1.7.

Añade opciones de ordenación y muestra más datos por libro en las estanterías. Son dos commits que pueden revisarse por separado. ## 1. Ordenación por título (A-Z / Z-A) Menú de ordenación en la cabecera del listado, con orden predeterminado (el del servidor), título A-Z y Z-A. Se ordena en el cliente sobre el campo `sortTitle` que ya trae el `.json`, con un Collator (nivel PRIMARY) para respetar el orden alfabético del idioma (æ/ø/å, etc.) e ignorar mayúsculas y acentos. El endpoint `.json` ignora `?sort=`, así que la ordenación no puede delegarse en el servidor. ## 2. Autor, valoración, páginas, idioma y fecha - **Páginas e idioma** se leen del propio Edition del `.json` (que ya los trae); el idioma se muestra como bandera, con reserva a texto. - **Autor, valoración** (con medias estrellas) **y fechas de lectura** (ISO) se obtienen raspando la página del libro (`BookWyrmScraper.scrapeBookEnrichment`) y se cachean localmente por id. La primera vez que se abre un estante se rellenan los libros que faltan uno a uno, de forma suave, con una barra de progreso; luego queda cacheado. Al abrir un libro se refrescan sus datos, y hay una opción de «Actualizar datos». - **Nuevas ordenaciones** en leídos: por fecha de fin y por valoración. - En leídos, si hay fecha de inicio y de fin, se muestra la duración «(N días)». Como el `.json` ignora `?sort=`, ordenar y enriquecer requieren cargar todas las páginas, por lo que el detalle carga la estantería completa en lugar de paginar de forma perezosa (adecuado para estanterías personales). Textos traducidos a todos los idiomas disponibles. Probado en dispositivo sobre la v1.1.7.
Añade un menú de ordenación en la cabecera del listado de una estantería
con tres opciones: orden predeterminado (el que devuelve el servidor),
título A-Z y título Z-A.

La ordenación se hace en el cliente sobre el campo `sortTitle` que ya
incluye el `.json` de la estantería (con reserva a `title`), usando un
Collator con nivel PRIMARY para respetar el orden alfabético del idioma
(p. ej. æ/ø/å en danés) e ignorar mayúsculas y acentos. El endpoint
`.json` ignora el parámetro `?sort=`, por lo que la ordenación no puede
delegarse en el servidor.

Cuando hay una ordenación activa se cargan automáticamente las páginas
restantes para ordenar la estantería completa y no solo la porción
visible. El orden predeterminado conserva el comportamiento actual.

Textos traducidos a todos los idiomas disponibles, adaptando el rango
alfabético donde procede (Α–Ω griego, А–Я ucraniano, A–Ö sueco/finés,
A–Å danés).
Enriquece las tarjetas de los estantes con datos que no están en el .json de
la estantería (solo trae id, título y portada):

- Autor, valoración del usuario (con medias estrellas) y fechas de lectura en
  ISO se obtienen raspando la página HTML de cada libro (BookWyrmScraper.
  scrapeBookEnrichment) y se cachean localmente por id (TimelineCache).
- Nº de páginas e idioma se leen del propio Edition del .json, que ya los trae
  (ShelfBookItem ampliado); el idioma se muestra como bandera con reserva a texto.

Relleno de los datos: la primera vez que se abre un estante se obtienen los
libros que falten uno a uno, de forma secuencial y suave, con una barra de
progreso etiquetada («Cargando datos… X/Y»); después queda cacheado. Al abrir
un libro se refrescan sus datos de forma oportunista usando la misma barra
(1/1), y hay una opción de «Actualizar datos» para resincronizar.

Nuevas ordenaciones en el estante de leídos: por fecha de fin (recientes/
antiguos) y por valoración (alta/baja); los libros sin dato quedan al final.
Como el .json ignora ?sort=, la ordenación y el enriquecimiento requieren
cargar todas las páginas, por lo que el detalle deja de paginar de forma
perezosa y carga la estantería completa (adecuado para estanterías personales).

Tarjeta rediseñada: título centrado arriba con las estrellas centradas debajo,
y a la izquierda autor (con icono), páginas seguidas de la bandera del idioma y
la fecha. En leídos, si hay fecha de inicio y de fin, se añade la duración de
lectura «(N días)» (inclusiva). Textos traducidos a todos los idiomas disponibles.
Author
First-time contributor

¡Gracias otra vez por fusionar y publicar tan rápido cada vez! 🙏 De verdad lo aprecio.

Una petición pequeña: si te parece, quizá esperaría un poco antes de sacar una nueva
release. Tengo una propuesta de seguimiento que se apoya en esta PR y que me encantaría
que vieras antes —por si quieres valorar la dirección o publicar ambas cosas juntas.

Es una idea sobre la ficha del libro: convertir el diálogo emergente en una página a
pantalla completa con pestañas (Resumen / Reseñas / Diverse), las estrellas bajo la
portada y las acciones en un menú de tres puntos (⋮). Reutiliza los datos de esta misma
PR. La abriré como propuesta en breve.

Sin prisa y, por supuesto, tú decides. ¡Gracias de nuevo!

¡Gracias otra vez por fusionar y publicar tan rápido cada vez! 🙏 De verdad lo aprecio. Una petición pequeña: si te parece, quizá esperaría un poco antes de sacar una nueva release. Tengo una propuesta de seguimiento que se apoya en esta PR y que me encantaría que vieras antes —por si quieres valorar la dirección o publicar ambas cosas juntas. Es una idea sobre la ficha del libro: convertir el diálogo emergente en una página a pantalla completa con pestañas (Resumen / Reseñas / Diverse), las estrellas bajo la portada y las acciones en un menú de tres puntos (⋮). Reutiliza los datos de esta misma PR. La abriré como propuesta en breve. Sin prisa y, por supuesto, tú decides. ¡Gracias de nuevo!
Owner

Estupendo, buenas idea. Me parece genial

Estupendo, buenas idea. Me parece genial
Author
First-time contributor

He actualizado esta PR sobre la v1.1.8, así que ya está al día con la rama base y lista para fusionar.

Una nota sobre el orden: la propuesta de seguimiento (la ficha del libro como página con pestañas) está construida encima de esta rama. Como las PR van desde mi fork hacia tu repo, no puedo apilarlas de forma limpia —si abriera ya la de la ficha, arrastraría también estos commits.

Así que, si esta te convence, lo ideal sería que fusionaras shelf-title-sort primero. En cuanto esté en main, rebaso la ficha para que quede como un único commit limpio y abro su PR de seguimiento enseguida.

Sin prisa, ¡y gracias de nuevo!

He actualizado esta PR sobre la v1.1.8, así que ya está al día con la rama base y lista para fusionar. Una nota sobre el orden: la propuesta de seguimiento (la ficha del libro como página con pestañas) está construida encima de esta rama. Como las PR van desde mi fork hacia tu repo, no puedo apilarlas de forma limpia —si abriera ya la de la ficha, arrastraría también estos commits. Así que, si esta te convence, lo ideal sería que fusionaras shelf-title-sort primero. En cuanto esté en main, rebaso la ficha para que quede como un único commit limpio y abro su PR de seguimiento enseguida. Sin prisa, ¡y gracias de nuevo!
HBB closed this pull request 2026-07-24 08:58:04 +00:00

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ferlagod/rocinante_android!13
No description provided.