예제 #1
0
 private void clear()
 {
     BackgroundTrackRepository.Clear();
     _playlist.Clear();
     _nonShuffledPlaylist?.Clear();
     _index      = 0;
     _isShuffled = false;
 }
예제 #2
0
        private void clear()
        {
#if !Windows10
            BackgroundTrackRepository.Clear();
#endif
            _playlist.Clear();
            _nonShuffledPlaylist?.Clear();
            _index      = 0;
            _isShuffled = false;
        }
예제 #3
0
        private async Task RestorePlaylist()
        {
            try
            {
                var playlist = await BackgroundTrackRepository.LoadPlaylist();

                if (!playlist.Any())
                {
                    return;
                }

                var trackIds         = playlist.Select(node => node.TrackId);
                var restoredplaylist = new SmartCollection <IMediaItem>();
                foreach (int trackId in trackIds)
                {
                    var trackItem = await Locator.MediaLibrary.LoadTrackById(trackId);

                    if (trackItem != null)
                    {
                        restoredplaylist.Add(trackItem);
                    }
                }

                if (!ApplicationSettingsHelper.Contains(nameof(CurrentMedia)))
                {
                    return;
                }
                var index = (int)ApplicationSettingsHelper.ReadSettingsValue(nameof(CurrentMedia));
                if (restoredplaylist.Any())
                {
                    if (index == -1)
                    {
                        // Background Audio was terminated
                        // We need to reset the playlist, or set the current track 0.
                        ApplicationSettingsHelper.SaveSettingsValue(nameof(CurrentMedia), 0);
                        index = 0;
                    }
                    SetCurrentMediaPosition(index);
                }

                if (CurrentMedia >= restoredplaylist.Count || CurrentMedia == -1)
                {
                    CurrentMedia = 0;
                }

                if (restoredplaylist.Any())
                {
                    await SetPlaylist(restoredplaylist, true, false, restoredplaylist[CurrentMedia]);
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine("Failed to restore the playlist");
            }
        }
예제 #4
0
        public async Task ResetCollection()
        {
            await BackgroundTrackRepository.Clear();

            Playlist.Clear();
            CurrentMedia = -1;
            NonShuffledPlaylist?.Clear();
            IsShuffled = false;
            Playback_MediaSet(null);
            IsRunning = false;
        }
예제 #5
0
        public async Task <bool> SetPlaylist(IEnumerable <IMediaItem> mediaItems, bool reset, bool play, IMediaItem media)
        {
            if (reset)
            {
                await ResetCollection();
            }

            if (mediaItems != null)
            {
                var count                = (uint)Playlist.Count;
                var trackItems           = mediaItems.OfType <TrackItem>();
                var backgroundTrackItems = new List <BackgroundTrackItem>();
                foreach (var track in trackItems)
                {
                    backgroundTrackItems.Add(new BackgroundTrackItem()
                    {
                        TrackId = track.Id
                    });
                    track.Index = count;
                    count++;
                }

                Playlist.AddRange(mediaItems);

                await BackgroundTrackRepository.Add(backgroundTrackItems);

                IsRunning = true;
            }

            if (media != null && Playlist.Any())
            {
                var mediaInPlaylist = Playlist.FirstOrDefault(x => x.Path == media.Path);

                if (mediaInPlaylist == null)
                {
                    return(false);
                }

                var mediaIndex = Playlist.IndexOf(mediaInPlaylist);

                if (mediaIndex < 0)
                {
                    return(false);
                }

                SetCurrentMediaPosition(mediaIndex);
                Playback_MediaSet.Invoke(mediaInPlaylist);
                await SetMedia(mediaInPlaylist, play);
            }
            return(true);
        }
예제 #6
0
        private void savePlaylistToBackgroundDB()
        {
            var trackItems           = _playlist.OfType <TrackItem>();
            var backgroundTrackItems = new List <BackgroundTrackItem>();

            foreach (var track in trackItems)
            {
                backgroundTrackItems.Add(new BackgroundTrackItem()
                {
                    TrackId = track.Id
                });
            }
            BackgroundTrackRepository.Add(backgroundTrackItems);
        }
예제 #7
0
        public void Restore()
        {
            if (!ApplicationSettingsHelper.Contains(nameof(Index)))
            {
                return;
            }

            var playlist = BackgroundTrackRepository.LoadPlaylist();

            if (!playlist.Any())
            {
                return;
            }

            var trackIds         = playlist.Select(node => node.TrackId);
            var restoredplaylist = new SmartCollection <IMediaItem>();

            foreach (int trackId in trackIds)
            {
                var trackItem = Locator.MediaLibrary.LoadTrackById(trackId);
                if (trackItem != null)
                {
                    restoredplaylist.Add(trackItem);
                }
            }

            if (restoredplaylist.Count == 0)
            {
                return;
            }
            clear();
            _playlist = restoredplaylist;
            OnPlaylistChanged?.Invoke();
            _index = (int)ApplicationSettingsHelper.ReadSettingsValue(nameof(Index));
            OnCurrentMediaChanged?.Invoke(_playlist[_index], true);
        }