X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fdocumentvalidator.cpp;h=a0775b5c68636589f152f2a0b594e8300c8a6463;hb=c71d02442c223dcf171868ee0494b9c8e1253418;hp=898bd456e5784780f42bad7021d93e9d934ac761;hpb=a01579df948c769c9c565e1e819a03100f5da88f;p=kdenlive diff --git a/src/documentvalidator.cpp b/src/documentvalidator.cpp index 898bd456..a0775b5c 100644 --- a/src/documentvalidator.cpp +++ b/src/documentvalidator.cpp @@ -60,7 +60,7 @@ bool DocumentValidator::validate(const double currentVersion) QString rootDir = mlt.attribute("root"); if (rootDir == "$CURRENTPATH") { - // The document was extracted from a Kdenlive archived project, fix root directory$ + // The document was extracted from a Kdenlive archived project, fix root directory QString playlist = m_doc.toString(); playlist.replace("$CURRENTPATH", m_url.directory(KUrl::IgnoreTrailingSlash)); m_doc.setContent(playlist); @@ -73,19 +73,19 @@ bool DocumentValidator::validate(const double currentVersion) if (mlt.hasAttribute("LC_NUMERIC")) { // Set locale for the document - QString newLocale = setlocale(LC_NUMERIC, mlt.attribute("LC_NUMERIC").toUtf8().constData()); + const QString newLocale = setlocale(LC_NUMERIC, mlt.attribute("LC_NUMERIC").toUtf8().constData()); documentLocale = QLocale(mlt.attribute("LC_NUMERIC")); // Make sure Qt locale and C++ locale have the same numeric separator, might not be the case // With some locales since C++ and Qt use a different database for locales char *separator = localeconv()->decimal_point; + if (newLocale.isEmpty()) { + // Requested locale not available, ask for install + KMessageBox::sorry(kapp->activeWindow(), i18n("The document was created in \"%1\" locale, which is not installed on your system. Please install that language pack. Until then, Kdenlive might not be able to correctly open the document.", mlt.attribute("LC_NUMERIC"))); + } + if (separator != documentLocale.decimalPoint()) { - if (newLocale.isEmpty()) { - // Requested locale not available, ask for install - KMessageBox::sorry(kapp->activeWindow(), i18n("The document was created in \"%1\" locale, which is not installed on your system. Please install that language pack. Until then, Kdenlive might not be able to correctly open the document.", mlt.attribute("LC_NUMERIC"))); - - } - else KMessageBox::sorry(kapp->activeWindow(), i18n("There is a locale conflict on your system. The document uses locale %1 which uses a \"%2\" as numeric separator (in system libraries) but Qt expects \"%3\". You might not be able to correctly open the project.", mlt.attribute("LC_NUMERIC"), separator, documentLocale.decimalPoint())); + KMessageBox::sorry(kapp->activeWindow(), i18n("There is a locale conflict on your system. The document uses locale %1 which uses a \"%2\" as numeric separator (in system libraries) but Qt expects \"%3\". You might not be able to correctly open the project.", mlt.attribute("LC_NUMERIC"), separator, documentLocale.decimalPoint())); kDebug()<<"------\n!!! system locale is not similar to Qt's locale... be prepared for bugs!!!\n------"; // HACK: There is a locale conflict, so set locale to at least have correct decimal point if (strncmp(separator, ".", 1) == 0) documentLocale = QLocale::c(); @@ -96,15 +96,27 @@ bool DocumentValidator::validate(const double currentVersion) documentLocale.setNumberOptions(QLocale::OmitGroupSeparator); 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"); + if (!mlt.hasAttribute("LC_NUMERIC")) { + setlocale(LC_NUMERIC, "C"); + } QLocale::setDefault(documentLocale); // locale conversion might need to be redone - initEffects::parseEffectFiles(); + initEffects::parseEffectFiles(setlocale(LC_NUMERIC, NULL)); } + bool ok; + double version = documentLocale.toDouble(kdenliveDoc.attribute("version"), &ok); + if (!ok) { + // Could not parse version number, there is probably a conflict in decimal separator + QLocale tempLocale = QLocale(mlt.attribute("LC_NUMERIC")); + version = tempLocale.toDouble(kdenliveDoc.attribute("version"), &ok); + if (!ok) version = kdenliveDoc.attribute("version").toDouble(&ok); + if (!ok) kDebug()<<"// CANNOT PARSE VERSION NUMBER, ERROR!"; + } + // Upgrade the document to the latest version - if (!upgrade(documentLocale.toDouble(kdenliveDoc.attribute("version")), currentVersion)) + if (!upgrade(version, currentVersion)) return false; /*