Fixed slow leaving/joining chat rooms

This commit is contained in:
Jonathan Staab 2023-02-08 09:26:50 -06:00
parent e42c217f01
commit 57451f120a
6 changed files with 22 additions and 18 deletions

View File

@ -65,8 +65,7 @@ If you like Coracle and want to support its development, you can donate sats via
# Current # Current
- [ ] Switch from threshold to percentage, make it a setting - [ ] Make threshold it a setting, or maybe avoid `load` altogether
- [ ] Try switching to rxdb https://rxdb.info/
- [ ] Add modal for follows/followers - [ ] Add modal for follows/followers
- [ ] Implement gossip model https://bountsr.org/code/2023/02/03/gossip-model.html - [ ] Implement gossip model https://bountsr.org/code/2023/02/03/gossip-model.html
- [ ] Make feeds page customizable. This could potentially use the "lists" NIP - [ ] Make feeds page customizable. This could potentially use the "lists" NIP
@ -76,6 +75,11 @@ If you like Coracle and want to support its development, you can donate sats via
# Changelog # Changelog
## 0.2.11
- [x] Converted threshold to percentage
- [x] Fixed slow leaving/joining chat rooms
## 0.2.10 ## 0.2.10
- [x] Fixed likes not showing up in alerts - [x] Fixed likes not showing up in alerts

View File

@ -1,5 +1,5 @@
import Dexie, {liveQuery} from 'dexie' import Dexie, {liveQuery} from 'dexie'
import {pick} from 'ramda' import {pick, isEmpty} from 'ramda'
import {nip05} from 'nostr-tools' import {nip05} from 'nostr-tools'
import {writable} from 'svelte/store' import {writable} from 'svelte/store'
import {noop, ensurePlural, createMap, switcherFn} from 'hurdak/lib/hurdak' import {noop, ensurePlural, createMap, switcherFn} from 'hurdak/lib/hurdak'
@ -133,7 +133,9 @@ const processProfileEvents = async events => {
} }
} }
await updatePeople(updates) if (!isEmpty(updates)) {
await updatePeople(updates)
}
} }
const processRoomEvents = async events => { const processRoomEvents = async events => {
@ -158,7 +160,7 @@ const processRoomEvents = async events => {
const room = await db.table('rooms').get(roomId) const room = await db.table('rooms').get(roomId)
// Merge edits but don't let old ones override new ones // Merge edits but don't let old ones override new ones
if (room?.edited_at > e.created_at) { if (room?.edited_at >= e.created_at) {
continue continue
} }
@ -178,7 +180,9 @@ const processRoomEvents = async events => {
} }
} }
await db.table('rooms').bulkPut(Object.values(updates)) if (!isEmpty(updates)) {
await db.table('rooms').bulkPut(Object.values(updates))
}
} }
const processMessages = async events => { const processMessages = async events => {

View File

@ -1,10 +1,9 @@
<script lang="ts"> <script lang="ts">
import {liveQuery} from 'dexie'
import {pluck} from 'ramda' import {pluck} from 'ramda'
import {nip19} from 'nostr-tools' import {nip19} from 'nostr-tools'
import {now, batch} from 'src/util/misc' import {now, batch} from 'src/util/misc'
import Channel from 'src/partials/Channel.svelte' import Channel from 'src/partials/Channel.svelte'
import {getRelays, user, db, listen, load} from 'src/agent' import {lq, getRelays, user, db, listen, load} from 'src/agent'
import {modal} from 'src/app' import {modal} from 'src/app'
import loaders from 'src/app/loaders' import loaders from 'src/app/loaders'
import cmd from 'src/app/cmd' import cmd from 'src/app/cmd'
@ -12,7 +11,7 @@
export let entity export let entity
let {data: roomId} = nip19.decode(entity) as {data: string} let {data: roomId} = nip19.decode(entity) as {data: string}
let room = liveQuery(() => db.table('rooms').where('id').equals(roomId).first()) let room = lq(() => db.table('rooms').where('id').equals(roomId).first())
const getRoomRelays = $room => { const getRoomRelays = $room => {
let relays = getRelays() let relays = getRelays()

View File

@ -1,11 +1,10 @@
<script lang="ts"> <script lang="ts">
import {liveQuery} from 'dexie'
import {nip19} from 'nostr-tools' import {nip19} from 'nostr-tools'
import {sortBy, pluck} from 'ramda' import {sortBy, pluck} from 'ramda'
import {personKinds} from 'src/util/nostr' import {personKinds} from 'src/util/nostr'
import {batch, now} from 'src/util/misc' import {batch, now} from 'src/util/misc'
import Channel from 'src/partials/Channel.svelte' import Channel from 'src/partials/Channel.svelte'
import {getRelays, user, db, listen, keys} from 'src/agent' import {lq, getRelays, user, db, listen, keys} from 'src/agent'
import {messages} from 'src/app' import {messages} from 'src/app'
import {routes} from 'src/app/ui' import {routes} from 'src/app/ui'
import cmd from 'src/app/cmd' import cmd from 'src/app/cmd'
@ -14,7 +13,7 @@
let crypt = keys.getCrypt() let crypt = keys.getCrypt()
let {data: pubkey} = nip19.decode(entity) as {data: string} let {data: pubkey} = nip19.decode(entity) as {data: string}
let person = liveQuery(() => db.table('people').get(pubkey)) let person = lq(() => db.table('people').get(pubkey))
messages.lastCheckedByPubkey.update($obj => ({...$obj, [pubkey]: now()})) messages.lastCheckedByPubkey.update($obj => ({...$obj, [pubkey]: now()}))

View File

@ -1,5 +1,4 @@
<script> <script>
import {liveQuery} from 'dexie'
import {pluck} from 'ramda' import {pluck} from 'ramda'
import {noop, createMap} from 'hurdak/lib/hurdak' import {noop, createMap} from 'hurdak/lib/hurdak'
import {onMount} from 'svelte' import {onMount} from 'svelte'
@ -10,7 +9,7 @@
import Anchor from "src/partials/Anchor.svelte" import Anchor from "src/partials/Anchor.svelte"
import Content from "src/partials/Content.svelte" import Content from "src/partials/Content.svelte"
import RelayCard from "src/partials/RelayCard.svelte" import RelayCard from "src/partials/RelayCard.svelte"
import {pool, db, user, ready} from "src/agent" import {lq, pool, db, user, ready} from "src/agent"
import {modal, settings} from "src/app" import {modal, settings} from "src/app"
import defaults from "src/agent/defaults" import defaults from "src/agent/defaults"
@ -32,7 +31,7 @@
db.table('relays').put(relay) db.table('relays').put(relay)
} }
const knownRelays = liveQuery(() => db.table('relays').toArray()) const knownRelays = lq(() => db.table('relays').toArray())
$: { $: {
const joined = pluck('url', $user?.relays || []) const joined = pluck('url', $user?.relays || [])

View File

@ -1,5 +1,4 @@
<script> <script>
import {liveQuery} from 'dexie'
import {onMount} from "svelte" import {onMount} from "svelte"
import {quantify} from 'hurdak/lib/hurdak' import {quantify} from 'hurdak/lib/hurdak'
import {last, whereEq, find, reject, propEq} from 'ramda' import {last, whereEq, find, reject, propEq} from 'ramda'
@ -13,7 +12,7 @@
import Content from "src/partials/Content.svelte" import Content from "src/partials/Content.svelte"
import Modal from "src/partials/Modal.svelte" import Modal from "src/partials/Modal.svelte"
import Heading from 'src/partials/Heading.svelte' import Heading from 'src/partials/Heading.svelte'
import {user, db, getRelays} from "src/agent" import {lq, user, db, getRelays} from "src/agent"
import {toast, modal} from "src/app" import {toast, modal} from "src/app"
import cmd from "src/app/cmd" import cmd from "src/app/cmd"
@ -23,7 +22,7 @@
let q = '' let q = ''
let search let search
const knownRelays = liveQuery(() => db.table('relays').toArray()) const knownRelays = lq(() => db.table('relays').toArray())
$: { $: {
const data = reject(({url}) => find(whereEq({url}), relays), $knownRelays || []) const data = reject(({url}) => find(whereEq({url}), relays), $knownRelays || [])