damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

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 }