78 lines
2.9 KiB
Swift
78 lines
2.9 KiB
Swift
// This Source Code Form is subject to the terms of the Mozilla Public
|
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
import Foundation
|
|
|
|
extension OCTSubmanagerObjects {
|
|
func friends(predicate: NSPredicate? = nil) -> Results<OCTFriend> {
|
|
let rlmResults = objects(for: .friend, predicate: predicate)!
|
|
return Results(results: rlmResults)
|
|
}
|
|
|
|
func friendRequests(predicate: NSPredicate? = nil) -> Results<OCTFriendRequest> {
|
|
let rlmResults = objects(for: .friendRequest, predicate: predicate)!
|
|
return Results(results: rlmResults)
|
|
}
|
|
|
|
func chats(predicate: NSPredicate? = nil) -> Results<OCTChat> {
|
|
let rlmResults = objects(for: .chat, predicate: predicate)!
|
|
return Results(results: rlmResults)
|
|
}
|
|
|
|
func calls(predicate: NSPredicate? = nil) -> Results<OCTCall> {
|
|
let rlmResults = objects(for: .call, predicate: predicate)!
|
|
return Results(results: rlmResults)
|
|
}
|
|
|
|
func messages(predicate: NSPredicate? = nil) -> Results<OCTMessageAbstract> {
|
|
let rlmResults = objects(for: .messageAbstract, predicate: predicate)!
|
|
return Results(results: rlmResults)
|
|
}
|
|
|
|
func getProfileSettings() -> ProfileSettings {
|
|
guard let data = self.genericSettingsData else {
|
|
return ProfileSettings()
|
|
}
|
|
|
|
let unarchiver = NSKeyedUnarchiver(forReadingWith: data)
|
|
let settings = ProfileSettings(coder: unarchiver)
|
|
unarchiver.finishDecoding()
|
|
|
|
return settings
|
|
}
|
|
|
|
func saveProfileSettings(_ settings: ProfileSettings) {
|
|
let data = NSMutableData()
|
|
let archiver = NSKeyedArchiver(forWritingWith: data)
|
|
|
|
settings.encode(with: archiver)
|
|
archiver.finishEncoding()
|
|
|
|
self.genericSettingsData = data.copy() as! Data
|
|
}
|
|
|
|
func notificationBlock<T: OCTObject>(for object: T,
|
|
_ block: @escaping (ResultsChange<T>) -> Void) -> RLMNotificationToken {
|
|
let predicate = NSPredicate(format: "uniqueIdentifier == %@", object.uniqueIdentifier)
|
|
let results: Results<T>
|
|
|
|
switch object {
|
|
case is OCTFriend:
|
|
results = Results(results: objects(for: .friend, predicate: predicate)!)
|
|
case is OCTFriendRequest:
|
|
results = Results(results: objects(for: .friendRequest, predicate: predicate)!)
|
|
case is OCTChat:
|
|
results = Results(results: objects(for: .chat, predicate: predicate)!)
|
|
case is OCTCall:
|
|
results = Results(results: objects(for: .call, predicate: predicate)!)
|
|
case is OCTMessageAbstract:
|
|
results = Results(results: objects(for: .messageAbstract, predicate: predicate)!)
|
|
default:
|
|
fatalError("OCT type not handled properly")
|
|
}
|
|
|
|
return results.addNotificationBlock(block)
|
|
}
|
|
}
|