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); }
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, }); }