示例#1
0
        public override async Task Load(ContentsSet contentsSet, CancellationTokenSource cancel)
        {
            if (!await IsStorageSupportedAsync().ConfigureAwait(false))
            {
                DebugUtil.Log("Storage scheme is not available on this device");
                throw new StorageNotSupportedException();
            }

            var storages = await GetStoragesUriAsync().ConfigureAwait(false);

            if (cancel != null && cancel.IsCancellationRequested)
            {
                DebugUtil.Log("Loading task cancelled");
                OnCancelled();
                return;
            }

            if (storages.Count == 0)
            {
                DebugUtil.Log("No storage is available on this device");
                throw new NoStorageException();
            }

            await GetContentsByDateSeparatelyAsync(storages[0], contentsSet, cancel).ConfigureAwait(false);
        }
示例#2
0
        public override async Task Load(ContentsSet contentsSet, CancellationTokenSource cancel)
        {
            await LoadPictures(cancel);
            await LoadVideos(cancel);

            OnCompleted();
        }
示例#3
0
        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 != null && cancel.IsCancellationRequested)
                {
                    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);
        }
示例#4
0
        public override async Task Load(ContentsSet contentsSet, CancellationTokenSource cancel)
        {
            await Task.Delay(500).ConfigureAwait(false);

            var loaded = 0;

            foreach (var date in RandomDateList(10))
            {
                await Task.Delay(200).ConfigureAwait(false);

                if (cancel != null && cancel.IsCancellationRequested)
                {
                    OnCancelled();
                    break;
                }

                var list     = new List <Thumbnail>();
                var contents = RandomContentList(30);

                if (MAX_AUTO_LOAD_THUMBNAILS < loaded)
                {
                    var remaining = new RemainingContentsHolder(date, CurrentUuid, 0, contents.Count);
                    var tmplist   = new List <Thumbnail>();
                    tmplist.Add(remaining);
                    OnPartLoaded(tmplist);
                    continue;
                }

                foreach (var content in contents)
                {
                    content.GroupName = date.Title;
                    var thumb = new Thumbnail(content, CurrentUuid);
                    thumb.IsPlayable = !thumb.IsMovie;
                    list.Add(thumb);
                }

                OnPartLoaded(list);
                loaded += list.Count;
            }

            OnCompleted();
        }
示例#5
0
        private async Task GetContentsByDateSeparatelyAsync(string uri, ContentsSet contentsSet, CancellationTokenSource cancel)
        {
            DebugUtil.Log("Loading number of Dates");

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

            DebugUtil.Log(count.NumOfContents + " dates exist.");

            if (cancel != null && cancel.IsCancellationRequested)
            {
                DebugUtil.Log("Loading task cancelled");
                OnCancelled();
                return;
            }

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

            for (var i = 0; i < loops; i++)
            {
                var dates = await GetDateListAsync(uri, i *CONTENT_LOOP_STEP, CONTENT_LOOP_STEP).ConfigureAwait(false);

                if (cancel != null && cancel.IsCancellationRequested)
                {
                    DebugUtil.Log("Loading task cancelled");
                    OnCancelled();
                    break;
                }

                var loaded = 0;
                foreach (var date in dates)
                {
                    loaded += await GetContentsOfDaySeparatelyAsync(date, contentsSet, cancel, loaded).ConfigureAwait(false);
                }
            }
        }
示例#6
0
        private static List <string> ContentsSetToTypes(ContentsSet contentsSet)
        {
            var types = new List <string>();

            switch (contentsSet)
            {
            case ContentsSet.ImagesAndMovies:
                types.Add(ContentKind.StillImage);
                types.Add(ContentKind.MovieMp4);
                types.Add(ContentKind.MovieXavcS);
                break;

            case ContentsSet.Images:
                types.Add(ContentKind.StillImage);
                break;

            case ContentsSet.Movies:
                types.Add(ContentKind.MovieMp4);
                types.Add(ContentKind.MovieXavcS);
                break;
            }

            return(types);
        }
示例#7
0
 public override async Task LoadRemainingAsync(RemainingContentsHolder holder, ContentsSet contentsSet, CancellationTokenSource cancel)
 {
     await BrowseRemainingChild(holder.GroupTitle, holder.CdsContainerId, cancel, holder.StartsFrom, holder.RemainingCount);
 }
示例#8
0
        public override async Task Load(ContentsSet contentsSet, CancellationTokenSource cancel)
        {
            await RetrieveContentsByBrowse("Root", "0", cancel);

            OnCompleted();
        }
示例#9
0
        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 != null &&
                                  content.ImageContent.OriginalContents != null &&
                                  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 != null && content.RemotePlayTypes.Contains(RemotePlayMode.SimpleStreaming)),
                    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>());
        }
示例#10
0
        public override async Task LoadRemainingAsync(RemainingContentsHolder holder, ContentsSet contentsSet, CancellationTokenSource cancel)
        {
            var loops = holder.RemainingCount / CONTENT_LOOP_STEP + (holder.RemainingCount % CONTENT_LOOP_STEP == 0 ? 0 : 1);

            for (var i = 0; i < loops; i++)
            {
                var contents = await GetContentsOfDayAsync(holder.AlbumGroup, i *CONTENT_LOOP_STEP, CONTENT_LOOP_STEP, contentsSet).ConfigureAwait(false);

                if (cancel != null && cancel.IsCancellationRequested)
                {
                    DebugUtil.Log("Loading task cancelled");
                    OnCancelled();
                    break;
                }

                DebugUtil.Log(contents.Count + " contents fetched");

                OnPartLoaded(contents.Select(content => new Thumbnail(content, Udn)).ToList());
            }
        }
示例#11
0
 public abstract Task LoadRemainingAsync(RemainingContentsHolder holder, ContentsSet contentsSet, CancellationTokenSource cancel);
示例#12
0
 public abstract Task Load(ContentsSet contentsSet, CancellationTokenSource cancel);
示例#13
0
 public override Task LoadRemainingAsync(RemainingContentsHolder holder, ContentsSet contentsSet, CancellationTokenSource cancel)
 {
     throw new NotImplementedException();
 }
示例#14
0
        public override async Task LoadRemainingAsync(RemainingContentsHolder holder, ContentsSet contentsSet, CancellationTokenSource cancel)
        {
            var list     = new List <Thumbnail>();
            var contents = RandomContentList(holder.RemainingCount, true);

            await Task.Delay(200).ConfigureAwait(false);

            foreach (var content in contents)
            {
                content.GroupName = holder.AlbumGroup.Title;
                Kazyx.Uwpmm.Utility.DebugUtil.Log("Add content for " + content.GroupName);
                list.Add(new Thumbnail(content, CurrentUuid));
            }

            OnPartLoaded(list);
        }