handleCaptionTranscription method

void handleCaptionTranscription(
  1. CaptionData data
)

Implementation

void handleCaptionTranscription(CaptionData data) {
  final name = getParticipantNameByIdentity(data.participantIdentity);

  final isFinal = data.speechEventType == Constant.captionAgentFinalTranscript;
  final isPartial = data.speechEventType == Constant.captionAgentInterimTranscript;

  if (isFinal) {
    if (particalTranscription != null) {
      // Finalize previous partial
      particalTranscription = particalTranscription!.copyWith(
        name: name,
        transcription: data.text,
        isFinal: true,
        sourceLang: transcriptionLanguageData?.sourceLang ?? data.language,
        targetLang: translationLanguage?.code ??
            transcriptionLanguageData?.sourceLang ??
            data.language,
      );

      _updateTranscriptionInList(particalTranscription!);

      if (particalTranscription!.sourceLang !=
          particalTranscription!.targetLang) {
        translateText(particalTranscription!);
      }
    } else {
      final newTranscription = TranscriptionModel(
        id: const Uuid().v4(),
        name: name,
        transcription: data.text,
        timestamp: Utils.formatTimestampToTime(
            DateTime.now().millisecondsSinceEpoch),
        isFinal: true,
        sourceLang: transcriptionLanguageData?.sourceLang ?? data.language,
        targetLang: translationLanguage?.code ??
            transcriptionLanguageData?.sourceLang ??
            data.language,
      );

      addTranscription(newTranscription);

      if (newTranscription.sourceLang != newTranscription.targetLang) {
        translateText(newTranscription);
      }
    }

    particalTranscription = null;
  }

  // -------------------- PARTIAL ---------------------
  else if (isPartial) {
    if (particalTranscription != null) {
      // Update existing partial
      particalTranscription = particalTranscription!.copyWith(
        name: name,
        transcription: data.text,
        isFinal: false,
        sourceLang: transcriptionLanguageData?.sourceLang ?? data.language,
        targetLang: translationLanguage?.code ??
            transcriptionLanguageData?.sourceLang ??
            data.language,
      );

      _updateTranscriptionInList(particalTranscription!);
    } else {
      // Create new partial
      particalTranscription = TranscriptionModel(
        id: const Uuid().v4(),
        name: name,
        transcription: data.text,
        timestamp: Utils.formatTimestampToTime(
            DateTime.now().millisecondsSinceEpoch),
        isFinal: false,
        sourceLang: transcriptionLanguageData?.sourceLang ?? data.language,
        targetLang: translationLanguage?.code ??
            transcriptionLanguageData?.sourceLang ??
            data.language,
      );

      addTranscription(particalTranscription!);
    }
  }
}