]> git.sesse.net Git - kdenlive/commitdiff
Load metadata when opening doc
authorJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 10 Jan 2009 18:28:00 +0000 (18:28 +0000)
committerJean-Baptiste Mardelle <jb@kdenlive.org>
Sat, 10 Jan 2009 18:28:00 +0000 (18:28 +0000)
svn path=/branches/KDE4/; revision=2888

src/kdenlivedoc.cpp
src/kdenlivedoc.h

index 6d6baa38b5612bf877d13df54fa138428ce4dba2..381ff6415d317b95dd38984bc1199bd7d9afa6fe 100644 (file)
@@ -103,6 +103,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
 
 
                     QDomElement e;
+                    QDomElement orig;
                     QDomNodeList producers = m_document.elementsByTagName("producer");
                     QDomNodeList infoproducers = m_document.elementsByTagName("kdenlive_producer");
                     const int max = producers.count();
@@ -113,19 +114,6 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
                         parent->slotGotProgressInfo(i18n("Loading project clips"), (int) m_documentLoadingProgress);
                     }
 
-                    for (int i = 0; i < max; i++) {
-                        e = producers.item(i).cloneNode().toElement();
-                        if (m_documentLoadingStep > 0) {
-                            m_documentLoadingProgress += m_documentLoadingStep;
-                            parent->slotGotProgressInfo(QString(), (int) m_documentLoadingProgress);
-                            //qApp->processEvents();
-                        }
-                        QString prodId = e.attribute("id");
-                        if (!e.isNull() && prodId != "black" && !prodId.startsWith("slowmotion")/*&& prodId.toInt() > 0*/) {
-                            // addClip(e, prodId, false);
-                            kDebug() << "// PROD: " << prodId;
-                        }
-                    }
 
                     for (int i = 0; i < infomax; i++) {
                         e = infoproducers.item(i).cloneNode().toElement();
@@ -137,7 +125,17 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
                         QString prodId = e.attribute("id");
                         if (!e.isNull() && prodId != "black" && !prodId.startsWith("slowmotion")) {
                             e.setTagName("producer");
-                            addClipInfo(e, prodId);
+                            // Get MLT's original producer properties
+
+                            for (int j = 0; j < max; j++) {
+                                QDomElement o = producers.item(j).cloneNode().toElement();
+                                QString origId = o.attribute("id").section('_', 0, 0);
+                                if (origId == prodId) {
+                                    orig = o;
+                                    break;
+                                }
+                            }
+                            addClipInfo(e, orig, prodId);
                             kDebug() << "// NLIVE PROD: " << prodId;
                         }
                     }
@@ -1273,7 +1271,7 @@ QString KdenliveDoc::searchFileRecursively(const QDir &dir, const QString &match
     return foundFileName;
 }
 
-void KdenliveDoc::addClipInfo(QDomElement elem, QString clipId) {
+void KdenliveDoc::addClipInfo(QDomElement elem, QDomElement orig, QString clipId) {
     DocClipBase *clip = m_clipManager->getClipById(clipId);
     if (clip == NULL) {
         addClip(elem, clipId, false);
@@ -1290,6 +1288,21 @@ void KdenliveDoc::addClipInfo(QDomElement elem, QString clipId) {
         clip->setProperties(properties);
         emit addProjectClip(clip, false);
     }
+    if (orig != QDomElement()) {
+        QMap<QString, QString> meta;
+        QDomNode m = orig.firstChild();
+        while (!m.isNull()) {
+            QString name = m.toElement().attribute("name");
+            if (name.startsWith("meta.attr")) {
+                meta.insert(name.section('.', 2, 3), m.firstChild().nodeValue());
+            }
+            m = m.nextSibling();
+        }
+        if (!meta.isEmpty()) {
+            clip = m_clipManager->getClipById(clipId);
+            if (clip) clip->setMetadata(meta);
+        }
+    }
 }
 
 void KdenliveDoc::addFolder(const QString foldername, const QString &clipId, bool edit) {
index e5bfbbdc968524bf452fd00bd8a50211808c8034..45d0aae65a65bc0db07d099f2bbaad00a6a19f34 100644 (file)
@@ -69,7 +69,7 @@ Q_OBJECT public:
     QDomElement guidesXml() const;
     ClipManager *clipManager();
     void addClip(QDomElement elem, QString clipId, bool createClipItem = true);
-    void addClipInfo(QDomElement elem, QString clipId);
+    void addClipInfo(QDomElement elem, QDomElement orig, QString clipId);
     void addFolder(const QString foldername, const QString &clipId, bool edit);
     void deleteFolder(const QString foldername, const QString &clipId);
     void slotAddClipFile(const KUrl url, const QString group, const QString &groupId = QString());