«Explorar»: encontrar un libro nuevo por materia, con Open Library como fuente #25

Closed
HBB wants to merge 0 commits from HBB:pr/explorar into main
First-time contributor

Una pantalla nueva dentro de «Buscar»: una lista de filtros que se apilan con Y, O y
NO —materia, título, idioma, año, autor y seis más—, y las obras que salen dejan
elegir edición. Lo elegido entra en la instancia por resolve-book.

Por qué Open Library y no la instancia: BookWyrm no sabe buscar por materia —su
índice cubre título, subtítulo, autor y serie—, así que «una novela negra danesa» no
se puede preguntar. Antes de importar se comprueba por ISBN si el libro ya está, para
no crear duplicados.

Esto también rehace la pantalla de buscar. Antes había cinco cosas de ancho
completo apiladas antes del primer resultado; ahora es el campo y dos chips, y luego
los resultados. El escáner, «añadir un libro» y «explorar» viven en un botón flotante
que se despliega, el mismo gesto que el de escribir en la actividad. Lo que se escribe
filtra tus estanterías al momento y sin red; preguntar a la instancia es otra cosa, y
se pide con la lupa o con la tecla de buscar del teclado.

Esto es una decisión tuya, no mía: mete una fuente externa en la aplicación. Si
prefieres que Rocinante no dependa de Open Library, cierra la PR sin más — va aparte
de la #24 justamente para que se pueda rechazar sola.

Si la #24 entra antes que esta, hay un conflicto, y es este. En
app/src/main/java/com/ferlagod/rocinante/ui/screens/search/SearchScreen.kt las dos
ramas añaden un import en el mismo renglón. Se quedan los dos:

import androidx.compose.material.icons.filled.Explore
import androidx.compose.material.icons.filled.PauseCircleOutline

No hay nada más. Lo he comprobado rebasando esta rama entera sobre la #24: los siete
commits entran solos salvo por esas dos líneas. HomeScreen.kt lo tocan las dos ramas
y aun así no choca los cambios quedan a diez renglones uno de otro, y los dos acaban
puestos. Compila y las pruebas pasan.
Una pantalla nueva dentro de «Buscar»: una lista de filtros que se apilan con Y, O y NO —materia, título, idioma, año, autor y seis más—, y las obras que salen dejan elegir edición. Lo elegido entra en la instancia por `resolve-book`. **Por qué Open Library y no la instancia:** BookWyrm no sabe buscar por materia —su índice cubre título, subtítulo, autor y serie—, así que «una novela negra danesa» no se puede preguntar. Antes de importar se comprueba por ISBN si el libro ya está, para no crear duplicados. **Esto también rehace la pantalla de buscar.** Antes había cinco cosas de ancho completo apiladas antes del primer resultado; ahora es el campo y dos chips, y luego los resultados. El escáner, «añadir un libro» y «explorar» viven en un botón flotante que se despliega, el mismo gesto que el de escribir en la actividad. Lo que se escribe filtra tus estanterías al momento y sin red; preguntar a la instancia es otra cosa, y se pide con la lupa o con la tecla de buscar del teclado. **Esto es una decisión tuya, no mía:** mete una fuente externa en la aplicación. Si prefieres que Rocinante no dependa de Open Library, cierra la PR sin más — va aparte de la #24 justamente para que se pueda rechazar sola. **Si la #24 entra antes que esta, hay un conflicto, y es este.** En `app/src/main/java/com/ferlagod/rocinante/ui/screens/search/SearchScreen.kt` las dos ramas añaden un `import` en el mismo renglón. Se quedan los dos: ```kotlin import androidx.compose.material.icons.filled.Explore import androidx.compose.material.icons.filled.PauseCircleOutline No hay nada más. Lo he comprobado rebasando esta rama entera sobre la #24: los siete commits entran solos salvo por esas dos líneas. HomeScreen.kt lo tocan las dos ramas y aun así no choca —los cambios quedan a diez renglones uno de otro—, y los dos acaban puestos. Compila y las pruebas pasan.
Explorar es una lista de filtros que se apilan con Y, O y NO y se lanza
con un botón. Se añaden desde un botón flotante: los cinco de siempre
—materia, palabra en el título, idioma, año y autor— y otros seis detrás
de «más filtros».

Todo va por el parámetro `q` con la sintaxis del índice de Open Library,
porque los parámetros sueltos solo admiten un filtro de cada clase. Los
paréntesis los pone la aplicación, agrupando de arriba abajo: su
analizador no respeta la precedencia booleana esperada, y sin ellos lo
que se lee en la lista no es lo que se busca.

Las materias vienen de `subjects_autocomplete.json`, que trae la clave
exacta. No se puede deducir del nombre: «Mystery & detective» parece
`mystery_detective` y esa clave devuelve cero libros. Por eso se busca
por `subject_key` y no se escribe una materia a mano. Lo consultado se
guarda un mes en disco y lo elegido no caduca.

Antes de importar se comprueba por ISBN si el libro ya está en la
instancia; lo elegido entra por `resolve-book`, que tiene conector para
openlibrary.org.

Dos trampas medidas contra su servidor: el campo de idioma no admite
comillas aunque el del título sí (`language:"dan"` da cero obras y
`language:dan`, 100.418), y ordenar por nota sin exigir un mínimo de
votos pone un libro de 41 votos por delante de uno de 415.
Girar el teléfono, cambiar el tamaño de letra o volver de otra
aplicación rehace la actividad, y con ella se iban los filtros que uno
acababa de montar y los libros que ya había buscado. Se guardan ahora
las filas, el orden, los resultados y la consulta con la que se
pidieron.

Se guardan como JSON con Gson y no haciendo Parcelable a `Row`, porque
`ExploreQuery` es Kotlin a secas y se prueba sin Android delante:
volverlo Parcelable por una necesidad de la pantalla lo ataría al
teléfono. Una fila que no se pueda leer al volver se descarta en vez de
reventar; perder un filtro se arregla escribiéndolo otra vez, y una
excepción al entrar en la pantalla no se arregla desde dentro.

Comprobado en el teléfono: con «Computer science» y danés puestos, un
cambio de configuración rehace la actividad —la pantalla llega a girar—
y los filtros siguen ahí.
La pantalla salía en castellano, inglés y danés; el resto de la
aplicación está en diecisiete, así que en alemán o en checo se veía
media pantalla en inglés.

Las formas de plural son las de cada lengua y no dos por costumbre:
cuatro en polaco, checo y ucraniano, tres en rumano. Y el tratamiento es
el que ya usaba cada fichero: de usted en francés, checo, ucraniano y
griego; de tú en los demás.
Antes de ver un solo libro había que pasar por cuatro cosas de ancho
completo: el aviso de la búsqueda anterior, el campo, las pestañas, el
botón de buscar y el del escáner. El primer resultado empezaba a dos
tercios de la pantalla, y todo lo que se podía pulsar pesaba igual,
aunque una sola de esas cosas sea la búsqueda.

Ahora arriba solo hay el campo y dos fichas —libros o gente—, y debajo
empiezan los resultados.

Escribir sigue filtrando las estanterías propias al momento y sin red;
preguntar a la instancia sigue siendo otra cosa, y se pide desde el
mismo campo: con la lupa de la derecha o con la tecla de buscar del
teclado, que ya funcionaba. Así la diferencia entre lo que uno tiene y
lo que hay en la instancia se mantiene sin un botón aparte que la
explique. La equis del campo limpia consulta y resultados de una vez.

El escáner y «añadir un libro» se recogen en un botón flotante que se
abre, con el nombre escrito al lado de cada icono; el escáner solo
aparece buscando libros. Es el mismo botón que la pantalla de actividad
usa para escribir, y está donde ya está la mano. Crear un libro en la
web dejaba de existir en cuanto la búsqueda encontraba algo, aunque es
justo cuando se ve que la edición que hay no es la que se tiene
delante; desde el menú se llega siempre.

El aviso de «no hay libros» baja hasta donde no ha habido resultados,
en vez de empujar el campo hacia abajo. La explicación del formato
usuario@instancia solo sale mientras no hay a quién mirar. Y la lista
deja hueco al final para que el último libro no se esconda debajo del
botón.

Las cadenas nuevas van en castellano, inglés y danés; faltan los otros
catorce idiomas.
Escribir enseña los libros que uno tiene, y ahí se acaba la lista. Es
justo el sitio donde se piensa «¿y no habrá más?», así que ahí se
ofrece: una fila con una lupa y el término escrito, que busca en la
instancia.

Hace lo mismo que la lupa del campo, pero sale sola y donde está la
vista, sin volver arriba. Desaparece en cuanto hay resultados de la
instancia —debajo está su propio apartado— y mientras se busca.

Cadena nueva en castellano, inglés y danés.
Las siete cadenas nuevas de la barra de herramientas y del aviso de
buscar en la instancia. Cada lengua lleva sus comillas: «» en catalán,
gallego, italiano y ucraniano, „“ en alemán y checo, „” en polaco y
rumano, ”” en sueco y finés, ‘’ en neerlandés y « » con espacio en
francés.
Estando en «Explorar», el botón de atrás del móvil salía de la
aplicación en vez de volver a la búsqueda, que es de donde se entra.
Ahora hace lo mismo que la flecha de arriba: primero cierra el
desplegable de añadir filtros y, si no hay nada abierto, vuelve. Las
hojas de abajo y el diálogo de ediciones ya se cerraban solos.

De paso, ese atrás solo se atiende mientras «Buscar» es la pestaña que
se ve. El carrusel tiene compuestas también las de al lado, y antes el
desplegable de filtros se quedaba con un toque dado en «Actividad».
Owner

Guau, no paras, que bien. Muchas gracias por todo el trabajo. Añadí la #24 antes y he corregido lo de los imports.

Guau, no paras, que bien. Muchas gracias por todo el trabajo. Añadí la #24 antes y he corregido lo de los imports.
ferlagod closed this pull request 2026-08-09 07:40:25 +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!25
No description provided.