From e4a5c59da46ef3065013d37cd71a3d9b82d820f1 Mon Sep 17 00:00:00 2001 From: APTX Date: Sun, 29 Sep 2013 16:11:25 +0200 Subject: [PATCH] Add "Rename as Video File" feature. This feature allows you to rename subtitle files the same way as video files. This is useful as video players usually look for subtitle files which are named the same way as a video file. --- .../aniaddsyntaxhighlighter.cpp | 2 +- .../renamesettingsdialog.cpp | 3 +- .../renamesettingsdialog.ui | 2 +- localmylist/renamehandler.cpp | 34 +++++++++++++++++-- localmylist/renameutils.cpp | 6 +++- localmylist/renameutils.h | 2 +- 6 files changed, 42 insertions(+), 7 deletions(-) diff --git a/localmylist-management/aniaddsyntaxhighlighter.cpp b/localmylist-management/aniaddsyntaxhighlighter.cpp index 3af5fad..ff0b535 100644 --- a/localmylist-management/aniaddsyntaxhighlighter.cpp +++ b/localmylist-management/aniaddsyntaxhighlighter.cpp @@ -59,7 +59,7 @@ AniAddSyntaxHighlighter::AniAddSyntaxHighlighter(QObject *parent) : highlightingRules.append(rule); } { - QString outputVariables = "FileName|PathName"; + QString outputVariables = "FileName|PathName|RenameAsVideoFile"; rule.pattern = QRegExp("\\b(?:" + outputVariables + ")\\b"); rule.format = outputVariable; highlightingRules << rule; diff --git a/localmylist-management/renamesettingsdialog.cpp b/localmylist-management/renamesettingsdialog.cpp index 1722fdc..b53dd85 100644 --- a/localmylist-management/renamesettingsdialog.cpp +++ b/localmylist-management/renamesettingsdialog.cpp @@ -292,7 +292,8 @@ void RenameSettingsDialog::updateResult(const RenameParser::Environment &env) if (ui->filterResultsCheckbox->isChecked()) { s += "FileName := \"" + env["FileName"] + "\"\n"; - s += "PathName := \"" + env["PathName"] + "\""; + s += "PathName := \"" + env["PathName"] + "\"\n"; + s += "RenameAsVideoFile := \"" + env["RenameAsVideoFile"] + "\""; } else { diff --git a/localmylist-management/renamesettingsdialog.ui b/localmylist-management/renamesettingsdialog.ui index a2254c1..307051c 100644 --- a/localmylist-management/renamesettingsdialog.ui +++ b/localmylist-management/renamesettingsdialog.ui @@ -55,7 +55,7 @@ - Only show FileName and PathName + Only show output variables true diff --git a/localmylist/renamehandler.cpp b/localmylist/renamehandler.cpp index 3e8cdf2..f7bd721 100644 --- a/localmylist/renamehandler.cpp +++ b/localmylist/renamehandler.cpp @@ -92,8 +92,38 @@ void RenameHandler::handleRename() continue; } - QString newFileName = env.value("FileName", "") + "." + r.value("extension").toString(); - QString newFilePath = env.value("PathName", ""); + RenameParser::Environment videoFileEnv; + bool useVideoFileEnv = false; + if (!env.value("RenameAsVideoFile", "").isEmpty()) + { + QSqlQuery &q = db->prepare( + "SELECT rd.* " + " FROM rename_data rd " + " JOIN rename_data rd2 ON ( " + " rd.aid = rd2.aid " + " AND rd.epno = rd2.epno " + " AND rd2.type = rd.type " + // TODO there should only be one of those. + // Waiting for video_codec normalization + " AND rd.video_codec <> 'none' " + " AND rd.video_codec <> '') " + " WHERE rd2.fid = :fid " + " LIMIT 1"); + q.bindValue(":fid", fl.fid); + + if (db->exec(q) && q.next()) + { + QSqlRecord r = q.record(); + setupRenameEnv(r, videoFileEnv); + renameEngine->evaluate(videoFileEnv); + + if (!videoFileEnv.value("FileName", "").isEmpty()) + useVideoFileEnv = true; + } + } + + QString newFileName = (useVideoFileEnv ? videoFileEnv : env).value("FileName", "") + "." + r.value("extension").toString(); + QString newFilePath = (useVideoFileEnv ? videoFileEnv : env).value("PathName", ""); QRegExp rx(settings->get("renameSanitizeRegex", QString("[/\\:*\"?<>|\\r\\n]"))); newFileName = newFileName.replace(rx, ""); diff --git a/localmylist/renameutils.cpp b/localmylist/renameutils.cpp index fcc3dbf..2e15dcb 100644 --- a/localmylist/renameutils.cpp +++ b/localmylist/renameutils.cpp @@ -9,7 +9,7 @@ namespace LocalMyList { -void setupRenameEnv(const QSqlRecord &record, RenameParser::Environment &env) +void setupRenameEnv(const QSqlRecord &record, RenameParser::Environment &env, bool renamingAsVideoFile) { env["ATr"] = record.value("anime_title_romaji").toString(); @@ -65,6 +65,10 @@ void setupRenameEnv(const QSqlRecord &record, RenameParser::Environment &env) env["MinRelatedEpNo"] = record.value("min_related_epno").toString(); env["MaxRelatedEpNo"] = record.value("max_related_epno").toString(); + + // These variables are added for rename as video + env["FileExtension"] = record.value("extension").toString(); + env["RenamingAsVideoFile"] = renamingAsVideoFile ? "1" : ""; } #ifdef Q_OS_WIN diff --git a/localmylist/renameutils.h b/localmylist/renameutils.h index 874942d..821d8ef 100644 --- a/localmylist/renameutils.h +++ b/localmylist/renameutils.h @@ -8,7 +8,7 @@ namespace LocalMyList { -void LOCALMYLISTSHARED_EXPORT setupRenameEnv(const QSqlRecord &record, RenameParser::Environment &env); +void LOCALMYLISTSHARED_EXPORT setupRenameEnv(const QSqlRecord &record, RenameParser::Environment &env, bool renamingAsVideoFile = false); QString exactPath(const QString &path); bool LOCALMYLISTSHARED_EXPORT renameFile(const QString &oldName, const QString &newName, QString *actualPath = 0); -- 2.52.0