Add the ability to unlike posts
Changelog-Added: Add ability to unlike posts Closes: #580
This commit is contained in:
committed by
William Casarin
parent
4f86361b63
commit
237c939639
@@ -387,6 +387,12 @@ struct ContentView: View {
|
||||
}
|
||||
.onReceive(handle_notify(.like)) { like in
|
||||
}
|
||||
.onReceive(handle_notify(.delete)) { delete in
|
||||
guard let ev = delete.object as? NostrEvent else {
|
||||
return
|
||||
}
|
||||
self.home.handle_unlike_event(ev)
|
||||
}
|
||||
.onReceive(handle_notify(.deleted_account)) { notif in
|
||||
self.is_deleted_account = true
|
||||
}
|
||||
|
||||
@@ -167,6 +167,15 @@ class HomeModel: ObservableObject {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func handle_delete_event(_ ev: NostrEvent) {
|
||||
guard ev.is_valid else {
|
||||
return
|
||||
}
|
||||
|
||||
self.deleted_events.insert(ev.id)
|
||||
}
|
||||
|
||||
|
||||
func handle_channel_create(_ ev: NostrEvent) {
|
||||
guard ev.is_valid else {
|
||||
@@ -185,13 +194,18 @@ class HomeModel: ObservableObject {
|
||||
self.notifications = notifications.filter { !damus_state.contacts.is_muted($0.pubkey) }
|
||||
}
|
||||
|
||||
func handle_delete_event(_ ev: NostrEvent) {
|
||||
guard ev.is_valid else {
|
||||
return
|
||||
}
|
||||
|
||||
self.deleted_events.insert(ev.id)
|
||||
}
|
||||
|
||||
func handle_unlike_event(_ ev: NostrEvent) {
|
||||
guard ev.is_valid, let privkey = self.damus_state.keypair.privkey, let e = ev.last_refid() else {
|
||||
return
|
||||
}
|
||||
|
||||
let delete = make_delete_event(pubkey: damus_state.keypair.pubkey, privkey: privkey, deleted_events: [ev.id])
|
||||
|
||||
pool.send(.event(delete))
|
||||
|
||||
damus_state.likes.remove_event(ev, target: e.ref_id)
|
||||
}
|
||||
|
||||
func handle_contact_event(sub_id: String, relay_id: String, ev: NostrEvent) {
|
||||
process_contact_event(state: self.damus_state, ev: ev)
|
||||
|
||||
@@ -49,4 +49,17 @@ class EventCounter {
|
||||
|
||||
return .success(counts[target]!)
|
||||
}
|
||||
|
||||
func remove_event(_ ev: NostrEvent, target: String) {
|
||||
let pubkey = ev.pubkey
|
||||
|
||||
user_events[pubkey]?.remove(target)
|
||||
|
||||
if counts[target] == nil {
|
||||
counts[target] = 0
|
||||
return
|
||||
}
|
||||
|
||||
counts[target]! -= 1
|
||||
}
|
||||
}
|
||||
|
||||
@@ -578,6 +578,16 @@ func make_like_event(pubkey: String, privkey: String, liked: NostrEvent) -> Nost
|
||||
return ev
|
||||
}
|
||||
|
||||
func make_delete_event(pubkey: String, privkey: String, deleted_events: Set<String>) -> NostrEvent {
|
||||
|
||||
let tags: [[String]] = deleted_events.map{["e", $0]}
|
||||
|
||||
let ev = NostrEvent(content: "Content delete", pubkey: pubkey, kind: NostrKind.delete.rawValue, tags: tags)
|
||||
ev.calculate_id()
|
||||
ev.sign(privkey: privkey)
|
||||
return ev
|
||||
}
|
||||
|
||||
func zap_target_to_tags(_ target: ZapTarget) -> [[String]] {
|
||||
switch target {
|
||||
case .profile(let pk):
|
||||
|
||||
@@ -120,6 +120,15 @@ struct EventActionBar: View {
|
||||
self.bar.our_like = liked.event
|
||||
}
|
||||
}
|
||||
.onReceive(handle_notify(.delete)) { delete in
|
||||
guard let deleteRequest = delete.object as? NostrEvent, deleteRequest.tags.flatMap({$0}).contains(event.id),
|
||||
deleteRequest.pubkey == damus_state.keypair.pubkey else {
|
||||
return
|
||||
}
|
||||
|
||||
self.bar.our_like = nil
|
||||
self.bar.likes -= 1
|
||||
}
|
||||
}
|
||||
|
||||
func send_boost() {
|
||||
|
||||
Reference in New Issue
Block a user