/// <summary> /// 曲リストのserialize /// </summary> private static void SerializeSongList(CSongsManager cs, string strPathSongList) { bool bSucceededSerialize = true; try { using (StreamWriter f = new StreamWriter(strPathSongList, false, Encoding.UTF8)) { string a = JsonConvert.SerializeObject(cs, Formatting.None); f.Write(a); } } catch (Exception e) { bSucceededSerialize = false; Trace.TraceError(e.ToString()); Trace.TraceError("An exception has occurred, but processing continues. (9ad477a4-d922-412c-b87d-e3a49a608e92)"); } finally { if (!bSucceededSerialize) { try { File.Delete(strPathSongList); // serializeに失敗したら、songs2.dbファイルを消しておく } catch (Exception e) { Trace.TraceError(e.ToString()); Trace.TraceError("An exception has occurred, but processing continues. (62860c67-b44f-46f4-b4fc-999c6fe18cce)"); } } } }
/// <summary> /// 曲リストのdeserialize /// </summary> /// <param name="SongsManager"></param> /// <param name="strPathSongList"></param> private CSongsManager Deserialize(string strPathSongList) { try { #region [ SongListDB(songlist.db)を読み込む ] if (!File.Exists(strPathSongList)) { return(null); } using (Stream input = File.OpenRead(strPathSongList)) { try { using (StreamReader file = new StreamReader(strPathSongList, Encoding.UTF8)) { JsonSerializer serializer = new JsonSerializer(); CSongsManager tmp = (CSongsManager)serializer.Deserialize(file, typeof(CSongsManager)); 親ノードを設定する(ref tmp.list曲ルート, null); //親ノードはシリアライズしないため、読み込み後設定する。 return(tmp); } } catch (Exception e) { // SongsManager = null; Trace.TraceError(e.ToString()); Trace.TraceError("An exception has occurred, but processing continues. (a4289e34-7140-4b67-b821-3b5370a725e1)"); } } #endregion } catch (Exception e) { Trace.TraceError("songlist.db の読み込みに失敗しました。"); Trace.TraceError(e.ToString()); Trace.TraceError("An exception has occurred, but processing continues. (5a907ed2-f849-4bc4-acd0-d2a6aa3c9c87)"); } return(null); }
/// <summary> /// songlist.dbからの曲リスト構築 /// </summary> public void t曲リストの構築1() { // !注意! // 本メソッドは別スレッドで動作するが、プラグイン側でカレントディレクトリを変更しても大丈夫なように、 // すべてのファイルアクセスは「絶対パス」で行うこと。(2010.9.16) // 構築が完了したら、DTXEnumerateState state を DTXEnumerateState.Done にすること。(2012.2.9) DateTime now = DateTime.Now; try { #region [ 0) システムサウンドの構築 ] //----------------------------- TJAPlayer3.stageStartUp.eフェーズID = CStage.Eフェーズ.起動0_システムサウンドを構築; Trace.TraceInformation("0) システムサウンドを構築します。"); Trace.Indent(); try { TJAPlayer3.Skin.bgm起動画面.t再生する(); for (int i = 0; i < TJAPlayer3.Skin.nシステムサウンド数; i++) { if (!TJAPlayer3.Skin[i].b排他) // BGM系以外のみ読み込む。(BGM系は必要になったときに読み込む) { CSkin.Cシステムサウンド cシステムサウンド = TJAPlayer3.Skin[i]; try { cシステムサウンド.tLoad(); Trace.TraceInformation("システムサウンドを読み込みました。({0})", cシステムサウンド.strFilename); //if ( ( cシステムサウンド == CDTXMania.Skin.bgm起動画面 ) && cシステムサウンド.b読み込み成功 ) //{ // cシステムサウンド.t再生する(); //} } catch (FileNotFoundException) { Trace.TraceWarning("システムサウンドが存在しません。({0})", cシステムサウンド.strFilename); } catch (Exception e) { Trace.TraceWarning(e.ToString()); Trace.TraceWarning("システムサウンドの読み込みに失敗しました。({0})", cシステムサウンド.strFilename); } } } lock (TJAPlayer3.stageStartUp.list進行文字列) { TJAPlayer3.stageStartUp.list進行文字列.Add("SYSTEM SOUND...OK"); } } finally { Trace.Unindent(); } //----------------------------- #endregion #region [ 00) songlist.dbの読み込みによる曲リストの構築 ] //----------------------------- TJAPlayer3.stageStartUp.eフェーズID = CStage.Eフェーズ.起動00_songlistから曲リストを作成する; Trace.TraceInformation("1) songlist.dbを読み込みます。"); Trace.Indent(); try { if (!TJAPlayer3.ConfigIni.bConfigIniがないかDTXManiaのバージョンが異なる) { CSongsManager s = new CSongsManager(); s = Deserialize(strPathSongList); // 直接this.SongsManagerにdeserialize()結果を代入するのは避ける。nullにされてしまうことがあるため。 if (s != null) { this.SongsManager = s; } int scores = this.SongsManager.n検索されたスコア数; Trace.TraceInformation("songlist.db の読み込みを完了しました。[{0}スコア]", scores); lock (TJAPlayer3.stageStartUp.list進行文字列) { TJAPlayer3.stageStartUp.list進行文字列.Add("SONG LIST...OK"); } } else { Trace.TraceInformation("初回の起動であるかまたはDTXManiaのバージョンが上がったため、songlist.db の読み込みをスキップします。"); lock (TJAPlayer3.stageStartUp.list進行文字列) { TJAPlayer3.stageStartUp.list進行文字列.Add("SONG LIST...SKIPPED"); } } } finally { Trace.Unindent(); } #endregion } finally { TJAPlayer3.stageStartUp.eフェーズID = CStage.Eフェーズ.起動7_完了; TimeSpan span = (TimeSpan)(DateTime.Now - now); Trace.TraceInformation("起動所要時間: {0}", span.ToString()); lock (this) // #28700 2012.6.12 yyagi; state change must be in finally{} for exiting as of compact mode. { state = DTXEnumState.CompletelyDone; } } }