]> git.sesse.net Git - kdenlive/commitdiff
* Correctly convert titles in existing projects to the new kdenlivetitle producer
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Thu, 1 Oct 2009 14:43:12 +0000 (14:43 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Thu, 1 Oct 2009 14:43:12 +0000 (14:43 +0000)
* Fix problem in document loading that caused some clips to be loaded twice and producer errors on load
* upgrade document version to 0.85

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

src/documentvalidator.cpp
src/kdenlivedoc.cpp
src/mainwindow.cpp

index bb6d8999b4f7fa76e18b5c69d8b1e779c272eb1a..614fa1cab5095de4aa21fb4f3d0c8d4eca2733b9 100644 (file)
@@ -144,7 +144,6 @@ bool DocumentValidator::upgrade(double version, const double currentVersion)
         KMessageBox::sorry(kapp->activeWindow(), i18n("This project type is unsupported (version %1) and can't be loaded.", version), i18n("Unable to open project"));
         return false;
     }
-
     // <kdenlivedoc />
     QDomNode infoXmlNode = m_doc.elementsByTagName("kdenlivedoc").at(0);
     QDomElement infoXml = infoXmlNode.toElement();
@@ -721,10 +720,73 @@ bool DocumentValidator::upgrade(double version, const double currentVersion)
         }
     }
 
+    if (version <= 0.84) {
+            // update the title clips to use the new MLT kdenlivetitle producer
+            QDomNodeList kproducerNodes = m_doc.elementsByTagName("kdenlive_producer");
+            for (int i = 0; i < kproducerNodes.count(); ++i) {
+                QDomElement kproducer = kproducerNodes.at(i).toElement();
+                if (kproducer.attribute("type").toInt() == TEXT) {
+                    QString data = kproducer.attribute("xmldata");
+                    QString datafile = kproducer.attribute("resource");
+                    if (!datafile.endsWith(".kdenlivetitle")) {
+                        datafile = QString();
+                        kproducer.setAttribute("resource", QString());
+                    }
+                    QString id = kproducer.attribute("id");
+                    QDomNodeList mltproducers = m_doc.elementsByTagName("producer");
+                    bool foundData = false;
+                    bool foundResource = false;
+                    bool foundService = false;
+                    for (int j = 0; j < mltproducers.count(); j++) {
+                        QDomElement wproducer = mltproducers.at(j).toElement();
+                        if (wproducer.attribute("id") == id) {
+                            QDomNodeList props = wproducer.childNodes();
+                            for (int k = 0; k < props.count(); k++) {
+                                if (props.at(k).toElement().attribute("name") == "xmldata") {
+                                    props.at(k).firstChild().setNodeValue(data);
+                                    foundData = true;
+                                }
+                                else if (props.at(k).toElement().attribute("name") == "mlt_service") {
+                                    props.at(k).firstChild().setNodeValue("kdenlivetitle");
+                                    foundService = true;
+                                }
+                                else if (props.at(k).toElement().attribute("name") == "resource") {
+                                    props.at(k).firstChild().setNodeValue(datafile);
+                                    foundResource = true;
+                                }
+                            }
+                            if (!foundData) {
+                                QDomElement e = m_doc.createElement("property");
+                                e.setAttribute("name", "xmldata");
+                                QDomText value = m_doc.createTextNode(data);
+                                e.appendChild(value);
+                                wproducer.appendChild(e);
+                            }
+                            if (!foundService) {
+                                QDomElement e = m_doc.createElement("property");
+                                e.setAttribute("name", "mlt_service");
+                                QDomText value = m_doc.createTextNode("kdenlivetitle");
+                                e.appendChild(value);
+                                wproducer.appendChild(e);
+                            }                            
+                            if (!foundResource) {
+                                QDomElement e = m_doc.createElement("property");
+                                e.setAttribute("name", "resource");
+                                QDomText value = m_doc.createTextNode(datafile);
+                                e.appendChild(value);
+                                wproducer.appendChild(e);
+                            }
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+
+
     // The document has been converted: mark it as modified
     infoXml.setAttribute("version", currentVersion);
     m_modified = true;
-
     return true;
 }
 
index 632af1444bb0189840f2939084e9371ab6090e1f..0b3f05abef19e69ba4bed4adec4d03eeba27264b 100644 (file)
@@ -45,7 +45,7 @@
 
 #include <mlt++/Mlt.h>
 
-const double DOCUMENTVERSION = 0.84;
+const double DOCUMENTVERSION = 0.85;
 
 KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, QString profileName, const QPoint tracks, Render *render, MainWindow *parent) :
         QObject(parent),
index 8254082a0798f4cf1a640b80d9f0c6c15af99f9e..73261a240238b66b12a4b24db43f2646f238660c 100644 (file)
@@ -1882,7 +1882,7 @@ void MainWindow::connectDocument(TrackView *trackView, KdenliveDoc *doc)   //cha
     m_saveAction->setEnabled(doc->isModified());
     m_activeDocument = doc;
     m_activeTimeline->updateProjectFps();
-    m_projectList->updateAllClips();
+    m_activeDocument->checkProjectClips();
     if (KdenliveSettings::dropbframes()) slotUpdatePreviewSettings();
 
     // set tool to select tool