Ver los últimos libros abiertos en la página principal del Sony Reader PRS-T1

Por defecto, en la página principal del Sony Reader PRS-T1 aparece en grande el último libro abierto y los 3 últimos libros añadidos al dispositivo. Esto es increíblemente poco útil, teniendo en cuenta que lo más probable es que mucho de los libros que se meten en el dispositivo no los vas a leer inmediatamente. También es muy poco útil si como yo siempre estás alternando entre dos libros (en mi caso entre un libro y un manga). Como lo más probable es que los insertara hace tiempo, pues cada vez que quiero cambiar, tendría que irme a la página con todos los libros y buscarlos. Un rollo vamos.

Lo peor de todo es que esto es algo que los usuario llevan pidiendo mucho tiempo, y en ninguna actualización del firmware se les ha ocurrido añadirlo como una opción.

Por suerte, existe una forma de lograr esta funcionalidad mediante una pequeña modificación en la base de datos interna del dispositivo. Esta base de datos es accesible desde el explorador de ficheros cuando el lector está conectado al ordenador, y no hay que tener miedo a hacer algo mal, porque siempre podemos borrar el fichero de la base de datos y el dispositivo creará un nuevo automáticamente.

La solución original se encuentra en este foro, pero no acaba de estar bien detallada en el mensaje inicial. Los pasos a realizar serían estos:

  1. Descargar y descomprimir el programa SQLiteSpy.
  2. Conectar el Sony Reader PRS-T1 al ordenador y copiar el fichero [unidad:]\Sony_Reader\database\books.db a una carpeta local. Es conveniente hacer una copia adicional de este fichero por si lo queremos recuperar.
  3. Lanzamos SQLiteSpy y abrimos books.db mediante File -> Open Database.
  4. Copiamos este código en la consola:

    CREATE TRIGGER recently_opened_trigger AFTER UPDATE OF reading_time ON books
    BEGIN
      UPDATE books SET added_date = 0 WHERE _id = new._id;
      UPDATE books SET added_date = reading_time WHERE reading_time NOT NULL AND _id <> new._id;
    END
    

    Codigo en la consola del SQLiteSpy para books.db

  5. Ejecutamos el código con Execute -> Execute SQL.

  6. Comprobamos que el trigger se ha añadido correctamente expandiendo en la barra de la izquierda books y a continuación Triggers, donde veremos uno llamado recently_opened_trigger.

  7. Salimos del SQLiteSpy. Cuando pregunte si queremos guardar los cambios, decimos que no, pues la base de datos ya está actualizada.

  8. Copiamos nuestro books.db al Sony Reader PRS-T1, sobreescribiendo el original.

  9. Desconectamos el dispositivo del ordenador.

Existe un problema con este método y consiste en que es incompatible con usar dos dispositivos de almacenamiento en el Sony Reader PRS-T1. Por ejemplo, en mi caso yo tengo el manga en la memoria SD mientras que los libros los tengo en la memoria interna. El problema consiste en que cuando se lee un libro, solo se lanzará el trigger de la base de datos donde está el libro, por lo que la otra base de datos se queda sin actualizar, causando un comportamiento errático de la página principal.

La solución consiste en utilizar un trigger distinto que mantenga un comportamiento consistente en la página principal. La contrapartida es que el libro que se está leyendo actualmente aparecerá dos veces, una en grande como libro actual, y otra en pequeño dentro del listado de los últimos leídos. Es un pequeño inconveniente pero no hay manera de evitarlo. La única solución sería usar únicamente uno de los dispositivos de almacenamiento.

El código es el siguiente:

CREATE TRIGGER recently_opened_trigger AFTER UPDATE OF reading_time ON books
BEGIN
   UPDATE books SET added_date = new.reading_time WHERE new.reading_time NOT NULL AND _id = old._id;
END

El procedimiento es el mismo explicado anteriormente, pero hay que acordarse de repetir el proceso con la base de datos de la tarjeta SD.

También es interesante decir que este método también funciona en el Sony Reader PRS-T2.