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> > GetChannelVideosFeedResult(string channelId, Provider.ChannelProvider channelProvider)
        {
            List <Database.NicoVideo> items = new List <Database.NicoVideo>();
            int page = 0;
            var res  = await channelProvider.GetChannelVideo(channelId, page);

            var videoItems        = res.Videos;
            var currentItemsCount = videoItems?.Count ?? 0;

            if (videoItems == null || currentItemsCount == 0)
            {
            }
            else
            {
                foreach (var item in videoItems)
                {
                    var video = Database.NicoVideoDb.Get(item.ItemId);

                    video.Title    = item.Title;
                    video.PostedAt = item.PostedAt;

                    items.Add(video);
                }
            }

            return(items);
        }