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

Removed database target

parent 2d8770ee
No related branches found
No related tags found
2 merge requests!40v1.1.2b166,!38Using new database structure
Showing
with 872 additions and 934 deletions
import Retry import Retry
import Models import Models
import Shared import Shared
import Database
import Foundation import Foundation
extension Session { extension Session {
......
...@@ -3,7 +3,7 @@ import Models ...@@ -3,7 +3,7 @@ import Models
import Shared import Shared
import Combine import Combine
import Defaults import Defaults
import Database import XXModels
import Foundation import Foundation
import BackupFeature import BackupFeature
import NetworkMonitor import NetworkMonitor
...@@ -52,7 +52,7 @@ public final class Session: SessionType { ...@@ -52,7 +52,7 @@ public final class Session: SessionType {
@Dependency var networkMonitor: NetworkMonitoring @Dependency var networkMonitor: NetworkMonitoring
public let client: Client public let client: Client
public let dbManager: DatabaseManager public let dbManager: Database
private var cancellables = Set<AnyCancellable>() private var cancellables = Set<AnyCancellable>()
public var myId: Data { client.bindings.myId } public var myId: Data { client.bindings.myId }
...@@ -76,61 +76,6 @@ public final class Session: SessionType { ...@@ -76,61 +76,6 @@ public final class Session: SessionType {
networkMonitor.statusPublisher.map { $0 == .available }.eraseToAnyPublisher() networkMonitor.statusPublisher.map { $0 == .available }.eraseToAnyPublisher()
} }
public func groups(_ request: Group.Request) -> AnyPublisher<[Group], Never> {
self.dbManager
.publisher(fetch: Group.self, request)
.catch { _ in Just([]) }
.eraseToAnyPublisher()
}
public func groupMembers(_ request: GroupMember.Request) -> AnyPublisher<[GroupMember], Never> {
self.dbManager
.publisher(fetch: GroupMember.self, request)
.catch { _ in Just([]) }
.eraseToAnyPublisher()
}
lazy public var contacts: (Contact.Request) -> AnyPublisher<[Contact], Never> = {
self.dbManager.publisher(fetch: Contact.self, $0).catch { _ in Just([]) }.eraseToAnyPublisher()
}
lazy public var singleMessages: (Contact) -> AnyPublisher<[Message], Never> = {
self.dbManager.publisher(fetch: Message.self, .withContact($0.userId)).catch { _ in Just([]) }.eraseToAnyPublisher()
}
lazy public var groupMessages: (Group) -> AnyPublisher<[GroupMessage], Never> = {
self.dbManager.publisher(fetch: GroupMessage.self, .fromGroup($0.groupId)).catch { _ in Just([]) }.eraseToAnyPublisher()
}
lazy public var groupChats: (GroupChatInfo.Request) -> AnyPublisher<[GroupChatInfo], Never> = {
self.dbManager.publisher(fetch: GroupChatInfo.self, $0).catch { _ in Just([]) }.eraseToAnyPublisher()
}
lazy public var singleChats: (SingleChatInfo.Request) -> AnyPublisher<[SingleChatInfo], Never> = { _ in
self.dbManager.publisher(fetch: Contact.self, .friends)
.flatMap { [unowned self] contactList -> AnyPublisher<[SingleChatInfo], Error> in
let contactIds = contactList.map { $0.userId }
let messagesPublisher: AnyPublisher<[Message], Error> = dbManager
.publisher(fetch: .latestOnesFromContactIds(contactIds))
.map { $0.sorted(by: { $0.timestamp > $1.timestamp }) }
.eraseToAnyPublisher()
return messagesPublisher.map { messages -> [SingleChatInfo] in
contactList.map { contact -> SingleChatInfo in
SingleChatInfo(contact: contact, lastMessage: messages.first {
$0.sender == contact.userId || $0.receiver == contact.userId
})
}
}
.eraseToAnyPublisher()
}
.catch { _ in Just([]) }
.map { $0.filter { $0.lastMessage != nil }}
.map { $0.sorted(by: { $0.lastMessage!.timestamp > $1.lastMessage!.timestamp })}
.eraseToAnyPublisher()
}
public init( public init(
passphrase: String, passphrase: String,
backupFile: Data, backupFile: Data,
......
import Models import Models
import Combine import Combine
import Database
import Foundation import Foundation
public protocol SessionType { public protocol SessionType {
...@@ -10,16 +9,6 @@ public protocol SessionType { ...@@ -10,16 +9,6 @@ public protocol SessionType {
var hasRunningTasks: Bool { get } var hasRunningTasks: Bool { get }
var isOnline: AnyPublisher<Bool, Never> { get } var isOnline: AnyPublisher<Bool, Never> { get }
var contacts: (Contact.Request) -> AnyPublisher<[Contact], Never> { get }
var singleMessages: (Contact) -> AnyPublisher<[Message], Never> { get }
var singleChats: (SingleChatInfo.Request) -> AnyPublisher<[SingleChatInfo], Never> { get }
func groupMembers(_: GroupMember.Request) -> AnyPublisher<[GroupMember], Never>
func groups(_: Group.Request) -> AnyPublisher<[Group], Never>
var groupMessages: (Group) -> AnyPublisher<[GroupMessage], Never> { get }
var groupChats: (GroupChatInfo.Request) -> AnyPublisher<[GroupChatInfo], Never> { get }
func deleteMyself() throws func deleteMyself() throws
func getId(from: Data) -> Data? func getId(from: Data) -> Data?
......
//import Foundation import Foundation
//
//public struct Attachment: Codable, Equatable, Hashable { public struct Attachment: Codable, Equatable, Hashable {
//
// public enum Extension: Int64, Codable, CaseIterable { public enum Extension: Int64, Codable, CaseIterable {
// case image case image
// case audio case audio
//
// public static func from(_ string: String) -> Extension? { public static func from(_ string: String) -> Extension? {
// self.allCases.first{ $0.written == string } self.allCases.first{ $0.written == string }
// } }
//
// public var written: String { public var written: String {
// switch self { switch self {
// case .image: case .image:
// return "jpeg" return "jpeg"
// case .audio: case .audio:
// return "m4a" return "m4a"
// } }
// } }
//
// public var writtenExtended: String { public var writtenExtended: String {
// switch self { switch self {
// case .image: case .image:
// return "image" return "image"
// case .audio: case .audio:
// return "voice message" return "voice message"
// } }
// } }
// } }
//
// public let data: Data? public let data: Data?
// public let name: String public let name: String
// public var transferId: Data? public var transferId: Data?
// public let _extension: Extension public let _extension: Extension
// public var progress: Float = 0.0 public var progress: Float = 0.0
//
// public init( public init(
// name: String, name: String,
// data: Data? = nil, data: Data? = nil,
// transferId: Data? = nil, transferId: Data? = nil,
// _extension: Extension _extension: Extension
// ) { ) {
// self.data = data self.data = data
// self.name = name self.name = name
// self._extension = _extension self._extension = _extension
// self.transferId = transferId self.transferId = transferId
// } }
//} }
//import UIKit import UIKit
//import DifferenceKit import DifferenceKit
//
//public protocol IndexableItem { public protocol IndexableItem {
// var indexedOn: NSString { get } var indexedOn: NSString { get }
//} }
//
//public class IndexedListCollator<Item: IndexableItem> { public class IndexedListCollator<Item: IndexableItem> {
// private final class CollationWrapper: NSObject { private final class CollationWrapper: NSObject {
// let value: Any let value: Any
// @objc let indexedOn: NSString @objc let indexedOn: NSString
//
// init(value: Any, indexedOn: NSString) { init(value: Any, indexedOn: NSString) {
// self.value = value self.value = value
// self.indexedOn = indexedOn self.indexedOn = indexedOn
// } }
//
// func unwrappedValue<UnwrappedType>() -> UnwrappedType { func unwrappedValue<UnwrappedType>() -> UnwrappedType {
// return value as! UnwrappedType return value as! UnwrappedType
// } }
// } }
//
// public init() {} public init() {}
//
// public func sectioned(items: [Item]) -> (sections: [[Item]], collation: UILocalizedIndexedCollation) { public func sectioned(items: [Item]) -> (sections: [[Item]], collation: UILocalizedIndexedCollation) {
// let collation = UILocalizedIndexedCollation.current() let collation = UILocalizedIndexedCollation.current()
// let selector = #selector(getter: CollationWrapper.indexedOn) let selector = #selector(getter: CollationWrapper.indexedOn)
//
// let wrappedItems = items.map { item in let wrappedItems = items.map { item in
// CollationWrapper(value: item, indexedOn: item.indexedOn) CollationWrapper(value: item, indexedOn: item.indexedOn)
// } }
//
// let sortedObjects = collation.sortedArray(from: wrappedItems, collationStringSelector: selector) as! [CollationWrapper] let sortedObjects = collation.sortedArray(from: wrappedItems, collationStringSelector: selector) as! [CollationWrapper]
//
// var sections = collation.sectionIndexTitles.map { _ in [Item]() } var sections = collation.sectionIndexTitles.map { _ in [Item]() }
// sortedObjects.forEach { item in sortedObjects.forEach { item in
// let sectionNumber = collation.section(for: item, collationStringSelector: selector) let sectionNumber = collation.section(for: item, collationStringSelector: selector)
// sections[sectionNumber].append(item.unwrappedValue()) sections[sectionNumber].append(item.unwrappedValue())
// } }
//
// return (sections: sections.filter { !$0.isEmpty }, collation: collation) return (sections: sections.filter { !$0.isEmpty }, collation: collation)
// } }
//} }
//
//public struct Contact: Codable, Hashable, Equatable { public struct Contact: Codable, Hashable, Equatable {
// public enum Request { public enum Request {
// case all case all
// case failed case failed
// case friends case friends
// case received case received
// case requested case requested
// case isRecent case isRecent
// case verificationInProgress case verificationInProgress
// case withUserId(Data) case withUserId(Data)
// case withUserIds([Data]) case withUserIds([Data])
// case withUsername(String) case withUsername(String)
// } }
//
// public enum Status: Int64, Codable { public enum Status: Int64, Codable {
// case friend case friend
// case stranger case stranger
// case verified case verified
// case verificationFailed case verificationFailed
// case verificationInProgress case verificationInProgress
// case requested case requested
// case requesting case requesting
// case requestFailed case requestFailed
// case confirming case confirming
// case confirmationFailed case confirmationFailed
// case hidden case hidden
// } }
//
// public var id: Int64? public var id: Int64?
// public var photo: Data? public var photo: Data?
// public let userId: Data public let userId: Data
// public var email: String? public var email: String?
// public var phone: String? public var phone: String?
// public var status: Status public var status: Status
// public var marshaled: Data public var marshaled: Data
// public var createdAt: Date public var createdAt: Date
// public let username: String public let username: String
// public var nickname: String? public var nickname: String?
// public var isRecent: Bool public var isRecent: Bool
//
// public init( public init(
// photo: Data?, photo: Data?,
// userId: Data, userId: Data,
// email: String?, email: String?,
// phone: String?, phone: String?,
// status: Status, status: Status,
// marshaled: Data, marshaled: Data,
// username: String, username: String,
// nickname: String?, nickname: String?,
// createdAt: Date, createdAt: Date,
// isRecent: Bool isRecent: Bool
// ) { ) {
// self.email = email self.email = email
// self.phone = phone self.phone = phone
// self.photo = photo self.photo = photo
// self.status = status self.status = status
// self.userId = userId self.userId = userId
// self.username = username self.username = username
// self.nickname = nickname self.nickname = nickname
// self.marshaled = marshaled self.marshaled = marshaled
// self.createdAt = createdAt self.createdAt = createdAt
// self.isRecent = isRecent self.isRecent = isRecent
// } }
//
// public var differenceIdentifier: Data { userId } public var differenceIdentifier: Data { userId }
//
// public static var databaseTableName: String { "contacts" } public static var databaseTableName: String { "contacts" }
//} }
//
//extension Contact: Differentiable {} extension Contact: Differentiable {}
//extension Contact: IndexableItem { extension Contact: IndexableItem {
// public var indexedOn: NSString { public var indexedOn: NSString {
// guard let nickname = nickname else { guard let nickname = nickname else {
// return "\(username.first!)" as NSString return "\(username.first!)" as NSString
// } }
//
// return "\(nickname.first!)" as NSString return "\(nickname.first!)" as NSString
// } }
//} }
//import Foundation import Foundation
//
//public struct FileTransfer { public struct FileTransfer {
// public enum Request { public enum Request {
// case withTID(Data) case withTID(Data)
// case withContactId(Data) case withContactId(Data)
// } }
//
// public var tid: Data public var tid: Data
// public var id: Int64? public var id: Int64?
// public var contact: Data public var contact: Data
// public var fileName: String public var fileName: String
// public var fileType: String public var fileType: String
// public var isIncoming: Bool public var isIncoming: Bool
//
// public static var databaseTableName: String { "transfers" } public static var databaseTableName: String { "transfers" }
//
// public init( public init(
// id: Int64? = nil, id: Int64? = nil,
// tid: Data, tid: Data,
// contact: Data, contact: Data,
// fileName: String, fileName: String,
// fileType: String, fileType: String,
// isIncoming: Bool isIncoming: Bool
// ) { ) {
// self.id = id self.id = id
// self.tid = tid self.tid = tid
// self.contact = contact self.contact = contact
// self.fileName = fileName self.fileName = fileName
// self.fileType = fileType self.fileType = fileType
// self.isIncoming = isIncoming self.isIncoming = isIncoming
// } }
//} }
//
//extension FileTransfer: Codable {} extension FileTransfer: Codable {}
//extension FileTransfer: Hashable {} extension FileTransfer: Hashable {}
//extension FileTransfer: Equatable {} extension FileTransfer: Equatable {}
//import Foundation import Foundation
//import KeychainAccess import KeychainAccess
//
//public struct Group: Codable, Equatable, Hashable { public struct Group: Codable, Equatable, Hashable {
// public enum Status: Int64, Codable { public enum Status: Int64, Codable {
// case hidden case hidden
// case pending case pending
// case deleting case deleting
// case participating case participating
// } }
//
// public enum Request { public enum Request {
// case pending case pending
// case accepted case accepted
// case withGroupId(Data) case withGroupId(Data)
// } }
//
// public var id: Int64? public var id: Int64?
// public var name: String public var name: String
// public var leader: Data public var leader: Data
// public var groupId: Data public var groupId: Data
// public var status: Status public var status: Status
// public var serialize: Data public var serialize: Data
// public var createdAt: Date public var createdAt: Date
// public static var databaseTableName: String { "groups" } public static var databaseTableName: String { "groups" }
//
// public init( public init(
// leader: Data, leader: Data,
// name: String, name: String,
// groupId: Data, groupId: Data,
// status: Status, status: Status,
// createdAt: Date, createdAt: Date,
// serialize: Data serialize: Data
// ) { ) {
// self.name = name self.name = name
// self.leader = leader self.leader = leader
// self.status = status self.status = status
// self.groupId = groupId self.groupId = groupId
// self.createdAt = createdAt self.createdAt = createdAt
// self.serialize = serialize self.serialize = serialize
// } }
//} }
//import Foundation import Foundation
//
//public struct GroupChatInfo: Codable, Equatable, Hashable { public struct GroupChatInfo: Codable, Equatable, Hashable {
// public enum Request { public enum Request {
// case accepted case accepted
// case fromGroup(Data) case fromGroup(Data)
// } }
//
// public var group: Group public var group: Group
// public var members: [GroupMember] public var members: [GroupMember]
// public var lastMessage: GroupMessage? public var lastMessage: GroupMessage?
//
// public init( public init(
// group: Group, group: Group,
// members: [GroupMember], members: [GroupMember],
// lastMessage: GroupMessage? = nil lastMessage: GroupMessage? = nil
// ) { ) {
// self.group = group self.group = group
// self.members = members self.members = members
// self.lastMessage = lastMessage self.lastMessage = lastMessage
// } }
//} }
//import Foundation import Foundation
//
//public struct GroupMember { public struct GroupMember {
// public enum Request { public enum Request {
// case all case all
// case strangers case strangers
// case fromGroup(Data) case fromGroup(Data)
// case withUserId(Data) case withUserId(Data)
// } }
//
// public enum Status: Int64, Codable { public enum Status: Int64, Codable {
// case usernameSet case usernameSet
// case pendingUsername case pendingUsername
// } }
//
// public var id: Int64? public var id: Int64?
// public var userId: Data public var userId: Data
// public var groupId: Data public var groupId: Data
// public var status: Status public var status: Status
// public var username: String public var username: String
// public var photo: Data? public var photo: Data?
//
// public init( public init(
// id: Int64? = nil, id: Int64? = nil,
// userId: Data, userId: Data,
// groupId: Data, groupId: Data,
// status: Status, status: Status,
// username: String, username: String,
// photo: Data? = nil photo: Data? = nil
// ) { ) {
// self.id = id self.id = id
// self.userId = userId self.userId = userId
// self.groupId = groupId self.groupId = groupId
// self.username = username self.username = username
// self.status = status self.status = status
// self.photo = photo self.photo = photo
// } }
//} }
//
//extension GroupMember: Codable {} extension GroupMember: Codable {}
//extension GroupMember: Hashable {} extension GroupMember: Hashable {}
//extension GroupMember: Equatable {} extension GroupMember: Equatable {}
//import Foundation import Foundation
//
//public struct GroupMessage: Codable, Equatable, Hashable { public struct GroupMessage: Codable, Equatable, Hashable {
// public enum Request { public enum Request {
// case withUniqueId(Data) case withUniqueId(Data)
// case id(Int64) case id(Int64)
// case sending case sending
// case fromGroup(Data) case fromGroup(Data)
// case unreadsFromGroup(Data) case unreadsFromGroup(Data)
// } }
//
// public static var databaseTableName: String { "groupMessages" } public static var databaseTableName: String { "groupMessages" }
//
// public enum Status: Int64, Codable { public enum Status: Int64, Codable {
// case sent case sent
// case read case read
// case failed case failed
// case sending case sending
// case received case received
// } }
//
// public var id: Int64? public var id: Int64?
// public var uniqueId: Data? public var uniqueId: Data?
// public var groupId: Data public var groupId: Data
// public var sender: Data public var sender: Data
// public var roundId: Int64? public var roundId: Int64?
// public var payload: Payload public var payload: Payload
// public var status: Status public var status: Status
// public var roundURL: String? public var roundURL: String?
// public var unread: Bool public var unread: Bool
// public var timestamp: Int public var timestamp: Int
//
// public init( public init(
// id: Int64? = nil, id: Int64? = nil,
// sender: Data, sender: Data,
// groupId: Data, groupId: Data,
// payload: Payload, payload: Payload,
// unread: Bool, unread: Bool,
// timestamp: Int = 0, timestamp: Int = 0,
// uniqueId: Data?, uniqueId: Data?,
// status: Status, status: Status,
// roundId: Int64? = nil, roundId: Int64? = nil,
// roundURL: String? = nil roundURL: String? = nil
// ) { ) {
// self.id = id self.id = id
// self.sender = sender self.sender = sender
// self.groupId = groupId self.groupId = groupId
// self.payload = payload self.payload = payload
// self.unread = unread self.unread = unread
// self.timestamp = timestamp self.timestamp = timestamp
// self.uniqueId = uniqueId self.uniqueId = uniqueId
// self.status = status self.status = status
// self.roundId = roundId self.roundId = roundId
// self.roundURL = roundURL self.roundURL = roundURL
// } }
//} }
//import Foundation import Foundation
//import DifferenceKit import DifferenceKit
//
//public struct Message: Codable, Equatable, Hashable { public struct Message: Codable, Equatable, Hashable {
// public enum Request { public enum Request {
// case sending case sending
// case withUniqueId(Data) case withUniqueId(Data)
// case withId(Int64) case withId(Int64)
// case sendingAttachment case sendingAttachment
// case withContact(Data) case withContact(Data)
// case unreadsFromContactId(Data) case unreadsFromContactId(Data)
// case latestOnesFromContactIds([Data]) case latestOnesFromContactIds([Data])
// } }
//
// public enum Status: Int64, Codable { public enum Status: Int64, Codable {
// case read case read
// case sent case sent
// case sending case sending
// case sendingAttachment case sendingAttachment
// case receivingAttachment case receivingAttachment
// case received case received
// case failedToSend case failedToSend
// case timedOut case timedOut
// } }
//
// public var id: Int64? public var id: Int64?
// public var unread: Bool public var unread: Bool
// public let sender: Data public let sender: Data
// public var roundURL: String? public var roundURL: String?
// public var report: Data? public var report: Data?
// public var status: Status public var status: Status
// public let receiver: Data public let receiver: Data
// public var timestamp: Int public var timestamp: Int
// public var uniqueId: Data? public var uniqueId: Data?
// public var payload: Payload public var payload: Payload
// public static var databaseTableName: String { "messages" } public static var databaseTableName: String { "messages" }
//
// public init ( public init (
// sender: Data, sender: Data,
// receiver: Data, receiver: Data,
// payload: Payload, payload: Payload,
// unread: Bool, unread: Bool,
// timestamp: Int, timestamp: Int,
// uniqueId: Data?, uniqueId: Data?,
// status: Status, status: Status,
// roundURL: String? = nil roundURL: String? = nil
// ) { ) {
// self.sender = sender self.sender = sender
// self.unread = unread self.unread = unread
// self.status = status self.status = status
// self.payload = payload self.payload = payload
// self.receiver = receiver self.receiver = receiver
// self.uniqueId = uniqueId self.uniqueId = uniqueId
// self.timestamp = timestamp self.timestamp = timestamp
// self.roundURL = roundURL self.roundURL = roundURL
// } }
//} }
//
//public extension Message.Status { public extension Message.Status {
// var canReply: Bool { var canReply: Bool {
// switch self { switch self {
// case .sent, .received, .read: case .sent, .received, .read:
// return true return true
// default: default:
// return false return false
// } }
// } }
//} }
//
//extension Message: Differentiable {} extension Message: Differentiable {}
//import Foundation import Foundation
//
//public struct Payload: Codable, Equatable, Hashable { public struct Payload: Codable, Equatable, Hashable {
// public var text: String public var text: String
// public var reply: Reply? public var reply: Reply?
// public var attachment: Attachment? public var attachment: Attachment?
//
// public init(text: String, reply: Reply?, attachment: Attachment?) { public init(text: String, reply: Reply?, attachment: Attachment?) {
// self.text = text self.text = text
// self.reply = reply self.reply = reply
// self.attachment = attachment self.attachment = attachment
// } }
//
// public init(with marshaled: Data) throws { public init(with marshaled: Data) throws {
// let proto = try CMIXText(serializedData: marshaled) let proto = try CMIXText(serializedData: marshaled)
//
// var reply: Reply? var reply: Reply?
//
// if proto.hasReply { if proto.hasReply {
// reply = Reply( reply = Reply(
// messageId: proto.reply.messageID, messageId: proto.reply.messageID,
// senderId: proto.reply.senderID senderId: proto.reply.senderID
// ) )
// } }
//
// self.init(text: proto.text, reply: reply, attachment: nil) self.init(text: proto.text, reply: reply, attachment: nil)
// } }
//
// public func asData() -> Data { public func asData() -> Data {
// var protoModel = CMIXText() var protoModel = CMIXText()
// protoModel.text = text protoModel.text = text
//
// if let reply = reply { if let reply = reply {
// protoModel.reply = reply.asTextReply() protoModel.reply = reply.asTextReply()
// } }
//
// return try! protoModel.serializedData() return try! protoModel.serializedData()
// } }
//} }
//import Foundation import Foundation
//
//public struct Reply: Codable, Equatable, Hashable { public struct Reply: Codable, Equatable, Hashable {
// public let messageId: Data public let messageId: Data
// public let senderId: Data public let senderId: Data
//
// public init(messageId: Data, senderId: Data) { public init(messageId: Data, senderId: Data) {
// self.messageId = messageId self.messageId = messageId
// self.senderId = senderId self.senderId = senderId
// } }
//
// func asTextReply() -> TextReply { func asTextReply() -> TextReply {
// var reply = TextReply() var reply = TextReply()
// reply.messageID = messageId reply.messageID = messageId
// reply.senderID = senderId reply.senderID = senderId
//
// return reply return reply
// } }
//} }
//import Foundation import Foundation
//
//public struct SingleChatInfo: Codable, Equatable, Hashable { public struct SingleChatInfo: Codable, Equatable, Hashable {
// public enum Request { public enum Request {
// case all case all
// } }
//
// public var contact: Contact public var contact: Contact
// public var lastMessage: Message? public var lastMessage: Message?
//
// public init( public init(
// contact: Contact, contact: Contact,
// lastMessage: Message? lastMessage: Message?
// ) { ) {
// self.contact = contact self.contact = contact
// self.lastMessage = lastMessage self.lastMessage = lastMessage
// } }
//} }
import UIKit import UIKit
import Models import Models
import Defaults import Defaults
import Database
import Integration import Integration
import DependencyInjection import DependencyInjection
......
{ {
"object": {
"pins" : [ "pins" : [
{ {
"package": "abseil", "identity" : "abseil-cpp-swiftpm",
"repositoryURL": "https://github.com/firebase/abseil-cpp-SwiftPM.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/firebase/abseil-cpp-SwiftPM.git",
"state" : { "state" : {
"branch": null,
"revision" : "fffc3c2729be5747390ad02d5100291a0d9ad26a", "revision" : "fffc3c2729be5747390ad02d5100291a0d9ad26a",
"version" : "0.20200225.4" "version" : "0.20200225.4"
} }
}, },
{ {
"package": "Alamofire", "identity" : "alamofire",
"repositoryURL": "https://github.com/Alamofire/Alamofire.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/Alamofire/Alamofire.git",
"state" : { "state" : {
"branch": null,
"revision" : "f82c23a8a7ef8dc1a49a8bfc6a96883e79121864", "revision" : "f82c23a8a7ef8dc1a49a8bfc6a96883e79121864",
"version" : "5.5.0" "version" : "5.5.0"
} }
}, },
{ {
"package": "AppAuth", "identity" : "appauth-ios",
"repositoryURL": "https://github.com/openid/AppAuth-iOS.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/openid/AppAuth-iOS.git",
"state" : { "state" : {
"branch": null,
"revision" : "01131d68346c8ae552961c768d583c715fbe1410", "revision" : "01131d68346c8ae552961c768d583c715fbe1410",
"version" : "1.4.0" "version" : "1.4.0"
} }
}, },
{ {
"package": "BoringSSL-GRPC", "identity" : "boringssl-swiftpm",
"repositoryURL": "https://github.com/firebase/boringssl-SwiftPM.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/firebase/boringssl-SwiftPM.git",
"state" : { "state" : {
"branch": null,
"revision" : "734a8247442fde37df4364c21f6a0085b6a36728", "revision" : "734a8247442fde37df4364c21f6a0085b6a36728",
"version" : "0.7.2" "version" : "0.7.2"
} }
}, },
{ {
"package": "ChatLayout", "identity" : "chatlayout",
"repositoryURL": "https://github.com/ekazaev/ChatLayout", "kind" : "remoteSourceControl",
"location" : "https://github.com/ekazaev/ChatLayout",
"state" : { "state" : {
"branch": null,
"revision" : "d0edb6f3ae716a26842467c540a6bee909b80360", "revision" : "d0edb6f3ae716a26842467c540a6bee909b80360",
"version" : "1.1.14" "version" : "1.1.14"
} }
}, },
{ {
"package": "combine-schedulers", "identity" : "client-ios-db",
"repositoryURL": "https://github.com/pointfreeco/combine-schedulers", "kind" : "remoteSourceControl",
"location" : "https://git.xx.network/elixxir/client-ios-db.git",
"state" : {
"revision" : "e1b3b1a8d1df6d259c99289e8d09e73fbfa9fe63"
}
},
{
"identity" : "combine-schedulers",
"kind" : "remoteSourceControl",
"location" : "https://github.com/pointfreeco/combine-schedulers",
"state" : { "state" : {
"branch": null,
"revision" : "4cf088c29a20f52be0f2ca54992b492c54e0076b", "revision" : "4cf088c29a20f52be0f2ca54992b492c54e0076b",
"version" : "0.5.3" "version" : "0.5.3"
} }
}, },
{ {
"package": "CwlCatchException", "identity" : "cwlcatchexception",
"repositoryURL": "https://github.com/mattgallagher/CwlCatchException.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/mattgallagher/CwlCatchException.git",
"state" : { "state" : {
"branch": null,
"revision" : "35f9e770f54ce62dd8526470f14c6e137cef3eea", "revision" : "35f9e770f54ce62dd8526470f14c6e137cef3eea",
"version" : "2.1.1" "version" : "2.1.1"
} }
}, },
{ {
"package": "CwlPreconditionTesting", "identity" : "cwlpreconditiontesting",
"repositoryURL": "https://github.com/mattgallagher/CwlPreconditionTesting.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/mattgallagher/CwlPreconditionTesting.git",
"state" : { "state" : {
"branch": null,
"revision" : "fb7a26374e8570ff5c68142e5c83406d6abae0d8", "revision" : "fb7a26374e8570ff5c68142e5c83406d6abae0d8",
"version" : "2.0.2" "version" : "2.0.2"
} }
}, },
{ {
"package": "DifferenceKit", "identity" : "differencekit",
"repositoryURL": "https://github.com/ra1028/DifferenceKit", "kind" : "remoteSourceControl",
"location" : "https://github.com/ra1028/DifferenceKit",
"state" : { "state" : {
"branch": null,
"revision" : "62745d7780deef4a023a792a1f8f763ec7bf9705", "revision" : "62745d7780deef4a023a792a1f8f763ec7bf9705",
"version" : "1.2.0" "version" : "1.2.0"
} }
}, },
{ {
"package": "FilesProvider", "identity" : "fileprovider",
"repositoryURL": "https://github.com/amosavian/FileProvider.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/amosavian/FileProvider.git",
"state" : { "state" : {
"branch": null,
"revision" : "abf68a62541a4193c8d106367ddb3648e8ab693f", "revision" : "abf68a62541a4193c8d106367ddb3648e8ab693f",
"version" : "0.26.0" "version" : "0.26.0"
} }
}, },
{ {
"package": "Firebase", "identity" : "firebase-ios-sdk",
"repositoryURL": "https://github.com/firebase/firebase-ios-sdk.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/firebase/firebase-ios-sdk.git",
"state" : { "state" : {
"branch": null,
"revision" : "08686f04881483d2bc098b2696e674c0ba135e47", "revision" : "08686f04881483d2bc098b2696e674c0ba135e47",
"version" : "8.10.0" "version" : "8.10.0"
} }
}, },
{ {
"package": "GoogleAPIClientForREST", "identity" : "google-api-objectivec-client-for-rest",
"repositoryURL": "https://github.com/google/google-api-objectivec-client-for-rest", "kind" : "remoteSourceControl",
"location" : "https://github.com/google/google-api-objectivec-client-for-rest",
"state" : { "state" : {
"branch": null,
"revision" : "22e0bb02729d60db396e8b90d8189313cd86ba53", "revision" : "22e0bb02729d60db396e8b90d8189313cd86ba53",
"version" : "1.6.0" "version" : "1.6.0"
} }
}, },
{ {
"package": "GoogleAppMeasurement", "identity" : "googleappmeasurement",
"repositoryURL": "https://github.com/google/GoogleAppMeasurement.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/google/GoogleAppMeasurement.git",
"state" : { "state" : {
"branch": null,
"revision" : "9b2f6aca5b4685c45f9f5481f19bee8e7982c538", "revision" : "9b2f6aca5b4685c45f9f5481f19bee8e7982c538",
"version" : "8.9.1" "version" : "8.9.1"
} }
}, },
{ {
"package": "GoogleDataTransport", "identity" : "googledatatransport",
"repositoryURL": "https://github.com/google/GoogleDataTransport.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/google/GoogleDataTransport.git",
"state" : { "state" : {
"branch": null,
"revision" : "15ccdfd25ac55b9239b82809531ff26605e7556e", "revision" : "15ccdfd25ac55b9239b82809531ff26605e7556e",
"version" : "9.1.2" "version" : "9.1.2"
} }
}, },
{ {
"package": "GoogleSignIn", "identity" : "googlesignin-ios",
"repositoryURL": "https://github.com/google/GoogleSignIn-iOS", "kind" : "remoteSourceControl",
"location" : "https://github.com/google/GoogleSignIn-iOS",
"state" : { "state" : {
"branch": null,
"revision" : "60ca2bfd218ccb194a746a79b41d9d50eb7e3af0", "revision" : "60ca2bfd218ccb194a746a79b41d9d50eb7e3af0",
"version" : "6.1.0" "version" : "6.1.0"
} }
}, },
{ {
"package": "GoogleUtilities", "identity" : "googleutilities",
"repositoryURL": "https://github.com/google/GoogleUtilities.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/google/GoogleUtilities.git",
"state" : { "state" : {
"branch": null,
"revision" : "b3bb0c5551fb3f80ca939829639ab5b093edd14f", "revision" : "b3bb0c5551fb3f80ca939829639ab5b093edd14f",
"version" : "7.7.0" "version" : "7.7.0"
} }
}, },
{ {
"package": "GRDB", "identity" : "grdb.swift",
"repositoryURL": "https://github.com/groue/GRDB.swift", "kind" : "remoteSourceControl",
"location" : "https://github.com/groue/GRDB.swift",
"state" : { "state" : {
"branch": null, "revision" : "e02f2c8abacff2799ed14926edcbf6e76fb9f805",
"revision": "32b2923e890df320906e64cbd0faca22a8bfda14", "version" : "5.25.0"
"version": "5.12.0"
} }
}, },
{ {
"package": "gRPC", "identity" : "grpc-swiftpm",
"repositoryURL": "https://github.com/firebase/grpc-SwiftPM.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/firebase/grpc-SwiftPM.git",
"state" : { "state" : {
"branch": null,
"revision" : "fb405dd2c7901485f7e158b24e3a0a47e4efd8b5", "revision" : "fb405dd2c7901485f7e158b24e3a0a47e4efd8b5",
"version" : "1.28.4" "version" : "1.28.4"
} }
}, },
{ {
"package": "GTMSessionFetcher", "identity" : "gtm-session-fetcher",
"repositoryURL": "https://github.com/google/gtm-session-fetcher.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/google/gtm-session-fetcher.git",
"state" : { "state" : {
"branch": null,
"revision" : "bc6a19702ac76ac4e488b68148710eb815f9bc56", "revision" : "bc6a19702ac76ac4e488b68148710eb815f9bc56",
"version" : "1.7.0" "version" : "1.7.0"
} }
}, },
{ {
"package": "GTMAppAuth", "identity" : "gtmappauth",
"repositoryURL": "https://github.com/google/GTMAppAuth.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/google/GTMAppAuth.git",
"state" : { "state" : {
"branch": null,
"revision" : "40f4103fb52109032c05599a0c39ad43edbdf80a", "revision" : "40f4103fb52109032c05599a0c39ad43edbdf80a",
"version" : "1.2.2" "version" : "1.2.2"
} }
}, },
{ {
"package": "KeychainAccess", "identity" : "keychainaccess",
"repositoryURL": "https://github.com/kishikawakatsumi/KeychainAccess", "kind" : "remoteSourceControl",
"location" : "https://github.com/kishikawakatsumi/KeychainAccess",
"state" : { "state" : {
"branch": null,
"revision" : "84e546727d66f1adc5439debad16270d0fdd04e7", "revision" : "84e546727d66f1adc5439debad16270d0fdd04e7",
"version" : "4.2.2" "version" : "4.2.2"
} }
}, },
{ {
"package": "leveldb", "identity" : "leveldb",
"repositoryURL": "https://github.com/firebase/leveldb.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/firebase/leveldb.git",
"state" : { "state" : {
"branch": null,
"revision" : "0706abcc6b0bd9cedfbb015ba840e4a780b5159b", "revision" : "0706abcc6b0bd9cedfbb015ba840e4a780b5159b",
"version" : "1.22.2" "version" : "1.22.2"
} }
}, },
{ {
"package": "nanopb", "identity" : "nanopb",
"repositoryURL": "https://github.com/firebase/nanopb.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/firebase/nanopb.git",
"state" : { "state" : {
"branch": null,
"revision" : "7ee9ef9f627d85cbe1b8c4f49a3ed26eed216c77", "revision" : "7ee9ef9f627d85cbe1b8c4f49a3ed26eed216c77",
"version" : "2.30908.0" "version" : "2.30908.0"
} }
}, },
{ {
"package": "Nimble", "identity" : "nimble",
"repositoryURL": "https://github.com/Quick/Nimble", "kind" : "remoteSourceControl",
"location" : "https://github.com/Quick/Nimble",
"state" : { "state" : {
"branch": null,
"revision" : "c93f16c25af5770f0d3e6af27c9634640946b068", "revision" : "c93f16c25af5770f0d3e6af27c9634640946b068",
"version" : "9.2.1" "version" : "9.2.1"
} }
}, },
{ {
"package": "Promises", "identity" : "promises",
"repositoryURL": "https://github.com/google/promises.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/google/promises.git",
"state" : { "state" : {
"branch": null,
"revision" : "611337c330350c9c1823ad6d671e7f936af5ee13", "revision" : "611337c330350c9c1823ad6d671e7f936af5ee13",
"version" : "2.0.0" "version" : "2.0.0"
} }
}, },
{ {
"package": "Quick", "identity" : "quick",
"repositoryURL": "https://github.com/Quick/Quick", "kind" : "remoteSourceControl",
"location" : "https://github.com/Quick/Quick",
"state" : { "state" : {
"branch": null,
"revision" : "8cce6acd38f965f5baa3167b939f86500314022b", "revision" : "8cce6acd38f965f5baa3167b939f86500314022b",
"version" : "3.1.2" "version" : "3.1.2"
} }
}, },
{ {
"package": "Retry", "identity" : "retry",
"repositoryURL": "https://github.com/icanzilb/Retry.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/icanzilb/Retry.git",
"state" : { "state" : {
"branch": null,
"revision" : "3beacada357968bcf9e5a2da520abfb374188afe", "revision" : "3beacada357968bcf9e5a2da520abfb374188afe",
"version" : "0.6.3" "version" : "0.6.3"
} }
}, },
{ {
"package": "ScrollViewController", "identity" : "scrollviewcontroller",
"repositoryURL": "https://github.com/darrarski/ScrollViewController", "kind" : "remoteSourceControl",
"location" : "https://github.com/darrarski/ScrollViewController",
"state" : { "state" : {
"branch": null,
"revision" : "9a52bb056504bb4766ddb5ac518097dd48736303", "revision" : "9a52bb056504bb4766ddb5ac518097dd48736303",
"version" : "1.2.0" "version" : "1.2.0"
} }
}, },
{ {
"package": "SnapKit", "identity" : "snapkit",
"repositoryURL": "https://github.com/SnapKit/SnapKit", "kind" : "remoteSourceControl",
"location" : "https://github.com/SnapKit/SnapKit",
"state" : { "state" : {
"branch": null,
"revision" : "d458564516e5676af9c70b4f4b2a9178294f1bc6", "revision" : "d458564516e5676af9c70b4f4b2a9178294f1bc6",
"version" : "5.0.1" "version" : "5.0.1"
} }
}, },
{ {
"package": "swift-case-paths", "identity" : "swift-case-paths",
"repositoryURL": "https://github.com/pointfreeco/swift-case-paths", "kind" : "remoteSourceControl",
"location" : "https://github.com/pointfreeco/swift-case-paths",
"state" : { "state" : {
"branch": null,
"revision" : "241301b67d8551c26d8f09bd2c0e52cc49f18007", "revision" : "241301b67d8551c26d8f09bd2c0e52cc49f18007",
"version" : "0.8.0" "version" : "0.8.0"
} }
}, },
{ {
"package": "swift-collections", "identity" : "swift-collections",
"repositoryURL": "https://github.com/apple/swift-collections", "kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-collections",
"state" : { "state" : {
"branch": null,
"revision" : "48254824bb4248676bf7ce56014ff57b142b77eb", "revision" : "48254824bb4248676bf7ce56014ff57b142b77eb",
"version" : "1.0.2" "version" : "1.0.2"
} }
}, },
{ {
"package": "swift-composable-architecture", "identity" : "swift-composable-architecture",
"repositoryURL": "https://github.com/pointfreeco/swift-composable-architecture.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/pointfreeco/swift-composable-architecture.git",
"state" : { "state" : {
"branch": null,
"revision" : "313dd217dcd1d0478118ec5d15225fd473c1564a", "revision" : "313dd217dcd1d0478118ec5d15225fd473c1564a",
"version" : "0.32.0" "version" : "0.32.0"
} }
}, },
{ {
"package": "swift-custom-dump", "identity" : "swift-custom-dump",
"repositoryURL": "https://github.com/pointfreeco/swift-custom-dump", "kind" : "remoteSourceControl",
"location" : "https://github.com/pointfreeco/swift-custom-dump",
"state" : { "state" : {
"branch": null,
"revision" : "51698ece74ecf31959d3fa81733f0a5363ef1b4e", "revision" : "51698ece74ecf31959d3fa81733f0a5363ef1b4e",
"version" : "0.3.0" "version" : "0.3.0"
} }
}, },
{ {
"package": "swift-identified-collections", "identity" : "swift-identified-collections",
"repositoryURL": "https://github.com/pointfreeco/swift-identified-collections", "kind" : "remoteSourceControl",
"location" : "https://github.com/pointfreeco/swift-identified-collections",
"state" : { "state" : {
"branch": null,
"revision" : "680bf440178a78a627b1c2c64c0855f6523ad5b9", "revision" : "680bf440178a78a627b1c2c64c0855f6523ad5b9",
"version" : "0.3.2" "version" : "0.3.2"
} }
}, },
{ {
"package": "SwiftProtobuf", "identity" : "swift-protobuf",
"repositoryURL": "https://github.com/apple/swift-protobuf", "kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-protobuf",
"state" : { "state" : {
"branch": null,
"revision" : "7e2c5f3cbbeea68e004915e3a8961e20bd11d824", "revision" : "7e2c5f3cbbeea68e004915e3a8961e20bd11d824",
"version" : "1.18.0" "version" : "1.18.0"
} }
}, },
{ {
"package": "SwiftyBeaver", "identity" : "swiftybeaver",
"repositoryURL": "https://github.com/SwiftyBeaver/SwiftyBeaver.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/SwiftyBeaver/SwiftyBeaver.git",
"state" : { "state" : {
"branch": null,
"revision" : "2c039501d6eeb4d4cd4aec4a8d884ad28862e044", "revision" : "2c039501d6eeb4d4cd4aec4a8d884ad28862e044",
"version" : "1.9.5" "version" : "1.9.5"
} }
}, },
{ {
"package": "SwiftyDropbox", "identity" : "swiftydropbox",
"repositoryURL": "https://github.com/dropbox/SwiftyDropbox.git", "kind" : "remoteSourceControl",
"location" : "https://github.com/dropbox/SwiftyDropbox.git",
"state" : { "state" : {
"branch": null,
"revision" : "7af87d903be1cf0af0e76e0394d992943055894e", "revision" : "7af87d903be1cf0af0e76e0394d992943055894e",
"version" : "8.2.1" "version" : "8.2.1"
} }
}, },
{ {
"package": "xctest-dynamic-overlay", "identity" : "xctest-dynamic-overlay",
"repositoryURL": "https://github.com/pointfreeco/xctest-dynamic-overlay", "kind" : "remoteSourceControl",
"location" : "https://github.com/pointfreeco/xctest-dynamic-overlay",
"state" : { "state" : {
"branch": null,
"revision" : "50a70a9d3583fe228ce672e8923010c8df2deddd", "revision" : "50a70a9d3583fe228ce672e8923010c8df2deddd",
"version" : "0.2.1" "version" : "0.2.1"
} }
} }
] ],
}, "version" : 2
"version": 1
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment