web: save contacts works

This commit is contained in:
Thomas Mathews 2022-12-19 22:14:15 -08:00
parent 4db7250ccc
commit 643add9177
5 changed files with 73 additions and 5 deletions

View file

@ -17,7 +17,6 @@
<script defer src="js/bech32.js?v=1"></script>
<script defer src="js/nostr.js?v=7"></script>
<script defer src="js/core.js?v=1"></script>
<script defer src="js/cache.js?v=1"></script>
<script defer src="js/model.js?v=1"></script>
<script defer src="js/filters.js?v=1"></script>
<script defer src="js/contacts.js?v=1"></script>

View file

@ -1 +0,0 @@

View file

@ -23,6 +23,69 @@ function contacts_push_relay(contacts, relay) {
/* contacts_save commits the contacts data to storage.
*/
function contacts_save(contacts) {
log_warn("contacts_save not implemented");
async function contacts_save(contacts) {
function _contacts_save(ev, resolve, reject) {
const db = ev.target.result;
let tx = db.transaction("friends", "readwrite");
let store = tx.objectStore("friends");
contacts.friends.forEach((pubkey) => {
//log_debug("storing", pubkey);
store.put({pubkey});
});
tx.oncomplete = (ev) => {
db.close();
resolve();
log_debug("contacts saved successfully", contacts.friends.size);
}
tx.onerror = (ev) => {
db.close();
log_error(`tx errorCode: ${ev.request.errorCode}`);
window.alert("An error occured saving contacts. Check console.");
reject(ev);
};
};
return dbcall(_contacts_save);
}
async function contacts_load(model) {
function _contacts_load(ev, resolve, reject) {
const db = ev.target.result;
const tx = db.transaction("friends", "readonly");
const store = tx.objectStore("friends");
const cursor = store.openCursor();
cursor.onsuccess = (ev)=> {
var cursor = ev.target.result;
if (cursor) {
//log_debug("cursor val", cursor.value);
model.contacts.friends.add(cursor.value.pubkey);
cursor.continue();
} else {
db.close();
resolve();
log_debug("contacts loaded successfully");
}
}
cursor.onerror = (ev) => {
db.close();
reject(ev);
log_error("Could not load contacts.");
}
}
return dbcall(_contacts_load);
}
async function dbcall(fn) {
return new Promise((resolve, reject) => {
var open = indexedDB.open("damus", 2);
open.onupgradeneeded = (ev) => {
const db = ev.target.result;
const os = db.createObjectStore("friends", {keyPath: "pubkey"});
};
open.onsuccess = (ev) => {
fn(ev, resolve, reject);
}
open.onerror = (ev) => {
reject(err);
};
});
}

View file

@ -35,6 +35,7 @@ async function damus_web_init_ready() {
model.pubkey = await get_pubkey()
if (!model.pubkey)
return
const {RelayPool} = nostrjs
const pool = RelayPool(BOOTSTRAP_RELAYS)
const ids = {
@ -50,6 +51,12 @@ async function damus_web_init_ready() {
dms: "dms",
}
let err;
err = await contacts_load(model);
if (err) {
window.alert("Unable to load contacts.");
}
model.ids = ids
model.pool = pool
model.view_el = document.querySelector("#view")

View file

@ -112,7 +112,7 @@ function click_toggle_follow_user(el) {
contacts.friends.add(pubkey);
}
el.innerText = is_friend ? "Follow" : "Unfollow";
contacts_save();
contacts_save(contacts);
}
/* click_event opens the thread view from the element's specified element id