Commit a9284e6b authored by Jean-Baptiste Mardelle's avatar Jean-Baptiste Mardelle
Browse files

* Set document as modified when changing project metadata:...

* Set document as modified when changing project metadata: http://kdenlive.org/mantis/view.php?id=2996
* Automatic recovery of corrupted files produced by Kdenlive 0.9.4
parent ff989e5b
......@@ -50,6 +50,7 @@
#include <QFile>
#include <QInputDialog>
#include <QDomImplementation>
#include <QTextBoundaryFinder>
#include <mlt++/Mlt.h>
......@@ -147,17 +148,48 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
int col;
QDomImplementation::setInvalidDataPolicy(QDomImplementation::DropInvalidChars);
success = m_document.setContent(&file, false, &errorMsg, &line, &col);
file.close();
KIO::NetAccess::removeTempFile(tmpFile);
file.close();
if (!success) {
// It is corrupted
if (KMessageBox::warningContinueCancel(parent, i18n("Cannot open the project file, error is:\n%1 (line %2, col %3)\nDo you want to open a backup file?", errorMsg, line, col), i18n("Error opening file"), KGuiItem(i18n("Open Backup"))) == KMessageBox::Continue) {
*openBackup = true;
}
//KMessageBox::error(parent, errorMsg);
int answer = KMessageBox::warningYesNoCancel (parent, i18n("Cannot open the project file, error is:\n%1 (line %2, col %3)\nDo you want to open a backup file?", errorMsg, line, col), i18n("Error opening file"), KGuiItem(i18n("Open Backup")), KGuiItem(i18n("Recover")));
if (answer == KMessageBox::Yes) {
*openBackup = true;
}
else if (answer == KMessageBox::No) {
// Try to recover broken file produced by Kdenlive 0.9.4
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
int correction = 0;
QString playlist = file.readAll();
while (!success && correction < 2) {
int errorPos = 0;
line--;
col = col - 2;
for (int j = 0; j < line && errorPos < playlist.length(); j++) {
errorPos = playlist.indexOf("\n", errorPos);
errorPos++;
}
errorPos += col;
if (errorPos >= playlist.length()) break;
playlist.remove(errorPos, 1);
line = 0;
col = 0;
success = m_document.setContent(playlist, false, &errorMsg, &line, &col);
correction++;
}
if (!success) {
KMessageBox::sorry(parent, i18n("Cannot recover this project file"));
}
else {
// Document was modified, ask for backup
QDomElement mlt = m_document.documentElement();
QDomElement info = mlt.firstChildElement("kdenlivedoc");
if (!info.isNull()) info.setAttribute("modified", 1);
}
}
}
}
else {
if (success) {
parent->slotGotProgressInfo(i18n("Validating"), 0);
qApp->processEvents();
DocumentValidator validator(m_document, url);
......@@ -311,6 +343,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup
}
}
}
KIO::NetAccess::removeTempFile(tmpFile);
}
}
......@@ -1820,6 +1853,7 @@ const QMap <QString, QString> KdenliveDoc::metadata() const
void KdenliveDoc::setMetadata(const QMap <QString, QString> meta)
{
setModified(true);
m_documentMetadata = meta;
}
......
......@@ -2408,7 +2408,7 @@ void MainWindow::slotEditProjectSettings()
m_activeDocument->setModified();
slotUpdateProxySettings();
}
m_activeDocument->setMetadata(w->metadata());
if (w->metadata() != m_activeDocument->metadata()) m_activeDocument->setMetadata(w->metadata());
}
delete w;
}
......
......@@ -615,7 +615,7 @@ const QMap <QString, QString> ProjectSettings::metadata() const
QString key = item->data(0, Qt::UserRole).toString();
if (key.isEmpty()) key = "meta.attr." + item->text(0).simplified() + ".markup";
QString value = item->text(1);
if (!key.contains(' ')) metadata.insert(key, value);
metadata.insert(key, value);
}
}
return metadata;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment