Skip to content
Snippets Groups Projects
Commit 1f834bd7 authored by Bruno Muniz's avatar Bruno Muniz :apple:
Browse files

Cleaned all integration except FT and mocks

parent 1b8337db
Branches
Tags
2 merge requests!40v1.1.2b166,!38Using new database structure
......@@ -5,16 +5,16 @@ import Bindings
extension Contact {
init(with contact: BindingsContact, status: Contact.AuthStatus) {
self.init(
photo: nil,
userId: contact.getID()!,
email: contact.retrieve(fact: .email),
phone: contact.retrieve(fact: .phone),
status: status,
id: contact.getID()!,
marshaled: try! contact.marshal(),
username: contact.retrieve(fact: .username) ?? "",
email: contact.retrieve(fact: .email),
phone: contact.retrieve(fact: .phone),
nickname: nil,
createdAt: Date(),
isRecent: false
photo: nil,
authStatus: status,
isRecent: false,
createdAt: Date()
)
}
}
......@@ -24,14 +24,17 @@ extension Message {
guard let payload = try? Payload(with: message.getPayload()!) else { fatalError() }
self.init(
sender: message.getSender()!,
receiver: meMarshalled,
payload: payload,
unread: true,
timestamp: Int(message.getTimestampNano()),
uniqueId: message.getID()!,
networkId: message.getID()!,
senderId: message.getSender()!,
recipientId: meMarshalled,
groupId: nil,
date: Date.fromTimestamp(Int(message.getTimestampNano())),
status: .received,
roundURL: message.getRoundURL()
isUnread: true,
text: payload.text,
replyMessageId: payload.reply?.messageId,
roundURL: message.getRoundURL(),
fileTransferId: nil
)
}
......@@ -39,14 +42,17 @@ extension Message {
guard let payload = try? Payload(with: message.getPayload()!) else { fatalError() }
self.init(
sender: message.getSenderID()!,
networkId: message.getMessageID()!,
senderId: message.getSenderID()!,
recipientId: nil,
groupId: message.getGroupID()!,
payload: payload,
unread: true,
timestamp: Int(message.getTimestampNano()),
uniqueId: message.getMessageID()!,
date: Date.fromTimestamp(Int(message.getTimestampNano())),
status: .received,
roundURL: message.getRoundURL()
isUnread: true,
text: payload.text,
replyMessageId: payload.reply?.messageId,
roundURL: message.getRoundURL(),
fileTransferId: nil
)
}
}
......@@ -68,14 +68,13 @@ extension BindingsGroupChat: GroupManagerInterface {
return
}
completion(.success(
.init(
leader: me,
completion(.success(.init(
id: group.getID()!,
name: name,
groupId: group.getID()!,
status: .participating,
leaderId: me,
createdAt: Date(),
serialize: group.serialize()!
authStatus: .participating,
serialized: group.serialize()!
)))
return
default:
......
......@@ -133,16 +133,16 @@ public extension BindingsClient {
}
groupRequests(.init(
leader: members.first!,
id: id,
name: String(data: name, encoding: .utf8)!,
groupId: id,
status: .pending,
leaderId: members.first!,
createdAt: Date(),
serialize: serialize
authStatus: .pending,
serialized: serialize
), members, welcomeMessage)
}
let messageCallback = GroupMessageCallback { groupMessages(GroupMessage(with: $0)) }
let messageCallback = GroupMessageCallback { groupMessages(Message(with: $0)) }
let groupManager = BindingsNewGroupManager(self, requestCallback, messageCallback, &error)
guard let error = error else { return groupManager }
......
......@@ -42,56 +42,59 @@ extension Session {
@discardableResult
func processGroupCreation(_ group: Group, memberIds: [Data], welcome: String?) -> [GroupMember] {
try! dbManager.saveGroup(group)
var members: [GroupMember] = []
if let contactsOnGroup: [Contact] = try? dbManager.fetch(.withUserIds(memberIds)) {
contactsOnGroup.forEach { members.append(GroupMember(contact: $0, group: group)) }
}
let strangersOnGroup = memberIds
.filter { !members.map { $0.contactId }.contains($0) }
.filter { $0 != client.bindings.myId }
if !strangersOnGroup.isEmpty {
for stranger in strangersOnGroup.enumerated() {
members.append(GroupMember(
userId: stranger.element,
groupId: group.groupId,
status: .pendingUsername,
username: "Fetching username...",
photo: nil
))
}
}
members.forEach { try! dbManager.saveGroupMember($0) }
if group.leaderId != client.bindings.meMarshalled, inappnotifications {
DeviceFeedback.sound(.contactAdded)
DeviceFeedback.shake(.notification)
}
scanStrangers {}
if let welcome = welcome {
_ = try? dbManager.saveMessage(.init(
networkId: nil,
senderId: group.leaderId,
recipientId: client.bindings.meMarshalled,
groupId: group.id,
date: Date(),
status: .received,
isUnread: true,
text: welcome,
replyMessageId: nil,
roundURL: nil,
fileTransferId: nil
))
}
return members
// TODO: Implement this checking on which members of the group are my members etc.
// try! dbManager.saveGroup(group)
//
// var members: [GroupMember] = []
//
// if let contactsOnGroup: [Contact] = try? dbManager.fetchContacts(.init(id: Set(memberIds)) {
// //contactsOnGroup.forEach { members.append(GroupMember(contact: $0, group: group)) }
// }
//
// let strangersOnGroup = memberIds
// .filter { !members.map { $0.contactId }.contains($0) }
// .filter { $0 != client.bindings.myId }
//
// if !strangersOnGroup.isEmpty {
// for stranger in strangersOnGroup.enumerated() {
// members.append(GroupMember(
// userId: stranger.element,
// groupId: group.groupId,
// status: .pendingUsername,
// username: "Fetching username...",
// photo: nil
// ))
// }
// }
//
// members.forEach { try! dbManager.saveGroupMember($0) }
//
// if group.leaderId != client.bindings.meMarshalled, inappnotifications {
// DeviceFeedback.sound(.contactAdded)
// DeviceFeedback.shake(.notification)
// }
//
// scanStrangers {}
//
// if let welcome = welcome {
// _ = try? dbManager.saveMessage(.init(
// networkId: nil,
// senderId: group.leaderId,
// recipientId: client.bindings.meMarshalled,
// groupId: group.id,
// date: Date(),
// status: .received,
// isUnread: true,
// text: welcome,
// replyMessageId: nil,
// roundURL: nil,
// fileTransferId: nil
// ))
// }
//
// return members
fatalError()
}
}
......@@ -100,13 +103,16 @@ extension Session {
extension Session {
public func send(_ payload: Payload, toGroup group: Group) {
var message = Message(
sender: client.bindings.meMarshalled,
groupId: group.groupId,
payload: payload,
unread: false,
timestamp: Date.asTimestamp,
uniqueId: nil,
status: .sending
senderId: client.bindings.meMarshalled,
recipientId: nil,
groupId: group.id,
date: Date(),
status: .sending,
isUnread: false,
text: payload.text,
replyMessageId: payload.reply?.messageId,
roundURL: nil,
fileTransferId: nil
)
do {
......@@ -117,13 +123,6 @@ extension Session {
}
}
public func retryGroupMessage(_ id: Int64) {
guard var message: GroupMessage = try? dbManager.fetch(withId: id) else { return }
message.timestamp = Date.asTimestamp
message.status = .sending
send(groupMessage: try! dbManager.saveMessage(message))
}
private func send(message: Message) {
guard let manager = client.groupManager else { fatalError("A group manager was not created") }
var message = message
......@@ -163,52 +162,51 @@ extension Session {
}
public func scanStrangers(_ completion: @escaping () -> Void) {
DispatchQueue.global().async { [weak self] in
guard let self = self, let ud = self.client.userDiscovery else { return }
guard let strangers: [GroupMember] = try? self.dbManager.fetch(.strangers) else {
DispatchQueue.main.async {
completion()
}
return
}
let ids = strangers.map { $0.userId }
var updatedStrangers: [GroupMember] = []
ud.lookup(idList: ids) {
switch $0 {
case .success(let contacts):
strangers.forEach { stranger in
if let found = contacts.first(where: { contact in contact.userId == stranger.userId }) {
var updatedStranger = stranger
updatedStranger.status = .usernameSet
updatedStranger.username = found.username
updatedStrangers.append(updatedStranger)
}
}
DispatchQueue.main.async {
updatedStrangers.forEach {
do {
try self.dbManager.save($0)
} catch {
log(string: error.localizedDescription, type:.error)
}
}
log(string: "Scanned unknown group members", type: .info)
completion()
}
case .failure(let error):
DispatchQueue.main.async {
log(string: error.localizedDescription, type: .error)
completion()
}
}
}
}
// TODO: How this will work?
// DispatchQueue.global().async { [weak self] in
// guard let self = self, let ud = self.client.userDiscovery else { return }
//
// guard let strangers = try? self.dbManager.fetchContacts(.init(authStatus: [.stranger])),
// strangers.isEmpty == false else {
// DispatchQueue.main.async { completion() }
// return
// }
//
// let ids = strangers.map { $0.id }
//
// var updatedStrangers: [GroupMember] = []
//
// ud.lookup(idList: ids) {
// switch $0 {
// case .success(let contacts):
// strangers.forEach { stranger in
// if let found = contacts.first(where: { contact in contact.id == stranger.id }) {
// var updatedStranger = stranger
// updatedStranger.username = found.username
// updatedStrangers.append(updatedStranger)
// }
// }
//
// DispatchQueue.main.async {
// updatedStrangers.forEach {
// do {
// try self.dbManager.saveContact($0)
// } catch {
// log(string: error.localizedDescription, type:.error)
// }
// }
//
// log(string: "Scanned unknown group members", type: .info)
// completion()
// }
// case .failure(let error):
// DispatchQueue.main.async {
// log(string: error.localizedDescription, type: .error)
// completion()
// }
// }
// }
// }
}
}
......@@ -40,7 +40,6 @@ public protocol SessionType {
// Messages
func retryMessage(_: Int64)
func retryGroupMessage(_: Int64)
func send(_: Payload, toContact: Contact)
// Contacts
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment