mirror of
https://github.com/coracle-social/coracle.git
synced 2024-09-30 00:41:12 +00:00
Remove dexie
This commit is contained in:
parent
0cbc9874db
commit
34d1ac7fb2
@ -54,6 +54,7 @@ If you like Coracle and want to support its development, you can donate sats via
|
|||||||
|
|
||||||
# Maintenance
|
# Maintenance
|
||||||
|
|
||||||
|
- [ ] Throttle connection attempts with bad relays
|
||||||
- [ ] Stop using until to paginate, we skip a ton of stuff. Or use until per relay?
|
- [ ] Stop using until to paginate, we skip a ton of stuff. Or use until per relay?
|
||||||
- Or just stop doing loading and listen
|
- Or just stop doing loading and listen
|
||||||
- [ ] If the latest message in a dm was the user, don't show notification
|
- [ ] If the latest message in a dm was the user, don't show notification
|
||||||
|
BIN
package-lock.json
generated
BIN
package-lock.json
generated
Binary file not shown.
@ -32,7 +32,6 @@
|
|||||||
"@tsconfig/svelte": "^3.0.0",
|
"@tsconfig/svelte": "^3.0.0",
|
||||||
"classnames": "^2.3.2",
|
"classnames": "^2.3.2",
|
||||||
"compressorjs": "^1.1.1",
|
"compressorjs": "^1.1.1",
|
||||||
"dexie": "^3.2.2",
|
|
||||||
"fuse.js": "^6.6.2",
|
"fuse.js": "^6.6.2",
|
||||||
"hurdak": "github:ConsignCloud/hurdak",
|
"hurdak": "github:ConsignCloud/hurdak",
|
||||||
"husky": "^8.0.3",
|
"husky": "^8.0.3",
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
import {find, identity, nthArg, pluck} from 'ramda'
|
import {find, identity, nthArg, pluck} from 'ramda'
|
||||||
import {onMount} from "svelte"
|
import {onMount} from "svelte"
|
||||||
|
import {createMap} from 'hurdak/lib/hurdak'
|
||||||
import {writable, get} from "svelte/store"
|
import {writable, get} from "svelte/store"
|
||||||
import {fly, fade} from "svelte/transition"
|
import {fly, fade} from "svelte/transition"
|
||||||
import {cubicInOut} from "svelte/easing"
|
import {cubicInOut} from "svelte/easing"
|
||||||
@ -11,7 +12,7 @@
|
|||||||
import {globalHistory} from "svelte-routing/src/history"
|
import {globalHistory} from "svelte-routing/src/history"
|
||||||
import {displayPerson, isLike} from 'src/util/nostr'
|
import {displayPerson, isLike} from 'src/util/nostr'
|
||||||
import {timedelta, shuffle, now, sleep} from 'src/util/misc'
|
import {timedelta, shuffle, now, sleep} from 'src/util/misc'
|
||||||
import {db, keys, user, pool, getRelays} from 'src/agent'
|
import {database, keys, user, pool, getRelays} from 'src/agent'
|
||||||
import {modal, toast, settings, logUsage, alerts, messages, loadAppData} from "src/app"
|
import {modal, toast, settings, logUsage, alerts, messages, loadAppData} from "src/app"
|
||||||
import {routes} from "src/app/ui"
|
import {routes} from "src/app/ui"
|
||||||
import Anchor from 'src/partials/Anchor.svelte'
|
import Anchor from 'src/partials/Anchor.svelte'
|
||||||
@ -41,7 +42,6 @@
|
|||||||
import Chat from "src/routes/Chat.svelte"
|
import Chat from "src/routes/Chat.svelte"
|
||||||
import ChatRoom from "src/routes/ChatRoom.svelte"
|
import ChatRoom from "src/routes/ChatRoom.svelte"
|
||||||
import Messages from "src/routes/Messages.svelte"
|
import Messages from "src/routes/Messages.svelte"
|
||||||
import _db from 'src/agent/database'
|
|
||||||
|
|
||||||
export let url = ""
|
export let url = ""
|
||||||
|
|
||||||
@ -116,13 +116,14 @@
|
|||||||
|
|
||||||
// Find relays with old/missing metadata and refresh them. Only pick a
|
// Find relays with old/missing metadata and refresh them. Only pick a
|
||||||
// few so we're not sending too many concurrent http requests
|
// few so we're not sending too many concurrent http requests
|
||||||
const allRelays = await db.table('relays').toArray()
|
const staleRelays = shuffle(
|
||||||
const staleRelays = allRelays
|
await database.relays.all({
|
||||||
.filter(r => (r.refreshed_at || 0) < now() - timedelta(7, 'days'))
|
'refreshed_at:lt': now() - timedelta(7, 'days'),
|
||||||
const staleRelaysSample = shuffle(staleRelays).slice(0, 10)
|
})
|
||||||
|
).slice(0, 10)
|
||||||
|
|
||||||
const freshRelays = await Promise.all(
|
const freshRelays = await Promise.all(
|
||||||
staleRelaysSample.map(async ({url}) => {
|
staleRelays.map(async ({url}) => {
|
||||||
try {
|
try {
|
||||||
const res = await fetch(dufflepudUrl + '/relay/info', {
|
const res = await fetch(dufflepudUrl + '/relay/info', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
@ -143,7 +144,7 @@
|
|||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
db.table('relays').bulkPut(freshRelays.filter(identity))
|
database.relays.bulkPatch(createMap('url', freshRelays.filter(identity)))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close menu on click outside
|
// Close menu on click outside
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import Dexie, {liveQuery} from 'dexie'
|
|
||||||
import {pick, isEmpty} from 'ramda'
|
import {pick, isEmpty} from 'ramda'
|
||||||
import {nip05} from 'nostr-tools'
|
import {nip05} from 'nostr-tools'
|
||||||
import {noop, createMap, ensurePlural, switcherFn} from 'hurdak/lib/hurdak'
|
import {noop, createMap, ensurePlural, switcherFn} from 'hurdak/lib/hurdak'
|
||||||
@ -6,21 +5,6 @@ import {now} from 'src/util/misc'
|
|||||||
import {personKinds, Tags, roomAttrs, isRelay} from 'src/util/nostr'
|
import {personKinds, Tags, roomAttrs, isRelay} from 'src/util/nostr'
|
||||||
import database from 'src/agent/database'
|
import database from 'src/agent/database'
|
||||||
|
|
||||||
export const lq = cb => liveQuery(async () => {
|
|
||||||
try {
|
|
||||||
return await cb()
|
|
||||||
} catch (e) {
|
|
||||||
console.error(e)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
export const db = new Dexie('agent/data/db')
|
|
||||||
|
|
||||||
db.version(13).stores({
|
|
||||||
relays: '++url, name',
|
|
||||||
alerts: '++id, created_at',
|
|
||||||
})
|
|
||||||
|
|
||||||
export const updatePeople = async updates => {
|
export const updatePeople = async updates => {
|
||||||
await database.people.bulkPut(updates)
|
await database.people.bulkPut(updates)
|
||||||
}
|
}
|
||||||
|
@ -210,6 +210,8 @@ const defineTable = (name: string): Table => {
|
|||||||
const people = defineTable('people')
|
const people = defineTable('people')
|
||||||
const rooms = defineTable('rooms')
|
const rooms = defineTable('rooms')
|
||||||
const messages = defineTable('messages')
|
const messages = defineTable('messages')
|
||||||
|
const alerts = defineTable('alerts')
|
||||||
|
const relays = defineTable('relays')
|
||||||
|
|
||||||
// Helper to allow us to listen to changes of any given table
|
// Helper to allow us to listen to changes of any given table
|
||||||
|
|
||||||
@ -267,6 +269,6 @@ const getPersonWithFallback = pubkey => people.get(pubkey) || {pubkey}
|
|||||||
const clearAll = () => Promise.all(Object.keys(registry).map(clear))
|
const clearAll = () => Promise.all(Object.keys(registry).map(clear))
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
getItem, setItem, removeItem, length, clear, keys, iterate,
|
getItem, setItem, removeItem, length, clear, keys, iterate, watch,
|
||||||
watch, getPersonWithFallback, clearAll, people, rooms, messages,
|
getPersonWithFallback, clearAll, people, rooms, messages, alerts, relays,
|
||||||
}
|
}
|
||||||
|
@ -7,11 +7,11 @@ import pool from 'src/agent/pool'
|
|||||||
import keys from 'src/agent/keys'
|
import keys from 'src/agent/keys'
|
||||||
import defaults from 'src/agent/defaults'
|
import defaults from 'src/agent/defaults'
|
||||||
import database from 'src/agent/database'
|
import database from 'src/agent/database'
|
||||||
import {lq, db, processEvents} from 'src/agent/data'
|
import {processEvents} from 'src/agent/data'
|
||||||
|
|
||||||
Object.assign(window, {pool, db, database})
|
Object.assign(window, {pool, database})
|
||||||
|
|
||||||
export {pool, keys, lq, db, database}
|
export {pool, keys, database}
|
||||||
|
|
||||||
export const user = derived(
|
export const user = derived(
|
||||||
[keys.pubkey, database.people as Readable<any>],
|
[keys.pubkey, database.people as Readable<any>],
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import type {Relay} from 'nostr-tools'
|
import type {Relay} from 'nostr-tools'
|
||||||
import {relayInit} from 'nostr-tools'
|
import {relayInit} from 'nostr-tools'
|
||||||
import {uniqBy, reject, prop, find, whereEq, is} from 'ramda'
|
import {uniqBy, reject, prop, find, whereEq, is} from 'ramda'
|
||||||
import {ensurePlural} from 'hurdak/lib/hurdak'
|
import {ensurePlural, createMap} from 'hurdak/lib/hurdak'
|
||||||
import {isRelay} from 'src/util/nostr'
|
import {isRelay} from 'src/util/nostr'
|
||||||
import {sleep} from 'src/util/misc'
|
import {sleep} from 'src/util/misc'
|
||||||
import {db} from 'src/agent/data'
|
import {database} from 'src/agent'
|
||||||
|
|
||||||
let connections = []
|
let connections = []
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ const findConnection = url => find(whereEq({url}), connections)
|
|||||||
const connect = async url => {
|
const connect = async url => {
|
||||||
const conn = findConnection(url) || new Connection(url)
|
const conn = findConnection(url) || new Connection(url)
|
||||||
|
|
||||||
await db.table('relays').put({url})
|
await database.relays.bulkPatch(createMap('url', [{url}]))
|
||||||
await Promise.race([conn.connect(), sleep(5000)])
|
await Promise.race([conn.connect(), sleep(5000)])
|
||||||
|
|
||||||
if (conn.status === 'ready') {
|
if (conn.status === 'ready') {
|
||||||
|
@ -2,7 +2,7 @@ import {get} from 'svelte/store'
|
|||||||
import {groupBy, pluck, partition, propEq} from 'ramda'
|
import {groupBy, pluck, partition, propEq} from 'ramda'
|
||||||
import {synced, timedelta, batch, now} from 'src/util/misc'
|
import {synced, timedelta, batch, now} from 'src/util/misc'
|
||||||
import {isAlert, findReplyId} from 'src/util/nostr'
|
import {isAlert, findReplyId} from 'src/util/nostr'
|
||||||
import {load as _load, listen as _listen, db} from 'src/agent'
|
import {load as _load, listen as _listen, database} from 'src/agent'
|
||||||
import loaders from 'src/app/loaders'
|
import loaders from 'src/app/loaders'
|
||||||
import {annotate} from 'src/app'
|
import {annotate} from 'src/app'
|
||||||
|
|
||||||
@ -23,7 +23,7 @@ const onChunk = async (relays, pubkey, events) => {
|
|||||||
.filter(e => likesByParent[e.id])
|
.filter(e => likesByParent[e.id])
|
||||||
.map(e => annotate({...e, likedBy: pluck('pubkey', likesByParent[e.id])}, context))
|
.map(e => annotate({...e, likedBy: pluck('pubkey', likesByParent[e.id])}, context))
|
||||||
|
|
||||||
await db.table('alerts').bulkPut(annotatedNotes.concat(likedNotes))
|
await database.alerts.bulkPut(annotatedNotes.concat(likedNotes))
|
||||||
|
|
||||||
mostRecentAlert.update($t => events.reduce((t, e) => Math.max(t, e.created_at), $t))
|
mostRecentAlert.update($t => events.reduce((t, e) => Math.max(t, e.created_at), $t))
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
import {onMount} from 'svelte'
|
import {onMount} from 'svelte'
|
||||||
import {fly} from 'svelte/transition'
|
import {fly} from 'svelte/transition'
|
||||||
import {now, createScroller} from 'src/util/misc'
|
import {now, createScroller} from 'src/util/misc'
|
||||||
import {db} from 'src/agent'
|
import {database} from 'src/agent'
|
||||||
import {alerts} from 'src/app'
|
import {alerts} from 'src/app'
|
||||||
import Note from 'src/partials/Note.svelte'
|
import Note from 'src/partials/Note.svelte'
|
||||||
import Content from 'src/partials/Content.svelte'
|
import Content from 'src/partials/Content.svelte'
|
||||||
@ -18,7 +18,7 @@
|
|||||||
return createScroller(async () => {
|
return createScroller(async () => {
|
||||||
limit += 10
|
limit += 10
|
||||||
|
|
||||||
const events = await db.table('alerts').toArray()
|
const events = await database.alerts.all()
|
||||||
|
|
||||||
notes = sortBy(e => -e.created_at, events).slice(0, limit)
|
notes = sortBy(e => -e.created_at, events).slice(0, limit)
|
||||||
})
|
})
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
import {fly} from 'svelte/transition'
|
import {fly} from 'svelte/transition'
|
||||||
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 {db, database} from 'src/agent'
|
import {database} from 'src/agent'
|
||||||
|
|
||||||
let confirmed = false
|
let confirmed = false
|
||||||
|
|
||||||
@ -13,12 +13,6 @@
|
|||||||
|
|
||||||
await database.clearAll()
|
await database.clearAll()
|
||||||
|
|
||||||
try {
|
|
||||||
await db.delete()
|
|
||||||
} catch (e) {
|
|
||||||
// pass
|
|
||||||
}
|
|
||||||
|
|
||||||
// do a hard refresh so everything gets totally cleared.
|
// do a hard refresh so everything gets totally cleared.
|
||||||
// Give them a moment to see the state transition. Dexie
|
// Give them a moment to see the state transition. Dexie
|
||||||
// also apparently needs some time
|
// also apparently needs some time
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<script>
|
<script>
|
||||||
import {pluck} from 'ramda'
|
import {pluck, objOf} from 'ramda'
|
||||||
import {noop, createMap} from 'hurdak/lib/hurdak'
|
import {noop, createMap} from 'hurdak/lib/hurdak'
|
||||||
import {onMount} from 'svelte'
|
import {onMount} from 'svelte'
|
||||||
import {get} from 'svelte/store'
|
import {get} from 'svelte/store'
|
||||||
@ -9,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 {lq, pool, db, user} from "src/agent"
|
import {database, pool, user} 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"
|
||||||
|
|
||||||
@ -22,16 +22,12 @@
|
|||||||
.then(async res => {
|
.then(async res => {
|
||||||
const json = await res.json()
|
const json = await res.json()
|
||||||
|
|
||||||
for (const url of json.relays) {
|
database.relays.bulkPatch(createMap('url', json.relays.map(objOf('url'))))
|
||||||
db.table('relays').put({url})
|
|
||||||
}
|
|
||||||
}).catch(noop)
|
}).catch(noop)
|
||||||
|
|
||||||
for (const relay of defaults.relays) {
|
database.relays.bulkPatch(createMap('url', defaults.relays))
|
||||||
db.table('relays').put(relay)
|
|
||||||
}
|
|
||||||
|
|
||||||
const knownRelays = lq(() => db.table('relays').toArray())
|
const knownRelays = database.watch(relays => relays.all())
|
||||||
|
|
||||||
$: {
|
$: {
|
||||||
const joined = pluck('url', $user?.relays || [])
|
const joined = pluck('url', $user?.relays || [])
|
||||||
@ -42,14 +38,8 @@
|
|||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
return poll(1000, async () => {
|
return poll(1000, async () => {
|
||||||
const userRelays = $user?.relays || []
|
relays = ($user?.relays || [])
|
||||||
const urls = pluck('url', userRelays)
|
.map(relay => ({...database.relays.get(relay.url), ...relay}))
|
||||||
const relaysByUrl = createMap(
|
|
||||||
'url',
|
|
||||||
await db.table('relays').where('url').anyOf(urls).toArray()
|
|
||||||
)
|
|
||||||
|
|
||||||
relays = userRelays.map(relay => ({...relaysByUrl[relay.url], ...relay}))
|
|
||||||
|
|
||||||
// Attempt to connect so we can show status
|
// Attempt to connect so we can show status
|
||||||
relays.forEach(relay => pool.connect(relay.url))
|
relays.forEach(relay => pool.connect(relay.url))
|
||||||
|
@ -12,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 {lq, user, db, getRelays} from "src/agent"
|
import {database, user, 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"
|
||||||
|
|
||||||
@ -22,7 +22,7 @@
|
|||||||
let q = ''
|
let q = ''
|
||||||
let search
|
let search
|
||||||
|
|
||||||
const knownRelays = lq(() => db.table('relays').toArray())
|
const knownRelays = database.watch('relays', relays => relays.all())
|
||||||
|
|
||||||
$: {
|
$: {
|
||||||
const data = reject(({url}) => find(whereEq({url}), relays), $knownRelays || [])
|
const data = reject(({url}) => find(whereEq({url}), relays), $knownRelays || [])
|
||||||
|
@ -39,6 +39,14 @@ addEventListener('message', async ({data: {topic, payload, channel}}) => {
|
|||||||
test = v => value.includes(v)
|
test = v => value.includes(v)
|
||||||
} else if (operator === 'eq') {
|
} else if (operator === 'eq') {
|
||||||
test = equals(value)
|
test = equals(value)
|
||||||
|
} else if (operator === 'lt') {
|
||||||
|
test = v => (v || 0) < value
|
||||||
|
} else if (operator === 'lte') {
|
||||||
|
test = v => (v || 0) <= value
|
||||||
|
} else if (operator === 'gt') {
|
||||||
|
test = v => (v || 0) > value
|
||||||
|
} else if (operator === 'gte') {
|
||||||
|
test = v => (v || 0) >= value
|
||||||
} else if (operator === 'nil') {
|
} else if (operator === 'nil') {
|
||||||
test = isNil
|
test = isNil
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user