]> git.sesse.net Git - kdenlive/blobdiff - src/clipmanager.cpp
Fix freeze on reloading a missing clip, don't reload twice missing clips that were...
[kdenlive] / src / clipmanager.cpp
index dcd935a2de4650b97b6ef9d5a82be31e10cce060..ed7cbb0f403b6c5f4593b59232e3238718ba2b26 100644 (file)
@@ -54,7 +54,9 @@ ClipManager::ClipManager(KdenliveDoc *doc) :
     m_modifiedTimer.setInterval(1500);
     connect(&m_fileWatcher, SIGNAL(dirty(const QString &)), this, SLOT(slotClipModified(const QString &)));
     connect(&m_fileWatcher, SIGNAL(deleted(const QString &)), this, SLOT(slotClipMissing(const QString &)));
-    connect(&m_fileWatcher, SIGNAL(created(const QString &)), this, SLOT(slotClipAvailable(const QString &)));
+
+    // Seems like a dirty signal is emitted anyways when a watched file is created, so don't react twice.
+    //connect(&m_fileWatcher, SIGNAL(created(const QString &)), this, SLOT(slotClipAvailable(const QString &)));
     connect(&m_modifiedTimer, SIGNAL(timeout()), this, SLOT(slotProcessModifiedClips()));
 
 #if KDE_IS_VERSION(4,5,0)
@@ -282,6 +284,8 @@ void ClipManager::slotGetAudioThumbs()
             kDebug() << "++++++++  INVALID CLIP: " << url.path();
             continue;
         }
+        
+        producer.set("video_index", "-1");
 
         if (KdenliveSettings::normaliseaudiothumbs()) {
             Mlt::Filter m_convert(prof, "volume");
@@ -303,7 +307,7 @@ void ClipManager::slotGetAudioThumbs()
             producer.seek(z);
             mlt_frame = producer.get_frame();
             if (mlt_frame && mlt_frame->is_valid()) {
-                int samples = mlt_sample_calculator(framesPerSecond, frequency, mlt_frame_get_position(mlt_frame->get_frame()));
+                int samples = mlt_sample_calculator(framesPerSecond, frequency, mlt_frame->get_position());
                 qint16* pcm = static_cast<qint16*>(mlt_frame->get_audio(audioFormat, frequency, channels, samples));
                 for (int c = 0; c < channels; c++) {
                     QByteArray audioArray;
@@ -460,12 +464,11 @@ void ClipManager::resetProducersList(const QList <Mlt::Producer *> prods, bool d
     emit checkAllClips(displayRatioChanged, fpsChanged, brokenClips);
 }
 
-void ClipManager::slotAddClipList(const KUrl::List urls, const QString &group, const QString &groupId)
+void ClipManager::slotAddClipList(const KUrl::List urls, const QString &group, const QString &groupId, const QString &comment)
 {
     QUndoCommand *addClips = new QUndoCommand();
-
     foreach(const KUrl & file, urls) {
-        if (KIO::NetAccess::exists(file, KIO::NetAccess::SourceSide, NULL)) {
+        if (QFile::exists(file.path())) {//KIO::NetAccess::exists(file, KIO::NetAccess::SourceSide, NULL)) {
             if (!getClipByResource(file.path()).empty()) {
                 if (KMessageBox::warningContinueCancel(kapp->activeWindow(), i18n("Clip <b>%1</b><br />already exists in project, what do you want to do?", file.path()), i18n("Clip already exists")) == KMessageBox::Cancel)
                     continue;
@@ -477,6 +480,7 @@ void ClipManager::slotAddClipList(const KUrl::List urls, const QString &group, c
             prod.setAttribute("resource", file.path());
             uint id = m_clipIdCounter++;
             prod.setAttribute("id", QString::number(id));
+            if (!comment.isEmpty()) prod.setAttribute("description", comment);
             if (!group.isEmpty()) {
                 prod.setAttribute("groupname", group);
                 prod.setAttribute("groupid", groupId);
@@ -529,6 +533,7 @@ void ClipManager::slotAddClipList(const KUrl::List urls, const QString &group, c
             }
             new AddClipCommand(m_doc, doc.documentElement(), QString::number(id), true, addClips);
         }
+        else kDebug()<<"// CANNOT READ FILE: "<<file;
     }
     if (addClips->childCount() > 0) {
         addClips->setText(i18np("Add clip", "Add clips", addClips->childCount()));
@@ -536,9 +541,9 @@ void ClipManager::slotAddClipList(const KUrl::List urls, const QString &group, c
     }
 }
 
-void ClipManager::slotAddClipFile(const KUrl &url, const QString &group, const QString &groupId)
+void ClipManager::slotAddClipFile(const KUrl &url, const QString &group, const QString &groupId, const QString &comment)
 {
-    slotAddClipList(KUrl::List(url), group, groupId);
+    slotAddClipList(KUrl::List(url), group, groupId, comment);
 }
 
 void ClipManager::slotAddXmlClipFile(const QString &name, const QDomElement &xml, const QString &group, const QString &groupId)
@@ -579,29 +584,18 @@ void ClipManager::slotAddColorClipFile(const QString &name, const QString &color
     m_doc->commandStack()->push(command);
 }
 
-void ClipManager::slotAddSlideshowClipFile(const QString &name, const QString &path, int count, const QString &duration,
-        const bool loop, const bool crop, const bool fade,
-        const QString &luma_duration, const QString &luma_file, const int softness,
-        const QString &animation, const QString &group, const QString &groupId)
+void ClipManager::slotAddSlideshowClipFile(QMap <QString, QString> properties, const QString &group, const QString &groupId)
 {
     QDomDocument doc;
     QDomElement prod = doc.createElement("producer");
     doc.appendChild(prod);
-    prod.setAttribute("resource", path);
+    QMap<QString, QString>::const_iterator i = properties.constBegin();
+    while (i != properties.constEnd()) {
+        prod.setAttribute(i.key(), i.value());
+        ++i;
+    }
     prod.setAttribute("type", (int) SLIDESHOW);
     uint id = m_clipIdCounter++;
-    prod.setAttribute("id", QString::number(id));
-    prod.setAttribute("in", "0");
-    prod.setAttribute("out", m_doc->getFramePos(duration) * count);
-    prod.setAttribute("ttl", m_doc->getFramePos(duration));
-    prod.setAttribute("luma_duration", m_doc->getFramePos(luma_duration));
-    prod.setAttribute("name", name);
-    prod.setAttribute("loop", loop);
-    prod.setAttribute("crop", crop);
-    prod.setAttribute("fade", fade);
-    prod.setAttribute("softness", QString::number(softness));
-    prod.setAttribute("luma_file", luma_file);
-    prod.setAttribute("animation", animation);
     if (!group.isEmpty()) {
         prod.setAttribute("groupname", group);
         prod.setAttribute("groupid", groupId);