loadTranscriptByUrl static method

Future<Transcript> loadTranscriptByUrl({
  1. required TranscriptUrl transcriptUrl,
  2. dynamic timeout = const Duration(seconds: 20),
})

Load a PC2.0 Transcript from a file. Transcripts can be either JSON or SRT (SubRip) format. The mime type is used to determine if either the JsonParser or SrtParser is used.

Implementation

static Future<Transcript> loadTranscriptByUrl({
  required TranscriptUrl transcriptUrl,
  final timeout = const Duration(seconds: 20),
}) async {
  final client = Dio(
    BaseOptions(
      connectTimeout: timeout,
      receiveTimeout: timeout,
    ),
  );

  var transcript = Transcript();
  final srtParser = SrtParser();
  final jsonParser = JsonParser();

  try {
    final response = await client.get(transcriptUrl.url,
        options: Options(responseType: ResponseType.plain));

    /// What type of transcript are we loading here?
    if (transcriptUrl.type == TranscriptFormat.subrip) {
      if (response.statusCode == 200 && response.data is String) {
        transcript = srtParser.parse(response.data);
      }
    } else if (transcriptUrl.type == TranscriptFormat.json) {
      if (response.statusCode == 200 && response.data is String) {
        transcript = jsonParser.parse(response.data.toString());
      }
    } else {
      throw Exception('Sorry, not got around to supporting that format yet');
    }
  } on DioException catch (e) {
    switch (e.type) {
      case DioExceptionType.connectionTimeout:
      case DioExceptionType.sendTimeout:
      case DioExceptionType.receiveTimeout:
        throw PodcastTimeoutException(e.message ?? '');
      case DioExceptionType.connectionError:
      case DioExceptionType.badResponse:
        throw PodcastFailedException(e.message ?? '');
      case DioExceptionType.badCertificate:
        throw PodcastCertificateException(e.message ?? '');
      case DioExceptionType.cancel:
        throw PodcastCancelledException(e.message ?? '');
      case DioExceptionType.unknown:
        throw PodcastUnknownException(e.message ?? '');
    }
  }

  return Future.value(transcript);
}