const int CLIPOK = 1;
const int CLIPPLACEHOLDER = 2;
-DocumentChecker::DocumentChecker(QDomDocument doc, QWidget * parent) :
+DocumentChecker::DocumentChecker(QDomNodeList producers, QDomNodeList infoproducers, QList <QDomElement> missingClips, QDomDocument doc, QWidget * parent) :
QDialog(parent), m_doc(doc)
{
setFont(KGlobalSettings::toolBarFont());
m_view.setupUi(this);
-
- QDomNodeList producers = m_doc.elementsByTagName("producer");
- QDomNodeList infoproducers = m_doc.elementsByTagName("kdenlive_producer");
-
- int clipType;
QDomElement e;
- QString id;
- QString resource;
- QList <QDomElement> missingClips;
- for (int i = 0; i < infoproducers.count(); i++) {
- e = infoproducers.item(i).toElement();
- clipType = e.attribute("type").toInt();
- if (clipType == TEXT) continue;
- id = e.attribute("id");
- resource = e.attribute("resource");
- if (clipType == SLIDESHOW) resource = KUrl(resource).directory();
- if (!KIO::NetAccess::exists(KUrl(resource), KIO::NetAccess::SourceSide, 0)) {
- // Missing clip found
- missingClips.append(e);
- }
- }
- if (missingClips.isEmpty()) QTimer::singleShot(0, this, SLOT(accept()));
m_view.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
for (int i = 0; i < missingClips.count(); i++) {
e = missingClips.at(i).toElement();
QString newpath = KFileDialog::getExistingDirectory(KUrl("kfiledialog:///clipfolder"), kapp->activeWindow(), i18n("Clips folder"));
if (newpath.isEmpty()) return;
int ix = 0;
+ m_view.recursiveSearch->setEnabled(false);
QTreeWidgetItem *child = m_view.treeWidget->topLevelItem(ix);
while (child && child->data(0, statusRole).toInt() == CLIPMISSING) {
QString clipPath = searchFileRecursively(QDir(newpath), child->data(0, sizeRole).toString(), child->data(0, hashRole).toString());
ix++;
child = m_view.treeWidget->topLevelItem(ix);
}
+ m_view.recursiveSearch->setEnabled(true);
checkStatus();
}
return file.fileName();
}
}
- kDebug() << filesAndDirs.at(i) << file.size() << fileHash.toHex();
+ //kDebug() << filesAndDirs.at(i) << file.size() << fileHash.toHex();
}
filesAndDirs = dir.entryList(QDir::Dirs | QDir::Readable | QDir::Executable | QDir::NoDotAndDotDot);
for (int i = 0; i < filesAndDirs.size() && foundFileName.isEmpty(); i++) {
#include <KUrl>
#include <QDir>
-#include <QPushButton>
#include <QDomElement>
Q_OBJECT
public:
- explicit DocumentChecker(QDomDocument doc, QWidget * parent = 0);
+ explicit DocumentChecker(QDomNodeList producers, QDomNodeList infoproducers, QList <QDomElement> missingClips, QDomDocument doc, QWidget * parent = 0);
~DocumentChecker();
- KUrl::List importFiles();
private slots:
virtual void accept();
void slotPlaceholders();
void slotDeleteSelected();
-protected:
- //void wheelEvent(QWheelEvent * event);
-
private:
Ui::MissingClips_UI m_view;
QDomDocument m_doc;
QString searchFileRecursively(const QDir &dir, const QString &matchSize, const QString &matchHash) const;
void checkStatus();
-signals:
- //void updateThumb();
};
}
westley.removeChild(tracksinfo);
}
- if (checkDocumentClips() == false) m_abortLoading = true;
QDomNodeList producers = m_document.elementsByTagName("producer");
QDomNodeList infoproducers = m_document.elementsByTagName("kdenlive_producer");
+ if (checkDocumentClips(producers, infoproducers) == false) m_abortLoading = true;
const int max = producers.count();
const int infomax = infoproducers.count();
return m_projectFolder.path() + "/ladspa/" + counter + ".ladspa";
}
-bool KdenliveDoc::checkDocumentClips()
+bool KdenliveDoc::checkDocumentClips(QDomNodeList producers, QDomNodeList infoproducers)
{
- DocumentChecker d(m_document);
+ int clipType;
+ QDomElement e;
+ QString id;
+ QString resource;
+ QList <QDomElement> missingClips;
+ for (int i = 0; i < infoproducers.count(); i++) {
+ e = infoproducers.item(i).toElement();
+ clipType = e.attribute("type").toInt();
+ if (clipType == TEXT) continue;
+ id = e.attribute("id");
+ resource = e.attribute("resource");
+ if (clipType == SLIDESHOW) resource = KUrl(resource).directory();
+ if (!KIO::NetAccess::exists(KUrl(resource), KIO::NetAccess::SourceSide, 0)) {
+ // Missing clip found
+ missingClips.append(e);
+ }
+ }
+ if (missingClips.isEmpty()) return true;
+ DocumentChecker d(producers, infoproducers, missingClips, m_document);
return (d.exec() == QDialog::Accepted);
}
void setNewClipResource(const QString &id, const QString &path);
QString searchFileRecursively(const QDir &dir, const QString &matchSize, const QString &matchHash) const;
void moveProjectData(KUrl url);
- bool checkDocumentClips();
+ bool checkDocumentClips(QDomNodeList producers, QDomNodeList infoproducers);
public slots:
void slotCreateTextClip(QString group, const QString &groupId);
connect(m_projectMonitor->render, SIGNAL(replyGetImage(const QString &, const QPixmap &)), m_projectList, SLOT(slotReplyGetImage(const QString &, const QPixmap &)));
connect(m_projectMonitor->render, SIGNAL(replyGetFileProperties(const QString &, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &, bool)), m_projectList, SLOT(slotReplyGetFileProperties(const QString &, Mlt::Producer*, const QMap < QString, QString > &, const QMap < QString, QString > &, bool)));
- connect(m_projectMonitor->render, SIGNAL(removeInvalidClip(const QString &)), m_projectList, SLOT(slotRemoveInvalidClip(const QString &)));
+ connect(m_projectMonitor->render, SIGNAL(removeInvalidClip(const QString &, bool)), m_projectList, SLOT(slotRemoveInvalidClip(const QString &, bool)));
connect(m_clipMonitor, SIGNAL(refreshClipThumbnail(const QString &)), m_projectList, SLOT(slotRefreshClipThumbnail(const QString &)));
layout->addWidget(m_toolbar);
layout->addWidget(m_listView);
setLayout(layout);
-
+
connect(m_listView, SIGNAL(itemSelectionChanged()), this, SLOT(slotClipSelected()));
m_doc->slotAddClipList(list, group, groupId);
}
-void ProjectList::slotRemoveInvalidClip(const QString &id)
+void ProjectList::slotRemoveInvalidClip(const QString &id, bool replace)
{
ProjectItem *item = getItemById(id);
if (item) {
const QString path = item->referencedClip()->fileURL().path();
- if (!path.isEmpty()) KMessageBox::sorry(this, i18n("Clip <b>%1</b><br>is invalid, will be removed from project.", path));
+ if (!path.isEmpty()) {
+ if (replace) KMessageBox::sorry(this, i18n("Clip <b>%1</b><br>is invalid, will be removed from project.", path));
+ else {
+ if (KMessageBox::questionYesNo(this, i18n("Clip <b>%1</b><br>is missing or invalid. Remove it from project?", path), i18n("Invalid clip")) == KMessageBox::Yes) replace = true;
+ }
+ }
QList <QString> ids;
ids << id;
- m_doc->deleteProjectClip(ids);
+ if (replace) m_doc->deleteProjectClip(ids);
}
if (!m_infoQueue.isEmpty()) QTimer::singleShot(300, this, SLOT(slotProcessNextClipInQueue()));
else m_listView->setEnabled(true);
void slotUpdateClip(const QString &id);
void slotRefreshClipThumbnail(const QString &clipId, bool update = true);
void slotRefreshClipThumbnail(ProjectItem *item, bool update = true);
- void slotRemoveInvalidClip(const QString &id);
+ void slotRemoveInvalidClip(const QString &id, bool replace);
void slotSelectClip(const QString &ix);
void slotRemoveClip();
void slotAddClip(const QList <QUrl> givenList = QList <QUrl> (), QString group = QString());
void slotOpenClip();
void slotEditClip();
void slotReloadClip();
+ void slotAddColorClip();
private:
ProjectListView *m_listView;
private slots:
void slotClipSelected();
- void slotAddColorClip();
void slotAddSlideshowClip();
void slotAddTitleClip();
void slotContextMenu(const QPoint &pos, QTreeWidgetItem *);
if (producer == NULL || producer->is_blank() || !producer->is_valid()) {
kDebug() << " / / / / / / / / ERROR / / / / // CANNOT LOAD PRODUCER: ";
- emit removeInvalidClip(clipId);
+ emit removeInvalidClip(clipId, replaceProducer);
delete producer;
return;
}
blockSignals(true);
char *tmp = decodedString(playlist);
m_mltProducer = new Mlt::Producer(*m_mltProfile, "westley-xml", tmp);
- delete[] tmp;
if (!m_mltProducer || !m_mltProducer->is_valid()) {
kDebug() << " WARNING - - - - -INVALID PLAYLIST: " << tmp;
+ m_mltProducer = m_blackClip->cut(0, 50);
}
+ delete[] tmp;
+
m_mltProducer->optimise();
/*if (KdenliveSettings::osdtimecode()) {
void durationChanged(int);
void rendererPosition(int);
void rendererStopped(int);
- void removeInvalidClip(const QString &);
+ void removeInvalidClip(const QString &, bool replaceProducer);
void refreshDocumentProducers();
public slots: // Public slots