public void すべての譜面について属性を現行化する(string userID) { using var _ = new LogBlock(Log.現在のメソッド名); int 属性取得数 = 0; using var scorepropdb = new ScorePropertiesDB(); using var cmd = new SqliteCommand("SELECT * FROM ScoreProperties WHERE UserId = @UserId", scorepropdb.Connection); cmd.Parameters.AddRange(new[] { new SqliteParameter("@UserId", userID), }); var result = cmd.ExecuteReader(); while (result.Read()) { var prop = new ScorePropertiesDBRecord(result); var scores = Global.App.全譜面リスト.Where((s) => s.譜面.ScorePath == prop.ScorePath); foreach (var score in scores) { score.譜面の属性 = prop; score.譜面の属性を現行化済み = true; 属性取得数++; } } Log.Info($"{属性取得数} 件の属性を更新しました。"); }
// 生成と終了 /// <summary> /// コンストラクタ。 /// </summary> /// <param name="song">現在選択中の曲。曲以外が選択されているなら null 。</param> /// <param name="userId">現在ログイン中のユーザ名。</param> public QuickConfigパネル(Song?song, string userId) { using var _ = new LogBlock(Log.現在のメソッド名); this._パネル = new 画像D2D(@"$(Images)\SelectStage\QuickConfigPanel.png"); this._設定項目リスト = new SelectableList <ラベル>(); #region "「この曲の評価」" //---------------- var score = song?.譜面リスト?.FirstOrDefault((s) => s != null); if (null != score) { this._設定項目リスト.Add( new リスト( 前: Properties.Resources.TXT_この曲の評価, 選択肢初期値リスト: new[] { Properties.Resources.TXT_評価なし, Properties.Resources.TXT_評価1, Properties.Resources.TXT_評価2, Properties.Resources.TXT_評価3, Properties.Resources.TXT_評価4, Properties.Resources.TXT_評価5 }, 初期選択肢番号: score.譜面の属性?.Rating ?? 0, 値が変更された: (list) => { int 新Rating = list.現在の選択肢番号; #region " 属性DBの該当レコードを、更新または新規作成する。" //---------------- using var db = new ScorePropertiesDB(); for (int i = 0; i < song !.譜面リスト !.Length; i++) { var score = song.譜面リスト[i] !; if (null != score) { using var cmd = new SqliteCommand("SELECT * FROM ScoreProperties WHERE ScorePath = @ScorePath AND UserId = @UserId", db.Connection); cmd.Parameters.AddRange(new[] { new SqliteParameter("@ScorePath", score.譜面.ScorePath), new SqliteParameter("@UserId", Global.App.ログオン中のユーザ.ID), }); var result = cmd.ExecuteReader(); if (result.Read()) { // (A) 属性DBにレコードがあった → Ratingを更新して書き戻し var prop = new ScorePropertiesDBRecord(result); prop.Rating = 新Rating; prop.InsertTo(db); } else { // (B) 属性DBにレコードがなかった → レコードを新規生成 var rc = new ScorePropertiesDBRecord() { ScorePath = score.譜面.ScorePath, UserId = userId, Rating = 新Rating, }; rc.InsertTo(db); } } } //---------------- #endregion #region " DBから読み込み済みの属性も、更新または新規作成する。" //---------------- for (int i = 0; i < song !.譜面リスト !.Length; i++) { var score = song.譜面リスト[i] !; if (null != score) { if (score.譜面の属性 is null) { // (A) 新規作成 score.譜面の属性 = new ScorePropertiesDBRecord() { ScorePath = score.譜面.ScorePath, UserId = userId, Rating = list.現在の選択肢番号, }; } else { // (B) 更新 score.譜面の属性.Rating = list.現在の選択肢番号; } } } //---------------- #endregion }) ); } //---------------- #endregion #region "「オプション設定へ」" //---------------- this._設定項目リスト.Add(new ラベル(Properties.Resources.TXT_オプション設定へ)); //---------------- #endregion #region "「戻る」" //---------------- this._設定項目リスト.Add(new ラベル(Properties.Resources.TXT_戻る)); //---------------- #endregion this._設定項目リスト.SelectItem(0); }