]> git.sesse.net Git - kdenlive/blobdiff - src/clipmanager.cpp
Fix thumbnails loading (was loading several times the same ones), improve feedback
[kdenlive] / src / clipmanager.cpp
index 4c7db5873a2d4e05f9e2ac422abeb005ab01699a..2f223465292d9271d860cea852222987b786adff 100644 (file)
@@ -140,19 +140,26 @@ void ClipManager::stopThumbs(const QString &id)
 void ClipManager::slotGetThumbs()
 {
     QMap<QString, int>::iterator i = m_requestedThumbs.begin();
+    int max;
+    int done = 0;
     while (i != m_requestedThumbs.end() && !m_abortThumb) {
         QString producerId = i.key();
         m_thumbsMutex.lock();
         QList<int> values = m_requestedThumbs.values(producerId);
-        i = m_requestedThumbs.erase(i);
+        m_requestedThumbs.remove(producerId);
+        i = m_requestedThumbs.begin();
         m_thumbsMutex.unlock();
         qSort(values);
         DocClipBase *clip = getClipById(producerId);
         if (!clip) continue;
+        max = m_requestedThumbs.size() + values.count();
         while (!values.isEmpty() && clip->thumbProducer() && !m_abortThumb) {
             clip->thumbProducer()->getThumb(values.takeFirst());
+            done++;
+            if (max > 3) emit displayMessage(i18n("Loading thumbnails"), 100 * done / max);
         }
     }
+    emit displayMessage(QString(), -1);
 }
 
 void ClipManager::checkAudioThumbs()
@@ -325,15 +332,24 @@ void ClipManager::resetProducersList(const QList <Mlt::Producer *> prods, bool d
         }
     }
     QString id;
+    Mlt::Producer *prod;
+    QStringList brokenClips;
     for (int i = 0; i < prods.count(); i++) {
-        id = prods.at(i)->get("id");
+        prod = prods.at(i);
+        id = prod->get("id");
         if (id.contains('_')) id = id.section('_', 0, 0);
         DocClipBase *clip = getClipById(id);
-        if (clip) {
-            clip->setProducer(prods.at(i), false, true);
+        QString markup = prod->get("markup");
+        if (prod->is_blank() || !prod->is_valid() || !markup.isEmpty()) {
+            // The clip is broken (missing proxy or source clip)
+            kDebug()<<"// WARNING, CLIP "<<id<<" Cannot be loaded";
+            brokenClips << id;
+        }
+        else if (clip) {
+            clip->setProducer(prod, false, true);
         }
     }
-    emit checkAllClips(displayRatioChanged, fpsChanged);
+    emit checkAllClips(displayRatioChanged, fpsChanged, brokenClips);
 }
 
 void ClipManager::slotAddClipList(const KUrl::List urls, const QString &group, const QString &groupId)