/// <summary>
        /// ピックアップにデータ登録を行う
        /// </summary>
        /// <param name="logID">対象のログID</param>
        private void RegistPickup(String logID)
        {
            if (String.IsNullOrWhiteSpace(logID))
            {
                return;
            }

            using (var db = new SQLite(MASTER_PATH)) {
                db.Open();

                var isCommit = false;
                try {
                    db.BeginTransaction();

                    var ret = db.Select($"select * from pickup where log_id = {logID}");

                    if (ret.Count == 0)
                    {
                        db.Update($"insert into pickup(log_id) values({logID})");
                    }
                    isCommit = true;
                }
                catch (Exception) {
                    isCommit = false;
                }
                finally {
                    db.EndTransaction(isCommit);
                }
            }
        }
        /// <summary>
        /// webからのデータとDBのログ情報をマージして返す。
        /// </summary>
        /// <param name="db">DBインスタンス</param>
        /// <param name="feedItems">feed項目一覧</param>
        /// <param name="masterID">DB上のマスターID</param>
        /// <returns>feed項目一覧</returns>
        private IEnumerable <FeedItem> GetFeedItemsToDB(SQLite db,
                                                        IEnumerable <FeedItem> feedItems, Int32 masterID)
        {
            String sql = $"select * from log where master_id = {masterID}";

            // RSS記事のページURLをもとに新規項目を取得する
            var     registeredItem = CommFunc.GetLogItems(db, sql).ToList();
            var     urlHash        = new HashSet <String>(registeredItem.Select(l => l.Link.AbsoluteUri));
            var     newItems       = GetNewcomer(feedItems, urlHash);
            Boolean isCommit       = false;

            db.BeginTransaction();
            try {
                // 新規項目をDBに登録
                LogUpdate(db, newItems, masterID);
                isCommit = true;
            }
            catch (Exception) {
                isCommit = false;
            }
            finally {
                db.EndTransaction(isCommit);
            }
            // DBに登録したので改めて取得する。
            // ※ToArray()が無いと遅延評価の影響でサムネ読み込みに影響があるので注意
            //return GetLogItems(db, masterID).ToArray();
            return(CommFunc.GetLogItems(db, sql).ToArray());
        }
Пример #3
0
        public static void UpdateOverdueChildren()
        {
            DataTable dt = sqlite.GetDataTable(string.Format(("SELECT * FROM {0} WHERE {1} < '{2}'"), ListChild.TABLE_NAME, ListChild.FIELD_NAME_END_TIME, DateTime.Now.ToString(Global.TIME_FORMAT_STRING)));

            if (dt.Rows.Count > 0)
            {
                sqlite.BeginTransaction();
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    ListChild listChild = ListChild.GetListChildById(Convert.ToInt32(dt.Rows[i][ListChild.FIELD_NAME_ID]));
                    if ((listChild.Mark != MarkType.Overdue) && (listChild.Mark != MarkType.Abandoned))
                    {
                        listChild.Mark = MarkType.Overdue;
                        UpdateListChild(listChild);
                    }
                }
                sqlite.CommitTransaction();
            }
        }
Пример #4
0
 public override bool LoadDataFromFile(string parFile)
 {
     using (StreamReader streamReader = new StreamReader(parFile))              //Открываем файл для чтения)
     {
         string varHead = "insert into " + Path.GetFileNameWithoutExtension(parFile) + "(" + streamReader.ReadLine() + ") values ";
         db.BeginTransaction();
         while (!streamReader.EndOfStream)
         {
             db.ExecuteNonQuery(varHead + "(" + streamReader.ReadLine() + ")");
         }
         db.CommitTransaction();
         return(true);
     }
 }
Пример #5
0
        /// <summary>
        /// DBへの書き込み処理
        /// </summary>
        /// <param name="sql">SQL文</param>
        /// <returns>書き込み成否</returns>
        public static Boolean DBCommit(String sql)
        {
            var isCommit = false;

            using (var db = new SQLite(MASTER_PATH)) {
                db.Open();
                try {
                    db.BeginTransaction();
                    db.Update(sql);
                    isCommit = true;
                }
                catch (Exception) {
                    isCommit = false;
                }
                finally {
                    db.EndTransaction(isCommit);
                }
            }
            return(isCommit);
        }
Пример #6
0
        /// <summary>
        /// サイト登録処理
        /// </summary>
        /// <param name="url">webサイトURL</param>
        /// <param name="masterID">DB上のマスターID</param>
        /// <param name="title">サイト名</param>
        /// <returns>更新成功有無</returns>
        private Boolean InsertRSS(String url, out Int32 masterID, out String title)
        {
            masterID = ERROR_RESULT;
            // RSSを一度取得して有効か確かめる。
            title = RSS.ReadFeedTitle(url);

            if (title == null)
            {
                MessageBox.Show("Failed to get information.");
                return(false);
            }
            var isCommit = false;

            using (var db = new SQLite(MASTER_PATH)) {
                db.Open();
                // DB登録有無確認
                if (SiteExists(db, url))
                {
                    MessageBox.Show("It is already registered.");
                }
                else
                {
                    try {
                        db.BeginTransaction();
                        masterID = SiteRegist(db, title, url);
                        isCommit = true;
                    }
                    catch (Exception) {
                        isCommit = false;
                    }
                    finally {
                        db.EndTransaction(isCommit);
                    }
                }
            }
            return(isCommit);
        }
Пример #7
0
        /// <summary>
        /// 削除ボタン
        /// </summary>
        private void DelButton_Click(Object sender, RoutedEventArgs e)
        {
            if (!(this.FavEditBox.SelectedItem is RssSiteInfo item))
            {
                return;
            }
            if (MessageBoxResult.Cancel
                == MessageBox.Show($"{item.SiteName}\r\nDelete RSS feed.", "message",
                                   MessageBoxButton.OKCancel))
            {
                return;
            }

            using (var db = new SQLite(MASTER_PATH)) {
                db.Open();
                db.BeginTransaction();
                try {
                    // pickupはほかのテーブルに依存するため先に削除処理を行う
                    DeletePickupItem(db, item.ID);
                    // rss_masterからの削除
                    db.Update($"delete from rss_master where id={item.ID}");
                    // logからの削除
                    db.Update($"delete from log where master_id={item.ID}");
                    // syncからの削除
                    db.Update($"delete from sync where master_id={item.ID}");
                    // コミット
                    db.EndTransaction(true);
                }
                catch (Exception) {
                    // ロールバック
                    db.EndTransaction(false);
                }
            }
            // 表示から削除
            this.FavEditBox.ItemsSource = GetEditItems(item.ID);
        }
Пример #8
0
 public static void BeginTransaction()
 {
     sqlite.BeginTransaction();
 }