Beispiel #1
0
        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);
        }