shareFiles method

  1. @override
Future<Map<String, FileTransferObject>> shareFiles(
  1. List<String> sharedWithAtSigns,
  2. String key,
  3. String fileUrl,
  4. String encryptionKey,
  5. List<FileStatus> fileStatus, {
  6. DateTime? date,
})
override

re sends file notifications to sharedWithAtSigns returns Map<String, FileTransferObject> which contains transfer status for each atsign.

Implementation

@override
Future<Map<String, FileTransferObject>> shareFiles(
    List<String> sharedWithAtSigns,
    String key,
    String fileUrl,
    String encryptionKey,
    List<FileStatus> fileStatus,
    {DateTime? date}) async {
  var result = <String, FileTransferObject>{};
  for (var sharedWithAtSign in sharedWithAtSigns) {
    var fileTransferObject = FileTransferObject(
        key, encryptionKey, fileUrl, sharedWithAtSign, fileStatus,
        date: date);
    try {
      var atKey = AtKey()
        ..key = key
        ..sharedWith = sharedWithAtSign
        ..metadata = Metadata()
        ..metadata.ttr = -1
        // file transfer key will be deleted after 30 days
        ..metadata.ttl = 2592000000
        ..sharedBy = _atSign;

      var notificationResult = await notificationService.notify(
        NotificationParams.forUpdate(
          atKey,
          value: jsonEncode(fileTransferObject.toJson()),
        ),
      );

      if (notificationResult.notificationStatusEnum ==
          NotificationStatusEnum.delivered) {
        fileTransferObject.sharedStatus = true;
      } else {
        fileTransferObject.sharedStatus = false;
      }
    } on Exception catch (e) {
      fileTransferObject.sharedStatus = false;
      fileTransferObject.error = e.toString();
    }
    result[sharedWithAtSign] = fileTransferObject;
  }
  return result;
}