22// MIT license that can be found in the LICENSE file.
33
44import 'dart:async' ;
5+ import 'dart:convert' ;
56import 'dart:io' ;
67
78import 'package:dart_rss/dart_rss.dart' ;
@@ -73,7 +74,8 @@ class Podcast {
7374 connectTimeout: timeout,
7475 receiveTimeout: timeout,
7576 headers: {
76- 'User-Agent' : userAgent.isEmpty ? '$podcastSearchAgent ' : '$userAgent ' ,
77+ 'User-Agent' :
78+ userAgent.isEmpty ? '$podcastSearchAgent ' : '$userAgent ' ,
7779 },
7880 ),
7981 );
@@ -192,11 +194,14 @@ class Podcast {
192194 ),
193195 );
194196
195- if (episode.chapters! .chapters.isNotEmpty && ! episode.chapters! .loaded && ! forceReload) {
197+ if (episode.chapters! .chapters.isNotEmpty &&
198+ ! episode.chapters! .loaded &&
199+ ! forceReload) {
196200 try {
197201 final response = await client.get (episode.chapters! .url);
198202
199- if (response.statusCode == 200 && response.data is Map <String , dynamic >) {
203+ if (response.statusCode == 200 &&
204+ response.data is Map <String , dynamic >) {
200205 _loadChapters (response, episode.chapters! );
201206 }
202207 } on DioError catch (e) {
@@ -236,7 +241,8 @@ class Podcast {
236241 final jsonParser = JsonParser ();
237242
238243 try {
239- final response = await client.get (transcriptUrl.url, options: Options (responseType: ResponseType .plain));
244+ final response = await client.get (transcriptUrl.url,
245+ options: Options (responseType: ResponseType .plain));
240246
241247 /// What type of transcript are we loading here?
242248 if (transcriptUrl.type == TranscriptFormat .subrip) {
@@ -285,8 +291,11 @@ class Podcast {
285291
286292 try {
287293 final response = await client.get (url);
288- if (response.statusCode == 200 && response.data is Map <String , dynamic >) {
294+
295+ if (response.statusCode == 200 ) {
289296 _loadChapters (response, chapters);
297+ } else {
298+ throw PodcastFailedException ('Failed to download chapters file' );
290299 }
291300 } on DioError catch (e) {
292301 switch (e.type) {
@@ -306,7 +315,14 @@ class Podcast {
306315 }
307316
308317 static void _loadChapters (Response response, Chapters c) {
309- final data = Map <String , dynamic >.from (response.data);
318+ Map <String , dynamic > data;
319+
320+ if (response.data is String ) {
321+ data = jsonDecode (response.data);
322+ } else {
323+ data = Map .from (response.data);
324+ }
325+
310326 final chapters = data['chapters' ] ?? [];
311327
312328 c.headers = ChapterHeaders (
@@ -350,7 +366,9 @@ class Podcast {
350366 title: chapter['title' ] ?? '' ,
351367 startTime: startTime ?? 0.0 ,
352368 endTime: endTime ?? 0.0 ,
353- toc: (chapter['toc' ] != null && (chapter['toc' ] as bool ? ) == false ) ? false : true ),
369+ toc: (chapter['toc' ] != null && (chapter['toc' ] as bool ? ) == false )
370+ ? false
371+ : true ),
354372 );
355373 }
356374 }
0 commit comments