Skip to content

Commit 272fcc7

Browse files
authored
Merge pull request #248 from BuildFire/fix/playback-audio
fix(widget): complete audio service - PLUG-3857
2 parents 4c8aa53 + ba5fd77 commit 272fcc7

File tree

1 file changed

+84
-122
lines changed

1 file changed

+84
-122
lines changed

widget/controllers/widget.nowplaying.controller.js

Lines changed: 84 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -60,33 +60,34 @@
6060
];
6161
bookmarks.sync($scope);
6262

63-
if(!NowPlaying.isOnline) initAudio(0);
63+
if(!NowPlaying.isOnline) initAudio();
6464
Buildfire.auth.getCurrentUser((err, user) => {
65-
var userCheckViewFilter = {};
65+
let userCheckViewFilter = {};
6666
if (user) {
6767
$rootScope.user = user
68-
var userCheckViewFilter = {
68+
userCheckViewFilter = {
6969
filter: getIndexedFilter(media.id, $rootScope.user._id)
7070
};
7171
} else if (Buildfire.context.deviceId) {
72-
var userCheckViewFilter = {
72+
userCheckViewFilter = {
7373
filter: getIndexedFilter(media.id, Buildfire.context.deviceId)
7474
};
7575
} else {
76-
initAudio(0)
76+
initAudio()
7777
}
7878
if (user || Buildfire.context.deviceId) {
7979
buildfire.publicData.search(userCheckViewFilter, COLLECTIONS.MediaCount, function (err, res) {
8080
if (res && res.length > 0) {
8181
NowPlaying.isAudioPlayed = true;
8282
if (res[0].data.lastPosition) {
83-
initAudio(res[0].data.lastPosition)
83+
NowPlaying.lastSavedPosition = res[0].data.lastPosition;
84+
initAudio()
8485
} else {
85-
initAudio(0)
86+
initAudio()
8687
}
8788
} else {
8889
NowPlaying.isAudioPlayed = false;
89-
initAudio(0)
90+
initAudio()
9091
}
9192
})
9293
}
@@ -284,26 +285,23 @@
284285
/**
285286
* audioPlayer.onEvent callback calls when audioPlayer event fires.
286287
*/
287-
//var first = true;
288-
var ready = false, setOder = false, first = false, open = true;
288+
var ready = false, setOder = false, open = true;
289289
if($rootScope.activePlayerEvents){
290290
// Prevent the repetition of events by clearing all previous occurrences, as repeated events tend to occur when the user plays multiple audio files.
291291
$rootScope.activePlayerEvents.clear();
292292
}
293293
$rootScope.activePlayerEvents = audioPlayer.onEvent(function (e) {
294294
switch (e.event) {
295295
case 'play':
296-
NowPlaying.currentTrack = e.data.track;
297296
NowPlaying.playing = true;
298297
NowPlaying.paused = false;
299298
audioPlayer.getPlaylist(function (err, data) {
300-
first = false;
301299
NowPlaying.keepPosition = e.data.track.lastPosition;
302300

303-
var filteredPlaylist = data.tracks.filter(el => { return el.plugin && el.plugin == buildfire.context.instanceId; });
301+
var filteredPlaylist = data.tracks.filter(el => { return el.instanceId && el.instanceId == buildfire.context.instanceId });
304302
var index = NowPlaying.findTrackIndex({ tracks: filteredPlaylist }, { myId: (e.data.track.myId) ? e.data.track.myId : "none" });
305303

306-
NowPlaying.isItLast = (index == (filteredPlaylist.length - 1));
304+
NowPlaying.isItLast = filteredPlaylist.length && (index == (filteredPlaylist.length - 1));
307305
if (index >= (filteredPlaylist.length - 1) && NowPlaying.forceAutoPlay && !NowPlaying.settings.loopPlaylist) {
308306
NowPlaying.settings.autoPlayNext = false;
309307
}
@@ -326,84 +324,55 @@
326324
break;
327325
case 'timeUpdate':
328326
ready = e.data.duration && e.data.duration != null && e.data.duration > 0;
329-
if (NowPlaying.forceAutoPlay)
330-
if (ready && e.data.currentTime >= e.data.duration && !first) {
331-
first = true;
332-
audioPlayer.pause();
333-
audioPlayer.setTime(0.1);
334-
if (NowPlaying.forceAutoPlay)
335-
setTimeout(() => {
336-
var myInterval = setInterval(() => {
337-
if (setOder) {
338-
setOder = false;
339-
NowPlaying.playing = true;
340-
audioPlayer.play();
341-
clearInterval(myInterval);
342-
first = false;
343-
}
344-
}, 100);
345-
}, 500);
346-
} else if (ready && (NowPlaying.settings.autoPlayNext || NowPlaying.forceAutoPlay)) {
347-
first = true;
348-
if (ready && open && NowPlaying.keepPosition > 0 && iOS) {
349-
NowPlaying.changeTime(NowPlaying.keepPosition);
350-
open = false;
351-
}
352-
}
327+
353328
NowPlaying.currentTime = e.data.currentTime;
354329
NowPlaying.duration = e.data.duration;
355330
NowPlaying.progressBarStyle(e.data.currentTime);
356331
break;
357332
case 'audioEnded':
333+
NowPlaying.paused = true;
334+
NowPlaying.playing = false;
358335
ready = false;
359-
updateAudioLastPosition(media.id, 0.1)
336+
updateAudioLastPosition(media.id, 0);
360337
if(typeof $rootScope.audioFromPlayList === 'number'){
361338
NowPlaying.playlistPause($rootScope.playListItems[$rootScope.audioFromPlayList]);
362-
return false;
363-
}
364-
if ($rootScope.autoPlay) {
339+
} else if (NowPlaying.isItLast && NowPlaying.settings.loopPlaylist) {
340+
audioPlayer.getCurrentTrack((track) => {
341+
if ($rootScope.playListItems && $rootScope.playListItems.length > 0) {
342+
$rootScope.playListItems.forEach(element => {
343+
element.playing = false
344+
});
345+
let currentTrack = $rootScope.playListItems.find(x => x.title == track.title && x.url == track.url && x.album == track.album && x.image == track.image && x.backgroundImage == track.backgroundImage)
346+
if (currentTrack) {
347+
currentTrack.playing = true
348+
}
349+
}
350+
351+
NowPlaying.currentTime = 0;
352+
audioPlayer.setTime(0);
353+
NowPlaying.finished = false;
354+
audioPlayer.play();
355+
NowPlaying.paused = false;
356+
NowPlaying.playing = true;
357+
});
358+
} else if ($rootScope.autoPlay) {
365359
$rootScope.playNextItem();
366360
} else {
367-
if (NowPlaying.isItLast && NowPlaying.settings.loopPlaylist) {
368-
audioPlayer.getCurrentTrack((track) => {
369-
if ($rootScope.playListItems && $rootScope.playListItems.length > 0) {
370-
$rootScope.playListItems.forEach(element => {
371-
element.playing = false
372-
});
373-
let currentTrack = $rootScope.playListItems.find(x => x.title == track.title && x.url == track.url && x.album == track.album && x.image == track.image && x.backgroundImage == track.backgroundImage)
374-
if (currentTrack) {
375-
currentTrack.playing = true
376-
}
377-
}
378-
});
379-
380-
setTimeout(() => {
381-
audioPlayer.setTime(0.1);
382-
NowPlaying.finished = false;
383-
audioPlayer.pause();
384-
setTimeout(() => {
385-
audioPlayer.play();
386-
NowPlaying.paused = false;
387-
NowPlaying.playing = true;
388-
}, 50);
389-
}, 50);
361+
isAudioEnded = true;
362+
if (!NowPlaying.settings.autoPlayNext) {
363+
NowPlaying.playing = false;
364+
NowPlaying.paused = true;
390365
}
391-
else {
392-
isAudioEnded = true;
393-
if (!NowPlaying.settings.autoPlayNext) {
394-
NowPlaying.playing = false;
395-
NowPlaying.paused = false;
396-
}
397-
if (NowPlaying.forceAutoPlay && NowPlaying.isItLast && !NowPlaying.settings.loopPlaylist) {
398-
NowPlaying.playing = false;
399-
NowPlaying.paused = true;
400-
NowPlaying.finished = true;
401-
}
402-
else NowPlaying.finished = false;
366+
if (NowPlaying.forceAutoPlay && NowPlaying.isItLast && !NowPlaying.settings.loopPlaylist) {
367+
NowPlaying.playing = false;
368+
NowPlaying.paused = true;
369+
NowPlaying.finished = true;
403370
}
371+
else NowPlaying.finished = false;
404372
}
405373
break;
406374
case 'pause':
375+
NowPlaying.paused = true;
407376
NowPlaying.playing = false;
408377
break;
409378
case 'next':
@@ -435,10 +404,9 @@
435404
$scope.$digest();
436405
}
437406
});
438-
function initAudio(lastPosition) {
407+
function initAudio() {
439408
isAudioEnded = false;
440-
NowPlaying.currentTime = lastPosition;
441-
NowPlaying.currentTrack = new Track({...media.data, id: media.id}, lastPosition);
409+
NowPlaying.currentTrack = new Track({...media.data, id: media.id}, 0);
442410
NowPlaying.currentTrack.backgroundImage = media.data.image ? media.data.image : media.data.topImage;
443411

444412
NowPlaying.currentTrack.image = media.data.topImage;
@@ -451,10 +419,6 @@
451419
$scope.$digest();
452420
}
453421
audioPlayer.settings.get(function (err, setting) {
454-
455-
if (!setting.autoJumpToLastPosition) {
456-
NowPlaying.currentTrack.startAt = 0;
457-
}
458422
NowPlaying.currentTime = 0;
459423
NowPlaying.settings = setting;
460424
NowPlaying.volume = setting.volume;
@@ -463,14 +427,12 @@
463427
NowPlaying.autoJumpToLastPosition = setting.autoJumpToLastPosition;
464428
}else{
465429
NowPlaying.settings.autoJumpToLastPosition = NowPlaying.autoJumpToLastPosition;
430+
audioPlayer.settings.set(NowPlaying.settings);
431+
}
432+
if ($rootScope.autoPlay) {
433+
NowPlaying.playTrack();
466434
}
467435
$scope.$digest();
468-
audioPlayer.settings.set(NowPlaying.settings);
469-
setTimeout(() => {
470-
if ($rootScope.autoPlay) {
471-
NowPlaying.playTrack();
472-
}
473-
}, 0);
474436
$scope.$apply();
475437
});
476438

@@ -654,42 +616,41 @@
654616
}
655617
});
656618
if (NowPlaying.paused) {
657-
audioPlayer.play();
658-
if (NowPlaying.finished)
659-
setTimeout(() => {
660-
NowPlaying.finished = false;
661-
audioPlayer.pause();
662-
setTimeout(() => {
663-
audioPlayer.play();
664-
NowPlaying.paused = false;
665-
NowPlaying.playing = true;
666-
}, 50);
667-
}, 50);
619+
if (NowPlaying.finished) {
620+
NowPlaying.currentTime = 0;
621+
audioPlayer.setTime(0);
622+
NowPlaying.finished = false;
623+
audioPlayer.play();
624+
NowPlaying.paused = false;
625+
NowPlaying.playing = true;
626+
} else {
627+
audioPlayer.play();
628+
}
668629
} else {
669-
setTimeout(() => {
670-
try {
671-
if (index != -1) {
672-
audioPlayer.play(index);
630+
if (index != -1) {
631+
audioPlayer.play(index);
632+
} else {
633+
audioPlayer.getCurrentTrack(_currentTrack => {
634+
if (_currentTrack && _currentTrack.deepLinkData && _currentTrack.deepLinkData.payload
635+
&& _currentTrack.deepLinkData.payload.id === NowPlaying.currentTrack.deepLinkData.payload.id) {
636+
NowPlaying.currentTrack.startAt = _currentTrack.lastPosition;
637+
NowPlaying.currentTime = _currentTrack.lastPosition;
638+
} else if (NowPlaying.autoJumpToLastPosition && NowPlaying.lastSavedPosition) {
639+
NowPlaying.currentTrack.startAt = NowPlaying.lastSavedPosition;
673640
}
674-
else {
675-
$rootScope.audioFromPlayList = null;
676-
if (isAudioEnded) {
677-
NowPlaying.currentTrack.lastPosition = 0
678-
}
679-
audioPlayer.play(NowPlaying.currentTrack);
680-
audioPlayer.pause();
681-
setTimeout(() => {
682-
audioPlayer.play();
683-
NowPlaying.paused = false;
684-
NowPlaying.playing = true;
685-
}, 50);
641+
642+
$rootScope.audioFromPlayList = null;
643+
if (isAudioEnded) {
644+
NowPlaying.currentTrack.startAt = 0;
645+
NowPlaying.currentTrack.lastPosition = 0
686646
}
687-
NowPlaying.isAudioPlayerPlayingAnotherSong = false;
688-
}
689-
catch (err) {
690-
}
691-
}, 500);
692647

648+
audioPlayer.play(NowPlaying.currentTrack);
649+
NowPlaying.paused = false;
650+
NowPlaying.playing = true;
651+
});
652+
}
653+
NowPlaying.isAudioPlayerPlayingAnotherSong = false;
693654
}
694655
}
695656

@@ -701,6 +662,7 @@
701662
}
702663
NowPlaying.playing = true;
703664
if (typeof index==='number') {
665+
NowPlaying.currentTrack = track;
704666
NowPlaying.isAudioPlayerPlayingAnotherSong = false;
705667
audioPlayer.pause();
706668
audioPlayer.play(index);

0 commit comments

Comments
 (0)