From 155571e319fbbb13f010d30269f317bb10b47b01 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Sat, 18 Dec 2021 20:56:13 -0300 Subject: [PATCH] chats working. --- package.json | 3 +- src/db.js | 45 +++++++++++++----- src/layouts/MainLayout.vue | 5 +- src/pages/Chat.vue | 92 ++++++++++++++++++++++-------------- src/pages/Home.vue | 24 +++++----- src/pages/Messages.vue | 14 +++--- src/pages/Profile.vue | 2 +- yarn.lock | 96 ++++++++++++++++++++++++++++---------- 8 files changed, 188 insertions(+), 93 deletions(-) diff --git a/package.json b/package.json index 1d74289..19487ca 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,8 @@ "dependencies": { "@quasar/extras": "^1.0.0", "core-js": "^3.6.5", - "crypto": "^1.0.1", "identicon.js": "^2.3.3", - "nostr-tools": "^0.10.3", + "nostr-tools": "^0.11.0", "pouchdb-adapter-idb": "6", "pouchdb-core": "6", "pouchdb-mapreduce": "6", diff --git a/src/db.js b/src/db.js index 0e313d8..5c12bec 100644 --- a/src/db.js +++ b/src/db.js @@ -92,6 +92,39 @@ export function onNewHomeFeedNote(onNewEvent = () => {}) { return changes } +export async function dbGetMessages(peerPubKey, limit = 50, since) { + let result = await db.query('main/messages', { + include_docs: true, + descending: false, + startkey: [peerPubKey, since], + endkey: [peerPubKey, {}], + limit + }) + return result.rows.map(r => r.doc) +} + +export function onNewMessage(peerPubKey, onNewEvent = () => {}) { + // listen for changes + let changes = db.changes({ + live: true, + since: 'now', + include_docs: true, + filter: '_view', + view: 'main/messages' + }) + + changes.on('change', change => { + if ( + change.doc.pubkey === peerPubKey || + change.doc.tags.find(([t, v]) => t === 'p' && v === peerPubKey) + ) { + onNewEvent(change.doc) + } + }) + + return changes +} + export async function dbGetMentions(ourPubKey, limit = 20, skip = 0) { let result = await db.query('main/mentions', { include_docs: true, @@ -104,18 +137,6 @@ export async function dbGetMentions(ourPubKey, limit = 20, skip = 0) { return result.rows.map(r => r.doc) } -export async function dbGetMessages(peerPubKey, limit = 50, skip = 0) { - let result = await db.query('main/messages', { - include_docs: true, - descending: true, - startkey: [peerPubKey, {}], - endkey: [peerPubKey], - limit, - skip - }) - return result.rows.map(r => r.doc) -} - export async function dbGetProfile(pubkey) { let result = await db.query('main/profiles', { include_docs: true, diff --git a/src/layouts/MainLayout.vue b/src/layouts/MainLayout.vue index 51dfd8e..ffe82c9 100644 --- a/src/layouts/MainLayout.vue +++ b/src/layouts/MainLayout.vue @@ -119,7 +119,7 @@
Following
- + +
+ When you follow someone they will show up here. +
diff --git a/src/pages/Chat.vue b/src/pages/Chat.vue index 1a8e509..6518b43 100644 --- a/src/pages/Chat.vue +++ b/src/pages/Chat.vue @@ -1,5 +1,5 @@