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;
}
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, "
"LIMIT :limit");
q.bindValue(":host_id", MyList::instance()->hostId());
- q.bindValue(":limit", 10);
+ q.bindValue(":limit", 1);
if (!db->exec(q))
return;
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();
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();
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())
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;
}
}
}
- if (oldFile.canonicalPath() != newFileString && !QFile::rename(oldFile.canonicalFilePath(), newFileString))
+ if (!QFile::rename(oldFile.canonicalFilePath(), newFileString))
{
fl.failedRename = true;
db->setFileLocation(fl);
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);