X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fkdenlivedoc.cpp;h=26dc37ad594881ae7e9343b1f77c78c8dfd18c5d;hb=05f4fad9a19434399f43ff76e06d1e1a5f74c0f6;hp=7a38a203175c75c5a8a758010bc8c5543840d443;hpb=811f9353acff73a0006562b7814d3b673f420763;p=kdenlive diff --git a/src/kdenlivedoc.cpp b/src/kdenlivedoc.cpp index 7a38a203..26dc37ad 100644 --- a/src/kdenlivedoc.cpp +++ b/src/kdenlivedoc.cpp @@ -58,7 +58,7 @@ const double DOCUMENTVERSION = 0.88; -KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, QString profileName, QMap properties, const QPoint &tracks, Render *render, KTextEdit *notes, bool *openBackup, MainWindow *parent, KProgressDialog *progressDialog) : +KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup *undoGroup, QString profileName, QMap properties, QMap metadata, const QPoint &tracks, Render *render, KTextEdit *notes, bool *openBackup, MainWindow *parent, KProgressDialog *progressDialog) : QObject(parent), m_autosave(NULL), m_url(url), @@ -111,6 +111,13 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup i.next(); m_documentProperties[i.key()] = i.value(); } + + // Load metadata + QMapIterator j(metadata); + while (j.hasNext()) { + j.next(); + m_documentMetadata[j.key()] = j.value(); + } if (QLocale().decimalPoint() != QLocale::system().decimalPoint()) { setlocale(LC_NUMERIC, ""); @@ -136,8 +143,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup else { QFile file(tmpFile); QString errorMsg; - QDomImplementation impl; - impl.setInvalidDataPolicy(QDomImplementation::DropInvalidChars); + QDomImplementation::setInvalidDataPolicy(QDomImplementation::DropInvalidChars); success = m_document.setContent(&file, false, &errorMsg); file.close(); KIO::NetAccess::removeTempFile(tmpFile); @@ -152,7 +158,7 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup else { parent->slotGotProgressInfo(i18n("Validating"), 0); qApp->processEvents(); - DocumentValidator validator(m_document); + DocumentValidator validator(m_document, url); success = validator.isProject(); if (!success) { // It is not a project file @@ -286,6 +292,10 @@ KdenliveDoc::KdenliveDoc(const KUrl &url, const KUrl &projectFolder, QUndoGroup QDomNamedNodeMap props = docproperties.attributes(); for (int i = 0; i < props.count(); i++) m_documentProperties.insert(props.item(i).nodeName(), props.item(i).nodeValue()); + docproperties = infoXml.firstChildElement("documentmetadata"); + props = docproperties.attributes(); + for (int i = 0; i < props.count(); i++) + m_documentMetadata.insert(props.item(i).nodeName(), props.item(i).nodeValue()); if (validator.isModified()) setModified(true); kDebug() << "Reading file: " << url.path() << ", found clips: " << producers.count(); @@ -644,6 +654,14 @@ QDomDocument KdenliveDoc::xmlSceneList(const QString &scene, const QStringList & } docproperties.setAttribute("position", m_render->seekPosition().frames(m_fps)); addedXml.appendChild(docproperties); + + QDomElement docmetadata = sceneList.createElement("documentmetadata"); + QMapIterator j(m_documentMetadata); + while (j.hasNext()) { + j.next(); + docmetadata.setAttribute(j.key(), j.value()); + } + addedXml.appendChild(docmetadata); QDomElement docnotes = sceneList.createElement("documentnotes"); QDomText value = sceneList.createTextNode(m_notesWidget->toHtml()); @@ -694,7 +712,7 @@ QDomDocument KdenliveDoc::xmlSceneList(const QString &scene, const QStringList & QDomElement e; QList list = m_clipManager->documentClipList(); for (int i = 0; i < list.count(); i++) { - e = list.at(i)->toXML(); + e = list.at(i)->toXML(true); e.setTagName("kdenlive_producer"); addedXml.appendChild(sceneList.importNode(e, true)); QList < CommentedTime > marks = list.at(i)->commentedSnapMarkers(); @@ -1034,8 +1052,10 @@ bool KdenliveDoc::addClip(QDomElement elem, QString clipId, bool createClipItem) extension = KUrl(path).fileName(); path = KUrl(path).directory(); } - - if (path.isEmpty() == false && QFile::exists(path) == false && elem.attribute("type").toInt() != TEXT && !elem.hasAttribute("placeholder")) { + if (elem.hasAttribute("_missingsource")) { + // Clip has proxy but missing original source + } + else if (path.isEmpty() == false && QFile::exists(path) == false && elem.attribute("type").toInt() != TEXT && !elem.hasAttribute("placeholder")) { kDebug() << "// FOUND MISSING CLIP: " << path << ", TYPE: " << elem.attribute("type").toInt(); const QString size = elem.attribute("file_size"); const QString hash = elem.attribute("file_hash"); @@ -1201,9 +1221,9 @@ void KdenliveDoc::slotAddClipList(const KUrl::List urls, const QString &group, c } -void KdenliveDoc::slotAddClipFile(const KUrl &url, const QString &group, const QString &groupId) +void KdenliveDoc::slotAddClipFile(const KUrl &url, const QString &group, const QString &groupId, const QString &comment) { - m_clipManager->slotAddClipFile(url, group, groupId); + m_clipManager->slotAddClipFile(url, group, groupId, comment); emit selectLastAddedClip(QString::number(m_clipManager->lastClipId())); setModified(true); } @@ -1762,5 +1782,15 @@ void KdenliveDoc::cleanupBackupFiles() } } +const QMap KdenliveDoc::metadata() const +{ + return m_documentMetadata; +} + +void KdenliveDoc::setMetadata(const QMap meta) +{ + m_documentMetadata = meta; +} + #include "kdenlivedoc.moc"