From b239eb0a11b023fa01b2b813508945b89dbb1173 Mon Sep 17 00:00:00 2001
From: Niraj Nandish <nirajnandish@icloud.com>
Date: Wed, 6 Sep 2023 13:47:45 +0400
Subject: [PATCH] feat: display fcc podcasts first (#1109)

* chore: remove unused file

* feat: show fcc podcasts first

* fix: episode duration
---
 .../podcast-list/podcast_list_viewmodel.dart  | 22 +++++++++++++++----
 .../lib/ui/views/podcast/podcast_urls.dart    |  6 -----
 .../podcast_widgets/podcast_tilte_widget.dart |  2 +-
 3 files changed, 19 insertions(+), 11 deletions(-)
 delete mode 100644 mobile-app/lib/ui/views/podcast/podcast_urls.dart

diff --git a/mobile-app/lib/ui/views/podcast/podcast-list/podcast_list_viewmodel.dart b/mobile-app/lib/ui/views/podcast/podcast-list/podcast_list_viewmodel.dart
index 407debbb6..cc226a1c6 100644
--- a/mobile-app/lib/ui/views/podcast/podcast-list/podcast_list_viewmodel.dart
+++ b/mobile-app/lib/ui/views/podcast/podcast-list/podcast_list_viewmodel.dart
@@ -8,6 +8,12 @@ import 'package:freecodecamp/service/podcast/podcasts_service.dart';
 import 'package:path_provider/path_provider.dart';
 import 'package:stacked/stacked.dart';
 
+const fccPodcastUrls = [
+  'https://freecodecamp.libsyn.com/rss',
+  'https://feeds.transistor.fm/freecodecamp-podcast-en-espanol',
+  'https://feeds.transistor.fm/freecodecamp-podcast-in-chinese'
+];
+
 class PodcastListViewModel extends BaseViewModel {
   final _databaseService = locator<PodcastsDatabaseService>();
   final _developerService = locator<DeveloperService>();
@@ -32,15 +38,23 @@ class PodcastListViewModel extends BaseViewModel {
 
   Future<List<Podcasts>> fetchPodcasts(bool isDownloadView) async {
     String baseUrl = (await _developerService.developmentMode())
-        ? 'https://api.mobile.freecodecamp.dev/'
-        : 'https://api.mobile.freecodecamp.org/';
+        ? 'https://api.mobile.freecodecamp.dev'
+        : 'https://api.mobile.freecodecamp.org';
     await _databaseService.initialise();
     if (isDownloadView) {
       return await _databaseService.getPodcasts();
     } else {
-      final res = await _dio.get('${baseUrl}podcasts');
+      final res = await _dio.get('$baseUrl/podcasts');
       final List<dynamic> podcasts = res.data;
-      return podcasts.map((podcast) => Podcasts.fromAPIJson(podcast)).toList();
+      final podcastList =
+          podcasts.map((podcast) => Podcasts.fromAPIJson(podcast)).toList();
+      final fccPodcasts = podcastList
+          .where((podcast) => fccPodcastUrls.contains(podcast.url))
+          .toList();
+      final otherPodcasts = podcastList
+          .where((podcast) => !fccPodcastUrls.contains(podcast.url))
+          .toList();
+      return [...fccPodcasts, ...otherPodcasts];
     }
   }
 }
diff --git a/mobile-app/lib/ui/views/podcast/podcast_urls.dart b/mobile-app/lib/ui/views/podcast/podcast_urls.dart
deleted file mode 100644
index 46a122d2b..000000000
--- a/mobile-app/lib/ui/views/podcast/podcast_urls.dart
+++ /dev/null
@@ -1,6 +0,0 @@
-const podcastUrls = [
-  'https://feed.syntax.fm/rss',
-  'https://changelog.com/podcast/feed',
-  'https://pinecast.com/feed/ladybug-podcast',
-  'https://freecodecamp.libsyn.com/rss'
-];
diff --git a/mobile-app/lib/ui/widgets/podcast_widgets/podcast_tilte_widget.dart b/mobile-app/lib/ui/widgets/podcast_widgets/podcast_tilte_widget.dart
index fa2a8bff5..3369b8207 100644
--- a/mobile-app/lib/ui/widgets/podcast_widgets/podcast_tilte_widget.dart
+++ b/mobile-app/lib/ui/widgets/podcast_widgets/podcast_tilte_widget.dart
@@ -212,7 +212,7 @@ class PodcastTileState extends State<PodcastTile> {
 
   String _parseDuration(Duration dur, BuildContext context) {
     String hours = (widget.episode.duration!.inMinutes ~/ 60).toString();
-    String minutes = (widget.episode.duration!.inMinutes).toString();
+    String minutes = (widget.episode.duration!.inMinutes % 60).toString();
 
     if (dur.inMinutes > 59) {
       return context.t.podcast_duration_hours(