Skip to content

Commit 9933d1d

Browse files
author
Arief Nur Putranto
committed
fixing crash and implementation period for clear local db SDK, by default 7 days
1 parent d0bf236 commit 9933d1d

File tree

4 files changed

+81
-4
lines changed

4 files changed

+81
-4
lines changed

QiscusCore.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "QiscusCore"
3-
s.version = "1.13.5"
3+
s.version = "1.13.6"
44
s.summary = "Qiscus Core SDK for iOS"
55
s.description = <<-DESC
66
Qiscus SDK for iOS contains Qiscus public Model.

Source/QiscusCore/QiscusCore.swift

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import Foundation
1010
import UIKit
1111

1212
public class QiscusCore: NSObject {
13-
public static let qiscusCoreVersionNumber:String = "1.12.0"
13+
public static let qiscusCoreVersionNumber:String = "1.13.6"
1414
class var bundle:Bundle{
1515
get{
1616
let podBundle = Bundle(for: QiscusCore.self)
@@ -112,6 +112,7 @@ public class QiscusCore: NSObject {
112112

113113
public static var fromSetupWithCustomServer : Bool = false
114114
public static var reconnectCounter : Int = 0
115+
public static var maxDayPeriodicClearLocalDB : Int = 7 //by default 7 days
115116

116117
@available(*, deprecated, message: "will soon become unavailable.")
117118
public static var enableDebugPrint: Bool = false
@@ -163,6 +164,10 @@ public class QiscusCore: NSObject {
163164
config.server = QiscusServer(url: URL.init(string: "https://api.qiscus.com")!, realtimeURL: self.defaultRealtimeURL, realtimePort: 1885, brokerLBUrl: self.defaultBrokerUrl)
164165
}
165166

167+
if QiscusCore.hasSetupUser(){
168+
checkLastClearDB()
169+
}
170+
166171
self.eventdelegate?.onDebugEvent("InitQiscus-setupWithCustomServer", message: "start check QiscusCore.isLogined \(QiscusLogger.getDateTime())")
167172
self.fromSetupWithCustomServer = true
168173

@@ -201,8 +206,13 @@ public class QiscusCore: NSObject {
201206
config.eventdelegate = self.eventdelegate
202207
reconnectCounter = 0
203208

209+
204210
config.server = QiscusServer(url: URL.init(string: "https://api.qiscus.com")!, realtimeURL: self.defaultRealtimeURL, realtimePort: 1885, brokerLBUrl: self.defaultBrokerUrl)
205211

212+
if QiscusCore.hasSetupUser(){
213+
checkLastClearDB()
214+
}
215+
206216
self.eventdelegate?.onDebugEvent("InitQiscus-setupWithCustomServer", message: "start check QiscusCore.isLogined \(QiscusLogger.getDateTime())")
207217
self.fromSetupWithCustomServer = true
208218

@@ -254,6 +264,10 @@ public class QiscusCore: NSObject {
254264
//realtime.setup(appName: AppID)
255265
}
256266

267+
if QiscusCore.hasSetupUser(){
268+
checkLastClearDB()
269+
}
270+
257271
self.eventdelegate?.onDebugEvent("InitQiscus-setupWithCustomServer", message: "start check QiscusCore.isLogined \(QiscusLogger.getDateTime())")
258272
self.fromSetupWithCustomServer = true
259273

@@ -272,6 +286,40 @@ public class QiscusCore: NSObject {
272286
getAppConfig()
273287
}
274288

289+
private class func checkLastClearDB(){
290+
if let last = self.config.lastClearDB{
291+
let dateFormatter = DateFormatter()
292+
dateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZ"
293+
dateFormatter.timeZone = .current
294+
295+
let dateString = last
296+
297+
if let date = dateFormatter.date(from: dateString) {
298+
let dateNow = Date()
299+
let differerence = Calendar.current.dateComponents([.day], from: date, to: dateNow)
300+
if let dayDiff = differerence.day{
301+
if dayDiff >= maxDayPeriodicClearLocalDB {
302+
QiscusCore.database.clear()
303+
//save to sharedPref
304+
self.config.lastClearDB = self.getTimestamp()
305+
}
306+
}
307+
}
308+
}else{
309+
QiscusCore.database.clear()
310+
//save to sharedPref
311+
self.config.lastClearDB = self.getTimestamp()
312+
}
313+
}
314+
315+
private class func getTimestamp() -> String {
316+
let formatter = DateFormatter()
317+
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
318+
formatter.timeZone = TimeZone.current
319+
formatter.locale = Locale(identifier: "en_US_POSIX")
320+
return formatter.string(from: Date())
321+
}
322+
275323
private class func getAppConfig(){
276324
network.getAppConfig(onSuccess: { (appConfig) in
277325
QiscusCore.enableEventReport = appConfig.enableEventReport
@@ -547,6 +595,7 @@ public class QiscusCore: NSObject {
547595
network.login(email: userID, password: userKey, username: username, avatarUrl: avatarURL?.absoluteString, extras: extras, onSuccess: { (user) in
548596
// save user in local
549597
ConfigManager.shared.user = user
598+
ConfigManager.shared.lastClearDB = self.getTimestamp()
550599
realtime.connect(username: user.email, password: user.token)
551600
onSuccess(user)
552601
}) { (error) in
@@ -571,6 +620,7 @@ public class QiscusCore: NSObject {
571620
network.login(email: userId, password: userKey, username: username, avatarUrl: avatarURL?.absoluteString, extras: extras, onSuccess: { (user) in
572621
// save user in local
573622
ConfigManager.shared.user = user
623+
ConfigManager.shared.lastClearDB = self.getTimestamp()
574624
realtime.connect(username: user.email, password: user.token)
575625
onSuccess(user)
576626
}) { (error) in
@@ -592,6 +642,7 @@ public class QiscusCore: NSObject {
592642
network.login(identityToken: token, onSuccess: { (user) in
593643
// save user in local
594644
ConfigManager.shared.user = user
645+
ConfigManager.shared.lastClearDB = self.getTimestamp()
595646
onSuccess(user)
596647
}) { (error) in
597648
onError(error)
@@ -610,6 +661,7 @@ public class QiscusCore: NSObject {
610661
network.login(identityToken: token, onSuccess: { (user) in
611662
// save user in local
612663
ConfigManager.shared.user = user
664+
ConfigManager.shared.lastClearDB = self.getTimestamp()
613665
onSuccess(user)
614666
}) { (error) in
615667
onError(error)

Source/QiscusCore/Storage/ConfigManager.swift

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,28 @@ public class ConfigManager : NSObject {
253253

254254
}
255255

256+
var lastClearDB : String?{
257+
get{
258+
return getLastClearDB()
259+
}
260+
set{
261+
guard let value = newValue else { return }
262+
setLastClearDB(value)
263+
}
264+
}
265+
266+
private func setLastClearDB(_ value: String) {
267+
// save in file
268+
let defaults = UserDefaults.standard
269+
defaults.set(value, forKey: filename("lastClearDB"))
270+
}
271+
272+
private func getLastClearDB() -> String? {
273+
// save in file
274+
let defaults = UserDefaults.standard
275+
return defaults.string(forKey: filename("lastClearDB")) ?? nil
276+
}
277+
256278
func clearConfig() {
257279
// remove file user
258280
let storage = UserDefaults.standard
@@ -273,6 +295,7 @@ public class ConfigManager : NSObject {
273295
storage.removeObject(forKey: filename("enableDisableRealtimeManuallly"))
274296
storage.removeObject(forKey: filename("refreshToken"))
275297
storage.removeObject(forKey: filename("tokenExpiresAt"))
298+
storage.removeObject(forKey: filename("lastClearDB"))
276299
self.userCache = nil
277300
}
278301
}

Source/QiscusCore/Util/QiscusThread.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ import Foundation
99

1010
class QiscusThread {
1111
static func background(_ work: @escaping () -> ()) {
12-
DispatchQueue.global(qos: .background).sync {
13-
work()
12+
DispatchQueue.main.async{
13+
DispatchQueue.global(qos: .background).sync {
14+
work()
15+
}
1416
}
1517
}
1618

0 commit comments

Comments
 (0)