diff --git a/Sources/Integration/Session/Session+UD.swift b/Sources/Integration/Session/Session+UD.swift index 6dd7472fedb8b3c9fd798134d8ede35a29ce3804..630d822af475c32bb21fb09bb4d9c8bc80a5a54f 100644 --- a/Sources/Integration/Session/Session+UD.swift +++ b/Sources/Integration/Session/Session+UD.swift @@ -41,20 +41,13 @@ extension Session { switch $0 { case .success(_): - _ = try? self.dbManager.saveContact(.init( - id: self.client.bindings.myId, - marshaled: self.client.bindings.meMarshalled, - username: value, - email: nil, - phone: nil, - nickname: nil, - photo: nil, - authStatus: .friend, - isRecent: false, - createdAt: Date() - )) - self.username = value + + if var me = try? self.myContact() { + me.username = value + _ = try? self.dbManager.saveContact(me) + } + completion(.success(nil)) case .failure(let error): completion(.failure(error)) diff --git a/Sources/Integration/Session/Session.swift b/Sources/Integration/Session/Session.swift index 51234cabf4aa2f29f29bc41bfc4166cd5afa2ab9..ef6180d7cf2c1a507c5bb98633a58204e89ea514 100644 --- a/Sources/Integration/Session/Session.swift +++ b/Sources/Integration/Session/Session.swift @@ -183,6 +183,15 @@ public final class Session: SessionType { } private func continueInitialization() throws { + var myContact = try self.myContact() + myContact.marshaled = client.bindings.meMarshalled + myContact.username = username + myContact.email = email + myContact.phone = phone + myContact.authStatus = .friend + myContact.isRecent = false + _ = try dbManager.saveContact(myContact) + setupBindings() networkMonitor.start() @@ -467,4 +476,12 @@ public final class Session: SessionType { } .store(in: &cancellables) } + + func myContact() throws -> Contact { + if let contact = try dbManager.fetchContacts(.init(id: [client.bindings.myId])).first { + return contact + } else { + return try dbManager.saveContact(.init(id: client.bindings.myId)) + } + } }