/// <summary> /// フィルタ用にDBからベースとなるデータを取得する。 /// </summary> /// <param name="item">サイト情報</param> /// <remarks> /// DBから毎回読み込むのがいいか /// Feedの読み込み枚にベースとなるデータをローカルに保持していた方がいいのか /// </remarks> private IEnumerable <FeedItem> GetMasterData(RssSiteInfo item) { Int32 masterID = item.ID; IEnumerable <FeedItem> feedItems = null; using (var db = new SQLite(MASTER_PATH)) { db.Open(); // リスト・DBの更新 feedItems = GetFeedItems(db, feedItems, masterID, LISTBOX_UPDATE); } return(feedItems); }
/// <summary> /// 条件による絞り込み処理を実行する /// </summary> /// <param name="item">サイト情報</param> /// <param name="key">フィルタリングするワード</param> /// <param name="date">フィルタリングする日付</param> /// <param name="isRead">フィルタリングする既読・未読状態</param> private void FilteringItems(RssSiteInfo item, String key, DateTime?date, String isRead) { var source = GetMasterData(item); Int32 srcCount = source.Count(); if (source == null) { return; } try { // キーワードフィルタ if (!String.IsNullOrEmpty(key)) { source = source.Where(x => 0 <= x.Title.IndexOf(key)); } // 日付フィルタ if (date != null) { source = source.Where(x => date?.Date == DateTime.Parse(x.PublishDate).Date); } // 既読・未読フィルタ if (Enum.TryParse(isRead, out ReadState state)) { switch (state) { case ReadState.Read: source = source.Where(x => x.IsRead); break; case ReadState.Unread: source = source.Where(x => !x.IsRead); break; } } // 無駄に更新しないように if (srcCount != source.Count()) { this.FeedList.ItemsSource = source; } } catch (Exception) { } }
/// <summary> /// RSS フィードリストの更新を行う /// </summary> /// <param name="item">サイト情報</param> /// <param name="isListUpdate">ListBoxの表示を更新するか</param> private void UpdateListBox(RssSiteInfo item, Boolean isListUpdate) { String url = item?.Link; if (url == null) { return; } Int32 masterID = item.ID; IEnumerable <FeedItem> feedItems = null; if (!IsOnline()) { // インターネット接続が無いため、強制的にオフラインモードに設定 App.Configure.IsOffLine = true; } using (var db = new SQLite(MASTER_PATH)) { db.Open(); // 更新間隔の確認とOffLineモードオプションを確認する if (CanRSSRead(db, masterID) && !(App.Configure?.IsOffLine ?? false)) { // フィードデータダウンロード feedItems = RSS.ReadFeedItems(url); // ダウンロード時刻アップデート UpdateLastSync(db, masterID); } // リスト・DBの更新 var items = GetFeedItems(db, feedItems, masterID, isListUpdate); if (isListUpdate) { this.FeedList.ItemsSource = items; } } }