// -------------------------------------------------------------------- // 楽曲情報・番組情報をインポート // -------------------------------------------------------------------- private void ImportInfo() { try { // 準備 ShowLogMessage(Common.TRACE_EVENT_TYPE_STATUS, "楽曲情報・番組情報をインポートします..."); // 解凍 String aTempFolder = NklCommon.TempFilePath() + "\\"; Directory.CreateDirectory(aTempFolder); ZipFile.ExtractToDirectory(OpenFileDialogImport.FileName, aTempFolder); String aExtractedFolderPath = aTempFolder + NklCommon.FILE_PREFIX_INFO + "\\"; // CSV 読み込み Dictionary <String, List <List <String> > > aProgramCsvs; Dictionary <String, List <List <String> > > aSongCsvs; Dictionary <String, List <List <String> > > aProgramAliasCsvs; Dictionary <String, List <List <String> > > aSongAliasCsvs; NklCommon.LoadCsvs(mNicoKaraListerSettings, out aProgramCsvs, out aSongCsvs, out aProgramAliasCsvs, out aSongAliasCsvs); // 番組インポート Int32 aNumAddedRecords = 0; ImportInfo <ProgramCsvColumns>(aProgramCsvs, NklCommon.FILE_NAME_PROGRAM_CSV, aExtractedFolderPath, (Int32)ProgramCsvColumns.Id, ref aNumAddedRecords); // 楽曲インポート List <String> aSongCsvList = NklCommon.CreateSongCsvList(); foreach (String aCsvFileName in aSongCsvList) { ImportInfo <SongCsvColumns>(aSongCsvs, aCsvFileName, aExtractedFolderPath, (Int32)SongCsvColumns.Id, ref aNumAddedRecords); } // 番組別名インポート ImportInfo <ProgramAliasCsvColumns>(aProgramAliasCsvs, NklCommon.FILE_NAME_PROGRAM_ALIAS_CSV, aExtractedFolderPath, (Int32)ProgramAliasCsvColumns.Alias, ref aNumAddedRecords); // 楽曲別名インポート List <String> aSongAliasCsvList = NklCommon.CreateSongAliasCsvList(); foreach (String aCsvFileName in aSongAliasCsvList) { ImportInfo <SongAliasCsvColumns>(aSongAliasCsvs, aCsvFileName, aExtractedFolderPath, (Int32)SongAliasCsvColumns.Alias, ref aNumAddedRecords); } // 報告 ShowLogMessage(TraceEventType.Information, "インポートが完了しました。\n" + "重複を除く " + aNumAddedRecords + " レコードをインポートしました。"); } catch (OperationCanceledException) { ShowLogMessage(Common.TRACE_EVENT_TYPE_STATUS, "インポートを中止しました。"); } catch (Exception oExcep) { ShowLogMessage(TraceEventType.Error, "インポート時エラー:\n" + oExcep.Message); ShowLogMessage(TraceEventType.Verbose, " スタックトレース:\n" + oExcep.StackTrace); } }
// -------------------------------------------------------------------- // 編集する必要がありそうなファイルに飛ぶ // -------------------------------------------------------------------- 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(); } }