function json_db_items(os_name, keys, log, db) {
var txn = db.transaction([os_name], "readonly");
txn.onerror = (event)=>{
log(event);
}
var os = txn.objectStore(os_name);
let i = 0;
var str = [];
let num = keys.length;
keys.forEach((key)=>{
var readRequest = os.get(key);
readRequest.onsuccess = ()=>{
str.push("var " + os_name + "_key = " + JSON.stringify(key));
str.push("var " + os_name + "_value = " + JSON.stringify(readRequest.result));
--num;
if (num == 0) {
log(os_name);
log(str.join("\n"));
}
}
}
);
}
function open_db(name, cb) {
var request = indexedDB.open(name);
request.onsuccess = ()=>{
cb(request.result);
}
}
var so1 = ["syncMap", "preferences", "docs-show_smart_todo", "1"];
var so2 = ["syncMap", "preferences", "docs-voice_tips_shown"];
var so3 = ["syncMap", "domainFonts", "2"];
var so4 = ["syncMap", "domainFonts", "5"];
var obs_func = function(changes) {
console.log("printing txn records");
var str = [];
changes.records.forEach((value,key)=>{
console.log(key);
value.forEach((value)=>{
str.push("var " + key + "_key = IDBKeyRange.bound(" + [JSON.stringify(value.key.lower), JSON.stringify(value.key.upper), value.key.lowerOpen, value.key.upperOpen].join(",") + ")");
str.push("var " + key + "_value = " + JSON.stringify(value.value));
}
);
}
);
console.log(str.join("\n"));
}
if (observer && the_db) {
observer.unobserve(the_db);
}
var the_db;
var observer = new IDBObserver(obs_func);
function dumpDB(db) {
the_db = db;
json_db_items("Users", ["ufa1a865c6eb48d97"], console.log, db);
json_db_items("DocumentLocks", [["19OmSKoWTJrUPwoA3G2-ZHe6jPMw2voDpyStgHFXH7qI"]], console.log, db);
json_db_items("Documents", ["19OmSKoWTJrUPwoA3G2-ZHe6jPMw2voDpyStgHFXH7qI", "1HybJ594lZzyzPzZGCgf1JFwXA5rPx5Z0bO19glO-a5k"], console.log, db);
json_db_items("PendingQueues", ["19OmSKoWTJrUPwoA3G2-ZHe6jPMw2voDpyStgHFXH7qI", "1HybJ594lZzyzPzZGCgf1JFwXA5rPx5Z0bO19glO-a5k"], console.log, db);
json_db_items("SyncObjects", [so1, so2, so3, so4], console.log, db);
json_db_items("FontMetadata", ["Cambria", "Cambria|*"], console.log, db);
var txn = db.transaction(["Users", "DocumentLocks", "Documents", "PendingQueues", "SyncObjects", "FontMetadata", "PendingQueueCommands"]);
observer.observe(db, txn, {
values: true,
operationTypes: ["put", "add", "delete", "clear"]
});
}
open_db("GoogleDocs", dumpDB);
Last active
June 21, 2017 00:04
-
-
Save dmurph/0904b8bc3c58e2d8f32fb4623e41ff98 to your computer and use it in GitHub Desktop.
Extract Docs IDB State
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment