diff --git a/OnlineChatSdk/Classes/ChatConfig.swift b/OnlineChatSdk/Classes/ChatConfig.swift index f87530d..b169dd5 100644 --- a/OnlineChatSdk/Classes/ChatConfig.swift +++ b/OnlineChatSdk/Classes/ChatConfig.swift @@ -1,5 +1,61 @@ import Foundation class ChatConfig { - let defaults = UserDefaults.standard + + private static var instance: ChatConfig? + + private struct ConfigKeys { + static let configKeyApiToken = "onlineChatSdkConfig_apiToken" + static let configKeyClientId = "onlineChatSdkConfig_clientId" + static let configKeyLastDateTimeNewMessage = "onlineChatSdkConfig_lastDateTimeNewMessage" + } + + private let config: UserDefaults + + init() { + self.config = UserDefaults.standard + } + + private static func getInstance() -> ChatConfig { + if instance == nil { + instance = ChatConfig() + } + return instance! + } + + public static func setLastDateTimeNewMessage(_ dateTime: String) { + getInstance().setConfig(ConfigKeys.configKeyLastDateTimeNewMessage, dateTime) + } + + public static func getLastDateTimeNewMessage() -> String { + getInstance().getConfigString(ConfigKeys.configKeyLastDateTimeNewMessage) + } + + public static func setClientId(_ clientId: String) { + getInstance().setConfig(ConfigKeys.configKeyClientId, clientId) + } + + public static func getClientId() -> String { + getInstance().getConfigString(ConfigKeys.configKeyClientId) + } + + public static func setApiToken(_ apiToken: String) { + getInstance().setConfig(ConfigKeys.configKeyApiToken, apiToken) + } + + public static func getApiToken() -> String { + getInstance().getConfigString(ConfigKeys.configKeyApiToken) + } + + private func setConfig(_ key: String, _ value: String) { + self.config.set(value, forKey: key) + } + + private func setConfig(_ key: String, _ value: Int) { + self.config.set(value, forKey: key) + } + + private func getConfigString(_ key: String) -> String { + self.config.value(forKey: key) as! String + } } \ No newline at end of file diff --git a/OnlineChatSdk/Classes/ChatController.swift b/OnlineChatSdk/Classes/ChatController.swift index 410cd2c..44c37e3 100644 --- a/OnlineChatSdk/Classes/ChatController.swift +++ b/OnlineChatSdk/Classes/ChatController.swift @@ -33,14 +33,59 @@ open class ChatController: UIViewController, WKNavigationDelegate, WKScriptMessa private var didFinish: Bool = false private var widgetUrl: String = "" - public static func getUnreadedMessages() { + private static func getUnreadedMessages(_ startDate: String, callback: @escaping (NSDictionary?) -> Void) { + let token = ChatConfig.getApiToken() + if token == "" { + callback([ + "success": false, + "error": [ + "code": 0, + "descr": "Не задан token" + ] + ]) + } + let clientId = ChatConfig.getClientId() + if clientId == "" { + callback([ + "success": false, + "error": [ + "code": 0, + "descr": "Не задан clientId" + ] + ]) + } + let dtFormat = ChatDateFormatter() + let currentDate = NSDate() as Date + + ChatApi().messages(token, params: [ + "client": [ + "clientId": clientId + ], + "sender": "operator", + "status": "unreaded", + "dateRange": [ + "start": startDate, + "stop": dtFormat.string(from: currentDate) + ] + ] as [String: Any], callback: {(result) in + callback([ + "success": false, + "error": [ + "code": 0, + "descr": "Не реализовано" + ] + ]) + }) + } + + public static func getUnreadedMessages(callback: @escaping (NSDictionary?) -> Void) { } - public static func getNewMessages() { + public static func getNewMessages(callback: @escaping (NSDictionary?) -> Void) { } - + override public func loadView() { let contentController = WKUserContentController() contentController.add(self, name: "chatInterface") @@ -123,6 +168,10 @@ open class ChatController: UIViewController, WKNavigationDelegate, WKScriptMessa } public func load(_ id: String, _ domain: String, _ language: String = "", _ clientId: String = "", _ apiToken: String = "") { + if apiToken != "" { + ChatConfig.setApiToken(apiToken) + } + var setup: Dictionary = [:] if !language.isEmpty { setup["language"] = language @@ -211,7 +260,9 @@ open class ChatController: UIViewController, WKNavigationDelegate, WKScriptMessa let name = body!["name"] as! String switch name { case ChatController.event_clientId: - onClientId(data!["clientId"] != nil ? data!["clientId"] as! String : "") + let clientId = data!["clientId"] != nil ? data!["clientId"] as! String : "" + ChatConfig.setClientId(clientId) + onClientId(clientId) break case ChatController.event_sendRate: onSendRate(data!) @@ -250,7 +301,6 @@ open class ChatController: UIViewController, WKNavigationDelegate, WKScriptMessa } - open func onSendRate(_ data: NSDictionary) { } diff --git a/OnlineChatSdk/Classes/ChatDateFormatter.swift b/OnlineChatSdk/Classes/ChatDateFormatter.swift new file mode 100644 index 0000000..cbd5eae --- /dev/null +++ b/OnlineChatSdk/Classes/ChatDateFormatter.swift @@ -0,0 +1,15 @@ +import Foundation + +class ChatDateFormatter : DateFormatter { + override init() { + super.init() + self.calendar = Calendar(identifier: Calendar.Identifier.iso8601) + self.dateFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss'" + self.locale = Locale(identifier: "en") + self.timeZone = TimeZone(secondsFromGMT: 10800) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +}