]> git.sesse.net Git - kdenlive/blobdiff - src/documentvalidator.cpp
Inform user when no render profile is available (usually because frame rate not matching)
[kdenlive] / src / documentvalidator.cpp
index 3722a0d929c822efec099ff51b03410c100ebd5b..1226a85c96b6adc13f97aa964e2fde1575891789 100644 (file)
@@ -69,7 +69,10 @@ bool DocumentValidator::validate(const double currentVersion)
     }
     
     documentLocale.setNumberOptions(QLocale::OmitGroupSeparator);
-    if (documentLocale != QLocale()) {
+    if (documentLocale.decimalPoint() != QLocale().decimalPoint()) {
+        // If loading an older MLT file without LC_NUMERIC, set locale to C which was previously the default
+        if (!mlt.hasAttribute("LC_NUMERIC")) setlocale(LC_NUMERIC, "C");
+
         QLocale::setDefault(documentLocale);
         // locale conversion might need to be redone
         initEffects::parseEffectFiles();
@@ -1051,10 +1054,16 @@ void DocumentValidator::updateEffects()
     }
 
     QDomNodeList effects = m_doc.elementsByTagName("filter");
-
-    for(int i = 0; i < effects.count(); ++i) {
+    int max = effects.count();
+    QStringList safeEffects;
+    for(int i = 0; i < max; ++i) {
         QDomElement effect = effects.at(i).toElement();
         QString effectId = EffectsList::property(effect, "kdenlive_id");
+        if (safeEffects.contains(effectId)) {
+            // Do not check the same effect twice if it is at the correct version
+            // (assume we don't have different versions of the same effect in a project file)
+            continue;
+        }
         QString effectTag = EffectsList::property(effect, "tag");
         QString effectVersionStr = EffectsList::property(effect, "version");
         double effectVersion = effectVersionStr.isNull() ? -1 : effectVersionStr.toDouble();
@@ -1100,7 +1109,7 @@ void DocumentValidator::updateEffects()
 
                     QString effectString = updateRules.call(QScriptValue(), QScriptValueList()  << serviceVersion << effectVersion << scriptDoc.toString()).toString();
 
-                    if (!effectString.isEmpty()) {
+                    if (!effectString.isEmpty() && !scriptEngine.hasUncaughtException()) {
                         scriptDoc.setContent(effectString);
                         QDomNode updatedEffect = effect.ownerDocument().importNode(scriptDoc.documentElement(), true);
                         effect.parentNode().replaceChild(updatedEffect, effect);
@@ -1109,7 +1118,19 @@ void DocumentValidator::updateEffects()
                 } else {
                     m_modified = updateEffectParameters(effect.childNodes(), &updateRules, serviceVersion, effectVersion);
                 }
+
+                // set version number since MLT won't change it (only initially set it)
+                QDomElement versionElem = effect.firstChildElement("version");
+                if (EffectsList::property(effect, "version").isNull()) {
+                    versionElem = effect.ownerDocument().createTextNode(QLocale().toString(serviceVersion)).toElement();
+                    versionElem.setTagName("property");
+                    versionElem.setAttribute("name", "version");
+                    effect.appendChild(versionElem);
+                } else {
+                    EffectsList::setProperty(effect, "version", QLocale().toString(serviceVersion));
+                }
             }
+            else safeEffects.append(effectId);
         }
     }
 }