Esempio n. 1
0
        /// <summary>
        /// 0.11.x以前のフィード情報をLiteDbへと移行します
        /// </summary>
        /// <param name="files"></param>
        /// <returns></returns>
        public async Task MigrateBefore_0_11()
        {
            var feedGroupFolder = await GetFeedGroupFolder();

            if (feedGroupFolder == null)
            {
                return;
            }

            var files = await feedGroupFolder.GetFilesAsync();

            foreach (var file in files)
            {
                if (file.FileType == ".json")
                {
                    var fileName = file.Name;

                    try
                    {
                        var fileAccessor = new FolderBasedFileAccessor <FeedGroup2>(feedGroupFolder, fileName);
                        var item         = await fileAccessor.Load(FeedGroupSerializerSettings);

                        if (item != null)
                        {
                            var newDbFeedGroup = new Database.Feed(item.Label);

                            if (item.FeedSourceList != null)
                            {
                                foreach (var source in item.FeedSourceList)
                                {
                                    newDbFeedGroup.AddSource(new Database.Bookmark()
                                    {
                                        Label        = source.Name,
                                        Content      = source.Id,
                                        BookmarkType = FollowItemTypeConvertToFeedSourceType(source.FollowItemType)
                                    });
                                }
                            }

                            Database.FeedDb.AddOrUpdate(newDbFeedGroup);

                            Debug.WriteLine($"FeedManager: [Sucesss] load {item.Label}");

                            continue;
                        }
                        else
                        {
                            Debug.WriteLine($"FeedManager: [?] .json but not FeedGroup file < {fileName}");
                        }
                    }
                    catch
                    {
                        Debug.WriteLine($"FeedManager: [Failed] load {file.Path}");
                    }
                }
            }

            await feedGroupFolder.DeleteAsync(StorageDeleteOption.PermanentDelete);
        }
Esempio n. 2
0
        private void FeedManager_FeedGroupRemoved(Database.Feed feedGroup)
        {
            var removedFeedGroup = FeedGroupItems.FirstOrDefault(x => x.Feed.Id == feedGroup.Id);

            if (removedFeedGroup != null)
            {
                FeedGroupItems.Remove(removedFeedGroup);
            }
        }
Esempio n. 3
0
        public FeedGroupListItem(Database.Feed feedGroup, PageManager pageManager)
        {
            FeedGroup    = feedGroup;
            _PageManager = pageManager;

            Label       = feedGroup.Label;
            SourceItems = FeedGroup.Sources
                          .ToList();
            OptionText = FeedGroup.UpdateAt.ToString();
            NowUpdate  = new ReactiveProperty <bool>(false);
        }
Esempio n. 4
0
 public bool RemoveFeedGroup(Database.Feed feedGroup)
 {
     if (Database.FeedDb.Delete(feedGroup))
     {
         FeedGroupRemoved?.Invoke(feedGroup);
         return(true);
     }
     else
     {
         return(false);
     }
 }
Esempio n. 5
0
        public Database.Feed AddFeedGroup(string label, params Database.Bookmark[] initialBookmarks)
        {
            var feedGroup = new Database.Feed(label);

            if (initialBookmarks.Any(x => string.IsNullOrEmpty(x.Label) || string.IsNullOrEmpty(x.Content)))
            {
                throw new Exception();
            }

            foreach (var bookmark in initialBookmarks)
            {
                Database.BookmarkDb.Add(bookmark);
            }

            feedGroup.Sources.AddRange(initialBookmarks);

            Database.FeedDb.AddOrUpdate(feedGroup);

            FeedGroupAdded?.Invoke(feedGroup);

            return(feedGroup);
        }
Esempio n. 6
0
        public bool RemoveFeedSource(Database.Feed target, Database.Bookmark feedSource)
        {
            var ensureFeed = GetFeedGroup(target.Id);

            if (ensureFeed != null)
            {
                var targetFeedSource = ensureFeed.Sources.FirstOrDefault(x => x.Id == feedSource.Id);
                if (ensureFeed.Sources.Remove(targetFeedSource))
                {
                    UpdateFeedGroup(ensureFeed);

                    FeedSourceRemoved?.Invoke(this, new FeedSourceRemovedEventArgs()
                    {
                        Feed     = ensureFeed,
                        Bookmark = feedSource,
                    });

                    return(true);
                }
            }

            return(false);
        }
        protected override async Task ListPageNavigatedToAsync(CancellationToken cancelToken, NavigatedToEventArgs e, Dictionary <string, object> viewModelState)
        {
            if (e.Parameter is int)
            {
                var feedGroupId = (int)e.Parameter;

                FeedGroup = HohoemaApp.FeedManager.GetFeedGroup(feedGroupId);
            }
            else if (e.Parameter is string)
            {
                if (int.TryParse(e.Parameter as string, out var feedGroupId))
                {
                    FeedGroup = HohoemaApp.FeedManager.GetFeedGroup(feedGroupId);
                }
            }

            if (FeedGroup == null)
            {
                // 削除済み?
                PageManager.OpenPage(HohoemaPageType.FeedGroupManage);
            }

            await Task.CompletedTask;
        }
Esempio n. 8
0
 private void FeedManager_FeedGroupAdded(Database.Feed feedGroup)
 {
     FeedGroupItems.Add(new FeedNewVideosList(feedGroup, HohoemaApp.FeedManager, HohoemaApp.Playlist));
 }
Esempio n. 9
0
        public FeedNewVideosList(Database.Feed feeds, FeedManager feedManager, HohoemaPlaylist playlist)
        {
            Feed        = feeds;
            FeedManager = feedManager;
            Playlist    = playlist;

            Label    = feeds.Label;
            Bookmark = feeds.Sources.FirstOrDefault()?.BookmarkType ?? throw new Exception();

            FeedVideos = new ObservableCollection <FeedVideoInfoControlViewModel>();
            NowUpdate  = new ReactiveProperty <bool>(false);

            PlayAllCommand = FeedVideos.CollectionChangedAsObservable()
                             .Select(_ => FeedVideos.Count > 0)
                             .ToReactiveCommand();

            PlayAllCommand.Subscribe(() =>
            {
                var firstItem = FeedVideos.LastOrDefault();
                if (firstItem != null)
                {
                    Playlist.PlayVideo(firstItem.RawVideoId, firstItem.Label);
                }

                foreach (var playItem in FeedVideos.Reverse().Skip(1))
                {
                    Playlist.DefaultPlaylist.AddVideo(playItem.RawVideoId, playItem.Label, ContentInsertPosition.Head);
                }

                FeedCheckedCommand.Execute();
            });

            AllAddToAfterWatchCommand = FeedVideos.CollectionChangedAsObservable()
                                        .Select(_ => FeedVideos.Count > 0)
                                        .ToReactiveCommand();

            AllAddToAfterWatchCommand.Subscribe(() =>
            {
                foreach (var playItem in FeedVideos.Reverse())
                {
                    Playlist.DefaultPlaylist.AddVideo(playItem.RawVideoId, playItem.Label, ContentInsertPosition.Tail);
                }

                FeedCheckedCommand.Execute();
            });

            PlayAllCommand.Subscribe(() =>
            {
                IEnumerable <FeedVideoInfoControlViewModel> playItems = FeedVideos.AsEnumerable();

                var firstItem = FeedVideos.FirstOrDefault();
                if (firstItem != null)
                {
                    Playlist.PlayVideo(firstItem.RawVideoId, firstItem.Label);
                }

                playItems = FeedVideos.Skip(1);


                foreach (var playItem in playItems)
                {
                    Playlist.DefaultPlaylist.AddVideo(playItem.RawVideoId, playItem.Label);
                }

                FeedCheckedCommand.Execute();
            });


            FeedCheckedCommand = FeedVideos.CollectionChangedAsObservable()
                                 .Select(_ => FeedVideos.Count > 0)
                                 .ToReactiveCommand();

            FeedCheckedCommand.Subscribe(() =>
            {
                Feed.CheckedAt = DateTime.Now;
                FeedManager.UpdateFeedGroup(Feed);

                UpdateFeedVideos();
            });
            //            UpdateFeedVideos();

            UpdateCommand = NowUpdate.Select(x => !x).ToReactiveCommand();
            UpdateCommand.Subscribe(() =>
            {
                UpdateFeedVideos();
            });

            feedManager.FeedUpdated += FeedManager_FeedUpdated;
        }
Esempio n. 10
0
 internal void UpdateFeedGroup(Database.Feed feedGroup)
 {
     Database.FeedDb.AddOrUpdate(feedGroup);
 }
Esempio n. 11
0
        public async Task <List <Tuple <Database.NicoVideo, Database.Bookmark> > > RefreshFeedItemsAsync(Database.Feed feedGroup)
        {
            var items = feedGroup.Sources;

            List <Tuple <Database.NicoVideo, Database.Bookmark> > itemsContainer = new List <Tuple <Database.NicoVideo, Database.Bookmark> >();

            foreach (var source in items)
            {
                var feedItems = await GetItems(source);

                itemsContainer.AddRange(feedItems.Select(x => new Tuple <Database.NicoVideo, Database.Bookmark>(x, source)));
            }

            feedGroup.UpdateAt = DateTime.Now;

            UpdateFeedGroup(feedGroup);

            var finalItemsList = itemsContainer
                                 .OrderByDescending(x => x.Item1.PostedAt)
                                 .ToList();

            // フィードの動画一覧を更新
            Database.FeedVideoDb.Upsert(feedGroup.Id, finalItemsList.Select(x => x.Item1.RawVideoId));

            FeedUpdated?.Invoke(this, new FeedUpdateEventArgs()
            {
                Feed  = feedGroup,
                Items = finalItemsList
            });

            return(finalItemsList);
        }
 public FeedVideoIncrementalSource(Database.Feed feedGroup, FeedManager feedManager)
     : base()
 {
     _FeedGroup   = feedGroup;
     _FeedManager = feedManager;
 }