예제 #1
0
        // --------------------------------------------------------------------
        // データグリッドビューを更新
        // --------------------------------------------------------------------
        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();
            }
        }
예제 #2
0
        // --------------------------------------------------------------------
        // 編集する必要がありそうなファイルに飛ぶ
        // --------------------------------------------------------------------
        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();
            }
        }