// -------------------------------------------------------------------- // データグリッドビューを更新 // -------------------------------------------------------------------- private void UpdateDataGridViewPreview(Object oDummy) { try { // 準備 DisableComponents(); SetCursor(Cursors.WaitCursor); Invoke(new Action(() => { // クリア DataGridViewPreview.Rows.Clear(); // 検索 String[] aAllPathes = Directory.GetFiles(mFolder); // マッチをリストに追加 FolderSettingsInDisk aFolderSettingsInDisk = NklCommon.LoadFolderSettings(mFolder); FolderSettingsInMemory aFolderSettingsInMemory = NklCommon.CreateFolderSettingsInMemory(aFolderSettingsInDisk); Dictionary <String, String> aRuleMap = NklCommon.CreateRuleDictionaryWithDescription(); foreach (String aPath in aAllPathes) { if (!mOutputSettings.TargetExts.Contains(Path.GetExtension(aPath).ToLower())) { continue; } // ファイル命名規則とフォルダー固定値を適用 Dictionary <String, String> aDic = NklCommon.MatchFileNameRulesAndFolderRule(Path.GetFileNameWithoutExtension(aPath), aFolderSettingsInMemory); // DGV 追加 DataGridViewPreview.Rows.Add(); Int32 aIndex = DataGridViewPreview.Rows.Count - 1; // ファイル DataGridViewPreview.Rows[aIndex].Cells[(Int32)PreviewColumns.File].Value = Path.GetFileName(aPath); // 項目と値 StringBuilder aSB = new StringBuilder(); foreach (KeyValuePair <String, String> aKvp in aDic) { if (aKvp.Key != NklCommon.RULE_VAR_ANY && !String.IsNullOrEmpty(aKvp.Value)) { aSB.Append(aRuleMap[aKvp.Key] + "=" + aKvp.Value + ", "); } } DataGridViewPreview.Rows[aIndex].Cells[(Int32)PreviewColumns.Matches].Value = aSB.ToString(); // 編集 DataGridViewPreview.Rows[aIndex].Cells[(Int32)PreviewColumns.Edit].Value = "編集"; } // 選択解除 DataGridViewPreview.ClearSelection(); // 次の編集候補ボタン UpdateButtonJump(); })); } catch (OperationCanceledException) { ShowLogMessage(Common.TRACE_EVENT_TYPE_STATUS, "ファイル検索結果更新を中止しました。"); } catch (Exception oExcep) { ShowLogMessage(TraceEventType.Error, "ファイル検索結果更新更新時エラー:\n" + oExcep.Message); ShowLogMessage(TraceEventType.Verbose, " スタックトレース:\n" + oExcep.StackTrace); } finally { // 後片付け SetCursor(Cursors.Default); EnableComponents(); } }
// -------------------------------------------------------------------- // 編集する必要がありそうなファイルに飛ぶ // -------------------------------------------------------------------- private void JumpToNextCandidate(Object oDummy) { try { // 準備 DisableComponents(); SetCursor(Cursors.WaitCursor); // 初めての場合は CSV をロード if (mProgramCsvs == null) { NklCommon.LoadCsvs(mNicoKaraListerSettings, out mProgramCsvs, out mSongCsvs, out mProgramAliasCsvs, out mSongAliasCsvs); } Invoke(new Action(() => { Int32 aRowIndex = -1; if (DataGridViewPreview.SelectedRows.Count > 0) { aRowIndex = DataGridViewPreview.SelectedRows[0].Index; } // マッチ準備 FolderSettingsInDisk aFolderSettingsInDisk = NklCommon.LoadFolderSettings(mFolder); FolderSettingsInMemory aFolderSettingsInMemory = NklCommon.CreateFolderSettingsInMemory(aFolderSettingsInDisk); for (; ;) { aRowIndex++; if (aRowIndex >= DataGridViewPreview.RowCount) { ShowLogMessage(TraceEventType.Information, "ファイル名から取得した情報が楽曲情報・番組情報に未登録のファイルは見つかりませんでした。"); DataGridViewPreview.ClearSelection(); return; } // ファイル命名規則とフォルダー固定値を適用 Dictionary <String, String> aDic = NklCommon.MatchFileNameRulesAndFolderRule( Path.GetFileNameWithoutExtension((String)DataGridViewPreview.Rows[aRowIndex].Cells[(Int32)PreviewColumns.File].Value), aFolderSettingsInMemory); // 楽曲名が空かどうか if (String.IsNullOrEmpty(aDic[NklCommon.RULE_VAR_TITLE])) { break; } // 楽曲名が anison.info と不一致かどうか String aSongOrigin = SongOriginCsv(aDic[NklCommon.RULE_VAR_TITLE]); List <String> aSongCsvRecord = NklCommon.FindCsvRecord(mSongCsvs, (Int32)SongCsvColumns.Name, aSongOrigin); if (aSongCsvRecord == null) { break; } // 番組名がある場合、番組名が anison.info と不一致かどうか if (!String.IsNullOrEmpty(aDic[NklCommon.RULE_VAR_PROGRAM])) { String aProgramOrigin = ProgramOriginCsv(aDic[NklCommon.RULE_VAR_PROGRAM]); List <String> aProgramCsvRecord = NklCommon.FindCsvRecord(mProgramCsvs, (Int32)ProgramCsvColumns.Name, aProgramOrigin); if (aProgramCsvRecord == null) { break; } } } DataGridViewPreview.Rows[aRowIndex].Selected = true; // 検出行が完全に表示されていない場合はスクロールする Int32 aBeforeRowIndex = aRowIndex > 0 ? aRowIndex - 1 : aRowIndex; Int32 aAfterRowIndex = aRowIndex < DataGridViewPreview.RowCount - 1 ? aRowIndex + 1 : aRowIndex; if (!DataGridViewPreview.Rows[aBeforeRowIndex].Displayed || !DataGridViewPreview.Rows[aAfterRowIndex].Displayed) { DataGridViewPreview.FirstDisplayedScrollingRowIndex = aRowIndex; } })); } catch (OperationCanceledException) { ShowLogMessage(Common.TRACE_EVENT_TYPE_STATUS, "未登録検出を中止しました。"); } catch (Exception oExcep) { ShowLogMessage(TraceEventType.Error, "未登録検出時エラー:\n" + oExcep.Message); ShowLogMessage(TraceEventType.Verbose, " スタックトレース:\n" + oExcep.StackTrace); } finally { // 後片付け SetCursor(Cursors.Default); EnableComponents(); } }