Skip to content

Commit fbe0c6b

Browse files
committed
refactor Store
1 parent ac3fe9b commit fbe0c6b

File tree

3 files changed

+44
-38
lines changed

3 files changed

+44
-38
lines changed

UserReport/UserReport/Session/Session.swift

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,32 @@ public class Session: NSObject {
2929
@objc public private(set) var screenView: Int = 0
3030

3131
/// Number of screen viewed in all session
32-
@objc public private(set) var totalScreenView: Int = Store.totalScreenView {
33-
didSet { Store.totalScreenView = self.totalScreenView }
32+
@objc public private(set) var totalScreenView: Int {
33+
get {
34+
localStore.totalScreenView
35+
}
36+
set {
37+
localStore.totalScreenView = newValue
38+
}
3439
}
35-
40+
3641
/// Number of seconds spent in the application for all time
37-
@objc public private(set) var totalSecondsInApp: TimeInterval = Store.totalSecondsInApp {
38-
didSet { Store.totalSecondsInApp = self.totalSecondsInApp }
42+
@objc public private(set) var totalSecondsInApp: TimeInterval {
43+
get {
44+
localStore.totalSecondsInApp
45+
}
46+
set {
47+
localStore.totalSecondsInApp = newValue
48+
}
3949
}
4050

4151
/// Date when the survey will be appear again
42-
@objc public var localQuarantineDate: Date {
52+
@objc public internal(set) var localQuarantineDate: Date {
4353
get {
44-
return Store.localQuarantineDate
54+
localStore.localQuarantineDate
55+
}
56+
set {
57+
localStore.localQuarantineDate = newValue
4558
}
4659
}
4760

@@ -57,23 +70,28 @@ public class Session: NSObject {
5770
/// The timer with which the parameters `sessionSeconds` and `totalSecondsInApp` will be updated
5871
private var sessionUpdateTimer: Timer?
5972

73+
/// Store used for the store current session
74+
private var localStore: Store!
75+
6076
// MARK: Init
6177

6278
/**
6379
* Creates an instance with the specified object `settings` (options) and closure `rulesPassed`.
6480
*
6581
* - parameter settings: Settings used for the current session
82+
* - parameter store: Store used for the store current session
6683
* - parameter rulesPassed: A closure executed when all rules pass
6784
*
6885
* - returns: The new `Session` instance.
6986
*/
70-
internal convenience init(settings: UserReportSettings? = nil, rulesPassed: @escaping SessionRulesPassedHandler) {
87+
internal convenience init(settings: UserReportSettings? = nil, store: Store, rulesPassed: @escaping SessionRulesPassedHandler) {
7188
self.init()
7289

7390
// DI
7491
self.settings = settings
7592
self.rulesPassed = rulesPassed
76-
93+
self.localStore = store
94+
7795
self.startTimer()
7896

7997
// Observe UIApplication enter background/foreground
@@ -100,13 +118,6 @@ public class Session: NSObject {
100118
self.lastViewScreenDate = Date()
101119
}
102120

103-
/**
104-
* Update local quarantine date to current date
105-
*/
106-
internal func updateLocalQuarantineDate(_ localQuarantine: Date) {
107-
Store.localQuarantineDate = localQuarantine
108-
}
109-
110121
/**
111122
* Set new settings.
112123
*/
@@ -163,7 +174,7 @@ public class Session: NSObject {
163174
guard self.totalScreenView >= settings.inviteAfterTotalScreensViewed else { return }
164175
guard self.sessionSeconds >= settings.sessionNSecondsLength else { return }
165176
guard self.totalSecondsInApp >= settings.inviteAfterNSecondsInApp else { return }
166-
guard Date() >= Store.localQuarantineDate else { return }
177+
guard Date() >= localStore.localQuarantineDate else { return }
167178

168179
self.rulesPassed?()
169180
}

UserReport/UserReport/Session/Store.swift

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,39 +18,36 @@ internal class Store {
1818

1919
// MARK: Values
2020

21-
static var totalScreenView: Int {
21+
var totalScreenView: Int {
2222
get {
23-
return self.shared.data?[Keys.totalScreenView] as? Int ?? 0
23+
data?[Keys.totalScreenView] as? Int ?? 0
2424
}
2525
set {
26-
self.shared.data?[Keys.totalScreenView] = newValue
27-
self.shared.save()
26+
data?[Keys.totalScreenView] = newValue
27+
save()
2828
}
2929
}
3030

31-
static var totalSecondsInApp: TimeInterval {
31+
var totalSecondsInApp: TimeInterval {
3232
get {
33-
return self.shared.data?[Keys.totalSecondsInApp] as? TimeInterval ?? 0
33+
data?[Keys.totalSecondsInApp] as? TimeInterval ?? 0
3434
}
3535
set {
36-
self.shared.data?[Keys.totalSecondsInApp] = newValue
37-
self.shared.save()
36+
data?[Keys.totalSecondsInApp] = newValue
37+
save()
3838
}
3939
}
4040

41-
static var localQuarantineDate: Date {
41+
var localQuarantineDate: Date {
4242
get {
43-
return self.shared.data?[Keys.localQuarantineDate] as! Date
43+
data?[Keys.localQuarantineDate] as! Date
4444
}
4545
set {
46-
self.shared.data?[Keys.localQuarantineDate] = newValue
47-
self.shared.save()
46+
data?[Keys.localQuarantineDate] = newValue
47+
save()
4848
}
4949
}
5050

51-
/// Singleton instance
52-
private static let shared = Store()
53-
5451
/// Name of the file stored in documents
5552
private static let fileName = "userreport_store.plist"
5653

@@ -63,7 +60,7 @@ internal class Store {
6360

6461
// MARK: Init
6562

66-
private init() {
63+
init() {
6764
self.load()
6865
if self.data?[Keys.localQuarantineDate] == nil {
6966
self.data?[Keys.localQuarantineDate] = Date()

UserReport/UserReport/UserReport.swift

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ private var sharedInstance: UserReport?
233233
self.logger = Logger(info: self.info)
234234
self.logger.log("Initialize SDK version: \(UserReport.sdkVersion) (sakID:\(sakId) mediaID:\(mediaId))", level: .info)
235235

236-
self.session = Session(rulesPassed: { [weak self] in
236+
self.session = Session(store: Store(), rulesPassed: { [weak self] in
237237
self?.tryInvite(force: false)
238238
})
239239

@@ -344,7 +344,7 @@ private var sharedInstance: UserReport?
344344
self.surveyStatus = .requestInvite
345345

346346
/// Set local quarantine for reason some internal troubles
347-
self.getLocalQuarantineDate().map(self.session.updateLocalQuarantineDate)
347+
self.getLocalQuarantineDate().flatMap { self.session.localQuarantineDate = $0 }
348348

349349
self.network.invitation(info: self.info) { [weak self] result in
350350
guard let self = self else { return }
@@ -485,9 +485,7 @@ private var sharedInstance: UserReport?
485485

486486
switch result {
487487
case .success(let value):
488-
489-
let date = value.inLocalTill.flatMap(self.dateFormatter.date)
490-
date.map(self.session.updateLocalQuarantineDate)
488+
value.inLocalTill.flatMap(self.dateFormatter.date).flatMap { self.session.localQuarantineDate = $0 }
491489

492490
case .failure(let error):
493491

0 commit comments

Comments
 (0)