/// <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); }
private void FeedManager_FeedGroupRemoved(Database.Feed feedGroup) { var removedFeedGroup = FeedGroupItems.FirstOrDefault(x => x.Feed.Id == feedGroup.Id); if (removedFeedGroup != null) { FeedGroupItems.Remove(removedFeedGroup); } }
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); }
public bool RemoveFeedGroup(Database.Feed feedGroup) { if (Database.FeedDb.Delete(feedGroup)) { FeedGroupRemoved?.Invoke(feedGroup); return(true); } else { return(false); } }
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); }
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; }
private void FeedManager_FeedGroupAdded(Database.Feed feedGroup) { FeedGroupItems.Add(new FeedNewVideosList(feedGroup, HohoemaApp.FeedManager, HohoemaApp.Playlist)); }
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; }
internal void UpdateFeedGroup(Database.Feed feedGroup) { Database.FeedDb.AddOrUpdate(feedGroup); }
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; }