protected override async Task <IAsyncEnumerable <HohoemaListingPageItemBase> > GetPagedItemsImpl(int head, int count)
        {
            var tail      = head + count;
            var prevCount = TimelineItems.Count;

            if (TimelineItems.Count < tail)
            {
                while (prevCount == TimelineItems.Count)
                {
                    var nicoRepoResponse = await LoginUserNicoRepoProvider.GetLoginUserNicoRepo(NicoRepoTimelineType.all, _LastItem?.Id);

                    if (nicoRepoResponse.IsStatusOK)
                    {
                        foreach (var item in nicoRepoResponse.TimelineItems)
                        {
                            if (CheckCanDisplayTimelineItem(item))
                            {
                                TimelineItems.Add(item);
                            }
                        }
                        _LastItem = nicoRepoResponse.LastTimelineItem;

                        if (nicoRepoResponse.TimelineItems.Count == 0)
                        {
                            break;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
            }

            var list = new List <HohoemaListingPageItemBase>();

            return(TimelineItems.Skip(head).Take(count).ToArray()
                   .Select <NicoRepoTimelineItem, HohoemaListingPageItemBase>(item =>
            {
                var topicType = NicoRepoItemTopicExtension.ToNicoRepoTopicType(item.Topic);
                if (topicType == NicoRepoItemTopic.Live_User_Program_OnAirs ||
                    topicType == NicoRepoItemTopic.Live_User_Program_Reserve ||
                    topicType == NicoRepoItemTopic.Live_Channel_Program_Onairs ||
                    topicType == NicoRepoItemTopic.Live_Channel_Program_Reserve)
                {
                    return new NicoRepoLiveTimeline(item, topicType);
                }
                else if (topicType == NicoRepoItemTopic.NicoVideo_User_Video_Upload ||
                         topicType == NicoRepoItemTopic.NicoVideo_User_Mylist_Add_Video ||
                         topicType == NicoRepoItemTopic.NicoVideo_Channel_Video_Upload)
                {
                    return new NicoRepoVideoTimeline(item, topicType);
                }
                else
                {
                    throw new NotSupportedException(topicType.ToString());
                }
            })
                   .ToAsyncEnumerable());
        }
        protected override async Task <int> ResetSourceImpl()
        {
            TimelineItems.Clear();

            var nicoRepoResponse = await LoginUserNicoRepoProvider.GetLoginUserNicoRepo(NicoRepoTimelineType.all);

            if (nicoRepoResponse.IsStatusOK)
            {
                foreach (var item in nicoRepoResponse.TimelineItems)
                {
                    if (CheckCanDisplayTimelineItem(item))
                    {
                        TimelineItems.Add(item);
                    }
                }
                _LastItem = nicoRepoResponse.LastTimelineItem;
                return(nicoRepoResponse.Meta.Limit);
            }
            else
            {
                return(0);
            }
        }
Beispiel #3
0
        public NicoRepoPageViewModel(
            ILoggerFactory loggerFactory,
            IScheduler scheduler,
            ApplicationLayoutManager applicationLayoutManager,
            NicoVideoProvider nicoVideoProvider,
            PageManager pageManager,
            NicoRepoSettings activityFeedSettings,
            LoginUserNicoRepoProvider loginUserNicoRepoProvider,
            SubscriptionManager subscriptionManager,
            OpenLiveContentCommand openLiveContentCommand,
            VideoPlayWithQueueCommand videoPlayWithQueueCommand
            )
            : base(loggerFactory.CreateLogger <NicoRepoPageViewModel>())
        {
            _scheduler = scheduler;
            ApplicationLayoutManager  = applicationLayoutManager;
            _nicoVideoProvider        = nicoVideoProvider;
            ActivityFeedSettings      = activityFeedSettings;
            LoginUserNicoRepoProvider = loginUserNicoRepoProvider;
            SubscriptionManager       = subscriptionManager;
            _openLiveContentCommand   = openLiveContentCommand;
            VideoPlayWithQueueCommand = videoPlayWithQueueCommand;
            NicoRepoType          = new ReactiveProperty <NicoRepoType>(NiconicoToolkit.NicoRepo.NicoRepoType.Video, mode: ReactivePropertyMode.DistinctUntilChanged);
            NicoRepoDisplayTarget = new ReactiveProperty <NicoRepoDisplayTarget>(mode: ReactivePropertyMode.DistinctUntilChanged);

            new[]
            {
                NicoRepoType.ToUnit(),
                    NicoRepoDisplayTarget.ToUnit()
            }
            .Merge()
            .Subscribe(_ =>
            {
                ResetList();
            })
            .AddTo(_CompositeDisposable);
        }