// -------------------------------------------------------------------- // 設定をコンポーネントに反映 // -------------------------------------------------------------------- private void SettingsToCompos() { // クリア ListBoxFileNameRules.Items.Clear(); ListBoxFolderNameRules.Items.Clear(); // 設定 FolderSettingsInDisk aSettings = NklCommon.LoadFolderSettings(mFolder); foreach (String aFileNameRule in aSettings.FileNameRules) { ListBoxFileNameRules.Items.Add(aFileNameRule); } foreach (String aFolderNameRule in aSettings.FolderNameRules) { ListBoxFolderNameRules.Items.Add(aFolderNameRule); } }
// -------------------------------------------------------------------- // イベントハンドラー // -------------------------------------------------------------------- private void ButtonRemoveExt_Click(Object oSender, EventArgs oEventArgs) { try { // 選択されていない場合はボタンが押されないはずだが念のため if (ListBoxTargetExts.SelectedIndex < 0) { throw new Exception("削除したい拡張子を選択してください。"); } // 削除 ListBoxTargetExts.Items.RemoveAt(ListBoxTargetExts.SelectedIndex); } catch (Exception oExcep) { NklCommon.ShowLogMessage(TraceEventType.Error, "拡張子削除ボタンクリック時エラー:\n" + oExcep.Message); NklCommon.ShowLogMessage(TraceEventType.Verbose, " スタックトレース:\n" + oExcep.StackTrace); } }
private async void ButtonPreview_Click(object sender, EventArgs e) { try { // 保存 SaveSettingsIfNeeded(); // 検索 await NklCommon.LaunchTaskAsync <Object>(UpdateDataGridViewPreview, mTaskLock, null); } catch (OperationCanceledException) { } catch (Exception oExcep) { ShowLogMessage(TraceEventType.Error, "ファイル検索時エラー:\n" + oExcep.Message); ShowLogMessage(TraceEventType.Verbose, " スタックトレース:\n" + oExcep.StackTrace); } }
// -------------------------------------------------------------------- // イベントハンドラー // -------------------------------------------------------------------- private void ButtonUpItem_Click(Object oSender, EventArgs oEventArgs) { try { Int32 aOrgIndex = ListBoxAddedItems.SelectedIndex; if (aOrgIndex <= 0) { return; } String aItem = (String)ListBoxAddedItems.Items[aOrgIndex]; ListBoxAddedItems.Items.RemoveAt(aOrgIndex); ListBoxAddedItems.Items.Insert(aOrgIndex - 1, aItem); ListBoxAddedItems.SelectedIndex = aOrgIndex - 1; } catch (Exception oExcep) { NklCommon.ShowLogMessage(TraceEventType.Error, "上へボタンクリック時エラー:\n" + oExcep.Message); NklCommon.ShowLogMessage(TraceEventType.Verbose, " スタックトレース:\n" + oExcep.StackTrace); } }
// -------------------------------------------------------------------- // イベントハンドラー // -------------------------------------------------------------------- private void ButtonRemoveItem_Click(Object oSender, EventArgs oEventArgs) { try { Int32 aRemoveItem = Array.IndexOf(NklCommon.OUTPUT_ITEM_NAMES, (String)ListBoxAddedItems.Items[ListBoxAddedItems.SelectedIndex]); if (aRemoveItem < 0) { return; } ListBoxAddedItems.Items.RemoveAt(ListBoxAddedItems.SelectedIndex); ListBoxRemovedItems.Items.Add(NklCommon.OUTPUT_ITEM_NAMES[aRemoveItem]); ListBoxRemovedItems.SelectedIndex = ListBoxRemovedItems.Items.Count - 1; } catch (Exception oExcep) { NklCommon.ShowLogMessage(TraceEventType.Error, "項目削除ボタンクリック時エラー:\n" + oExcep.Message); NklCommon.ShowLogMessage(TraceEventType.Verbose, " スタックトレース:\n" + oExcep.StackTrace); } }
// -------------------------------------------------------------------- // イベントハンドラー:プレブス一覧の編集ボタンがクリックされた // -------------------------------------------------------------------- private void ButtonEditInfoClicked(Int32 oRowIndex) { // ファイル命名規則とフォルダー固定値を適用 FolderSettingsInDisk aFolderSettingsInDisk = NklCommon.LoadFolderSettings(mFolder); FolderSettingsInMemory aFolderSettingsInMemory = NklCommon.CreateFolderSettingsInMemory(aFolderSettingsInDisk); Dictionary <String, String> aDic = NklCommon.MatchFileNameRulesAndFolderRule (Path.GetFileNameWithoutExtension((String)DataGridViewPreview.Rows[oRowIndex].Cells[(Int32)PreviewColumns.File].Value), aFolderSettingsInMemory); // 楽曲名が取得できていない場合は編集不可 if (String.IsNullOrEmpty(aDic[NklCommon.RULE_VAR_TITLE])) { ShowLogMessage(TraceEventType.Error, "ファイル名から楽曲名を取得できていないため、編集できません。\nファイル命名規則を確認して下さい。"); return; } using (FormEditInfo aFormEditInfo = new FormEditInfo(aDic, mNicoKaraListerSettings, mLogWriter)) { aFormEditInfo.ShowDialog(this); } }
// -------------------------------------------------------------------- // ファイル命名規則の変数の表示用文字列を生成 // -------------------------------------------------------------------- private List <String> CreateRuleVarLabels() { List <String> aLabels = new List <String>(); TextInfo aTextInfo = Thread.CurrentThread.CurrentCulture.TextInfo; Dictionary <String, String> aVarMap = NklCommon.CreateRuleDictionaryWithDescription(); foreach (KeyValuePair <String, String> aVar in aVarMap) { String aKey; if (aVar.Key == NklCommon.RULE_VAR_ANY) { aKey = aVar.Key; } else { aKey = NklCommon.RULE_VAR_BEGIN + aTextInfo.ToTitleCase(aVar.Key) + NklCommon.RULE_VAR_END; } aLabels.Add(aKey + "(" + aVar.Value + ")"); } return(aLabels); }
// ==================================================================== // public メンバー関数 // ==================================================================== // -------------------------------------------------------------------- // リスト出力 // -------------------------------------------------------------------- public override void Output() { base.Output(); // ゆかり検索用データベース作成 NklCommon.ShowLogMessage(Common.TRACE_EVENT_TYPE_STATUS, "ゆかり検索用データベース作成中..."); using (SQLiteConnection aConnection = NklCommon.CreateDbConnection(YukariDbPath())) { NklCommon.CreateFoundDbTables(aConnection); using (DataContext aContext = new DataContext(aConnection)) { Table <TFound> aTable = aContext.GetTable <TFound>(); IQueryable <TFound> aQueryResult = from x in TableFound select x; aTable.InsertAllOnSubmit(aQueryResult); aContext.SubmitChanges(); } } }
private void ButtonSaveLog_Click(object sender, EventArgs e) { try { SaveFileDialogLog.FileName = "NicoKaraListerLog_" + DateTime.Now.ToString("yyyy_MM_dd-HH_mm_ss"); if (SaveFileDialogLog.ShowDialog() != DialogResult.OK) { return; } // 環境情報保存 NklCommon.LogEnvironmentInfo(); ZipFile.CreateFromDirectory(NklCommon.SettingsPath(), SaveFileDialogLog.FileName, CompressionLevel.Optimal, true); ShowLogMessage(TraceEventType.Information, "ログ保存完了:\n" + SaveFileDialogLog.FileName); } catch (Exception oExcep) { ShowLogMessage(TraceEventType.Error, "ログ保存時エラー:\n" + oExcep.Message); ShowLogMessage(TraceEventType.Verbose, " スタックトレース:\n" + oExcep.StackTrace); } }
private void ButtonSearch_Click(object sender, EventArgs e) { try { ListBoxFounds.Items.Clear(); // 検索 List <List <String> > aRecords = NklCommon.FindCsvRecordsIncludes(mCsvs, mColumnIndex, TextBoxKeyword.Text); if (aRecords.Count == 0) { ShowLogMessage(TraceEventType.Error, "「" + TextBoxKeyword.Text + "」を含む" + mItemName + "はありません。"); return; } // 重複を除外 List <String> aHits = new List <String>(); for (Int32 i = 0; i < aRecords.Count; i++) { String aName = aRecords[i][mColumnIndex]; if (!String.IsNullOrEmpty(aName) && !aHits.Contains(aName)) { aHits.Add(aName); } } aHits.Sort(); // リストボックスに表示 ListBoxFounds.Items.AddRange(aHits.ToArray()); ListBoxFounds.Focus(); ListBoxFounds.SelectedIndex = 0; } catch (Exception oExcep) { ShowLogMessage(TraceEventType.Error, "情報検索時エラー:\n" + oExcep.Message); ShowLogMessage(TraceEventType.Verbose, " スタックトレース:\n" + oExcep.StackTrace); } }
// ==================================================================== // コンストラクター・デストラクター // ==================================================================== // -------------------------------------------------------------------- // コンストラクター // -------------------------------------------------------------------- public FolderSettingsInMemory() { FileNameRules = new List <String>(); FileRegexGroups = new List <List <String> >(); FolderNameRules = NklCommon.CreateRuleDictionary(); }
// ==================================================================== // private メンバー関数 // ==================================================================== // -------------------------------------------------------------------- // 入力された値が適正か確認 // <例外> Exception // -------------------------------------------------------------------- private void CheckInput() { NklCommon.CheckIdPrefix(TextBoxIdPrefix.Text); }
// -------------------------------------------------------------------- // データグリッドビューを更新 // -------------------------------------------------------------------- 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(); } }