collectNotificationAudit static method

Future<void> collectNotificationAudit(
  1. ACLDatabase db
)

Implementation

static Future<void> collectNotificationAudit(ACLDatabase db) async {
  // print(await AclSdkPlatform.instance.getNotificationsDir());
  final notificationDir = Directory(
      '${await AclSdkPlatform.instance.getNotificationsDir()}/notifications');
  if (notificationDir.existsSync() == false) {
    return;
  }

  final listFiles = notificationDir.listSync();
  for (final file in listFiles) {
    final fileName = file.path.split('/').lastOrNull;
    if (fileName == null) {
      continue;
    }

    final fileNameComponent = fileName.split('.');
    final extension = fileNameComponent.lastOrNull;
    if (extension == null || extension != 'json') {
      continue;
    }

    final nameComponent = fileNameComponent.firstOrNull?.split('_');
    if (nameComponent == null || nameComponent.length != 2) {
      continue;
    }

    final checksum = nameComponent.lastOrNull;
    if (checksum == null) {
      continue;
    }

    // print(fileName);
    final readFile = File(file.path);
    try {
      final data = jsonDecode(await readFile.readAsString());
      if (data['checkSum'] != checksum) {
        await readFile.delete(recursive: true);
        continue;
      }

      await db.notificationAuditDao.create(NotificationAuditCompanion(
        checkSum: Value(data['checkSum']),
        happenedAt:
            Value(DateTime.fromMillisecondsSinceEpoch(data['happenedAt'])),
        packageName: Value(data['packageName']),
        summary: Value(data['summary']),
        type: Value(_mapStringToStatus(data['type'])),
        key: Value(data['key']),
        title: Value(data['title']),
      ));

      await readFile.delete(recursive: true);
    } catch (e) {
      await readFile.delete(recursive: true);
      print('Error: NotificationAuditHelper.collectNotificationAudit');
      print(e);
    }
  }
}