Hi all, I have been working on the video editing server project for
Wikimedia Commons, and it is coming along nicely:
https://wikimedia.meltvideo.com/

In the course of testing the handling of the luma wipe files when opening a
project XML downloaded from the web app, I noticed the DocumentChecker was
not handling missing luma files correctly. It was looking for a "luma"
property on the MLT luma transition whereas this transition uses and has
always used a "resource" property for this. Here is a patch I came up with
to correct this.

-- 
+-DRD-+
From 618fac500fe981c3ffd0bef412e8633bb1524842 Mon Sep 17 00:00:00 2001
From: Dan Dennedy <[email protected]>
Date: Sun, 8 Feb 2015 13:04:02 -0800
Subject: [PATCH] Fix checking/replacing luma transition resource (wipe).

---
 src/doc/documentchecker.cpp             | 20 +++++++++++---------
 src/project/dialogs/projectsettings.cpp |  2 +-
 src/timeline/customtrackview.cpp        |  5 ++---
 3 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/src/doc/documentchecker.cpp b/src/doc/documentchecker.cpp
index eeb49fe..03beaf5 100644
--- a/src/doc/documentchecker.cpp
+++ b/src/doc/documentchecker.cpp
@@ -171,8 +171,9 @@ bool DocumentChecker::hasErrorInClips()
     QDomNodeList trans = m_doc.elementsByTagName("transition");
     max = trans.count();
     for (int i = 0; i < max; ++i) {
-        QString luma = getProperty(trans.at(i).toElement(), "luma");
-        if (!luma.isEmpty() && !filesToCheck.contains(luma))
+        QString service = getProperty(trans.at(i).toElement(), "mlt_service");
+        QString luma = getProperty(trans.at(i).toElement(), "resource");
+        if (service == "luma" && !luma.isEmpty() && !filesToCheck.contains(luma))
             filesToCheck.append(luma);
     }
     // Check existence of luma files
@@ -735,17 +736,18 @@ void DocumentChecker::fixClipItem(QTreeWidgetItem *child, QDomNodeList producers
         }
     } else if (child->data(0, statusRole).toInt() == LUMAOK) {
         for (int i = 0; i < trans.count(); ++i) {
-            QString luma = getProperty(trans.at(i).toElement(), "luma");
-            if (!luma.isEmpty() && luma == child->data(0, idRole).toString()) {
-                setProperty(trans.at(i).toElement(), "luma", child->text(1));
+            QString service = getProperty(trans.at(i).toElement(), "mlt_service");
+            QString luma = getProperty(trans.at(i).toElement(), "resource");
+            if (service == "luma" && !luma.isEmpty() && luma == child->data(0, idRole).toString()) {
+                setProperty(trans.at(i).toElement(), "resource", child->text(1));
                 kDebug() << "replace with; " << child->text(1);
             }
         }
     } else if (child->data(0, statusRole).toInt() == LUMAMISSING) {
         for (int i = 0; i < trans.count(); ++i) {
-            QString luma = getProperty(trans.at(i).toElement(), "luma");
+            QString luma = getProperty(trans.at(i).toElement(), "resource");
             if (!luma.isEmpty() && luma == child->data(0, idRole).toString()) {
-                setProperty(trans.at(i).toElement(), "luma", QString());
+                setProperty(trans.at(i).toElement(), "resource", QString());
             }
         }
     }
@@ -860,8 +862,8 @@ void DocumentChecker::slotDeleteSelected()
         foreach (const QString &lumaPath, deletedLumas) {
             for (int i = 0; i < transitions.count(); ++i) {
                 e = transitions.item(i).toElement();
-                QString resource = EffectsList::property(e, "luma");
-                if (resource == lumaPath) EffectsList::removeProperty(e, "luma");
+                QString resource = EffectsList::property(e, "resource");
+                if (resource == lumaPath) EffectsList::removeProperty(e, "resource");
             }
         }
     }
diff --git a/src/project/dialogs/projectsettings.cpp b/src/project/dialogs/projectsettings.cpp
index 2839d5c..1bfbb07 100644
--- a/src/project/dialogs/projectsettings.cpp
+++ b/src/project/dialogs/projectsettings.cpp
@@ -525,7 +525,7 @@ QStringList ProjectSettings::extractPlaylistUrls(const QString &path)
     files = doc.elementsByTagName("transition");
     for (int i = 0; i < files.count(); ++i) {
         QDomElement e = files.at(i).toElement();
-        QString url = EffectsList::property(e, "luma");
+        QString url = EffectsList::property(e, "resource");
         if (!url.isEmpty()) {
             if (!url.startsWith('/')) url.prepend(root);
             urls << url;
diff --git a/src/timeline/customtrackview.cpp b/src/timeline/customtrackview.cpp
index 2d37ebd..fba4cfa 100644
--- a/src/timeline/customtrackview.cpp
+++ b/src/timeline/customtrackview.cpp
@@ -7240,9 +7240,8 @@ QStringList CustomTrackView::extractTransitionsLumas()
         if (itemList.at(i)->type() == TransitionWidget) {
             transitionitem = static_cast <Transition*>(itemList.at(i));
             transitionXml = transitionitem->toXML();
-            // luma files in transitions can be in "resource" or "luma" property
-            QString luma = EffectsList::parameter(transitionXml, "luma");
-            if (luma.isEmpty()) luma = EffectsList::parameter(transitionXml, "resource");
+            // luma files in transitions are in "resource" property
+            QString luma = EffectsList::parameter(transitionXml, "resource");
             if (!luma.isEmpty()) urls << KUrl(luma).path();
         }
     }
-- 
1.9.1

_______________________________________________
kdenlive mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/kdenlive

Reply via email to