Beispiel #1
0
        public async Task AddNew(StopOperationToken stopToken)
        {
            List <StorageFolder> folders = await GetStorageFolders();

            List <IPlaylist> adds = new List <IPlaylist>();

            foreach (StorageFolder folder in folders.OrderBy(f => f.Path))
            {
                if (stopToken.IsStopped)
                {
                    return;
                }
                if (Playlists.Any(p => p.AbsolutePath == folder.Path))
                {
                    continue;
                }

                IPlaylist playlist = new Playlist(folder.Path);
                playlist.Parent = Playlists;

                await playlist.Reset(stopToken);

                if (playlist.Songs.Count > 0)
                {
                    adds.Add(playlist);
                }
            }

            if (stopToken.IsStopped)
            {
                return;
            }

            Playlists.Change(null, adds);
        }
        private async void UpdateThisPlaylist_Click(object sender, RoutedEventArgs e)
        {
            StopOperationToken stopToken = new StopOperationToken();

            Frame.Navigate(typeof(LoadingPage), stopToken);
            await viewModel.Update(stopToken);
            Frame.GoBack();
        }
        private async void SearchForNewSongs_Click(object sender, RoutedEventArgs e)
        {
            StopOperationToken stopToken = new StopOperationToken();

            Frame.Navigate(typeof(LoadingPage), stopToken);
            await viewModel.AddNew(stopToken);
            Frame.GoBack();
        }
Beispiel #4
0
        private async void ResetAllSongs_Click(object sender, RoutedEventArgs e)
        {
            StopOperationToken stopToken = new StopOperationToken();

            Frame.Navigate(typeof(LoadingPage), stopToken);
            await library.ResetSongs(stopToken);

            Frame.GoBack();
        }
Beispiel #5
0
        private async void AddNotExistingPlaylists_Click(object sender, RoutedEventArgs e)
        {
            StopOperationToken stopToken = new StopOperationToken();

            Frame.Navigate(typeof(LoadingPage), stopToken);
            await library.AddNew(stopToken);

            Frame.GoBack();
        }
        private async void ResetThisPlaylist_Click(object sender, RoutedEventArgs e)
        {
            StopOperationToken stopToken = new StopOperationToken();

            Frame.Navigate(typeof(LoadingPage), stopToken);
            await viewModel.Reset(stopToken);
            Frame.GoBack();

            if (viewModel.Songs.Count == 0) Frame.GoBack();
        }
Beispiel #7
0
        private async void PlaylistsView_AddNewClick(object sender, PlaylistActionEventArgs e)
        {
            StopOperationToken stopToken = new StopOperationToken();

            Frame.Navigate(typeof(LoadingPage), stopToken);
            await e.Playlist.AddNew(stopToken);

            if (!stopToken.IsStopped)
            {
                Frame.GoBack();
            }
        }
Beispiel #8
0
        public async Task ResetSongs(StopOperationToken stopToken)
        {
            foreach (IPlaylist playlist in Playlists.ToArray())
            {
                if (stopToken.IsStopped)
                {
                    return;
                }

                await playlist.ResetSongs(stopToken);
            }
        }
Beispiel #9
0
        public async Task Reset(StopOperationToken stopToken)
        {
            IReadOnlyList <StorageFile> files = await GetStorageFolderFiles();

            Song[] foundSongs = (await GetSongsFromStoragefiles(files, stopToken)).ToArray();

            if (stopToken.IsStopped)
            {
                return;
            }

            Songs       = new SongCollection(foundSongs, ShuffleType.Off, null);
            CurrentSong = Songs.Shuffle.FirstOrDefault();
        }
Beispiel #10
0
        private async void Library_Loaded(object sender, EventArgs args)
        {
            MobileDebug.Service.WriteEvent("MainPageLibLoaded");
            if (library.Playlists.Count > 0)
            {
                return;
            }

            StopOperationToken stopToken = new StopOperationToken();

            Frame.Navigate(typeof(LoadingPage), stopToken);
            await library.Reset(stopToken);

            Frame.GoBack();

            AutoSaveLoad.CheckLibrary(library, "ResetedOnLoaded");
        }
Beispiel #11
0
        private async Task <Song> GetLoadedSong(StorageFile file, StopOperationToken stopToken)
        {
            if (stopToken.IsStopped)
            {
                return(null);
            }

            try
            {
                return(await Song.GetLoaded(file));
            }
            catch (Exception e)
            {
                MobileDebug.Service.WriteEvent("LoadSongFail", e);
            }

            return(null);
        }
Beispiel #12
0
        public async Task AddNew(StopOperationToken stopToken)
        {
            IReadOnlyList <StorageFile> files = await GetStorageFolderFiles();

            Song[] songs = Songs.ToArray();

            IEnumerable <StorageFile> addFiles = files.Where(f => !songs.Any(s => s.Path == f.Path));

            Song[] addSongs = (await GetSongsFromStoragefiles(addFiles, stopToken)).ToArray();

            if (stopToken.IsStopped)
            {
                return;
            }
            if (addSongs.Length == 0)
            {
                return;
            }

            Songs.Change(null, addSongs);
        }
Beispiel #13
0
        public async Task Update(StopOperationToken stopToken)
        {
            Song[] songs = Songs.ToArray();
            IReadOnlyList <StorageFile> files = await GetStorageFolderFiles();

            IEnumerable <StorageFile> addFiles = files.Where(f => songs.All(s => s.Path != f.Path));

            Song[] addSongs    = (await GetSongsFromStoragefiles(addFiles, stopToken)).ToArray();
            Song[] removeSongs = songs.Where(s => files.All(f => f.Path != s.Path)).ToArray();

            if (stopToken.IsStopped)
            {
                return;
            }

            if (Songs.Count + addSongs.Length - removeSongs.Length == 0)
            {
                Parent.Remove(this);
                return;
            }

            Songs.Change(removeSongs, addSongs);
        }
Beispiel #14
0
        public async Task Reset(StopOperationToken stopToken)
        {
            IsPlaying = false;

            List <IPlaylist>     refreshedPlaylists = new List <IPlaylist>();
            List <StorageFolder> folders            = await GetStorageFolders();

            foreach (StorageFolder folder in await GetStorageFolders())
            {
                IPlaylist playlist = new Playlist(folder.Path);
                playlist.Parent = Playlists;

                await playlist.Reset(stopToken);

                if (stopToken.IsStopped)
                {
                    return;
                }
                if (playlist.Songs.Count > 0)
                {
                    refreshedPlaylists.Add(playlist);
                }
            }

            IPlaylistCollection playlists = new PlaylistCollection();

            playlists.Change(null, refreshedPlaylists);

            if (stopToken.IsStopped)
            {
                return;
            }

            Playlists       = playlists;
            CurrentPlaylist = playlists.FirstOrDefault();
        }
Beispiel #15
0
 public async Task ResetSongs(StopOperationToken stopToken)
 {
     await Task.WhenAll(Songs.Select(s => s.Reset()).ToArray());
 }
Beispiel #16
0
        private async Task <IEnumerable <Song> > GetSongsFromStoragefiles(IEnumerable <StorageFile> files, StopOperationToken stopToken)
        {
            Task <Song>[] tasks = files.Select(f => GetLoadedSong(f, stopToken)).ToArray();

            await Task.WhenAll(tasks);

            return(tasks.Select(t => t.Result).Where(s => s != null && !s.IsEmpty));
        }
Beispiel #17
0
 protected override void OnNavigatedTo(NavigationEventArgs e)
 {
     stopToken = (StopOperationToken)e.Parameter;
 }