Esempio n. 1
0
        private async Task <Tuple <string, string> > ResolveSubscriptionSourceLabel(SubscriptionSource source)
        {
            switch (source.SourceType)
            {
            case SubscriptionSourceType.User:
                var info = await UserProvider.GetUser(source.Parameter);

                return(new Tuple <string, string>(info.ScreenName, null));

            case SubscriptionSourceType.Channel:
                var channelInfo = await ChannelProvider.GetChannelInfo(source.Parameter);

                return(new Tuple <string, string>(channelInfo.Name, null));

            case SubscriptionSourceType.Mylist:
                var mylistInfo = await MylistProvider.GetMylistGroupDetail(source.Parameter);

                var mylistOwner = await UserProvider.GetUser(mylistInfo.MylistGroup.UserId);

                return(new Tuple <string, string>(mylistInfo.MylistGroup.Name, mylistOwner.ScreenName));

            case SubscriptionSourceType.TagSearch:
                return(new Tuple <string, string>(source.Parameter, null));

            case SubscriptionSourceType.KeywordSearch:
                return(new Tuple <string, string>(source.Parameter, null));

            default:
                break;
            }

            return(null);
        }
Esempio n. 2
0
        private async Task <SubscriptionUpdateInfo> GetFeedResult(Subscription subscription, SubscriptionSource source)
        {
            if (subscription.IsDeleted)
            {
                return(new SubscriptionUpdateInfo()
                {
                    Subscription = subscription, Source = source
                });
            }

            TimeSpan timeDiffarenceFromJapan = +TimeSpan.FromHours(9) - DateTimeOffset.Now.Offset;

            var feedResult    = Database.Local.Subscription.SubscriptionFeedResultDb.GetEnsureFeedResult(subscription);
            var feedResultSet = feedResult.GetFeedResultSet(source);
            var lastUpdated   = feedResultSet != null ? feedResultSet.LastUpdated + timeDiffarenceFromJapan : DateTime.MinValue;
            var isFirstUpdate = feedResultSet == null;
            List <Database.NicoVideo> items = null;

            switch (source.SourceType)
            {
            case SubscriptionSourceType.User:
                items = await GetUserVideosFeedResult(source.Parameter, UserProvider);

                break;

            case SubscriptionSourceType.Channel:
                items = await GetChannelVideosFeedResult(source.Parameter, ChannelProvider);

                break;

            case SubscriptionSourceType.Mylist:
                items = await GetMylistFeedResult(source.Parameter, MylistProvider);

                break;

            case SubscriptionSourceType.TagSearch:
                items = await GetTagSearchFeedResult(source.Parameter, SearchProvider);

                break;

            case SubscriptionSourceType.KeywordSearch:
                items = await GetKeywordSearchFeedResult(source.Parameter, SearchProvider);

                break;

            default:
                break;
            }

            // 降順(新しい動画を先に)にしてから、前回更新時までのアイテムを取得する
            var newItems = items.OrderByDescending(x => x.PostedAt).TakeWhile(x => x.PostedAt > lastUpdated);

            Database.Local.Subscription.SubscriptionFeedResultDb.AddOrUpdateFeedResult(subscription, source, newItems.Select(x => x.VideoId));


            return(new SubscriptionUpdateInfo()
            {
                Subscription = subscription,
                Source = source,
                FeedItems = items,
                NewFeedItems = newItems,
                IsFirstUpdate = isFirstUpdate,
            });
        }