public SubscriptionManager( IScheduler scheduler, Provider.ChannelProvider channelProvider, Provider.SearchProvider searchProvider, Provider.UserProvider userProvider, Provider.MylistProvider mylistProvider, Services.NotificationService notificationService ) { Scheduler = scheduler; ChannelProvider = channelProvider; SearchProvider = searchProvider; UserProvider = userProvider; MylistProvider = mylistProvider; NotificationService = notificationService; var storedSubscriptions = Database.Local.Subscription.SubscriptionDb.GetOrderedSubscriptions(); Subscriptions = new ObservableCollection <Subscription>(storedSubscriptions); Subscriptions.CollectionChangedAsObservable() .Subscribe(arg => { switch (arg.Action) { case System.Collections.Specialized.NotifyCollectionChangedAction.Add: foreach (var item in arg.NewItems.Cast <Subscription>()) { AddOrUpdateToSubscriptionDatabase(item); SubscribeSubscriptionChanged(item); item.IsDeleted = false; } break; case System.Collections.Specialized.NotifyCollectionChangedAction.Move: // TODO: 購読グループの優先度変更に対応する break; case System.Collections.Specialized.NotifyCollectionChangedAction.Remove: foreach (var item in arg.OldItems.Cast <Subscription>()) { RemoveFromSubscriptionDatabase(item); UnsubscribeSubscriptionChanged(item); item.IsDeleted = true; } break; case System.Collections.Specialized.NotifyCollectionChangedAction.Replace: break; case System.Collections.Specialized.NotifyCollectionChangedAction.Reset: break; default: break; } }); foreach (var firstItem in storedSubscriptions) { SubscribeSubscriptionChanged(firstItem); } }
static private async Task <List <Database.NicoVideo> > GetTagSearchFeedResult(string tag, Provider.SearchProvider searchProvider) { List <Database.NicoVideo> items = new List <Database.NicoVideo>(); int page = 0; const int itemGetCountPerPage = 50; var head = page * itemGetCountPerPage; var res = await searchProvider.GetTagSearch(tag, (uint)head, itemGetCountPerPage); var videoItems = res.VideoInfoItems; var currentItemsCount = videoItems?.Count ?? 0; if (videoItems == null || currentItemsCount == 0) { } else { foreach (var item in videoItems) { var video = Database.NicoVideoDb.Get(item.Video.Id); video.Title = item.Video.Title; video.PostedAt = item.Video.FirstRetrieve; items.Add(video); } } return(items); }