Ejemplo n.º 1
0
        // --------------------------------------------------------------------
        // FormNicoKaraLister.ProgramOrigin() の CSV 版
        // 番組 ID 検索アルゴリズムは CreateInfoDbProgramAliasTableInsert() と同様とする
        // --------------------------------------------------------------------
        private String ProgramOriginCsv(String oProgram)
        {
            List <String> aProgramAliasRecord = NklCommon.FindCsvRecord(mProgramAliasCsvs, (Int32)ProgramAliasCsvColumns.Alias, oProgram);

            if (aProgramAliasRecord == null)
            {
                return(oProgram);
            }

            // 番組名が指定されたものとして番組 ID を検索
            List <String> aProgramRecord;

            if (String.IsNullOrEmpty(aProgramAliasRecord[(Int32)ProgramAliasCsvColumns.ForceId]))
            {
                aProgramRecord = NklCommon.FindCsvRecord(mProgramCsvs, (Int32)ProgramCsvColumns.Name, aProgramAliasRecord[(Int32)ProgramAliasCsvColumns.NameOrId]);
                if (aProgramRecord != null)
                {
                    return(aProgramRecord[(Int32)ProgramCsvColumns.Name]);
                }
            }

            // 番組 ID が指定されたものとして番組 ID を検索
            aProgramRecord = NklCommon.FindCsvRecord(mProgramCsvs, (Int32)ProgramCsvColumns.Id, aProgramAliasRecord[(Int32)ProgramAliasCsvColumns.NameOrId]);
            if (aProgramRecord != null)
            {
                return(aProgramRecord[(Int32)ProgramCsvColumns.Name]);
            }

            return(oProgram);
        }
Ejemplo n.º 2
0
        // --------------------------------------------------------------------
        // FormNicoKaraLister.SongOrigin() の CSV 版
        // 楽曲 ID 検索アルゴリズムは CreateInfoDbSongAliasTableInsert() と同様とする
        // --------------------------------------------------------------------
        private String SongOriginCsv(String oTitle)
        {
            List <String> aSongAliasRecord = NklCommon.FindCsvRecord(mSongAliasCsvs, (Int32)SongAliasCsvColumns.Alias, oTitle);

            if (aSongAliasRecord == null)
            {
                return(oTitle);
            }

            // 楽曲名が指定されたものとして楽曲 ID を検索
            List <String> aSongRecord;

            if (String.IsNullOrEmpty(aSongAliasRecord[(Int32)SongAliasCsvColumns.ForceId]))
            {
                aSongRecord = NklCommon.FindCsvRecord(mSongCsvs, (Int32)SongCsvColumns.Name, aSongAliasRecord[(Int32)SongAliasCsvColumns.NameOrId]);
                if (aSongRecord != null)
                {
                    return(aSongRecord[(Int32)SongCsvColumns.Name]);
                }
            }

            // 楽曲 ID が指定されたものとして楽曲 ID を検索
            aSongRecord = NklCommon.FindCsvRecord(mSongCsvs, (Int32)SongCsvColumns.Id, aSongAliasRecord[(Int32)SongAliasCsvColumns.NameOrId]);
            if (aSongRecord != null)
            {
                return(aSongRecord[(Int32)SongCsvColumns.Name]);
            }

            return(oTitle);
        }
Ejemplo n.º 3
0
        // --------------------------------------------------------------------
        // 楽曲情報・番組情報をインポート(1 ファイル分)
        // --------------------------------------------------------------------
        private void ImportInfo <T>(Dictionary <String, List <List <String> > > oCsvs, String oCsvFileName, String oExtractedFolderPath, Int32 oKeyColumnIndex,
                                    ref Int32 oTotalAddedRecords)
        {
            // 解凍された CSV ファイルがあるか確認
            String aExtractedCsvPath = oExtractedFolderPath + oCsvFileName;

            if (!File.Exists(aExtractedCsvPath))
            {
                return;
            }

            Int32         aNumAddedRecords = 0;
            List <String> aTitle           = NklCommon.CsvTitle <T>();

            // CSV 読み込み
            ShowLogMessage(Common.TRACE_EVENT_TYPE_STATUS, oCsvFileName + " をインポートしています...");
            List <List <String> > aCsv = NklCommon.LoadCsv(aExtractedCsvPath, mNicoKaraListerSettings, aTitle.Count + 1);

            // インポート
            String aUserCsvPath = NklCommon.UserCsvPath(oCsvFileName);

            foreach (List <String> aRecord in aCsv)
            {
                // ユーザー CSV に既にキー列が存在している場合はインポートしない
                String        aFoundCsvPath;
                List <String> aFoundRecord = NklCommon.FindCsvRecord(oCsvs, oKeyColumnIndex, aRecord[oKeyColumnIndex], out aFoundCsvPath);
                if (aFoundRecord != null && !NklCommon.IsSystemCsvPath(aFoundCsvPath))
                {
                    continue;
                }

                // システム CSV に既に同じレコードが存在している場合はインポートしない
                if (NklCommon.RecordExists(oCsvs, aRecord, oKeyColumnIndex))
                {
                    continue;
                }

                // インポートする
                if (!oCsvs.ContainsKey(aUserCsvPath))
                {
                    oCsvs[aUserCsvPath] = new List <List <String> >();
                }
                oCsvs[aUserCsvPath].Add(aRecord);
                aNumAddedRecords++;
            }

            // 保存
            if (aNumAddedRecords > 0)
            {
                NklCommon.BackupCsv(aUserCsvPath);
                CsvManager.SaveCsv(aUserCsvPath, oCsvs[aUserCsvPath], "\r\n", Encoding.UTF8, aTitle, true);
            }

            // 報告
            ShowLogMessage(Common.TRACE_EVENT_TYPE_STATUS, "重複を除く " + aNumAddedRecords + " レコードをインポートしました。");
            oTotalAddedRecords += aNumAddedRecords;
        }
Ejemplo n.º 4
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();
            }
        }