// 生成と終了 /// <summary> /// コンストラクタ。一部のグローバルリソースを初期化する。 /// </summary> public App() { using var _ = new LogBlock(Log.現在のメソッド名); SystemConfig.Update(); UserConfig.Update(); this.乱数 = new Random(DateTime.Now.Millisecond); this.システム設定 = SystemConfig.読み込む(); this.ユーザリスト = new SelectableList <ユーザ設定>(); this.全譜面リスト = new Dictionary <string, 曲.Score>(); this.曲ツリーリスト = new SelectableList <曲.曲ツリー>(); this.現行化 = new 曲.現行化(); #region " Skin.yaml を読み込んで、リソース関連のフォルダ変数を更新する。" //---------------- { // DrumSounds var drumSounds = this.システム設定.DrumSoundsFolder; Folder.フォルダ変数を追加または更新する("DrumSounds", (Path.IsPathRooted(drumSounds.数なしパス)) ? drumSounds.数なしパス : new VariablePath(@$ "$(ResourcesRoot)\{drumSounds}").数なしパス); Log.Info($"DrumSounds folder: {new VariablePath( Folder.フォルダ変数の内容を返す( "DrumSounds" ) ).変数付きパス}"); // SystemSounds var systemSounds = this.システム設定.SystemSoundsFolder; Folder.フォルダ変数を追加または更新する("SystemSounds", (Path.IsPathRooted(systemSounds.数なしパス)) ? systemSounds.数なしパス : new VariablePath(@$ "$(ResourcesRoot)\{systemSounds}").数なしパス);
/// <summary> /// ユーザDBファイルを最新版に更新する。 /// </summary> /// <remarks> /// v012 移行にバージョンアップする場合は、RecordDB.sqlite3 の生成も行う。 /// </remarks> public static void 最新版にバージョンアップする() { using var _ = new LogBlock(Log.現在のメソッド名); var userdbPath = new VariablePath(@"$(AppData)\UserDB.sqlite3"); var userYamls = Directory.EnumerateFiles( path: Folder.フォルダ変数の内容を返す("AppData"), searchPattern: @"User_*.yaml", searchOption: SearchOption.TopDirectoryOnly); if (0 < userYamls.Count()) { #region " (A) User_*.yaml が存在している " //---------------- // それらを最新版にバージョンアップする。 foreach (var userYaml in userYamls) { _Yamlを最新版にバージョンアップする(userYaml); } //---------------- #endregion } else if (File.Exists(userdbPath.数なしパス)) { #region " (B) User_*.yaml が存在せず UserDB.sqlite3 が存在している " //---------------- // Records レコードは、UserDB(v12)からRecordDBに分離された。 // ・UserDB v011 までは、UserDB の Records テーブルに格納されている。RecordDB.Records テーブルのレコードのバージョンは v001~v006(全部同一)。 // ・UserDB v012 以降は、UserDB から独立して、RecordDB.Records テーブルに格納される。Recordsのレコードのバージョンは v007。 var Users = new List <UserConfig>(); int userdb_version; #region " Users テーブルを最新版にして読み込む。" //---------------- using (var userdb = new SQLiteDB(userdbPath.数なしパス)) { userdb_version = (int)userdb.UserVersion; using var idsQuery = new SqliteCommand("SELECT * FROM Users", userdb.Connection); var ids = idsQuery.ExecuteReader(); while (ids.Read()) { Users.Add(new UserConfig(ids)); } } //---------------- #endregion #region " Users テーブルを User_*.yaml に出力する。" //---------------- foreach (var user in Users) { user.保存する(); } //---------------- #endregion #region " RecordDB.sqlite3 がなければ新規作成する。" //---------------- if (!File.Exists(RecordDB.RecordDBPath.数なしパス)) { using var recorddb = new RecordDB(); // ファイルがなければ新規作成される using var cmd = new SqliteCommand($"CREATE TABLE Records { old.RecordDBRecord.v007_RecordDBRecord.ColumnList}", recorddb.Connection); cmd.ExecuteNonQuery(); recorddb.UserVersion = old.RecordDBRecord.v007_RecordDBRecord.VERSION; Log.Info($"RecordDB(v007) を生成しました。"); } //---------------- #endregion if (12 > userdb_version) { #region " UserDB.Rcords テーブルを読み込み、RecordDB.Records テーブルへ出力する。" //---------------- using var userdb = new SQLiteDB(userdbPath.数なしパス); using var recorddb = new RecordDB(); foreach (var user in Users) { using var recordsQuery = new SqliteCommand($"SELECT * FROM Records WHERE Id = @UserId", userdb.Connection); recordsQuery.Parameters.Add(new SqliteParameter("@UserId", user.Id)); var records = recordsQuery.ExecuteReader(); while (records.Read()) { var record = new old.RecordDBRecord.v007_RecordDBRecord(records); // 読み込んで record.InsertTo(recorddb); // 書き込む } } //---------------- #endregion } //---------------- #endregion } else { #region " (C) User_*.yamlも UserDB.sqlite3 も存在しない " //---------------- #region " 新規に User_*.yaml を生成する。" //---------------- var autoPlayer = new UserConfig() { Id = "AutoPlayer", Name = "AutoPlayer", AutoPlay_LeftCymbal = 1, AutoPlay_HiHat = 1, AutoPlay_LeftPedal = 1, AutoPlay_Snare = 1, AutoPlay_Bass = 1, AutoPlay_HighTom = 1, AutoPlay_LowTom = 1, AutoPlay_FloorTom = 1, AutoPlay_RightCymbal = 1, // 他は既定値 }; autoPlayer.保存する(); var guest = new UserConfig() { Id = "Guest", Name = "Guest", // 他は既定値 }; guest.保存する(); //---------------- #endregion #region " 新規に RecordDB.sqlite3 を生成する。" //---------------- var recorddbPath = new VariablePath(@"$(AppData)\RecordDB.sqlite3"); // 念のため if (File.Exists(recorddbPath.数なしパス)) { File.Delete(recorddbPath.数なしパス); } using var recorddb = new SQLiteDB(recorddbPath.数なしパス); // ファイルがなければ新規生成される。 using var cmd = new SqliteCommand(RecordDBRecord.GetCreateTableSQL(), recorddb.Connection); cmd.ExecuteNonQuery(); recorddb.UserVersion = RecordDBRecord.VERSION; Log.Info($"RecordDB を生成しました。"); //---------------- #endregion //---------------- #endregion } }