protected async Task AddTracksToPlaylistAsync(IList <TrackInfo> tracks, string playlistName) { AddToPlaylistResult result = await this.collectionService.AddTracksToPlaylistAsync(tracks, playlistName); if (!result.IsSuccess) { this.dialogService.ShowNotification(0xe711, 16, ResourceUtils.GetStringResource("Language_Error"), ResourceUtils.GetStringResource("Language_Error_Adding_Songs_To_Playlist").Replace("%playlistname%", "\"" + playlistName + "\""), ResourceUtils.GetStringResource("Language_Ok"), true, ResourceUtils.GetStringResource("Language_Log_File")); } }
public async Task <AddToPlaylistResult> AddAlbumsToPlaylistAsync(IList <Album> albums, string playlistName) { AddToPlaylistResult result = await this.playlistRepository.AddAlbumsToPlaylistAsync(albums, playlistName); if (result.IsSuccess) { this.AddedTracksToPlaylist(result.NumberTracksAdded, playlistName); } return(result); }
public async Task <OpenPlaylistResult> OpenPlaylistAsync(string fileName) { string playlistName = String.Empty; var paths = new List <String>(); // Decode the playlist file // ------------------------ var decoder = new PlaylistDecoder(); DecodePlaylistResult decodeResult = null; await Task.Run(() => decodeResult = decoder.DecodePlaylist(fileName)); if (!decodeResult.DecodeResult.Result) { LogClient.Instance.Logger.Error("Error while decoding playlist file. Exception: {0}", decodeResult.DecodeResult.GetMessages()); return(OpenPlaylistResult.Error); } // Set the paths // ------------- paths = decodeResult.Paths; // Get a unique name for the playlist // ---------------------------------- playlistName = await this.playlistRepository.GetUniquePlaylistNameAsync(decodeResult.PlaylistName); // Add the Playlist to the database // -------------------------------- AddPlaylistResult addPlaylistResult = await this.playlistRepository.AddPlaylistAsync(playlistName); if (addPlaylistResult != AddPlaylistResult.Success) { return(OpenPlaylistResult.Error); } // Add TrackInfo's to the Playlist // ------------------------------- List <TrackInfo> tracks = await this.trackRepository.GetTracksAsync(paths); AddToPlaylistResult result = await this.playlistRepository.AddTracksToPlaylistAsync(tracks, playlistName); if (!result.IsSuccess) { return(OpenPlaylistResult.Error); } // If we arrive at this point, OpenPlaylistResult = OpenPlaylistResult.Success, // so we can always raise the PlaylistsChanged Event. this.PlaylistsChanged(this, new EventArgs()); return(OpenPlaylistResult.Success); }
public async Task <AddToPlaylistResult> AddTracksToPlaylistAsync(IList <TrackInfo> tracks, string playlistName) { var result = new AddToPlaylistResult { IsSuccess = true }; int numberTracksAdded = 0; await Task.Run(() => { try { using (var conn = this.factory.GetConnection()) { try { // Get the PlaylistID of the Playlist with PlaylistName = iPlaylistName var playlistID = conn.Table <Playlist>().Select((p) => p).Where((p) => p.PlaylistName.Equals(playlistName)).ToList().Select((p) => p.PlaylistID).FirstOrDefault(); // Loop over the Tracks in iTracks and add an entry to PlaylistEntries for each of the Tracks foreach (TrackInfo ti in tracks) { var possiblePlaylistEntry = new PlaylistEntry { PlaylistID = playlistID, TrackID = ti.TrackID }; if (!conn.Table <PlaylistEntry>().ToList().Contains(possiblePlaylistEntry)) { conn.Insert(possiblePlaylistEntry); numberTracksAdded += 1; } } } catch (Exception ex) { LogClient.Instance.Logger.Error("A problem occured while adding Tracks to Playlist with name '{0}'. Exception: {1}", playlistName, ex.Message); result.IsSuccess = false; } } } catch (Exception ex) { LogClient.Instance.Logger.Error("Could not connect to the database. Exception: {0}", ex.Message); } }); result.NumberTracksAdded = numberTracksAdded; return(result); }
protected async Task AddAlbumsToPlaylistAsync(IList <Album> albums, string playlistName) { AddPlaylistResult addPlaylistResult = AddPlaylistResult.Success; // Default Success // If no playlist is provided, first create one. if (playlistName == null) { var responseText = ResourceUtils.GetStringResource("Language_New_Playlist"); if (this.dialogService.ShowInputDialog( 0xea37, 16, ResourceUtils.GetStringResource("Language_New_Playlist"), ResourceUtils.GetStringResource("Language_Enter_Name_For_New_Playlist"), ResourceUtils.GetStringResource("Language_Ok"), ResourceUtils.GetStringResource("Language_Cancel"), ref responseText)) { playlistName = responseText; addPlaylistResult = await this.collectionService.AddPlaylistAsync(playlistName); } } // If playlist name is still null, the user clicked cancel on the previous dialog. Stop here. if (playlistName == null) { return; } // Verify if the playlist was added switch (addPlaylistResult) { case AddPlaylistResult.Success: case AddPlaylistResult.Duplicate: // Add items to playlist AddToPlaylistResult result = await this.collectionService.AddAlbumsToPlaylistAsync(albums, playlistName); if (!result.IsSuccess) { this.dialogService.ShowNotification(0xe711, 16, ResourceUtils.GetStringResource("Language_Error"), ResourceUtils.GetStringResource("Language_Error_Adding_Songs_To_Playlist").Replace("%playlistname%", "\"" + playlistName + "\""), ResourceUtils.GetStringResource("Language_Ok"), true, ResourceUtils.GetStringResource("Language_Log_File")); } break; case AddPlaylistResult.Error: this.dialogService.ShowNotification( 0xe711, 16, ResourceUtils.GetStringResource("Language_Error"), ResourceUtils.GetStringResource("Language_Error_Adding_Playlist"), ResourceUtils.GetStringResource("Language_Ok"), true, ResourceUtils.GetStringResource("Language_Log_File")); break; case AddPlaylistResult.Blank: this.dialogService.ShowNotification( 0xe711, 16, ResourceUtils.GetStringResource("Language_Error"), ResourceUtils.GetStringResource("Language_Provide_Playlist_Name"), ResourceUtils.GetStringResource("Language_Ok"), false, string.Empty); break; default: // Never happens break; } }
public async Task <AddToPlaylistResult> AddAlbumsToPlaylistAsync(IList <Album> albums, string playlistName) { var result = new AddToPlaylistResult { IsSuccess = true }; int numberTracksAdded = 0; await Task.Run(() => { try { using (var conn = this.factory.GetConnection()) { try { // Get the Playlist with that PlaylistName var playlistID = conn.Table <Playlist>().Select((p) => p).Where((p) => p.PlaylistName.Equals(playlistName)).ToList().Select((p) => p.PlaylistID).FirstOrDefault(); // Get all the Tracks for the selected Album List <long> albumIDs = albums.Select((a) => a.AlbumID).ToList(); string q = string.Format("SELECT DISTINCT tra.TrackID, tra.ArtistID, tra.GenreID, tra.AlbumID, tra.FolderID, tra.Path," + " tra.FileName, tra.MimeType, tra.FileSize, tra.BitRate, tra.SampleRate, tra.TrackTitle," + " tra.TrackNumber, tra.TrackCount, tra.DiscNumber, tra.DiscCount, tra.Duration, tra.Year," + " tra.Rating, tra.PlayCount, tra.SkipCount, tra.DateAdded, tra.DateLastPlayed, tra.DateLastSynced," + " tra.DateFileModified, tra.MetaDataHash FROM Track tra" + " INNER JOIN Folder fol ON tra.FolderID=fol.FolderID" + " WHERE tra.AlbumID IN ({0}) AND fol.ShowInCollection=1", Utils.ToQueryList(albumIDs)); List <Track> tracks = conn.Query <Track>(q); // Loop over the Tracks in iTracks and add an entry to PlaylistEntries for each of the Tracks foreach (Track trk in tracks) { var possiblePlaylistEntry = new PlaylistEntry { PlaylistID = playlistID, TrackID = trk.TrackID }; if (!conn.Table <PlaylistEntry>().ToList().Contains(possiblePlaylistEntry)) { conn.Insert(possiblePlaylistEntry); numberTracksAdded += 1; } } } catch (Exception ex) { LogClient.Instance.Logger.Error("A problem occured while adding Albums to Playlist with name '{0}'. Exception: {1}", playlistName, ex.Message); result.IsSuccess = false; } } } catch (Exception ex) { LogClient.Instance.Logger.Error("Could not connect to the database. Exception: {0}", ex.Message); } }); result.NumberTracksAdded = numberTracksAdded; return(result); }