X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fdocumentchecker.cpp;h=ee7ffa64dd6f98349a2f5033dcd0267810f192f1;hb=9c8485b112894071602a863693b4e2dbc2baeca0;hp=e3444c03a9a88e44bb0bac539a888bb2b65d9a8c;hpb=87de4cac546a70345ea550388f62093e5957aca1;p=kdenlive diff --git a/src/documentchecker.cpp b/src/documentchecker.cpp index e3444c03..ee7ffa64 100644 --- a/src/documentchecker.cpp +++ b/src/documentchecker.cpp @@ -337,8 +337,7 @@ bool DocumentChecker::hasErrorInClips() if (missingProxies.count() > 0) { // original doc was modified - QDomNode infoXmlNode = m_doc.elementsByTagName("kdenlivedoc").at(0); - QDomElement infoXml = infoXmlNode.toElement(); + QDomElement infoXml = m_doc.elementsByTagName("kdenlivedoc").at(0).toElement(); infoXml.setAttribute("modified", "1"); } @@ -393,9 +392,10 @@ void DocumentChecker::slotSearchClips() bool fixed = false; m_ui.recursiveSearch->setEnabled(false); QTreeWidgetItem *child = m_ui.treeWidget->topLevelItem(ix); + QDir searchDir(newpath); while (child) { if (child->data(0, statusRole).toInt() == CLIPMISSING) { - QString clipPath = searchFileRecursively(QDir(newpath), child->data(0, sizeRole).toString(), child->data(0, hashRole).toString()); + QString clipPath = searchFileRecursively(searchDir, child->data(0, sizeRole).toString(), child->data(0, hashRole).toString()); if (!clipPath.isEmpty()) { fixed = true; child->setText(1, clipPath); @@ -411,14 +411,25 @@ void DocumentChecker::slotSearchClips() child->setData(0, statusRole, LUMAOK); } } + else if (child->data(0, typeRole).toInt() == TITLE_IMAGE_ELEMENT && child->data(0, statusRole).toInt() == CLIPPLACEHOLDER) { + // Search missing title images + QString missingFileName = KUrl(child->text(1)).fileName(); + QString newPath = searchPathRecursively(searchDir, missingFileName); + if (!newPath.isEmpty()) { + // File found + fixed = true; + child->setText(1, newPath); + child->setIcon(0, KIcon("dialog-ok")); + child->setData(0, statusRole, CLIPOK); + } + } ix++; child = m_ui.treeWidget->topLevelItem(ix); } m_ui.recursiveSearch->setEnabled(true); if (fixed) { // original doc was modified - QDomNode infoXmlNode = m_doc.elementsByTagName("kdenlivedoc").at(0); - QDomElement infoXml = infoXmlNode.toElement(); + QDomElement infoXml = m_doc.elementsByTagName("kdenlivedoc").at(0).toElement(); infoXml.setAttribute("modified", "1"); } checkStatus(); @@ -445,6 +456,24 @@ QString DocumentChecker::searchLuma(QString file) const return QString(); } +QString DocumentChecker::searchPathRecursively(const QDir &dir, const QString &fileName) const +{ + QString foundFileName; + QStringList filters; + filters << fileName; + QDir searchDir(dir); + searchDir.setNameFilters(filters); + QStringList filesAndDirs = searchDir.entryList(QDir::Files | QDir::Readable); + if (!filesAndDirs.isEmpty()) return searchDir.absoluteFilePath(filesAndDirs.at(0)); + searchDir.setNameFilters(QStringList()); + filesAndDirs = searchDir.entryList(QDir::Dirs | QDir::Readable | QDir::Executable | QDir::NoDotAndDotDot); + for (int i = 0; i < filesAndDirs.size() && foundFileName.isEmpty(); i++) { + foundFileName = searchPathRecursively(searchDir.absoluteFilePath(filesAndDirs.at(i)), fileName); + if (!foundFileName.isEmpty()) + break; + } + return foundFileName; +} QString DocumentChecker::searchFileRecursively(const QDir &dir, const QString &matchSize, const QString &matchHash) const { @@ -677,8 +706,7 @@ void DocumentChecker::slotFixDuration() ix++; child = m_ui.treeWidget->topLevelItem(ix); } - QDomNode infoXmlNode = m_doc.elementsByTagName("kdenlivedoc").at(0); - QDomElement infoXml = infoXmlNode.toElement(); + QDomElement infoXml = m_doc.elementsByTagName("kdenlivedoc").at(0).toElement(); infoXml.setAttribute("modified", "1"); m_ui.fixDuration->setEnabled(false); checkStatus(); @@ -740,8 +768,8 @@ void DocumentChecker::slotDeleteSelected() QDomNodeList producers = m_doc.elementsByTagName("producer"); QDomNodeList infoproducers = m_doc.elementsByTagName("kdenlive_producer"); - QDomElement mlt = m_doc.firstChildElement("mlt"); - QDomElement kdenlivedoc = mlt.firstChildElement("kdenlivedoc"); + QDomNode mlt = m_doc.elementsByTagName("mlt").at(0); + QDomNode kdenlivedoc = m_doc.elementsByTagName("kdenlivedoc").at(0); for (int i = 0, j = 0; i < infoproducers.count() && j < deletedIds.count(); i++) { e = infoproducers.item(i).toElement(); @@ -778,8 +806,7 @@ void DocumentChecker::slotDeleteSelected() } } } - QDomNode infoXmlNode = m_doc.elementsByTagName("kdenlivedoc").at(0); - QDomElement infoXml = infoXmlNode.toElement(); + QDomElement infoXml = m_doc.elementsByTagName("kdenlivedoc").at(0).toElement(); infoXml.setAttribute("modified", "1"); checkStatus(); }