]> git.sesse.net Git - kdenlive/commitdiff
Check for invalid producers / entries when opening document:
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 8 Mar 2009 14:01:19 +0000 (14:01 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sun, 8 Mar 2009 14:01:19 +0000 (14:01 +0000)
http://www.kdenlive.org/mantis/view.php?id=705

svn path=/trunk/kdenlive/; revision=3120

src/trackview.cpp
src/trackview.h

index ee4c862387046402ed6c78ac410a958413e13d88..753eca125ccd074f98eba309dfdd23a6b54ef8a7 100644 (file)
@@ -139,7 +139,23 @@ void TrackView::parseDocument(QDomDocument doc) {
     QDomElement p;
 
     int pos = m_projectTracks - 1;
-
+    m_invalidProducers.clear();
+    QDomNodeList producers = doc.elementsByTagName("producer");
+    for (int i = 0; i < producers.count(); i++) {
+        // CHeck for invalid producers
+        QDomNode n = producers.item(i);
+        e = n.toElement();
+        int in = e.attribute("in").toInt();
+        int out = e.attribute("out").toInt();
+        if (in > out || in == out) {
+            // invalid producer, remove it
+            QString id = e.attribute("id");
+            m_invalidProducers.append(id);
+            m_documentErrors.append(i18n("Invalid clip producer %1\n", id));
+            doc.documentElement().removeChild(producers.at(i));
+            i--;
+        }
+    }
 
     for (int i = 0; i < m_projectTracks; i++) {
         e = tracks.item(i).toElement();
@@ -376,7 +392,9 @@ void TrackView::slotRebuildTrackHeaders() {
 int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked) {
     // parse track
     int position = 0;
-    for (QDomNode n = xml.firstChild(); !n.isNull(); n = n.nextSibling()) {
+    QDomNodeList children = xml.childNodes();
+    for (int nodeindex = 0; nodeindex < children.count(); nodeindex++) {
+        QDomNode n = children.item(nodeindex);
         QDomElement elem = n.toElement();
         if (elem.tagName() == "blank") {
             position += elem.attribute("length").toInt();
@@ -386,8 +404,10 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked) {
             // Found a clip
             int in = elem.attribute("in").toInt();
             int out = elem.attribute("out").toInt();
-            if (in > out || in == out) {
+            if (in > out || in == out || m_invalidProducers.contains(elem.attribute("producer"))) {
                 m_documentErrors.append(i18n("Invalid clip removed from track %1 at %2\n", ix, position));
+                xml.removeChild(children.at(nodeindex));
+                nodeindex--;
                 continue;
             }
             QString idString = elem.attribute("producer");
index 8a0c06c8bda801bbedd019336491fabbe9708826..841a49de2ea070ee22edf9066175c4af20b6abbe 100644 (file)
@@ -70,6 +70,7 @@ private:
     Ui::TimeLine_UI *view;
     CustomRuler *m_ruler;
     CustomTrackView *m_trackview;
+    QList <QString> m_invalidProducers;
     double m_scale;
     int m_projectTracks;
     QString m_editMode;