loadTranscriptByUrl static method
Future<Transcript>
loadTranscriptByUrl({
- required TranscriptUrl transcriptUrl,
- 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);
}