Beispiel #1
0
        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"));
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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;
            }
        }
Beispiel #6
0
        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);
        }