@@ -8,63 +8,97 @@ class SyncManager {
88 func setSyncInterval( ) {
99 let interval = Double ( SettingsManager . shared. getValue ( for: . intervalSync) as? Int ?? SyncInterval . min1. rawValue)
1010
11- // firebase
12- let remote = RemoteService . shared
13- // temp-table
14- let tracking = TrackingService . shared
15-
16- let timer = Timer . scheduledTimer ( withTimeInterval: interval, repeats: true ) { _ in
11+ let timer = Timer . scheduledTimer ( withTimeInterval: interval, repeats: true ) { [ weak self] _ in
1712
1813 // return if no internet.
1914 if !ConnectionService. shared. isReachable {
2015 return
2116 }
2217
23- // loop through temp-table and sync to firebase.
24- tracking. getTransactionTracking ( completion: { transactions in
25- transactions. forEach { transaction in
26- switch transaction. status {
27- case TransactionTracking . Status. updated. rawValue:
28- // if set firebase succesfully, remove from temp-table.
29- // else not remove
30- remote. setTransaction ( by: transaction. _id. stringValue, completion: { err in
31- if let err = err {
32- print ( " Sync fail: \( err) " )
33- } else {
34- tracking. deleteTransactionTracking ( by: transaction. _id) { err in
35- if let err = err {
36- print ( " deleteTransactionTracking fail: \( err) " )
37- } else {
38- SettingsManager . shared. setValue (
39- Date ( ) . timeIntervalSince1970,
40- for: . lastSync)
41- }
18+ self ? . syncTransactions ( )
19+ self ? . syncTags ( )
20+ self ? . syncUserInfo ( )
21+ }
22+ }
23+
24+ func syncTransactions( ) {
25+ // firebase
26+ let remote = RemoteService . shared
27+ // temp-table
28+ let tracking = TrackingService . shared
29+
30+ // loop through temp-table and sync to firebase.
31+ tracking. getTransactionTracking ( completion: { transactions in
32+ transactions. forEach { transaction in
33+ switch transaction. status {
34+ case TransactionTracking . Status. updated. rawValue:
35+ // if set firebase succesfully, remove from temp-table.
36+ // else not remove
37+ remote. setTransaction ( by: transaction. _id. stringValue, completion: { err in
38+ if let err = err {
39+ print ( " Sync fail: \( err) " )
40+ } else {
41+ tracking. deleteTransactionTracking ( by: transaction. _id) { err in
42+ if let err = err {
43+ print ( " deleteTransactionTracking fail: \( err) " )
44+ } else {
45+ self . setSyncTime ( )
4246 }
4347 }
44- } )
45- case TransactionTracking . Status. deleted. rawValue:
46- // if delete from firebase sucessfully, remove from temp-table.
47- // else not remove
48- remote. deleteTransation ( by: transaction. _id. stringValue) { err in
49- if let err = err {
50- print ( " Sync fail: \( err) " )
51- } else {
52- tracking. deleteTransactionTracking ( by: transaction. _id) { err in
53- if let err = err {
54- print ( " deleteTransactionTracking fail: \( err) " )
55- } else {
56- SettingsManager . shared. setValue (
57- Date ( ) . timeIntervalSince1970,
58- for: . lastSync)
59- }
48+ }
49+ } )
50+ case TransactionTracking . Status. deleted. rawValue:
51+ // if delete from firebase sucessfully, remove from temp-table.
52+ // else not remove
53+ remote. deleteTransation ( by: transaction. _id. stringValue) { err in
54+ if let err = err {
55+ print ( " Sync fail: \( err) " )
56+ } else {
57+ tracking. deleteTransactionTracking ( by: transaction. _id) { err in
58+ if let err = err {
59+ print ( " deleteTransactionTracking fail: \( err) " )
60+ } else {
61+ self . setSyncTime ( )
6062 }
6163 }
6264 }
63- default :
64- break
6565 }
66+ default :
67+ break
68+ }
69+ }
70+ } )
71+ }
72+
73+ func syncUserInfo( ) {
74+ if UserDefaults . standard. bool ( forKey: UserDefaultKey . needSyncUserInfo) {
75+ RemoteService . shared. setTags ( tags: TagService . shared. all, completion: { err in
76+ if let err = err {
77+ print ( " [syncUserInfo] Error \( err) " )
78+ } else {
79+ UserDefaults . standard. set ( false , forKey: UserDefaultKey . needSyncUserInfo)
80+ self . setSyncTime ( )
81+ }
82+ } )
83+ }
84+ }
85+
86+ func syncTags( ) {
87+ if UserDefaults . standard. bool ( forKey: UserDefaultKey . needSyncTag) {
88+ RemoteService . shared. setTags ( tags: TagService . shared. all, completion: { err in
89+ if let err = err {
90+ print ( " [syncTags] Error \( err) " )
91+ } else {
92+ UserDefaults . standard. set ( false , forKey: UserDefaultKey . needSyncTag)
93+ self . setSyncTime ( )
6694 }
6795 } )
6896 }
6997 }
98+
99+ private func setSyncTime( ) {
100+ SettingsManager . shared. setValue (
101+ Date ( ) . timeIntervalSince1970,
102+ for: . lastSync)
103+ }
70104}
0 commit comments