start to extract functions out of contentview
in this case, is_friend_event Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
@@ -44,7 +44,7 @@ struct ContentView: View {
|
||||
@State var status: String = "Not connected"
|
||||
@State var active_sheet: Sheets? = nil
|
||||
@State var loading: Bool = true
|
||||
@State var damus: DamusState? = nil
|
||||
@State var damus_state: DamusState? = nil
|
||||
@State var selected_timeline: Timeline? = .home
|
||||
@State var is_thread_open: Bool = false
|
||||
@State var is_profile_open: Bool = false
|
||||
@@ -139,7 +139,7 @@ struct ContentView: View {
|
||||
|
||||
var PostingTimelineView: some View {
|
||||
ZStack {
|
||||
if let damus = self.damus {
|
||||
if let damus = self.damus_state {
|
||||
TimelineView(events: $friend_events, damus: damus)
|
||||
}
|
||||
PostButtonContainer
|
||||
@@ -186,7 +186,7 @@ struct ContentView: View {
|
||||
var MaybeSearchView: some View {
|
||||
Group {
|
||||
if let search = self.active_search {
|
||||
SearchView(appstate: damus!, search: SearchModel(pool: damus!.pool, search: search))
|
||||
SearchView(appstate: damus_state!, search: SearchModel(pool: damus_state!.pool, search: search))
|
||||
} else {
|
||||
EmptyView()
|
||||
}
|
||||
@@ -196,8 +196,8 @@ struct ContentView: View {
|
||||
var MaybeThreadView: some View {
|
||||
Group {
|
||||
if let evid = self.active_event_id {
|
||||
let thread_model = ThreadModel(evid: evid, pool: damus!.pool)
|
||||
ThreadView(thread: thread_model, damus: damus!)
|
||||
let thread_model = ThreadModel(evid: evid, pool: damus_state!.pool)
|
||||
ThreadView(thread: thread_model, damus: damus_state!)
|
||||
} else {
|
||||
EmptyView()
|
||||
}
|
||||
@@ -207,9 +207,9 @@ struct ContentView: View {
|
||||
var MaybeProfileView: some View {
|
||||
Group {
|
||||
if let pk = self.active_profile {
|
||||
let profile_model = ProfileModel(pubkey: pk, damus: damus!)
|
||||
let fs = damus!.contacts.follow_state(pk)
|
||||
ProfileView(damus: damus!, follow_state: fs, profile: profile_model)
|
||||
let profile_model = ProfileModel(pubkey: pk, damus: damus_state!)
|
||||
let fs = damus_state!.contacts.follow_state(pk)
|
||||
ProfileView(damus: damus_state!, follow_state: fs, profile: profile_model)
|
||||
} else {
|
||||
EmptyView()
|
||||
}
|
||||
@@ -218,7 +218,7 @@ struct ContentView: View {
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
if let damus = self.damus {
|
||||
if let damus = self.damus_state {
|
||||
ZStack {
|
||||
MainContent(damus: damus)
|
||||
.padding([.bottom], -8.0)
|
||||
@@ -237,7 +237,7 @@ struct ContentView: View {
|
||||
case .post:
|
||||
PostView(references: [])
|
||||
case .reply(let event):
|
||||
ReplyView(replying_to: event, damus: damus!)
|
||||
ReplyView(replying_to: event, damus: damus_state!)
|
||||
}
|
||||
}
|
||||
.onOpenURL { url in
|
||||
@@ -265,7 +265,7 @@ struct ContentView: View {
|
||||
.onReceive(handle_notify(.boost)) { notif in
|
||||
let ev = notif.object as! NostrEvent
|
||||
let boost = make_boost_event(pubkey: pubkey, privkey: privkey, boosted: ev)
|
||||
self.damus?.pool.send(.event(boost))
|
||||
self.damus_state?.pool.send(.event(boost))
|
||||
}
|
||||
.onReceive(handle_notify(.open_thread)) { obj in
|
||||
//let ev = obj.object as! NostrEvent
|
||||
@@ -279,20 +279,20 @@ struct ContentView: View {
|
||||
.onReceive(handle_notify(.boost)) { boost in
|
||||
let ev = boost.object as! NostrEvent
|
||||
let boost_ev = make_boost_event(pubkey: pubkey, privkey: privkey, boosted: ev)
|
||||
self.damus?.pool.send(.event(boost_ev))
|
||||
self.damus_state?.pool.send(.event(boost_ev))
|
||||
}
|
||||
.onReceive(handle_notify(.like)) { like in
|
||||
let ev = like.object as! NostrEvent
|
||||
let like_ev = make_like_event(pubkey: pubkey, privkey: privkey, liked: ev)
|
||||
self.damus?.pool.send(.event(like_ev))
|
||||
self.damus_state?.pool.send(.event(like_ev))
|
||||
}
|
||||
.onReceive(handle_notify(.broadcast_event)) { obj in
|
||||
let ev = obj.object as! NostrEvent
|
||||
self.damus?.pool.send(.event(ev))
|
||||
self.damus_state?.pool.send(.event(ev))
|
||||
}
|
||||
.onReceive(handle_notify(.unfollow)) { notif in
|
||||
let pk = notif.object as! String
|
||||
guard let damus = self.damus else {
|
||||
guard let damus = self.damus_state else {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -308,7 +308,7 @@ struct ContentView: View {
|
||||
}
|
||||
.onReceive(handle_notify(.follow)) { notif in
|
||||
let pk = notif.object as! String
|
||||
guard let damus = self.damus else {
|
||||
guard let damus = self.damus_state else {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -327,41 +327,20 @@ struct ContentView: View {
|
||||
case .post(let post):
|
||||
print("post \(post.content)")
|
||||
let new_ev = post_to_event(post: post, privkey: privkey, pubkey: pubkey)
|
||||
self.damus?.pool.send(.event(new_ev))
|
||||
self.damus_state?.pool.send(.event(new_ev))
|
||||
case .cancel:
|
||||
active_sheet = nil
|
||||
print("post cancelled")
|
||||
}
|
||||
}
|
||||
.onReceive(timer) { n in
|
||||
self.damus?.pool.connect_to_disconnected()
|
||||
self.loading = (self.damus?.pool.num_connecting ?? 0) != 0
|
||||
self.damus_state?.pool.connect_to_disconnected()
|
||||
self.loading = (self.damus_state?.pool.num_connecting ?? 0) != 0
|
||||
}
|
||||
}
|
||||
|
||||
func is_friend_event(_ ev: NostrEvent) -> Bool {
|
||||
// we should be able to see our own messages in our homefeed
|
||||
if ev.pubkey == self.pubkey {
|
||||
return true
|
||||
}
|
||||
|
||||
if damus!.contacts.is_friend(ev.pubkey) {
|
||||
return true
|
||||
}
|
||||
|
||||
if ev.is_reply {
|
||||
// show our replies?
|
||||
if ev.pubkey == self.pubkey {
|
||||
return true
|
||||
}
|
||||
for pk in ev.referenced_pubkeys {
|
||||
if damus!.contacts.is_friend(pk.ref_id) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
return damus.is_friend_event(ev, our_pubkey: self.pubkey, contacts: self.damus_state!.contacts)
|
||||
}
|
||||
|
||||
func switch_timeline(_ timeline: Timeline) {
|
||||
@@ -398,11 +377,11 @@ struct ContentView: View {
|
||||
add_relay(pool, "wss://nostr.bitcoiner.social")
|
||||
add_relay(pool, "ws://monad.jb55.com:8080")
|
||||
add_relay(pool, "wss://nostr-relay.freeberty.net")
|
||||
//add_relay(pool, "wss://nostr-relay.untethr.me")
|
||||
add_relay(pool, "wss://nostr-relay.untethr.me")
|
||||
|
||||
pool.register_handler(sub_id: sub_id, handler: handle_event)
|
||||
|
||||
self.damus = DamusState(pool: pool, pubkey: pubkey,
|
||||
self.damus_state = DamusState(pool: pool, pubkey: pubkey,
|
||||
likes: EventCounter(our_pubkey: pubkey),
|
||||
boosts: EventCounter(our_pubkey: pubkey),
|
||||
contacts: Contacts(),
|
||||
@@ -415,11 +394,11 @@ struct ContentView: View {
|
||||
|
||||
func handle_contact_event(_ ev: NostrEvent) {
|
||||
if ev.pubkey == self.pubkey {
|
||||
damus!.contacts.event = ev
|
||||
damus_state!.contacts.event = ev
|
||||
// our contacts
|
||||
for tag in ev.tags {
|
||||
if tag.count > 1 && tag[0] == "p" {
|
||||
damus!.contacts.friends.insert(tag[1])
|
||||
damus_state!.contacts.friends.insert(tag[1])
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -441,7 +420,7 @@ struct ContentView: View {
|
||||
return
|
||||
}
|
||||
|
||||
switch damus!.boosts.add_event(ev, target: e) {
|
||||
switch damus_state!.boosts.add_event(ev, target: e) {
|
||||
case .already_counted:
|
||||
break
|
||||
case .success(let n):
|
||||
@@ -458,7 +437,7 @@ struct ContentView: View {
|
||||
|
||||
// CHECK SIGS ON THESE
|
||||
|
||||
switch damus!.likes.add_event(ev, target: e.ref_id) {
|
||||
switch damus_state!.likes.add_event(ev, target: e.ref_id) {
|
||||
case .already_counted:
|
||||
break
|
||||
case .success(let n):
|
||||
@@ -472,7 +451,7 @@ struct ContentView: View {
|
||||
return
|
||||
}
|
||||
|
||||
if let mprof = damus!.profiles.lookup_with_timestamp(id: ev.pubkey) {
|
||||
if let mprof = damus_state!.profiles.lookup_with_timestamp(id: ev.pubkey) {
|
||||
if mprof.timestamp > ev.created_at {
|
||||
// skip if we already have an newer profile
|
||||
return
|
||||
@@ -480,7 +459,7 @@ struct ContentView: View {
|
||||
}
|
||||
|
||||
let tprof = TimestampedProfile(profile: profile, timestamp: ev.created_at)
|
||||
damus!.profiles.add(id: ev.pubkey, profile: tprof)
|
||||
damus_state!.profiles.add(id: ev.pubkey, profile: tprof)
|
||||
|
||||
notify(.profile_updated, ProfileUpdate(pubkey: ev.pubkey, profile: profile))
|
||||
}
|
||||
@@ -512,7 +491,7 @@ struct ContentView: View {
|
||||
}
|
||||
print("-----")
|
||||
|
||||
self.damus?.pool.send(.subscribe(.init(filters: filters, sub_id: sub_id)), to: [relay_id])
|
||||
self.damus_state?.pool.send(.subscribe(.init(filters: filters, sub_id: sub_id)), to: [relay_id])
|
||||
//self.pool?.send(.subscribe(.init(filters: [notification_filter], sub_id: "notifications")))
|
||||
}
|
||||
|
||||
@@ -604,20 +583,20 @@ struct ContentView: View {
|
||||
case .error(let merr):
|
||||
let desc = merr.debugDescription
|
||||
if desc.contains("Software caused connection abort") {
|
||||
self.damus?.pool.reconnect(to: [relay_id])
|
||||
self.damus_state?.pool.reconnect(to: [relay_id])
|
||||
}
|
||||
case .disconnected: fallthrough
|
||||
case .cancelled:
|
||||
self.damus?.pool.reconnect(to: [relay_id])
|
||||
self.damus_state?.pool.reconnect(to: [relay_id])
|
||||
case .reconnectSuggested(let t):
|
||||
if t {
|
||||
self.damus?.pool.reconnect(to: [relay_id])
|
||||
self.damus_state?.pool.reconnect(to: [relay_id])
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
||||
self.loading = (self.damus?.pool.num_connecting ?? 0) != 0
|
||||
self.loading = (self.damus_state?.pool.num_connecting ?? 0) != 0
|
||||
|
||||
print("ws_event \(ev)")
|
||||
|
||||
@@ -795,3 +774,29 @@ func update_filters_with_since(last_of_kind: [Int: NostrEvent], filters: [NostrF
|
||||
return filter
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func is_friend_event(_ ev: NostrEvent, our_pubkey: String, contacts: Contacts) -> Bool
|
||||
{
|
||||
if ev.pubkey == our_pubkey {
|
||||
return true
|
||||
}
|
||||
|
||||
if contacts.is_friend(ev.pubkey) {
|
||||
return true
|
||||
}
|
||||
|
||||
if ev.is_reply {
|
||||
// show our replies?
|
||||
if ev.pubkey == our_pubkey {
|
||||
return true
|
||||
}
|
||||
for pk in ev.referenced_pubkeys {
|
||||
if contacts.is_friend(pk.ref_id) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user