]> Some of my projects - localmylist.git/commitdiff
Fix RenameAsVideoFile renaming video files as other video files
authorAPTX <marek321@gmail.com>
Mon, 5 Aug 2019 00:03:12 +0000 (09:03 +0900)
committerAPTX <marek321@gmail.com>
Mon, 5 Aug 2019 00:03:12 +0000 (09:03 +0900)
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.

localmylist/renamehandler.cpp
localmylist/renameutils.cpp
localmylist/renameutils.h

index 7cca5353af07a34c58c04565badb946617f21901..295b4912723a7734339002cc9a3f03000eb61587 100644 (file)
@@ -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;
                }
 
index d10b16c20eeff32cfa1eb0a0d9d17a363f873b06..dd8ed3120f1525fd75e7629980306e42666d97da 100644 (file)
@@ -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 <QDir>
 #include <windows.h>
index 821d8efad9b42b0444a3f571fe503a7b8a5aa1e4..a6a73b715c8d73356fec5c583dc1988d5cebfd05 100644 (file)
@@ -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);