public override Album FindByAlbumPath(Album album, string albumPath)
        {
            if (albumPath == Album.RootAlbumId)
            {
                return album;
            }

            if (albumPath.StartsWith(Album.RootAlbumId + Separator))
            {
                albumPath = albumPath.Substring((Album.RootAlbumId + Separator).Length);
            }

            string[] albumIds = albumPath.Split(new string[] { Separator }, StringSplitOptions.None)
                .ToArray();

            for (int level = 0; level < albumIds.Length; level++)
            {
                string aid = albumIds[level];

                album = album.Items
                    .OfType<Album>()
                    .SingleOrDefault(a => a.Id == aid);

                if (album == null)
                {
                    return null;
                }
            }

            return album;
        }
        public Uri GetAlbumUri(Album album)
        {
            var rootUri = GetApiRootUri();

            string albumPath = ConstructAlbumPathSegment(album);

            var albumUriBuilder = new UriBuilder(rootUri);

            albumUriBuilder.Path += $"albums/{albumPath}";

            return albumUriBuilder.Uri;
        }
        public override string ConstructAlbumPathSegment(Album album)
        {
            string path = string.Empty;

            Album current = album;

            while (current != null)
            {
                if (path != string.Empty)
                {
                    path = ":" + path;
                }

                path = $"{current.Id}" + path;

                current = current.ParentAlbum;
            }

            return path;
        }
 public override AlbumContentItem FindByContentItemId(Album album, string contentItemId)
 {
     return album.Items.OfType<AlbumContentItem>()
         .SingleOrDefault(i => i.Id == contentItemId);
 }
 /// <summary>
 /// Returns stream with content of thumbnail image for request album item.
 /// </summary>
 /// <param name="thumbSize">Max requested thumbnail size.</param>
 public abstract AlbumItemContentResult GetThumbnail(Album album, string contentItemId, Size thumbSize, bool enforceAspectRatio = true);
 /// <summary>
 /// Returns content with original content for requested item.
 /// </summary>
 public abstract AlbumItemContentResult GetOrigContent(Album album, string contentItemId);
 public abstract AlbumContentItem FindByContentItemId(Album album, string contentItemId);
 public abstract string ConstructAlbumPathSegment(Album album);
 public abstract Album FindByAlbumPath(Album album, string albumPath);