damus

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

DirectMessagesModel.swift (1508B)


      1 //
      2 //  DirectMessagesModel.swift
      3 //  damus
      4 //
      5 //  Created by William Casarin on 2022-06-29.
      6 //
      7 
      8 import Foundation
      9 
     10 class DirectMessagesModel: ObservableObject {
     11     @Published var dms: [DirectMessageModel] = []
     12     @Published var loading: Bool = false
     13     @Published var open_dm: Bool = false
     14     @Published private(set) var active_model: DirectMessageModel = DirectMessageModel(our_pubkey: .empty, pubkey: .empty)
     15     let our_pubkey: Pubkey
     16 
     17     init(our_pubkey: Pubkey) {
     18         self.our_pubkey = our_pubkey
     19     }
     20     
     21     var message_requests: [DirectMessageModel] {
     22         return dms.filter { dm in dm.is_request }
     23     }
     24     
     25     var friend_dms: [DirectMessageModel] {
     26         return dms.filter { dm in !dm.is_request }
     27     }
     28 
     29     func set_active_dm_model(_ model: DirectMessageModel) {
     30         self.active_model = model
     31     }
     32     
     33     func set_active_dm(_ pubkey: Pubkey) {
     34         for model in self.dms where model.pubkey == pubkey {
     35             self.set_active_dm_model(model)
     36             break
     37         }
     38     }
     39     
     40     func lookup_or_create(_ pubkey: Pubkey) -> DirectMessageModel {
     41         if let dm = lookup(pubkey) {
     42             return dm
     43         }
     44         
     45         let new = DirectMessageModel(our_pubkey: our_pubkey, pubkey: pubkey)
     46         dms.append(new)
     47         return new
     48     }
     49     
     50     func lookup(_ pubkey: Pubkey) -> DirectMessageModel? {
     51         for dm in dms {
     52             if pubkey == dm.pubkey {
     53                 return dm
     54             }
     55         }
     56         
     57         return nil
     58     }
     59 }