/// <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(); } }
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); } }