public IEnumerable <DbAlbum> ReadAlbums()
        {
            this.StartedReadingAlbums.Invoke();

            int counter = 0;

            foreach (var album in _deserializedAlbums)
            {
                counter++;
                yield return(album);

                ProgressChanged.Invoke(counter, _deserializedAlbums.Count);
            }

            FinishedReadingAlbums.Invoke();
        }
        public IEnumerable <DbAlbum> ReadAlbums(SortOrder sortOrder)
        {
            this.StartedReadingAlbums.Invoke();

            uint sortAtom = 0;

            switch (sortOrder)
            {
            case SortOrder.DateAdded:
                sortAtom = (uint)SchemaMap.kiIndex_DateAdded;
                break;

            case SortOrder.Album:
                sortAtom = (uint)SchemaMap.kiIndex_Title;
                break;

            case SortOrder.Artist:
                sortAtom = (uint)SchemaMap.kiIndex_DisplayArtist;
                break;

            default:
                throw new ArgumentOutOfRangeException("sortOrder");
            }

            //querying all albums, creates a property bag inside this method to query the database
            ZuneQueryList albums = GetAlbumQueryListSorted(sortAtom);

            albums.AddRef();

            var uniqueIds = albums.GetUniqueIds();

            for (int i = 0; i < uniqueIds.Count; i++)
            {
                object uniqueId = uniqueIds[i];
                yield return(GetAlbumMin((int)uniqueId));

                ProgressChanged.Invoke(i, uniqueIds.Count - 1);
            }

            FinishedReadingAlbums.Invoke();

            albums.Release();
            albums.Dispose();
        }