From: <j-...@us...> - 2009-03-08 14:01:22
|
Revision: 3120 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3120&view=rev Author: j-b-m Date: 2009-03-08 14:01:19 +0000 (Sun, 08 Mar 2009) Log Message: ----------- Check for invalid producers / entries when opening document: http://www.kdenlive.org/mantis/view.php?id=705 Modified Paths: -------------- trunk/kdenlive/src/trackview.cpp trunk/kdenlive/src/trackview.h Modified: trunk/kdenlive/src/trackview.cpp =================================================================== --- trunk/kdenlive/src/trackview.cpp 2009-03-08 11:50:25 UTC (rev 3119) +++ trunk/kdenlive/src/trackview.cpp 2009-03-08 14:01:19 UTC (rev 3120) @@ -139,8 +139,24 @@ 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(); QString playlist_name = e.attribute("producer"); @@ -376,7 +392,9 @@ 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 @@ // 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"); Modified: trunk/kdenlive/src/trackview.h =================================================================== --- trunk/kdenlive/src/trackview.h 2009-03-08 11:50:25 UTC (rev 3119) +++ trunk/kdenlive/src/trackview.h 2009-03-08 14:01:19 UTC (rev 3120) @@ -70,6 +70,7 @@ Ui::TimeLine_UI *view; CustomRuler *m_ruler; CustomTrackView *m_trackview; + QList <QString> m_invalidProducers; double m_scale; int m_projectTracks; QString m_editMode; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |