]> git.sesse.net Git - kdenlive/blobdiff - src/kdenlivedoc.cpp
Fix HTML tags in i18n strings
[kdenlive] / src / kdenlivedoc.cpp
index 4df0fcf2d2d23e8a0b93f7f115d334b320ea3704..dd88c3b575b95f522e9d0859fe6e5440596b289a 100644 (file)
@@ -42,6 +42,7 @@
 #include <QCryptographicHash>
 #include <QFile>
 #include <QInputDialog>
+#include <QDomImplementation>
 
 #include <mlt++/Mlt.h>
 
@@ -76,6 +77,8 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
         else {
             QFile file(tmpFile);
             QString errorMsg;
+            QDomImplementation impl;
+            impl.setInvalidDataPolicy(QDomImplementation::DropInvalidChars);
             success = m_document.setContent(&file, false, &errorMsg);
             file.close();
             KIO::NetAccess::removeTempFile(tmpFile);
@@ -158,7 +161,6 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
                                     }
                                 }
                                 addClipInfo(e, orig, prodId);
-                                kDebug() << "// KDENLIVE PRODUCER: " << prodId;
                             }
                         }
                         if (m_abortLoading) {
@@ -340,7 +342,7 @@ QDomDocument KdenliveDoc::createEmptyDocument(QList <TrackInfo> tracks)
 
     QDomElement blank0 = doc.createElement("entry");
     blank0.setAttribute("in", "0");
-    blank0.setAttribute("out", "0");
+    blank0.setAttribute("out", "1");
     blank0.setAttribute("producer", "black");
     playlist.appendChild(blank0);
 
@@ -479,6 +481,11 @@ bool KdenliveDoc::saveSceneList(const QString &path, const QString &scene)
     QDomDocument sceneList;
     sceneList.setContent(scene, true);
     QDomElement mlt = sceneList.firstChildElement("mlt");
+    if (mlt.isNull() || !mlt.hasChildNodes()) {
+        //Make sure we don't save if scenelist is corrupted
+        KMessageBox::error(kapp->activeWindow(), i18n("Cannot write to file %1", path));
+        return false;
+    }
     QDomElement addedXml = sceneList.createElement("kdenlivedoc");
     mlt.appendChild(addedXml);
 
@@ -871,10 +878,10 @@ void KdenliveDoc::addClip(QDomElement elem, QString clipId, bool createClipItem)
             int action = KMessageBox::No;
             if (!size.isEmpty() && !hash.isEmpty()) {
                 if (!m_searchFolder.isEmpty()) newpath = searchFileRecursively(m_searchFolder, size, hash);
-                else action = (KMessageBox::ButtonCode) KMessageBox::questionYesNoCancel(kapp->activeWindow(), i18n("Clip <b>%1</b><br>is invalid, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search automatically")), KGuiItem(i18n("Keep as placeholder")));
+                else action = (KMessageBox::ButtonCode) KMessageBox::questionYesNoCancel(kapp->activeWindow(), i18n("Clip <b>%1</b><br />is invalid, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search automatically")), KGuiItem(i18n("Keep as placeholder")));
             } else {
                 if (elem.attribute("type").toInt() == SLIDESHOW) {
-                    int res = KMessageBox::questionYesNoCancel(kapp->activeWindow(), i18n("Clip <b>%1</b><br>is invalid or missing, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search manually")), KGuiItem(i18n("Keep as placeholder")));
+                    int res = KMessageBox::questionYesNoCancel(kapp->activeWindow(), i18n("Clip <b>%1</b><br />is invalid or missing, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search manually")), KGuiItem(i18n("Keep as placeholder")));
                     if (res == KMessageBox::Yes)
                         newpath = KFileDialog::getExistingDirectory(KUrl("kfiledialog:///clipfolder"), kapp->activeWindow(), i18n("Looking for %1", path));
                     else {
@@ -882,7 +889,7 @@ void KdenliveDoc::addClip(QDomElement elem, QString clipId, bool createClipItem)
                         action = res;
                     }
                 } else {
-                    int res = KMessageBox::questionYesNoCancel(kapp->activeWindow(), i18n("Clip <b>%1</b><br>is invalid or missing, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search manually")), KGuiItem(i18n("Keep as placeholder")));
+                    int res = KMessageBox::questionYesNoCancel(kapp->activeWindow(), i18n("Clip <b>%1</b><br />is invalid or missing, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search manually")), KGuiItem(i18n("Keep as placeholder")));
                     if (res == KMessageBox::Yes)
                         newpath = KFileDialog::getOpenFileName(KUrl("kfiledialog:///clipfolder"), QString(), kapp->activeWindow(), i18n("Looking for %1", path));
                     else {
@@ -1013,14 +1020,6 @@ void KdenliveDoc::addClipInfo(QDomElement elem, QDomElement orig, QString clipId
     }
 }
 
-void KdenliveDoc::deleteProjectClip(QStringList ids)
-{
-    for (int i = 0; i < ids.size(); ++i) {
-        emit deleteTimelineClip(ids.at(i));
-    }
-    m_clipManager->slotDeleteClips(ids);
-    setModified(true);
-}
 
 void KdenliveDoc::deleteClip(const QString &clipId)
 {
@@ -1178,36 +1177,39 @@ QString KdenliveDoc::getLadspaFile() const
 
 bool KdenliveDoc::checkDocumentClips(QDomNodeList infoproducers)
 {
-    int clipType;
-    QDomElement e;
-    QString id;
-    QString resource;
-    QList <QDomElement> missingClips;
-    for (int i = 0; i < infoproducers.count(); i++) {
-        e = infoproducers.item(i).toElement();
-        clipType = e.attribute("type").toInt();
-        if (clipType == COLOR) continue;
-        if (clipType == TEXT) {
-            //TODO: Check is clip template is missing (xmltemplate) or hash changed
-            continue;
-        }
-        id = e.attribute("id");
-        resource = e.attribute("resource");
-        if (clipType == SLIDESHOW) resource = KUrl(resource).directory();
-        if (!KIO::NetAccess::exists(KUrl(resource), KIO::NetAccess::SourceSide, 0)) {
-            // Missing clip found
-            missingClips.append(e);
-        } else {
-            // Check if the clip has changed
-            if (clipType != SLIDESHOW && e.hasAttribute("file_hash")) {
-                if (e.attribute("file_hash") != DocClipBase::getHash(e.attribute("resource")))
-                    e.removeAttribute("file_hash");
+    DocumentChecker d(infoproducers, m_document);
+    return (d.hasMissingClips() == false);
+
+    /*    int clipType;
+        QDomElement e;
+        QString id;
+        QString resource;
+        QList <QDomElement> missingClips;
+        for (int i = 0; i < infoproducers.count(); i++) {
+            e = infoproducers.item(i).toElement();
+            clipType = e.attribute("type").toInt();
+            if (clipType == COLOR) continue;
+            if (clipType == TEXT) {
+                //TODO: Check is clip template is missing (xmltemplate) or hash changed
+                continue;
+            }
+            id = e.attribute("id");
+            resource = e.attribute("resource");
+            if (clipType == SLIDESHOW) resource = KUrl(resource).directory();
+            if (!KIO::NetAccess::exists(KUrl(resource), KIO::NetAccess::SourceSide, 0)) {
+                // Missing clip found
+                missingClips.append(e);
+            } else {
+                // Check if the clip has changed
+                if (clipType != SLIDESHOW && e.hasAttribute("file_hash")) {
+                    if (e.attribute("file_hash") != DocClipBase::getHash(e.attribute("resource")))
+                        e.removeAttribute("file_hash");
+                }
             }
         }
-    }
-    if (missingClips.isEmpty()) return true;
-    DocumentChecker d(missingClips, m_document);
-    return (d.exec() == QDialog::Accepted);
+        if (missingClips.isEmpty()) return true;
+        DocumentChecker d(missingClips, m_document);
+        return (d.exec() == QDialog::Accepted);*/
 }
 
 void KdenliveDoc::setDocumentProperty(const QString &name, const QString &value)