LikeCounter.swift (1148B)
1 // 2 // LikeCounter.swift 3 // damus 4 // 5 // Created by William Casarin on 2022-04-30. 6 // 7 8 import Foundation 9 10 enum CountResult { 11 case already_counted 12 case success(Int) 13 } 14 15 class EventCounter { 16 var counts: [NoteId: Int] = [:] 17 var user_events: [Pubkey: Set<NoteId>] = [:] 18 var our_events: [NoteId: NostrEvent] = [:] 19 var our_pubkey: Pubkey 20 21 init(our_pubkey: Pubkey) { 22 self.our_pubkey = our_pubkey 23 } 24 25 func add_event(_ ev: NostrEvent, target: NoteId) -> CountResult { 26 let pubkey = ev.pubkey 27 28 if self.user_events[pubkey] == nil { 29 self.user_events[pubkey] = Set() 30 } 31 32 if user_events[pubkey]!.contains(target) { 33 // don't double count 34 return .already_counted 35 } 36 37 user_events[pubkey]!.insert(target) 38 39 if ev.pubkey == self.our_pubkey { 40 our_events[target] = ev 41 } 42 43 if counts[target] == nil { 44 counts[target] = 1 45 return .success(1) 46 } 47 48 counts[target]! += 1 49 50 return .success(counts[target]!) 51 } 52 }