Beispiel #1
0
        private void t曲を検索してリストを作成する(string str基点フォルダ, bool b子BOXへ再帰する, List <C曲リストノード> listノードリスト, C曲リストノード node親)
        {
            if (!str基点フォルダ.EndsWith(@"/"))
            {
                str基点フォルダ = str基点フォルダ + @"/";
            }

            DirectoryInfo info = new DirectoryInfo(str基点フォルダ);

            if (TJAPlayer3.ConfigIni.bLog曲検索ログ出力)
            {
                Trace.TraceInformation("基点フォルダ: " + str基点フォルダ);
            }

            #region [ 個別ファイルからノード作成 ]
            //-----------------------------
            foreach (FileInfo fileinfo in info.GetFiles())
            {
                SlowOrSuspendSearchTask();                      // #27060 中断要求があったら、解除要求が来るまで待機, #PREMOVIE再生中は検索負荷を落とす
                string strExt = fileinfo.Extension.ToLower();

                if ((strExt.Equals(".tja")) || strExt.Equals(".tcm") || strExt.Equals(".tci"))
                {
                    #region [ 新処理 ]
                    CDTX     dtx      = new CDTX(str基点フォルダ + fileinfo.Name, false, 1.0, 0, 0, false);
                    C曲リストノード c曲リストノード = new C曲リストノード();
                    c曲リストノード.eNodeType = C曲リストノード.ENodeType.SCORE;

                    c曲リストノード.r親ノード          = node親;
                    c曲リストノード.strBreadcrumbs = (c曲リストノード.r親ノード == null) ?
                                              str基点フォルダ + fileinfo.Name : c曲リストノード.r親ノード.strBreadcrumbs + " > " + str基点フォルダ + fileinfo.Name;

                    c曲リストノード.strTitle    = dtx.TITLE;
                    c曲リストノード.strSubTitle = dtx.SUBTITLE;
                    if (!string.IsNullOrEmpty(dtx.GENRE))
                    {
                        c曲リストノード.strGenre = dtx.GENRE;
                    }
                    else
                    {
                        if (c曲リストノード.r親ノード != null && c曲リストノード.r親ノード.strGenre != "")
                        {
                            // .tjaのジャンルが存在しなくて、かつ親ノードにジャンルが指定されていればそちらを読み込む。
                            c曲リストノード.strGenre = c曲リストノード.r親ノード.strGenre;
                        }
                    }

                    if (c曲リストノード.r親ノード != null)
                    {
                        c曲リストノード.ForeColor = c曲リストノード.r親ノード.ForeColor;
                        c曲リストノード.BackColor = c曲リストノード.r親ノード.BackColor;
                    }

                    c曲リストノード.ForeColor = TJAPlayer3.Skin.SongSelect_ForeColor[TJAPlayer3.Skin.nStrジャンルtoNum(c曲リストノード.strGenre)];
                    c曲リストノード.BackColor = TJAPlayer3.Skin.SongSelect_BackColor[TJAPlayer3.Skin.nStrジャンルtoNum(c曲リストノード.strGenre)];

                    c曲リストノード.nLevel = dtx.LEVELtaiko;


                    bool b = false;

                    c曲リストノード.arスコア = new Cスコア();
                    c曲リストノード.arスコア.ファイル情報.ファイルの絶対パス = str基点フォルダ + fileinfo.Name;
                    c曲リストノード.arスコア.ファイル情報.フォルダの絶対パス = str基点フォルダ;
                    c曲リストノード.arスコア.ファイル情報.ファイルサイズ   = fileinfo.Length;
                    c曲リストノード.arスコア.ファイル情報.最終更新日時    = fileinfo.LastWriteTime;
                    string strFileNameScoreIni = c曲リストノード.arスコア.ファイル情報.ファイルの絶対パス + ".score.ini";
                    if (File.Exists(strFileNameScoreIni))
                    {
                        FileInfo infoScoreIni = new FileInfo(strFileNameScoreIni);
                        c曲リストノード.arスコア.ScoreIni情報.ファイルサイズ = infoScoreIni.Length;
                        c曲リストノード.arスコア.ScoreIni情報.最終更新日時  = infoScoreIni.LastWriteTime;
                    }

                    c曲リストノード.arスコア.譜面情報.Title                = dtx.TITLE;
                    c曲リストノード.arスコア.譜面情報.Artist               = dtx.ARTIST;
                    c曲リストノード.arスコア.譜面情報.Comment              = dtx.COMMENT;
                    c曲リストノード.arスコア.譜面情報.Genre                = dtx.GENRE;
                    c曲リストノード.arスコア.譜面情報.Backgound            = ((dtx.BACKGROUND != null) && (dtx.BACKGROUND.Length > 0)) ? dtx.BACKGROUND : "";
                    c曲リストノード.arスコア.譜面情報.Bpm                  = dtx.BPM;
                    c曲リストノード.arスコア.譜面情報.Duration             = 0;           //  (cdtx.listChip == null)? 0 : cdtx.listChip[ cdtx.listChip.Count - 1 ].n発声時刻ms;
                    c曲リストノード.arスコア.譜面情報.strBGMファイル名          = dtx.strBGM_PATH == null ? "" : dtx.strBGM_PATH;
                    c曲リストノード.arスコア.譜面情報.SongVol              = dtx.SongVol;
                    c曲リストノード.arスコア.譜面情報.SongLoudnessMetadata = dtx.SongLoudnessMetadata;
                    c曲リストノード.arスコア.譜面情報.nデモBGMオフセット          = dtx.nデモBGMオフセット;
                    c曲リストノード.arスコア.譜面情報.b譜面分岐[0]             = dtx.bHIDDENBRANCH ? false : dtx.bHasBranch[0];
                    c曲リストノード.arスコア.譜面情報.b譜面分岐[1]             = dtx.bHIDDENBRANCH ? false : dtx.bHasBranch[1];
                    c曲リストノード.arスコア.譜面情報.b譜面分岐[2]             = dtx.bHIDDENBRANCH ? false : dtx.bHasBranch[2];
                    c曲リストノード.arスコア.譜面情報.b譜面分岐[3]             = dtx.bHIDDENBRANCH ? false : dtx.bHasBranch[3];
                    c曲リストノード.arスコア.譜面情報.b譜面分岐[4]             = dtx.bHIDDENBRANCH ? false : dtx.bHasBranch[4];
                    c曲リストノード.arスコア.譜面情報.b譜面分岐[5]             = dtx.bHIDDENBRANCH ? false : dtx.bHasBranch[5];
                    c曲リストノード.arスコア.譜面情報.b譜面分岐[6]             = dtx.bHIDDENBRANCH ? false : dtx.bHasBranch[6];
                    c曲リストノード.arスコア.譜面情報.bPapaMamaSupport[0]  = dtx.bPapaMamaSupport[0];
                    c曲リストノード.arスコア.譜面情報.bPapaMamaSupport[1]  = dtx.bPapaMamaSupport[1];
                    c曲リストノード.arスコア.譜面情報.bPapaMamaSupport[2]  = dtx.bPapaMamaSupport[2];
                    c曲リストノード.arスコア.譜面情報.bPapaMamaSupport[3]  = dtx.bPapaMamaSupport[3];
                    c曲リストノード.arスコア.譜面情報.bPapaMamaSupport[4]  = dtx.bPapaMamaSupport[4];
                    c曲リストノード.arスコア.譜面情報.bPapaMamaSupport[5]  = dtx.bPapaMamaSupport[5];
                    c曲リストノード.arスコア.譜面情報.bPapaMamaSupport[6]  = dtx.bPapaMamaSupport[6];
                    c曲リストノード.arスコア.譜面情報.strSubTitle          = dtx.SUBTITLE;
                    c曲リストノード.arスコア.譜面情報.nレベル[0]              = dtx.LEVELtaiko[0];
                    c曲リストノード.arスコア.譜面情報.nレベル[1]              = dtx.LEVELtaiko[1];
                    c曲リストノード.arスコア.譜面情報.nレベル[2]              = dtx.LEVELtaiko[2];
                    c曲リストノード.arスコア.譜面情報.nレベル[3]              = dtx.LEVELtaiko[3];
                    c曲リストノード.arスコア.譜面情報.nレベル[4]              = dtx.LEVELtaiko[4];
                    c曲リストノード.arスコア.譜面情報.nレベル[5]              = dtx.LEVELtaiko[5];
                    c曲リストノード.arスコア.譜面情報.nレベル[6]              = dtx.LEVELtaiko[6];
                    c曲リストノード.arスコア.譜面情報.b歌詞あり                = dtx.bLyrics;
                    for (int n = 0; n < (int)Difficulty.Total; n++)
                    {
                        if (dtx.b譜面が存在する[n])
                        {
                            c曲リストノード.nスコア数++;
                            c曲リストノード.arスコア.譜面情報.b譜面が存在する[n] = true;
                            if (b == false)
                            {
                                this.n検索されたスコア数++;
                                listノードリスト.Add(c曲リストノード);
                                this.n検索された曲ノード数++;
                                b = true;
                            }
                        }
                    }
                    dtx = null;

                    try
                    {
                        var scoreIniPath = c曲リストノード.arスコア.ファイル情報.ファイルの絶対パス + ".score.ini";
                        if (File.Exists(scoreIniPath))
                        {
                            this.tScoreIniを読み込んで譜面情報を設定する(scoreIniPath, c曲リストノード.arスコア);
                        }
                        else
                        {
                            string[] dtxscoreini = Directory.GetFiles(c曲リストノード.arスコア.ファイル情報.フォルダの絶対パス, "*.dtx.score.ini");
                            if (dtxscoreini.Length != 0 && File.Exists(dtxscoreini[0]))
                            {
                                this.tScoreIniを読み込んで譜面情報を設定する(dtxscoreini[0], c曲リストノード.arスコア);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Trace.TraceError(e.ToString());
                        Trace.TraceError("An exception has occurred, but processing continues.");
                    }
                    #endregion
                }
            }
            //-----------------------------
            #endregion

            foreach (DirectoryInfo infoDir in info.GetDirectories())
            {
                SlowOrSuspendSearchTask();                      // #27060 中断要求があったら、解除要求が来るまで待機, #PREMOVIE再生中は検索負荷を落とす

                #region [ b.box.def を含むフォルダの場合  ]
                //-----------------------------
                if (File.Exists(infoDir.FullName + @"/box.def"))
                {
                    CBoxDef  boxdef   = new CBoxDef(infoDir.FullName + @"/box.def");
                    C曲リストノード c曲リストノード = new C曲リストノード();
                    c曲リストノード.eNodeType = C曲リストノード.ENodeType.BOX;
                    c曲リストノード.strTitle  = boxdef.Title;
                    c曲リストノード.strGenre  = boxdef.Genre;

                    c曲リストノード.ForeColor = boxdef.ForeColor;
                    c曲リストノード.BackColor = boxdef.BackColor;

                    c曲リストノード.ForeColor = TJAPlayer3.Skin.SongSelect_ForeColor[TJAPlayer3.Skin.nStrジャンルtoNum(c曲リストノード.strGenre)];
                    c曲リストノード.BackColor = TJAPlayer3.Skin.SongSelect_BackColor[TJAPlayer3.Skin.nStrジャンルtoNum(c曲リストノード.strGenre)];

                    c曲リストノード.nスコア数 = 1;
                    c曲リストノード.arスコア = new Cスコア();
                    c曲リストノード.arスコア.ファイル情報.フォルダの絶対パス = infoDir.FullName + @"/";
                    c曲リストノード.arスコア.譜面情報.Title       = boxdef.Title;
                    c曲リストノード.arスコア.譜面情報.Genre       = boxdef.Genre;
                    c曲リストノード.r親ノード     = node親;
                    c曲リストノード.Openindex = 1;

                    c曲リストノード.strBreadcrumbs = (c曲リストノード.r親ノード == null) ?
                                              c曲リストノード.strTitle : c曲リストノード.r親ノード.strBreadcrumbs + " > " + c曲リストノード.strTitle;


                    c曲リストノード.list子リスト = new List <C曲リストノード>();
                    listノードリスト.Add(c曲リストノード);
                    if (b子BOXへ再帰する)
                    {
                        this.t曲を検索してリストを作成する(infoDir.FullName + @"/", b子BOXへ再帰する, c曲リストノード.list子リスト, c曲リストノード);
                    }
                }
                //-----------------------------
                #endregion

                #region [ c.通常フォルダの場合 ]
                //-----------------------------
                else
                {
                    this.t曲を検索してリストを作成する(infoDir.FullName + @"/", b子BOXへ再帰する, listノードリスト, node親);
                }
                //-----------------------------
                #endregion
            }
        }
        private void t曲を検索してリストを作成する(string str基点フォルダ, bool b子BOXへ再帰する, List <C曲リストノード> listノードリスト, C曲リストノード node親)
        {
            if (!str基点フォルダ.EndsWith(@"\"))
            {
                str基点フォルダ = str基点フォルダ + @"\";
            }

            DirectoryInfo info = new DirectoryInfo(str基点フォルダ);

            if (TJAPlayer3.ConfigIni.bLog曲検索ログ出力)
            {
                Trace.TraceInformation("基点フォルダ: " + str基点フォルダ);
            }

            #region [ 個別ファイルからノード作成 ]
            //-----------------------------
            foreach (FileInfo fileinfo in info.GetFiles())
            {
                SlowOrSuspendSearchTask();                      // #27060 中断要求があったら、解除要求が来るまで待機, #PREMOVIE再生中は検索負荷を落とす
                string strExt = fileinfo.Extension.ToLower();

                if ((strExt.Equals(".tja")) || strExt.Equals(".tcm") || strExt.Equals(".tci"))
                {
                    #region [ 新処理 ]
                    CDTX     dtx      = new CDTX(str基点フォルダ + fileinfo.Name, false, 1.0, 0);
                    C曲リストノード c曲リストノード = new C曲リストノード();
                    c曲リストノード.eノード種別 = C曲リストノード.Eノード種別.SCORE;

                    c曲リストノード.r親ノード          = node親;
                    c曲リストノード.strBreadcrumbs = (c曲リストノード.r親ノード == null) ?
                                              str基点フォルダ + fileinfo.Name : c曲リストノード.r親ノード.strBreadcrumbs + " > " + str基点フォルダ + fileinfo.Name;

                    c曲リストノード.strタイトル   = dtx.TITLE;
                    c曲リストノード.strサブタイトル = dtx.SUBTITLE;
                    if (!string.IsNullOrEmpty(dtx.GENRE))
                    {
                        c曲リストノード.strジャンル = dtx.GENRE;
                    }
                    else
                    {
                        if (c曲リストノード.r親ノード != null && c曲リストノード.r親ノード.strジャンル != "")
                        {
                            // .tjaのジャンルが存在しなくて、かつ親ノードにジャンルが指定されていればそちらを読み込む。
                            c曲リストノード.strジャンル = c曲リストノード.r親ノード.strジャンル;
                        }
                    }

                    if (c曲リストノード.r親ノード != null)
                    {
                        if (c曲リストノード.r親ノード.IsChangedForeColor)
                        {
                            c曲リストノード.ForeColor          = c曲リストノード.r親ノード.ForeColor;
                            c曲リストノード.IsChangedForeColor = true;
                        }
                        if (c曲リストノード.r親ノード.IsChangedBackColor)
                        {
                            c曲リストノード.BackColor          = c曲リストノード.r親ノード.BackColor;
                            c曲リストノード.IsChangedBackColor = true;
                        }
                    }

                    c曲リストノード.ForeColor = TJAPlayer3.Skin.SongSelect_ForeColor[TJAPlayer3.Skin.nStrジャンルtoNum(c曲リストノード.strジャンル)];
                    c曲リストノード.BackColor = TJAPlayer3.Skin.SongSelect_BackColor[TJAPlayer3.Skin.nStrジャンルtoNum(c曲リストノード.strジャンル)];

                    c曲リストノード.nLevel = dtx.LEVELtaiko;


                    bool b = false;

                    c曲リストノード.arスコア = new Cスコア();
                    c曲リストノード.arスコア.ファイル情報.ファイルの絶対パス = str基点フォルダ + fileinfo.Name;
                    c曲リストノード.arスコア.ファイル情報.フォルダの絶対パス = str基点フォルダ;
                    c曲リストノード.arスコア.ファイル情報.ファイルサイズ   = fileinfo.Length;
                    c曲リストノード.arスコア.ファイル情報.最終更新日時    = fileinfo.LastWriteTime;
                    string strFileNameScoreIni = c曲リストノード.arスコア.ファイル情報.ファイルの絶対パス + ".score.ini";
                    if (File.Exists(strFileNameScoreIni))
                    {
                        FileInfo infoScoreIni = new FileInfo(strFileNameScoreIni);
                        c曲リストノード.arスコア.ScoreIni情報.ファイルサイズ = infoScoreIni.Length;
                        c曲リストノード.arスコア.ScoreIni情報.最終更新日時  = infoScoreIni.LastWriteTime;
                    }

                    for (int n = 0; n < (int)Difficulty.Total; n++)
                    {
                        if (dtx.b譜面が存在する[n])
                        {
                            c曲リストノード.nスコア数++;
                            c曲リストノード.arスコア.譜面情報.b譜面が存在する[n] = true;
                            if (b == false)
                            {
                                this.n検索されたスコア数++;
                                listノードリスト.Add(c曲リストノード);
                                this.n検索された曲ノード数++;
                                b = true;
                            }
                        }
                    }
                    dtx = null;
                    #endregion
                }
            }
            //-----------------------------
            #endregion

            foreach (DirectoryInfo infoDir in info.GetDirectories())
            {
                SlowOrSuspendSearchTask();                      // #27060 中断要求があったら、解除要求が来るまで待機, #PREMOVIE再生中は検索負荷を落とす

                #region [ b.box.def を含むフォルダの場合  ]
                //-----------------------------
                if (File.Exists(infoDir.FullName + @"\box.def"))
                {
                    CBoxDef  boxdef   = new CBoxDef(infoDir.FullName + @"\box.def");
                    C曲リストノード c曲リストノード = new C曲リストノード();
                    c曲リストノード.eノード種別  = C曲リストノード.Eノード種別.BOX;
                    c曲リストノード.strタイトル = boxdef.Title;
                    c曲リストノード.strジャンル = boxdef.Genre;

                    if (boxdef.IsChangedForeColor)
                    {
                        c曲リストノード.ForeColor          = boxdef.ForeColor;
                        c曲リストノード.IsChangedForeColor = true;
                    }
                    if (boxdef.IsChangedBackColor)
                    {
                        c曲リストノード.BackColor          = boxdef.BackColor;
                        c曲リストノード.IsChangedBackColor = true;
                    }

                    c曲リストノード.ForeColor = TJAPlayer3.Skin.SongSelect_ForeColor[TJAPlayer3.Skin.nStrジャンルtoNum(c曲リストノード.strジャンル)];
                    c曲リストノード.BackColor = TJAPlayer3.Skin.SongSelect_BackColor[TJAPlayer3.Skin.nStrジャンルtoNum(c曲リストノード.strジャンル)];

                    c曲リストノード.nスコア数 = 1;
                    c曲リストノード.arスコア = new Cスコア();
                    c曲リストノード.arスコア.ファイル情報.フォルダの絶対パス = infoDir.FullName + @"\";
                    c曲リストノード.arスコア.譜面情報.タイトル        = boxdef.Title;
                    c曲リストノード.arスコア.譜面情報.ジャンル        = boxdef.Genre;
                    c曲リストノード.r親ノード     = node親;
                    c曲リストノード.Openindex = 1;

                    c曲リストノード.strBreadcrumbs = (c曲リストノード.r親ノード == null) ?
                                              c曲リストノード.strタイトル : c曲リストノード.r親ノード.strBreadcrumbs + " > " + c曲リストノード.strタイトル;


                    c曲リストノード.list子リスト = new List <C曲リストノード>();
                    listノードリスト.Add(c曲リストノード);
                    if (b子BOXへ再帰する)
                    {
                        this.t曲を検索してリストを作成する(infoDir.FullName + @"\", b子BOXへ再帰する, c曲リストノード.list子リスト, c曲リストノード);
                    }
                }
                //-----------------------------
                #endregion

                #region [ c.通常フォルダの場合 ]
                //-----------------------------
                else
                {
                    this.t曲を検索してリストを作成する(infoDir.FullName + @"\", b子BOXへ再帰する, listノードリスト, node親);
                }
                //-----------------------------
                #endregion
            }
        }