@@ -15,9 +15,9 @@ class FeaturesViewModel {
1515 let dataSource : FeaturesDataSource
1616 var encryptionKey : String ?
1717 /// Caching Manager
18- let manager : CachingManager
18+ let manager : CachingLayer
1919
20- init ( delegate: FeaturesFlowDelegate , dataSource: FeaturesDataSource , cachingManager: CachingManager ) {
20+ init ( delegate: FeaturesFlowDelegate , dataSource: FeaturesDataSource , cachingManager: CachingLayer ) {
2121 self . delegate = delegate
2222 self . dataSource = dataSource
2323 self . manager = cachingManager
@@ -40,37 +40,35 @@ class FeaturesViewModel {
4040 }
4141 }
4242
43- private func fetchCachedFeatures( ) {
43+ private func fetchCachedFeatures( logging : Bool = false ) {
4444 // Check for cache data
45- if let json = manager. getData ( fileName: Constants . featureCache) {
45+ if let data = manager. getContent ( fileName: Constants . featureCache) {
4646 let decoder = JSONDecoder ( )
47- if let features = try ? decoder. decode ( Features . self, from: json) {
47+ if let encryptedString = String ( data: data, encoding: . utf8) , let encryptionKey, !encryptionKey. isEmpty {
48+ let crypto : CryptoProtocol = Crypto ( )
49+ if let features = crypto. getFeaturesFromEncryptedFeatures ( encryptedString: encryptedString, encryptionKey: encryptionKey) {
50+ delegate? . featuresFetchedSuccessfully ( features: features, isRemote: false )
51+ } else {
52+ delegate? . featuresFetchFailed ( error: . failedParsedEncryptedData, isRemote: false )
53+ if logging { logger. error ( " Failed get features from cached encrypted features " ) }
54+ }
55+ } else if let features = try ? decoder. decode ( Features . self, from: data) {
4856 // Call Success Delegate with mention of data available but its not remote
4957 delegate? . featuresFetchedSuccessfully ( features: features, isRemote: false )
5058 } else {
5159 delegate? . featuresFetchFailed ( error: . failedParsedData, isRemote: false )
60+ if logging { logger. error ( " Failed parse local data " ) }
5261 }
5362 } else {
5463 delegate? . featuresFetchFailed ( error: . failedToLoadData, isRemote: false )
64+ if logging { logger. info ( " Cache directory is empty. Nothing to fetch. " ) }
5565 }
5666 }
5767
5868 /// Fetch Features
5969 func fetchFeatures( apiUrl: String ? , remoteEval: Bool = false , payload: RemoteEvalParams ? = nil ) {
6070 // Check for cache data
61- if let json = manager. getData ( fileName: Constants . featureCache) {
62- let decoder = JSONDecoder ( )
63- if let features = try ? decoder. decode ( Features . self, from: json) {
64- // Call Success Delegate with mention of data available but its not remote
65- delegate? . featuresFetchedSuccessfully ( features: features, isRemote: false )
66- } else {
67- delegate? . featuresFetchFailed ( error: . failedParsedData, isRemote: false )
68- logger. error ( " Failed parse local data " )
69- }
70- } else {
71- delegate? . featuresFetchFailed ( error: . failedToLoadData, isRemote: false )
72- logger. info ( " Cache directory is empty. Nothing to fetch. " )
73- }
71+ fetchCachedFeatures ( logging: true )
7472
7573 if let apiUrl = apiUrl {
7674 if remoteEval {
@@ -111,8 +109,8 @@ class FeaturesViewModel {
111109 if let encryptionKey = encryptionKey, !encryptionKey. isEmpty {
112110 let crypto : CryptoProtocol = Crypto ( )
113111 if let features = crypto. getFeaturesFromEncryptedFeatures ( encryptedString: encryptedString, encryptionKey: encryptionKey) {
114- if let featureData = try ? JSONEncoder ( ) . encode ( features ) {
115- manager. putData ( fileName: Constants . featureCache, content: featureData)
112+ if let featureData = encryptedString . data ( using : . utf8 ) {
113+ manager. saveContent ( fileName: Constants . featureCache, content: featureData)
116114 } else {
117115 logger. error ( " Failed encode features " )
118116 }
@@ -129,7 +127,7 @@ class FeaturesViewModel {
129127 }
130128 } else if let features = jsonPetitions. features {
131129 if let featureData = try ? JSONEncoder ( ) . encode ( features) {
132- manager. putData ( fileName: Constants . featureCache, content: featureData)
130+ manager. saveContent ( fileName: Constants . featureCache, content: featureData)
133131 }
134132 delegate? . featuresFetchedSuccessfully ( features: features, isRemote: true )
135133 } else {
@@ -141,8 +139,8 @@ class FeaturesViewModel {
141139 if let encryptedSavedGroups = jsonPetitions. encryptedSavedGroups, !encryptedSavedGroups. isEmpty, let encryptionKey = encryptionKey, !encryptionKey. isEmpty {
142140 let crypto = Crypto ( )
143141 if let savedGroups = crypto. getSavedGroupsFromEncryptedFeatures ( encryptedString: encryptedSavedGroups, encryptionKey: encryptionKey) {
144- if let encryptedSavedGroups = try ? JSONEncoder ( ) . encode ( savedGroups ) {
145- manager. putData ( fileName: Constants . savedGroupsCache, content: encryptedSavedGroups)
142+ if let encryptedSavedGroups = encryptedSavedGroups . data ( using : . utf8 ) {
143+ manager. saveContent ( fileName: Constants . savedGroupsCache, content: encryptedSavedGroups)
146144 } else {
147145 logger. error ( " Failed encode saved groups " )
148146 }
@@ -154,7 +152,7 @@ class FeaturesViewModel {
154152 }
155153 } else if let savedGroups = jsonPetitions. savedGroups {
156154 if let savedGroupsData = try ? JSONEncoder ( ) . encode ( savedGroups) {
157- manager. putData ( fileName: Constants . savedGroupsCache, content: savedGroupsData)
155+ manager. saveContent ( fileName: Constants . savedGroupsCache, content: savedGroupsData)
158156 }
159157 delegate? . savedGroupsFetchedSuccessfully ( savedGroups: savedGroups, isRemote: true )
160158 }
0 commit comments