private async Task <IList <ContentInfo> > GetContentsOfDayAsync(DateInfo date, int startFrom, int count, ContentsSet contentsSet)
        {
            DebugUtil.Log(() => "Loading ContentsOfDay: " + date.Title + " from " + startFrom);

            var contents = await AvContentApi.GetContentListAsync(new ContentListTarget
            {
                Sorting     = SortMode.Ascending,
                Grouping    = ContentGroupingMode.Date,
                Uri         = date.Uri,
                Types       = ContentsSetToTypes(contentsSet),
                StartIndex  = startFrom,
                MaxContents = count
            }).ConfigureAwait(false);

            return(contents.Where(content => content.ImageContent?.OriginalContents?.Count > 0)
                   .Select(content =>
            {
                var contentInfo = new RemoteApiContentInfo
                {
                    Name = RemoveExtension(content.ImageContent.OriginalContents[0].FileName),
                    LargeUrl = content.ImageContent.LargeImageUrl,
                    ThumbnailUrl = content.ImageContent.ThumbnailUrl,
                    MimeType = ContentKindToMimeType(content.ContentKind),
                    Uri = content.Uri,
                    CreatedTime = content.CreatedTime,
                    Protected = content.IsProtected == TextBoolean.True,
                    RemotePlaybackAvailable = (content.RemotePlayTypes?.Contains(RemotePlayMode.SimpleStreaming) ?? false),
                    GroupName = date.Title,
                };

                if (content.ContentKind == ContentKind.StillImage)
                {
                    foreach (var original in content.ImageContent.OriginalContents)
                    {
                        if (original.Type == ImageType.Jpeg)
                        {
                            contentInfo.OriginalUrl = original.Url;
                            break;
                        }
                    }
                }
                else if (content.ContentKind == ContentKind.MovieMp4 || content.ContentKind == ContentKind.MovieXavcS)
                {
                    foreach (var original in content.ImageContent.OriginalContents)
                    {
                        contentInfo.OriginalUrl = original.Url;
                        break;
                    }
                }
                return contentInfo;
            })
                   .ToList <ContentInfo>());
        }
        private async Task <int> GetContentsOfDaySeparatelyAsync(DateInfo date, ContentsSet contentsSet, CancellationTokenSource cancel, int sum)
        {
            DebugUtil.Log(() => "Loading: " + date.Title);

            var count = await AvContentApi.GetContentCountAsync(new CountingTarget
            {
                Grouping = ContentGroupingMode.Date,
                Uri      = date.Uri,
                Types    = ContentsSetToTypes(contentsSet),
            }).ConfigureAwait(false);

            DebugUtil.Log(() => count.NumOfContents + " contents exist.");

            var loops  = count.NumOfContents / CONTENT_LOOP_STEP + (count.NumOfContents % CONTENT_LOOP_STEP == 0 ? 0 : 1);
            var loaded = 0;

            for (var i = 0; i < loops; i++)
            {
                if (loaded + sum > MAX_AUTO_LOAD_THUMBNAILS)
                {
                    break;
                }

                var contents = await GetContentsOfDayAsync(date, i *CONTENT_LOOP_STEP, CONTENT_LOOP_STEP, contentsSet).ConfigureAwait(false);

                if (cancel?.IsCancellationRequested ?? false)
                {
                    DebugUtil.Log("Loading task cancelled");
                    OnCancelled();
                    break;
                }

                loaded += contents.Count;
                DebugUtil.Log(() => contents.Count + " contents fetched");

                OnPartLoaded(contents.Select(content => new Thumbnail(content, Udn)).ToList());
            }

            if (loaded < count.NumOfContents)
            {
                var remaining = new RemainingContentsHolder(date, Udn, loaded, count.NumOfContents - loaded);
                var list      = new List <Thumbnail>();
                list.Add(remaining);
                OnPartLoaded(list);
            }

            return(loaded);
        }