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); } }
// 取得数が40になるか、lastUpdatedよりも古いアイテムが見つかるまでデータ取得する static private async Task <List <Database.NicoVideo> > GetUserVideosFeedResult(string userId, Provider.UserProvider userProvider) { var id = uint.Parse(userId); List <Database.NicoVideo> items = new List <Database.NicoVideo>(); uint page = 1; var res = await userProvider.GetUserVideos(id, page); var videoItems = res.Items; var currentItemsCount = videoItems?.Count ?? 0; if (videoItems == null || currentItemsCount == 0) { } else { foreach (var item in videoItems) { var video = Database.NicoVideoDb.Get(item.VideoId); video.Title = item.Title; video.PostedAt = item.SubmitTime; items.Add(video); } } return(items); }