sendText method

Future<TextStreamInfo> sendText(
  1. String text, {
  2. SendTextOptions? options,
})

Implementation

Future<TextStreamInfo> sendText(String text, {SendTextOptions? options}) async {
  final streamId = Uuid().v4();
  final textInBytes = text.codeUnits;
  final totalTextLength = textInBytes.length;

  final fileIds = options?.attachments.map((f) => Uuid().v4()).toList();
  var len = 0;
  if (fileIds != null && fileIds.isNotEmpty) {
    len = fileIds.length + 1;
  } else {
    len = 1;
  }
  final progresses = List<num>.filled(len, 0);

  handleProgress(num progress, int idx) {
    progresses[idx] = progress;
    final totalProgress = progresses.reduce((acc, val) => acc + val);
    options?.onProgress?.call(totalProgress.toDouble() / len);
  }

  final writer = await streamText(StreamTextOptions(
    streamId: streamId,
    totalSize: totalTextLength,
    destinationIdentities: options?.destinationIdentities ?? [],
    topic: options?.topic,
    attachedStreamIds: fileIds ?? [],
    attributes: options?.attributes ?? {},
  ));

  await writer.write(text);
  // set text part of progress to 1
  handleProgress(1, 0);

  await writer.close();

  if (options?.attachments != null) {
    var idx = 0;
    await Future.wait<void>(
      options?.attachments.map(
            (file) {
              final curIdx = idx++;
              return _sendFile(
                fileIds![curIdx],
                file,
                SendFileOptions(
                    topic: options.topic,
                    mimeType: mime(basename(file.path)),
                    onProgress: (progress) {
                      handleProgress(progress, curIdx + 1);
                    }),
              );
            },
          ).toList() ??
          [],
    );
  }
  return writer.info;
}