Skip to content

Commit da45e82

Browse files
committed
feat(viewmodel): prevent loading episode if already playing another episode and update play/pause logic
1 parent a9ce8c0 commit da45e82

File tree

2 files changed

+23
-12
lines changed

2 files changed

+23
-12
lines changed

mobile-app/lib/ui/views/podcast/episode/episode_view.dart

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,12 @@ class EpisodeView extends StatelessWidget {
2121
return ViewModelBuilder<EpisodeViewModel>.reactive(
2222
viewModelBuilder: () => EpisodeViewModel(),
2323
onViewModelReady: (model) {
24-
model.loadEpisode(episode, podcast);
24+
if (!model.audioService.isPlaying(
25+
'podcast',
26+
episodeId: model.audioService.episodeId,
27+
)) {
28+
model.loadEpisode(episode, podcast);
29+
}
2530
model.hasDownloadedEpisode(episode);
2631
model.initProgressListener(episode);
2732
model.initDownloadListener();
@@ -142,9 +147,10 @@ class EpisodeView extends StatelessWidget {
142147
IconButton(
143148
iconSize: 80,
144149
onPressed: () {
145-
model.playOrPause(episode);
150+
model.playOrPause(episode, podcast);
146151
},
147-
icon: model.isPlaying
152+
icon: model.isPlaying &&
153+
model.audioService.episodeId == episode.id
148154
? const Icon(Icons.pause)
149155
: const Icon(Icons.play_arrow_rounded),
150156
),

mobile-app/lib/ui/views/podcast/episode/episode_viewmodel.dart

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,14 +83,17 @@ class EpisodeViewModel extends BaseViewModel {
8383
}
8484

8585
void initProgressListener(Episodes episode) {
86-
setProgressListener = AudioService.position.listen(
87-
(event) {
88-
int duration = episode.duration!.inSeconds;
89-
double sliderValue = event.inSeconds / duration;
90-
setSliderValue = sliderValue;
91-
handleTimeVortex(duration, event.inSeconds);
92-
},
93-
);
86+
if (audioService.episodeId == episode.id ||
87+
audioService.episodeId.isEmpty) {
88+
setProgressListener = AudioService.position.listen(
89+
(event) {
90+
int duration = episode.duration!.inSeconds;
91+
double sliderValue = event.inSeconds / duration;
92+
setSliderValue = sliderValue;
93+
handleTimeVortex(duration, event.inSeconds);
94+
},
95+
);
96+
}
9497
}
9598

9699
void handleTimeVortex(int duration, int inSeconds) {
@@ -194,10 +197,11 @@ class EpisodeViewModel extends BaseViewModel {
194197
setSliderValue = value > 0 ? value : 0.0;
195198
}
196199

197-
void playOrPause(Episodes episode) {
200+
void playOrPause(Episodes episode, Podcasts podcast) {
198201
if (audioService.isPlaying('podcast', episodeId: episode.id)) {
199202
audioService.pause();
200203
} else {
204+
loadEpisode(episode, podcast);
201205
audioService.play();
202206
}
203207
}
@@ -217,6 +221,7 @@ class EpisodeViewModel extends BaseViewModel {
217221
if (audioService.episodeId != episode.id) {
218222
audioService.setEpisodeId = episode.id;
219223
audioService.loadEpisode(episode, downloaded, podcast);
224+
initProgressListener(episode);
220225
}
221226
}
222227
}

0 commit comments

Comments
 (0)