syncEngagements method
Future<void>
syncEngagements(
)
Implementation
Future<void> syncEngagements() async {
var files = await AppticsDataStore.getEngagementFilesByLastModifiedDate();
var syncCounter = 0;
if (files == null) {
return;
}
final filesIt = files.iterator;
while(filesIt.moveNext() && syncCounter < 3) {
Map<String, dynamic> rawEngagements = jsonDecode(await filesIt.current.readAsString());
var failCounter = 0;
if (rawEngagements.containsKey("failCounter")) {
failCounter = rawEngagements["failCounter"];
if (failCounter >= 3) {
await AppticsDataStore.deleteFile(filesIt.current);
continue;
}
rawEngagements.remove("failCounter");
}
if (rawEngagements.containsKey("session") && !rawEngagements.containsKey("meta")) {
rawEngagements.remove("session");
final syncedDevice = await AppticsDeviceRegistrar().syncDevice();
final configs = await AppticsConfigs.getValidConfigs();
if (syncedDevice != null && configs != null) {
rawEngagements["meta"] = syncedDevice.getDeviceMeta(configs);
}
}
if (!rawEngagements.containsKey("meta")) {
continue;
}
final session = rawEngagements["session"];
rawEngagements.remove("session");
String? uid;
if (rawEngagements.containsKey("uid")) {
uid = rawEngagements["uid"];
rawEngagements.remove("uid");
}
var response = await AppticsNetwork.callWithDeviceToken(userId: uid, httpCall: (AppticsConfigs validConfigs, String token, AppticsDeviceInfo deviceInfo, String? userId) {
var body = AppticsUtils.gzippedPayload(jsonEncode(rawEngagements), validConfigs.apikey);
if (userId == null) {
return AppticsService.syncEngagements(
token: token,
baseUrl: validConfigs.baseurl,
mapId: validConfigs.mapid.toString(),
apId: validConfigs.apid.toString(),
portalId: validConfigs.portalId.toString(),
projectId: validConfigs.projectId.toString(),
appVersionId: validConfigs.appVersionId.toString(),
frameworkId: Apptics.frameworkId,
anonDeviceId: deviceInfo.anonymousId,
body: body
);
} else {
return AppticsService.syncEngagements(
token: token,
baseUrl: validConfigs.baseurl,
mapId: validConfigs.mapid.toString(),
apId: validConfigs.apid.toString(),
portalId: validConfigs.portalId.toString(),
projectId: validConfigs.projectId.toString(),
appVersionId: validConfigs.appVersionId.toString(),
frameworkId: Apptics.frameworkId,
deviceId: deviceInfo.deviceId,
userId: userId,
body: body
);
}
});
if (response != null && response.isSuccess) {
await AppticsDataStore.deleteFile(filesIt.current);
} else if (response != null && !response.isSuccess) {
rawEngagements["failCounter"] = failCounter + 1;
AppticsDataStore.writeToFile(filesIt.current, jsonEncode(rawEngagements));
}
syncCounter++;
}
}