+void KdenliveDoc::addClip(QDomElement elem, QString clipId, bool createClipItem) {
+ const QString producerId = clipId.section('_', 0, 0);
+ int subtrack = clipId.section('_', 1, 1).toInt();
+ DocClipBase *clip = m_clipManager->getClipById(producerId);
+ if (clip == NULL) {
+ /*kDebug()<<"// CLIP "<<clipId<<" NOT OFUND in LIST, CREATING";
+ QDomDocument doc;
+ doc.appendChild(doc.importNode(elem, true));
+ kDebug() << "IMPORTED CLIP: \n" << doc.toString()<<"\n";*/
+ elem.setAttribute("id", producerId);
+ QString path = elem.attribute("resource");
+ QString extension;
+ if (elem.attribute("type").toInt() == SLIDESHOW) {
+ extension = KUrl(path).fileName();
+ path = KUrl(path).directory();
+ }
+ if (!QFile::exists(path) && elem.attribute("type").toInt() == TEXT) {
+ kDebug() << "// TITLE: " << elem.attribute("titlename") << " Preview file: " << elem.attribute("resource") << " DOES NOT EXIST";
+ QString titlename = elem.attribute("titlename");
+ QString titleresource;
+ if (titlename.isEmpty()) {
+ QStringList titleInfo = TitleWidget::getFreeTitleInfo(projectFolder());
+ titlename = titleInfo.at(0);
+ titleresource = titleInfo.at(1);
+ elem.setAttribute("titlename", titlename);
+ kDebug() << "// New title set to: " << titlename;
+ } else {
+ titleresource = TitleWidget::getTitleResourceFromName(projectFolder(), titlename);
+ }
+ QString titlepath = projectFolder().path() + "/titles/";
+ TitleWidget *dia_ui = new TitleWidget(KUrl(), titlepath, m_render, kapp->activeWindow());
+ QDomDocument doc;
+ doc.setContent(elem.attribute("xmldata"));
+ dia_ui->setXml(doc);
+ QImage pix = dia_ui->renderedPixmap();
+ pix.save(titleresource);
+ elem.setAttribute("resource", titleresource);
+ delete dia_ui;
+ } else if (!path.isEmpty() && !QFile::exists(path) && elem.attribute("type").toInt() != TEXT) {
+ kDebug() << "// FOUND MISSING CLIP: " << path << ", TYPE: " << elem.attribute("type").toInt();
+ const QString size = elem.attribute("file_size");
+ const QString hash = elem.attribute("file_hash");
+ QString newpath;
+ KMessageBox::ButtonCode action = KMessageBox::No;
+ if (!size.isEmpty() && !hash.isEmpty()) {
+ if (!m_searchFolder.isEmpty()) newpath = searchFileRecursively(m_searchFolder, size, hash);
+ else action = (KMessageBox::ButtonCode)KMessageBox::messageBox(kapp->activeWindow(), KMessageBox::WarningYesNo, i18n("Clip <b>%1</b><br>is invalid, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search automatically")), /*KGuiItem(i18n("Remove from project")), */KGuiItem(i18n("Keep as placeholder")));
+ } else {
+ if (elem.attribute("type").toInt() == SLIDESHOW) {
+ if (KMessageBox::messageBox(kapp->activeWindow(), KMessageBox::WarningYesNo, i18n("<qt>Clip <b>%1</b><br>is invalid or missing, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search manually")), /*KGuiItem(i18n("Remove from project")),*/ KGuiItem(i18n("Keep as placeholder"))) == KMessageBox::Yes)
+ newpath = KFileDialog::getExistingDirectory(KUrl("kfiledialog:///clipfolder"), kapp->activeWindow(), i18n("Looking for %1", path));
+ } else if (KMessageBox::messageBox(kapp->activeWindow(), KMessageBox::WarningYesNo, i18n("Clip <b>%1</b><br>is invalid or missing, what do you want to do?", path), i18n("File not found"), KGuiItem(i18n("Search manually")), /*KGuiItem(i18n("Remove from project")),*/ KGuiItem(i18n("Keep as placeholder"))) == KMessageBox::Yes)
+ newpath = KFileDialog::getOpenFileName(KUrl("kfiledialog:///clipfolder"), QString(), kapp->activeWindow(), i18n("Looking for %1", path));
+ }
+ if (action == KMessageBox::Yes) {
+ kDebug() << "// ASKED FOR SRCH CLIP: " << clipId;
+ m_searchFolder = KFileDialog::getExistingDirectory(KUrl("kfiledialog:///clipfolder"), kapp->activeWindow());
+ if (!m_searchFolder.isEmpty()) {
+ newpath = searchFileRecursively(QDir(m_searchFolder), size, hash);
+ }
+ }
+ if (!newpath.isEmpty()) {
+ if (elem.attribute("type").toInt() == SLIDESHOW) newpath.append('/' + extension);
+ elem.setAttribute("resource", newpath);
+ setNewClipResource(clipId, newpath);
+ setModified(true);
+ }
+ }
+ clip = new DocClipBase(m_clipManager, elem, producerId);
+ m_clipManager->addClip(clip);
+ }
+ if (createClipItem) {
+ emit addProjectClip(clip);
+ qApp->processEvents();
+ m_render->getFileProperties(clip->toXML(), clip->getId());
+ }
+}
+
+
+void KdenliveDoc::setNewClipResource(const QString &id, const QString &path) {
+ QDomNodeList prods = m_document.elementsByTagName("producer");
+ int maxprod = prods.count();
+ for (int i = 0; i < maxprod; i++) {
+ QDomNode m = prods.at(i);
+ QString prodId = m.toElement().attribute("id");
+ if (prodId == id || prodId.startsWith(id + "_")) {
+ QDomNodeList params = m.childNodes();
+ for (int j = 0; j < params.count(); j++) {
+ QDomElement e = params.item(j).toElement();
+ if (e.attribute("name") == "resource") {
+ e.firstChild().setNodeValue(path);
+ break;
+ }
+ }
+ }
+ }