/// <summary>
 /// Method for adding given music file to given playlist
 /// and notyfing background player about made changes
 /// </summary>
 /// <param name="musicFile">Music file to add to playlist</param>
 /// <param name="playlist">Playlist for music file to be added</param>
 public async void AddMusicFileToPlaylist(MusicFileViewModel musicFile, MusicPlaylistViewModel playlist)
 {
     if (!playlist.musicFileList.ToList().Exists(m => m
                                                 == musicFile))
     {
         playlist.Add(musicFile);
         App.SendMessageToBackground(MessageType.AddToPlaylist, playlist.Name + "\t" + musicFile.Id);
     }
     else
     {
         await new MessageDialog("Wybrany utwór już znajduje się w liście odtwarzania!", "Błąd").ShowAsync();
     }
 }
示例#2
0
        private async void MessageReceivedFromBackground(object sender, MediaPlayerDataReceivedEventArgs arguments)
        {
            object message;

            try
            {
                if (arguments.Data.TryGetValue(MessageType.Message.ToString(), out message))
                {
                    //It is a command, handle it
                    Command command;
                    if (Enum.TryParse(message.ToString(), out command))
                    {
                        switch (command)
                        {
                        case Command.Pause:

                            break;

                        case Command.Play:

                            break;
                        }
                    }
                    else
                    {
                        Debug.WriteLine("An error occured while processing send command");
                    }
                }
                else if (arguments.Data.TryGetValue(MessageType.MediaPlaybackItem.ToString(), out message))
                {
                    await Task.Delay(400);

                    MusicFileViewModel musicFile = musicPlayerData.CurrentPlaylist
                                                   .musicFileList.Where(m => m.Id == message.ToString()).Single();
                    if (musicPlayerData.CurrentPlaylist == musicPlayerData.MainPlaylist)
                    {
                        MainPage.Instance.SetCurrentItem(musicFile);
                    }
                    else
                    {
                        MusicPlaylistView.Instance.SetCurrentItem(musicFile);
                    }
                }
                else if (arguments.Data.TryGetValue(MessageType.Playlist.ToString(), out message))
                {
                    //There is a playlist to add, handle it
                    MusicPlaylistViewModel playlist = null;
                    string dataSeparator            = "\t";
                    string filesSeparator           = "\n";

                    string[] playlistData = message.ToString().Split(filesSeparator.ToCharArray().Single());

                    //Validate that first element in data is name of playlist
                    if (playlistData[0].Split(dataSeparator.ToCharArray().Single()).Length != 1)
                    {
                        throw new Exception("Incorrect data frame");
                    }
                    else
                    {
                        if (musicPlayerData.MusicPlaylists.Where(m => m
                                                                 .Name == playlistData[0]).Count() == 0)
                        {
                            playlist = new MusicPlaylistViewModel(playlistData[0]);
                            //Remove first element which contains playlist name
                            List <string> playlistList = playlistData.ToList();
                            playlistList.RemoveAt(0);
                            foreach (var musicData in playlistList)
                            {
                                if (musicData != "")
                                {
                                    playlist.Add(musicPlayerData.MainPlaylist.musicFileList
                                                 .Where(m => m.Id == musicData).Single());
                                }
                            }
                            //Playlist is ready, add it to list
                            musicPlayerData.AddPlaylist(playlist);
                        }
                        else
                        {
                            throw new Exception("Playlist already exists");
                        }
                    }
                }
                else if (arguments.Data.TryGetValue(MessageType.CurrentPlaylist.ToString(), out message))
                {
                    if (musicPlayerData.MainPlaylist.Name == message.ToString())
                    {
                        musicPlayerData.SetCurrentPlaylist(musicPlayerData.MainPlaylist);
                    }
                    else if (musicPlayerData.MusicPlaylists.Where(m => m.Name == message.ToString()).Count() == 1)
                    {
                        musicPlayerData.SetCurrentPlaylist(musicPlayerData.MusicPlaylists.Where(m => m.Name == message.ToString()).Single());
                    }
                }
                else if (arguments.Data.TryGetValue(MessageType.MainPlaylist.ToString(), out message))
                {
                    //Main playlist have changed, update it
                    MusicPlaylistViewModel mainPlaylist = null;
                    string dataSeparator  = "\t";
                    string filesSeparator = "\n";

                    string[] playlistData = message.ToString().Split(filesSeparator.ToCharArray().Single());

                    //Validate that first element in data is name of playlist
                    if (playlistData[0].Split(dataSeparator.ToCharArray().Single()).Length != 1)
                    {
                        throw new Exception("Incorrect data frame");
                    }
                    else
                    {
                        mainPlaylist = new MusicPlaylistViewModel(playlistData[0]);
                        //Remove first element which contains playlist name
                        List <string> playlistList = playlistData.ToList();
                        playlistList.RemoveAt(0);
                        foreach (var musicData in playlistList)
                        {
                            if (musicData != "")
                            {
                                string[] musicDetails = musicData.Split(dataSeparator.ToCharArray().Single());
                                if (musicDetails.Length != 4)
                                {
                                    //Data is incomplete or corrupted, abort
                                    throw new Exception("Data is either corrupted or incomplete");
                                }
                                else
                                {
                                    MusicFileViewModel musicFile = new MusicFileViewModel();
                                    musicFile.Id       = musicDetails[0];
                                    musicFile.Title    = musicDetails[1];
                                    musicFile.Artist   = musicDetails[2];
                                    musicFile.Duration = TimeSpan.Parse(musicDetails[3]);
                                    mainPlaylist.musicFileList.Add(musicFile);
                                }
                            }
                        }
                        //Playlist is ready, set is as current
                        musicPlayerData.SetMainPlaylist(mainPlaylist);
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
        }