Add DM button to profile

Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
William Casarin
2022-07-03 09:23:08 -07:00
parent 471f29f7ea
commit 366293315d
10 changed files with 102 additions and 37 deletions

View File

@@ -16,12 +16,13 @@ struct DamusState {
let tips: TipCounter
let image_cache: ImageCache
let profiles: Profiles
let dms: DirectMessagesModel
var pubkey: String {
return keypair.pubkey
}
static var empty: DamusState {
return DamusState.init(pool: RelayPool(), keypair: Keypair(pubkey: "", privkey: ""), likes: EventCounter(our_pubkey: ""), boosts: EventCounter(our_pubkey: ""), contacts: Contacts(), tips: TipCounter(our_pubkey: ""), image_cache: ImageCache(), profiles: Profiles())
return DamusState.init(pool: RelayPool(), keypair: Keypair(pubkey: "", privkey: ""), likes: EventCounter(our_pubkey: ""), boosts: EventCounter(our_pubkey: ""), contacts: Contacts(), tips: TipCounter(our_pubkey: ""), image_cache: ImageCache(), profiles: Profiles(), dms: DirectMessagesModel())
}
}

View File

@@ -0,0 +1,20 @@
//
// DirectMessageModel.swift
// damus
//
// Created by William Casarin on 2022-07-03.
//
import Foundation
class DirectMessageModel: ObservableObject {
@Published var events: [NostrEvent]
init(events: [NostrEvent]) {
self.events = events
}
init() {
self.events = []
}
}

View File

@@ -8,8 +8,26 @@
import Foundation
class DirectMessagesModel: ObservableObject {
@Published var events: [(String, [NostrEvent])] = []
@Published var dms: [(String, DirectMessageModel)] = []
@Published var loading: Bool = false
func lookup_or_create(_ pubkey: String) -> DirectMessageModel {
if let dm = lookup(pubkey) {
return dm
}
let new = DirectMessageModel()
dms.append((pubkey, new))
return new
}
func lookup(_ pubkey: String) -> DirectMessageModel? {
for dm in dms {
if pubkey == dm.0 {
return dm.1
}
}
return nil
}
}

View File

@@ -44,7 +44,7 @@ class HomeModel: ObservableObject {
@Published var new_events: NewEventsBits = NewEventsBits()
@Published var notifications: [NostrEvent] = []
@Published var dms: [(String, [NostrEvent])] = []
@Published var dms: DirectMessagesModel = DirectMessagesModel()
@Published var events: [NostrEvent] = []
@Published var loading: Bool = false
@Published var signal: SignalModel = SignalModel()
@@ -372,10 +372,10 @@ class HomeModel: ObservableObject {
}
}
for (pk, _) in dms {
for (pk, _) in dms.dms {
if pk == the_pk {
found = true
inserted = insert_uniq_sorted_event(events: &(dms[i].1), new_ev: ev) {
inserted = insert_uniq_sorted_event(events: &(dms.dms[i].1.events), new_ev: ev) {
$0.created_at < $1.created_at
}
@@ -386,14 +386,18 @@ class HomeModel: ObservableObject {
if !found {
inserted = true
dms.append((the_pk, [ev]))
let model = DirectMessageModel(events: [ev])
dms.dms.append((the_pk, model))
}
if inserted {
handle_last_event(ev: ev, timeline: .dms)
dms = dms.sorted { a, b in
a.1.last!.created_at > b.1.last!.created_at
dms.dms = dms.dms.sorted { a, b in
if a.1.events.count > 0 && b.1.events.count > 0 {
return a.1.events.last!.created_at > b.1.events.last!.created_at
}
return true
}
}
}