X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Ftrackview.cpp;h=31de534abcdc6209c72f20bfb4344ec20083a628;hb=6a95ea70e8434b1ea36d910cec2d958aa92e73c1;hp=a1783fc5ddc95b729d66fb8d06662ba15151cf31;hpb=a5e5f318042f320df07c8a0001b769ae1ae79fa1;p=kdenlive diff --git a/src/trackview.cpp b/src/trackview.cpp index a1783fc5..31de534a 100644 --- a/src/trackview.cpp +++ b/src/trackview.cpp @@ -271,7 +271,7 @@ void TrackView::parseDocument(QDomDocument doc) m_doc->switchTrackAudio(i - 1, true); } - trackduration = slotAddProjectTrack(pos, p, m_doc->isTrackLocked(i - 1)); + trackduration = slotAddProjectTrack(pos, p, m_doc->isTrackLocked(i - 1), producers); pos--; //kDebug() << " PRO DUR: " << trackduration << ", TRACK DUR: " << duration; if (trackduration > duration) duration = trackduration; @@ -591,7 +591,7 @@ void TrackView::adjustTrackHeaders() } } -int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked) +int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked, QDomNodeList producers) { // parse track int position = 0; @@ -635,18 +635,37 @@ int TrackView::slotAddProjectTrack(int ix, QDomElement xml, bool locked) QDomDocument doc; QDomElement producerXml = doc.createElement("producer"); doc.appendChild(producerXml); - producerXml.setAttribute("colour", "0xff0000ff"); - producerXml.setAttribute("mlt_service", "colour"); - producerXml.setAttribute("length", "15000"); - producerXml.setAttribute("name", "INVALID"); - producerXml.setAttribute("type", COLOR); - producerXml.setAttribute("id", id); - clip = new DocClipBase(m_doc->clipManager(), doc.documentElement(), id); - xml.insertBefore(producerXml, QDomNode()); - nodeindex++; - m_doc->clipManager()->addClip(clip); - - m_documentErrors.append(i18n("Broken clip producer %1", id) + '\n'); + bool foundMltProd = false; + for (int i = 0; i < producers.count(); i++) { + QDomElement prod = producers.at(i).toElement(); + if (prod.attribute("id") == id) { + QString service = EffectsList::property(prod, "mlt_service"); + QString type = EffectsList::property(prod, "mlt_type"); + QString resource = EffectsList::property(prod, "resource"); + QString length = EffectsList::property(prod, "length"); + producerXml.setAttribute("mlt_service", service); + producerXml.setAttribute("mlt_type", type); + producerXml.setAttribute("resource", resource); + producerXml.setAttribute("duration", length); + if (service == "colour") producerXml.setAttribute("type", COLOR); + else if (service == "qimage" || service == "pixbuf") producerXml.setAttribute("type", IMAGE); + else if (service == "kdenlivetitle") producerXml.setAttribute("type", TEXT); + else producerXml.setAttribute("type", AV); + clip = new DocClipBase(m_doc->clipManager(), doc.documentElement(), id); + m_doc->clipManager()->addClip(clip); + m_documentErrors.append(i18n("Broken clip producer %1, recreated base clip: %2", id, resource) + '\n'); + foundMltProd = true; + break; + } + } + if (!foundMltProd) { + // Cannot recover, replace with blank + int duration = elem.attribute("out").toInt() - elem.attribute("in").toInt(); + elem.setAttribute("length", duration); + elem.setTagName("blank"); + m_documentErrors.append(i18n("Broken clip producer %1, removed from project", id) + '\n'); + } + } else { // Found correct producer m_documentErrors.append(i18n("Replaced wrong clip producer %1 with %2", id, clip->getId()) + '\n');