From 1a9a31b45b3d6e255608a144eb1e0db3d2439581 Mon Sep 17 00:00:00 2001 From: Jonathan Staab Date: Thu, 19 Jan 2023 09:10:07 -0800 Subject: [PATCH] Add DMs --- README.md | 11 +- src/App.svelte | 32 ++++-- src/agent/data.js | 12 +- src/agent/keys.js | 42 +++++-- src/agent/pool.js | 7 +- src/app/cmd.js | 11 +- src/app/index.js | 9 +- src/app/messages.js | 35 ++++++ src/partials/Channel.svelte | 178 +++++++++++++++++++++++++++++ src/partials/Room.svelte | 40 ++++--- src/routes/Chat.svelte | 35 ++++-- src/routes/ChatRoom.svelte | 218 +++++++----------------------------- src/routes/Messages.svelte | 57 ++++++++++ src/routes/Person.svelte | 6 +- src/views/ChatEdit.svelte | 3 +- 15 files changed, 462 insertions(+), 234 deletions(-) create mode 100644 src/app/messages.js create mode 100644 src/partials/Channel.svelte create mode 100644 src/routes/Messages.svelte diff --git a/README.md b/README.md index f4b5ea4c..14aa04cb 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,8 @@ If you like Coracle and want to support its development, you can donate sats via - [x] Mentions - [x] Persist and load relay list - [x] NIP 05 -- [ ] Direct messages https://github.com/nbd-wtf/nostr-tools/blob/master/nip04.ts +- [ ] Direct messages using NIP 04 +- [ ] Deploy coracle relay, set better defaults - [ ] Image uploads - Use dufflepud. Default will charge via lightning and have a tos, others can self-host and skip that. - Add banner field to profile @@ -46,11 +47,13 @@ If you like Coracle and want to support its development, you can donate sats via ## Current - [ ] Figure out migrations from previous version -- [ ] Fix search -- [ ] Deploy coracle relay, set better defaults +- [ ] Fix notes search - [ ] Chat - [ ] Figure out which relays to use - - [ ] Add petnames for channels - join/leave from list page? + - [ ] Add petnames for channels + - [ ] Add back button + - [ ] Create Room -> open modal, choose dm or public room + - [ ] Add DM button to profile pages ## 0.2.7 diff --git a/src/App.svelte b/src/App.svelte index 2024d387..5fa3c8dc 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -2,7 +2,7 @@ import "@fortawesome/fontawesome-free/css/fontawesome.css" import "@fortawesome/fontawesome-free/css/solid.css" - import {pluck} from 'ramda' + import {find, pluck} from 'ramda' import {onMount} from "svelte" import {writable, get} from "svelte/store" import {fly, fade} from "svelte/transition" @@ -12,7 +12,7 @@ import {displayPerson, isLike} from 'src/util/nostr' import {timedelta, now} from 'src/util/misc' import {keys, user, pool, getRelays} from 'src/agent' - import {modal, toast, settings, alerts} from "src/app" + import {modal, toast, settings, alerts, messages} from "src/app" import {routes} from "src/app/ui" import Anchor from 'src/partials/Anchor.svelte' import Spinner from 'src/partials/Spinner.svelte' @@ -39,6 +39,7 @@ import Bech32Entity from "src/routes/Bech32Entity.svelte" import Chat from "src/routes/Chat.svelte" import ChatRoom from "src/routes/ChatRoom.svelte" + import Messages from "src/routes/Messages.svelte" export let url = "" @@ -53,18 +54,27 @@ menuIsOpen.set(false) } - const {canSign} = keys const {lastCheckedAlerts, mostRecentAlert} = alerts + const {lastCheckedByPubkey, mostRecentByPubkey} = messages let menuIcon let scrollY let suspendedSubs = [] let slowConnections = [] + let hasNewMessages = false + + $: { + hasNewMessages = Boolean(find( + ([k, t]) => ($lastCheckedByPubkey[k] || 0) < t, + Object.entries($mostRecentByPubkey) + )) + } onMount(() => { if ($user) { alerts.load(getRelays(), $user.pubkey) alerts.listen(getRelays(), $user.pubkey) + messages.listen(getRelays(), $user.pubkey) } const interval = setInterval(() => { @@ -130,11 +140,16 @@ {/key} - - {#key params.roomId} + + {#key params.entity} {/key} + + {#key params.entity} + + {/key} + @@ -186,6 +201,9 @@
  • Chat + {#if hasNewMessages} +
  • @@ -232,12 +250,12 @@

    Coracle

    - {#if $mostRecentAlert > $lastCheckedAlerts} + {#if $mostRecentAlert > $lastCheckedAlerts || hasNewMessages}
    {/if}
    - {#if $canSign} + {#if keys.canSign()}