From: APTX Date: Mon, 5 Aug 2019 00:03:12 +0000 (+0900) Subject: Fix RenameAsVideoFile renaming video files as other video files X-Git-Url: https://gitweb.aptx.org/?a=commitdiff_plain;h=67af771566610934350f2adb16116865197e74d0;p=localmylist.git Fix RenameAsVideoFile renaming video files as other video files When RenameAsVideoFile is enabled a file is renamed as if it is a video file. This is meant for audio only files or text files. Data for a video file for the same episode is used. Actual video files should always be renamed using their own data. --- diff --git a/localmylist/renamehandler.cpp b/localmylist/renamehandler.cpp index 7cca535..295b491 100644 --- a/localmylist/renamehandler.cpp +++ b/localmylist/renamehandler.cpp @@ -91,8 +91,9 @@ void RenameHandler::handleRename() RenameParser::Environment videoFileEnv; bool useVideoFileEnv = false; - if (!env.value("RenameAsVideoFile", "").isEmpty()) + if (!isVideoFile(r) && !env.value("RenameAsVideoFile", "").isEmpty()) { + // TODO What should be done if there is more than one video file? QSqlQuery &q = db->prepare( "SELECT rd.* " " FROM rename_data rd " @@ -102,6 +103,7 @@ void RenameHandler::handleRename() " AND rd2.type = rd.type " // TODO there should only be one of those. // Waiting for video_codec normalization + // TODO not all video files have a video codec set " AND rd.video_codec <> 'none' " " AND rd.video_codec <> '') " " WHERE rd2.fid = :fid " @@ -111,7 +113,7 @@ void RenameHandler::handleRename() if (db->exec(q) && q.next()) { QSqlRecord r = q.record(); - setupRenameEnv(r, videoFileEnv); + setupRenameEnv(r, videoFileEnv, true); renameEngine->evaluate(videoFileEnv); if (!videoFileEnv.value("FileName", "").isEmpty()) @@ -138,6 +140,7 @@ void RenameHandler::handleRename() { fl.failedRename = false; db->setFileLocation(fl); + db->log(tr("Rename: New name is same as current name for <%1>").arg(oldFile.filePath())); continue; } diff --git a/localmylist/renameutils.cpp b/localmylist/renameutils.cpp index d10b16c..dd8ed31 100644 --- a/localmylist/renameutils.cpp +++ b/localmylist/renameutils.cpp @@ -72,6 +72,23 @@ void setupRenameEnv(const QSqlRecord &record, RenameParser::Environment &env, bo env["RenamingAsVideoFile"] = renamingAsVideoFile ? "1" : ""; } +bool isVideoFile(const QSqlRecord &record) +{ + const auto vcodec = record.value("video_codec"); + + if (!vcodec.isNull() && !vcodec.toString().isEmpty()) + return true; + + // Unfortunately not all video files have a video codec set + const auto extension = record.value("extension"); + + static const auto knownVideoFileExtensions = {"mkv", "avi", "mp4"}; + + return std::find(std::begin(knownVideoFileExtensions), + std::end(knownVideoFileExtensions), + extension) != std::end(knownVideoFileExtensions); +} + #ifdef Q_OS_WIN #include #include diff --git a/localmylist/renameutils.h b/localmylist/renameutils.h index 821d8ef..a6a73b7 100644 --- a/localmylist/renameutils.h +++ b/localmylist/renameutils.h @@ -10,6 +10,8 @@ namespace LocalMyList { void LOCALMYLISTSHARED_EXPORT setupRenameEnv(const QSqlRecord &record, RenameParser::Environment &env, bool renamingAsVideoFile = false); +bool LOCALMYLISTSHARED_EXPORT isVideoFile(const QSqlRecord &record); + QString exactPath(const QString &path); bool LOCALMYLISTSHARED_EXPORT renameFile(const QString &oldName, const QString &newName, QString *actualPath = 0);