]> git.sesse.net Git - kdenlive/blobdiff - src/clipmanager.cpp
Show warning when adding a clip which already exists in the project
[kdenlive] / src / clipmanager.cpp
index 4f96ba185bcfac2aa78599c662bab0457e1b1a7f..99acb330d2f8e30247ce5b2b8105afbff3c7967d 100644 (file)
@@ -29,7 +29,9 @@
 #include <mlt++/Mlt.h>
 
 #include <KDebug>
+#include <KMessageBox>
 #include <KFileDialog>
+#include <KApplication>
 #include <kio/netaccess.h>
 
 #include <QGraphicsItemGroup>
@@ -44,12 +46,16 @@ ClipManager::ClipManager(KdenliveDoc *doc) :
     m_clipIdCounter = 1;
     m_folderIdCounter = 1;
     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 &)));
 }
 
 ClipManager::~ClipManager()
 {
-    kDebug() << "\n\n 2222222222222222222222222  CLOSE CM 22222222222";
     qDeleteAll(m_clipList);
+    m_clipList.clear();
+    m_audioThumbsQueue.clear();
+    m_generatingAudioId.clear();
 }
 
 void ClipManager::clear()
@@ -138,8 +144,9 @@ QMap <QString, QString> ClipManager::documentFolderList() const
 void ClipManager::addClip(DocClipBase *clip)
 {
     m_clipList.append(clip);
-    if (clip->clipType() == IMAGE || clip->clipType() == AUDIO || (clip->clipType() == TEXT && !clip->fileURL().isEmpty())) {
+    if (clip->clipType() != COLOR && clip->clipType() != SLIDESHOW  && !clip->fileURL().isEmpty()) {
         // listen for file change
+        //kDebug() << "// LISTEN FOR: " << clip->fileURL().path();
         m_fileWatcher.addFile(clip->fileURL().path());
     }
     const QString id = clip->getId();
@@ -166,11 +173,14 @@ void ClipManager::deleteClip(const QString &clipId)
 {
     for (int i = 0; i < m_clipList.count(); i++) {
         if (m_clipList.at(i)->getId() == clipId) {
-            if (m_clipList.at(i)->clipType() == IMAGE || m_clipList.at(i)->clipType() == AUDIO || (m_clipList.at(i)->clipType() == TEXT && !m_clipList.at(i)->fileURL().isEmpty())) {
+            if (m_clipList.at(i)->clipType() != COLOR && m_clipList.at(i)->clipType() != SLIDESHOW  && !m_clipList.at(i)->fileURL().isEmpty()) {
+                //if (m_clipList.at(i)->clipType() == IMAGE || m_clipList.at(i)->clipType() == AUDIO || (m_clipList.at(i)->clipType() == TEXT && !m_clipList.at(i)->fileURL().isEmpty())) {
                 // listen for file change
                 m_fileWatcher.removeFile(m_clipList.at(i)->fileURL().path());
             }
-            delete m_clipList.takeAt(i);
+            DocClipBase *clip = m_clipList.takeAt(i);
+            delete clip;
+            clip = NULL;
             break;
         }
     }
@@ -267,6 +277,10 @@ void ClipManager::slotAddClipList(const KUrl::List urls, const QString group, co
                 prod.setAttribute("groupid", groupId);
             }
             prod.setAttribute("resource", file.path());
+            if (!getClipByResource(prod.attribute("resource")).empty()) {
+                if (KMessageBox::warningContinueCancel(kapp->activeWindow(), i18n("Clip <b>%1</b><br />already exists in project, what do you want to do?", prod.attribute("resource")), i18n("Clip already exists")) == KMessageBox::Cancel)
+                    continue;
+            }
             uint id = m_clipIdCounter++;
             prod.setAttribute("id", QString::number(id));
             KMimeType::Ptr type = KMimeType::findByUrl(file);
@@ -303,6 +317,10 @@ void ClipManager::slotAddClipFile(const KUrl url, const QString group, const QSt
     QDomElement prod = doc.createElement("producer");
     doc.appendChild(prod);
     prod.setAttribute("resource", url.path());
+    if (!getClipByResource(prod.attribute("resource")).empty()) {
+        if (KMessageBox::warningContinueCancel(kapp->activeWindow(), i18n("Clip <b>%1</b><br />already exists in project, what do you want to do?", prod.attribute("resource")), i18n("Clip already exists")) == KMessageBox::Cancel)
+            return;
+    }
     uint id = m_clipIdCounter++;
     prod.setAttribute("id", QString::number(id));
     if (!group.isEmpty()) {
@@ -514,7 +532,7 @@ QDomElement ClipManager::groupsXml() const
 
 void ClipManager::slotClipModified(const QString &path)
 {
-    //kDebug()<<"// CLIP: "<<path<<" WAS MODIFIED";
+    // kDebug() << "// CLIP: " << path << " WAS MODIFIED";
     const QList <DocClipBase *> list = getClipByResource(path);
     for (int i = 0; i < list.count(); i++) {
         DocClipBase *clip = list.at(i);
@@ -522,6 +540,26 @@ void ClipManager::slotClipModified(const QString &path)
     }
 }
 
+void ClipManager::slotClipMissing(const QString &path)
+{
+    // kDebug() << "// CLIP: " << path << " WAS MISSING";
+    const QList <DocClipBase *> list = getClipByResource(path);
+    for (int i = 0; i < list.count(); i++) {
+        DocClipBase *clip = list.at(i);
+        if (clip != NULL) emit missingClip(clip->getId());
+    }
+}
+
+void ClipManager::slotClipAvailable(const QString &path)
+{
+    // kDebug() << "// CLIP: " << path << " WAS ADDED";
+    const QList <DocClipBase *> list = getClipByResource(path);
+    for (int i = 0; i < list.count(); i++) {
+        DocClipBase *clip = list.at(i);
+        if (clip != NULL) emit availableClip(clip->getId());
+    }
+}
+
 int ClipManager::clipsCount() const
 {
     return m_clipList.count();