]> Some of my projects - localmylist.git/commitdiff
Some fixes to RenameHandler. Only perform one rename at a time. Always strip invalid...
authorAPTX <marek321@gmail.com>
Wed, 13 Jun 2012 22:53:16 +0000 (00:53 +0200)
committerAPTX <marek321@gmail.com>
Wed, 13 Jun 2012 22:53:16 +0000 (00:53 +0200)
localmylist/renamehandler.cpp
localmylist/renamehandler.h

index cafdc5ff7486ac907877c845c0e0a37a726dbd42..8a9eb5e099b7dd2c4f1b20a12767ded64f4983de 100644 (file)
 
 namespace LocalMyList {
 
-RenameHandler::RenameHandler(Database *db, QObject *parent) :
+RenameHandler::RenameHandler(Database *db, Settings *settings, QObject *parent) :
        QObject(parent), renameEngine(0), validScript(false)
 {
        this->db = db;
+       this->settings = settings;
+       connect(db, SIGNAL(renameDataChanged()), this, SLOT(handleRename()), Qt::QueuedConnection);
        connect(this, SIGNAL(renameBatchFinished()), this, SLOT(handleRename()), Qt::QueuedConnection);
        m_setup = false;
 }
@@ -26,6 +28,7 @@ bool RenameHandler::isSetup()
 
 void RenameHandler::handleRename()
 {
+       RaiiTransaction t(db);
        QSqlQuery q(db->connection());
 
        q.prepare("SELECT fid, eid, aid, gid, anime_anidb_update, anime_entry_update, anime_my_update, anime_title_english, anime_title_romaji, anime_title_kanji, "
@@ -39,7 +42,7 @@ void RenameHandler::handleRename()
                          "LIMIT :limit");
 
        q.bindValue(":host_id", MyList::instance()->hostId());
-       q.bindValue(":limit", 10);
+       q.bindValue(":limit", 1);
 
        if (!db->exec(q))
                return;
@@ -49,17 +52,18 @@ void RenameHandler::handleRename()
        if (q.size() < 1)
                return;
 
+       setupRenameEngine();
+
        if (!validScript)
                return;
 
+       t.commit();
+
        while (q.next())
        {
                QSqlRecord r = q.record();
                QFileInfo oldFile(r.value("path").toString());
 
-               RaiiTransaction t(db);
-               t.commit();
-
                FileLocation fl;
                fl.fid = q.value(0).toInt();
                fl.hostId = MyList::instance()->hostId();
@@ -106,9 +110,7 @@ void RenameHandler::handleRename()
 
                env["Type"] = r.value("anime_type").toString();
                env["Depr"] = /*r.value("")*/ false ? "1" : ""; // Data missing?
-
                env["Cen"] = r.value("censored").toBool() ? "1" : "0";
-
                env["Ver"] = r.value("version").toString();
                env["Source"] = r.value("type").toString(); // TODO This is called source on AniDB
                env["Quality"] = r.value("quality").toString();
@@ -120,9 +122,6 @@ void RenameHandler::handleRename()
                env["FVCodec"] = r.value("video_codec").toString();
                env["Watched"] = r.value("my_watched").toDateTime().isValid() ? "1" : "0";
 
-               if (!m_setup)
-                       setupRenameEngine();
-
                renameEngine->evaluate(env);
 
                if (env.value("FileName", "").isEmpty())
@@ -136,17 +135,28 @@ void RenameHandler::handleRename()
                QString newFileName = env.value("FileName", "") + "." + r.value("extension").toString();
                QString newFilePath = env.value("FilePath", "");
 
+               newFileName = newFileName.replace(QRegExp("[/\\:*\"?<>|\\r\\n]"), "");
+
                if (newFilePath.isEmpty())
                        newFilePath = oldFile.canonicalPath();
 
                QString newFileString = newFilePath + "/" + newFileName;
                QFileInfo newFile(newFileString);
 
+               bool isSamePath = oldFile.canonicalFilePath() == newFileString;
+
+               if (isSamePath)
+               {
+                       fl.failedRename = false;
+                       db->setFileLocation(fl);
+                       continue;
+               }
+
                if (newFile.exists())
                {
                        fl.failedRename = true;
                        db->setFileLocation(fl);
-                       db->log(tr("Rename: Failed to rename file <%1>. Destination <%2> exists.").arg(oldFile.filePath()).arg(newFile.canonicalPath()), 2);
+                       db->log(tr("Rename: Failed to rename file <%1>. Destination <%2> exists.").arg(oldFile.filePath()).arg(newFileString), 2);
                        continue;
                }
 
@@ -161,7 +171,7 @@ void RenameHandler::handleRename()
                        }
                }
 
-               if (oldFile.canonicalPath() != newFileString && !QFile::rename(oldFile.canonicalFilePath(), newFileString))
+               if (!QFile::rename(oldFile.canonicalFilePath(), newFileString))
                {
                        fl.failedRename = true;
                        db->setFileLocation(fl);
@@ -186,12 +196,15 @@ void RenameHandler::clearSetup()
 
 void RenameHandler::setupRenameEngine()
 {
+       if (m_setup)
+               return;
+
        if (!renameEngine)
                renameEngine = new RenameParser::RenameEngine();
 
        renameEngine->setCurrentParserType(RenameParser::RenameEngine::ParserType(
-                                                                                  MyList::instance()->settings()->get("renameLanguage").toInt()));
-       validScript = renameEngine->parse(MyList::instance()->settings()->get("renameScript").toString());
+                                                                                  settings->get("renameLanguage").toInt()));
+       validScript = renameEngine->parse(settings->get("renameScript").toString());
 
        if (!validScript)
                db->log(tr("Rename Current rename script is invalid: %1, line: %2, column: %3").arg(renameEngine->error()).arg(renameEngine->line()).arg(renameEngine->column()), 2);
index 872e1b869531a41174b803f7f50d3e37e701cc06..c2411dd6aa324b50f191a7bf519c05a939499082 100644 (file)
@@ -11,12 +11,13 @@ namespace RenameParser {
 namespace LocalMyList {
 
 class Database;
+class Settings;
 
 class RenameHandler : public QObject
 {
        Q_OBJECT
 public:
-       explicit RenameHandler(Database *db, QObject *parent = 0);
+       explicit RenameHandler(Database *db, Settings *settings, QObject *parent = 0);
        
        bool isSetup();
 
@@ -31,6 +32,7 @@ public slots:
 
 private:
        Database *db;
+       Settings *settings;
        RenameParser::RenameEngine *renameEngine;
 
        bool validScript;