Hoy una compañera me preguntó si podía compartir sus datos de Distill. Distill es una extensión para Chrome que te alerta cuando detecta cambios en un sitio web. No permite exportar información.
Emocionante. Un problema sin solución aparente. Mío.
Todas las aplicaciones guardan sus datos en algún sitio, y una extensión de navegador es una aplicación. Sospeché que los datos de Distill estarían en la carpeta del perfil local de Chrome.
¿Dónde rayos está la base de datos de Distill?
Para descubrir la carpeta exacta tuve que usar SpaceSniffer, una herramienta que representa los archivos con un treemap e ilumina la actividad de lectura y escritura en tiempo real. Mágico.
Al hacer clic en Distill, se iluminó el culpable.
Tengo un código 9 en el radar, repito, un código 9…
Distill guarda los datos en la subcarpeta _\databases_ del perfil de usuario. Para quien sabe cómo Chrome organiza las bases de datos de las extensiones tiene sentido. La ruta entera:
C:\Users\Usuario\AppData\Local\Google\Chrome\User Data\Perfil\databases\chrome-extension_inlikjemeeknofckkjolnjbpehgadgge_0
En el directorio había un archivo sin extensión. ¿Qué rayos podía ser? Al abrirlo con mi editor favorito confirmé que se trataba de una base de datos SQLite. Bingo. Un misterio menos.
Previsible. Las extensiones usan bases de datos SQLite para almacenar información
Ahora tenía la base de datos. Pero ¿cómo iba a unir dos bases de datos SQLite sin pasar por un servidor? Una (larga) búsqueda me condujo a la utilidad SQLite Shell (sqlite3).
Por desgracia, la documentación oficial es pésima sucinta. Otra (larga) búsqueda y hallé la respuesta. Es una tontería. Basta con encadenar tres comandos: dos para sacar los dumps y uno para unirlos.
sqlite3 1.db .dump >> tmp.sql sqlite3 2.db .dump >> tmp.sql sqlite3 3.db < tmp.sql
Ejecuté los tres comandos, sobrescribí el archivo original con el fusionado, abrí Chrome y… ¡aleluya! Distill mostraba los datos de ambos usuarios. Logré el tan ansiado merge.
Me lo pasé pipa. ¿Debería preocuparme?