@@ -117,7 +117,8 @@ class OSCustomEventsExecutor: OSOperationExecutor {
117
117
}
118
118
119
119
/// The `deltaQueue` can contain events for multiple users. They will remain as Deltas if there is no onesignal ID yet for its user.
120
- func processDeltaQueue( inBackground: Bool ) {
120
+ /// This method will be used in an upcoming release that combine multiple events.
121
+ func processDeltaQueueWithBatching( inBackground: Bool ) {
121
122
self . dispatchQueue. async {
122
123
if self . deltaQueue. isEmpty {
123
124
// Delta queue is empty but there may be pending requests
@@ -179,6 +180,55 @@ class OSCustomEventsExecutor: OSOperationExecutor {
179
180
}
180
181
}
181
182
183
+ func processDeltaQueue( inBackground: Bool ) {
184
+ self . dispatchQueue. async {
185
+ if self . deltaQueue. isEmpty {
186
+ // Delta queue is empty but there may be pending requests
187
+ self . processRequestQueue ( inBackground: inBackground)
188
+ return
189
+ }
190
+ OneSignalLog . onesignalLog ( . LL_VERBOSE, message: " OSCustomEventsExecutor processDeltaQueue with queue: \( self . deltaQueue) " )
191
+
192
+ for (index, delta) in self . deltaQueue. enumerated ( ) . reversed ( ) {
193
+ guard let identityModel = OneSignalUserManagerImpl . sharedInstance. getIdentityModel ( delta. identityModelId) ,
194
+ let onesignalId = identityModel. onesignalId
195
+ else {
196
+ OneSignalLog . onesignalLog ( . LL_VERBOSE, message: " OSCustomEventsExecutor.processDeltaQueue skipping: \( delta) " )
197
+ // keep this Delta in the queue, as it is not yet ready to be processed
198
+ continue
199
+ }
200
+
201
+ guard let properties = delta. value as? [ String : Any ] else {
202
+ // This should not happen as there are preventative typing measures before this step
203
+ OneSignalLog . onesignalLog ( . LL_ERROR, message: " OSCustomEventsExecutor.processDeltaQueue dropped due to invalid properties: \( delta) " )
204
+ self . deltaQueue. remove ( at: index)
205
+ continue
206
+ }
207
+
208
+ let event : [ String : Any ] = [
209
+ EventConstants . name: delta. property,
210
+ EventConstants . onesignalId: onesignalId,
211
+ EventConstants . timestamp: ISO8601DateFormatter ( ) . string ( from: delta. timestamp) ,
212
+ EventConstants . payload: self . addSdkMetadata ( properties: properties)
213
+ ]
214
+
215
+ self . deltaQueue. remove ( at: index)
216
+
217
+ let request = OSRequestCustomEvents (
218
+ events: [ event] ,
219
+ identityModel: identityModel
220
+ )
221
+ self . requestQueue. append ( request)
222
+ }
223
+
224
+ // Persist executor's requests (including new request) to storage
225
+ OneSignalUserDefaults . initShared ( ) . saveCodeableData ( forKey: OS_CUSTOM_EVENTS_EXECUTOR_REQUEST_QUEUE_KEY, withValue: self . requestQueue)
226
+ OneSignalUserDefaults . initShared ( ) . saveCodeableData ( forKey: OS_CUSTOM_EVENTS_EXECUTOR_DELTA_QUEUE_KEY, withValue: self . deltaQueue)
227
+
228
+ self . processRequestQueue ( inBackground: inBackground)
229
+ }
230
+ }
231
+
182
232
/**
183
233
Adds additional data about the SDK to the event payload.
184
234
*/
0 commit comments