]> git.sesse.net Git - kdenlive/blobdiff - src/clipmanager.cpp
use const'ref
[kdenlive] / src / clipmanager.cpp
index 38ae8e90ab374e93c148fab423e8715d1cb9222f..b764ee725986a73d17c95baf02f7353ce6a6b514 100644 (file)
@@ -60,11 +60,11 @@ ClipManager::ClipManager(KdenliveDoc *doc) :
     m_clipIdCounter = 1;
     m_folderIdCounter = 1;
     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(dirty(QString)), this, SLOT(slotClipModified(QString)));
+    connect(&m_fileWatcher, SIGNAL(deleted(QString)), this, SLOT(slotClipMissing(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_fileWatcher, SIGNAL(created(QString)), this, SLOT(slotClipAvailable(QString)));
     connect(&m_modifiedTimer, SIGNAL(timeout()), this, SLOT(slotProcessModifiedClips()));
 
 #if KDE_IS_VERSION(4,5,0)
@@ -123,7 +123,7 @@ void ClipManager::clearCache()
 #endif
 }
 
-void ClipManager::requestThumbs(const QString id, QList <int> frames)
+void ClipManager::slotRequestThumbs(const QString id, QList <int> frames)
 {
     m_thumbsMutex.lock();
     foreach (int frame, frames) {
@@ -264,12 +264,14 @@ void ClipManager::slotGetAudioThumbs()
         if (hash.isEmpty()) continue;
         QString audioPath = projectFolder() + "/thumbs/" + hash + ".thumb";
         double lengthInFrames = clip->duration().frames(m_doc->fps());
-       int frequency = 48000;
-       int channels = 2;
+       int frequency = 0;
+       int channels = 0;
        QString data = clip->getProperty("frequency");
        if (!data.isEmpty()) frequency = data.toInt();
+       if (frequency <= 0) frequency = 48000;
        data = clip->getProperty("channels");
        if (!data.isEmpty()) channels = data.toInt();
+       if (channels <= 0) channels = 2;
        int arrayWidth = 20;
         double frame = 0.0;
        int maxVolume = 0;
@@ -462,7 +464,7 @@ DocClipBase *ClipManager::getClipById(QString clipId)
     return NULL;
 }
 
-const QList <DocClipBase *> ClipManager::getClipByResource(QString resource)
+const QList <DocClipBase *> ClipManager::getClipByResource(const QString &resource)
 {
     QList <DocClipBase *> list;
     QString clipResource;
@@ -551,7 +553,7 @@ void ClipManager::slotAddClipList(const KUrl::List urls, QMap <QString, QString>
                    copyjob->addMetaData("groupId", data.value("groupId"));
                    copyjob->addMetaData("comment", data.value("comment"));
                    copyjob->ui()->setWindow(kapp->activeWindow());
-                   connect(copyjob, SIGNAL(copyingDone(KIO::Job *, const KUrl &, const KUrl &, time_t, bool, bool)), this, SLOT(slotAddClip(KIO::Job *, const KUrl &, const KUrl &)));
+                   connect(copyjob, SIGNAL(copyingDone(KIO::Job*,KUrl,KUrl,time_t,bool,bool)), this, SLOT(slotAddClip(KIO::Job*,KUrl,KUrl)));
                    continue;
                }
            }
@@ -581,7 +583,12 @@ void ClipManager::slotAddClipList(const KUrl::List urls, QMap <QString, QString>
                     KFileMetaInfo metaInfo(file.path(), QString("image/jpeg"), KFileMetaInfo::TechnicalInfo);
                     const QHash<QString, KFileMetaInfoItem> metaInfoItems = metaInfo.items();
                     foreach(const KFileMetaInfoItem & metaInfoItem, metaInfoItems) {
-                        prod.setAttribute("meta.attr." + metaInfoItem.name().section('#', 1), metaInfoItem.value().toString());
+                       QDomElement meta = doc.createElement("metaproperty");
+                       meta.setAttribute("name", "meta.attr." + metaInfoItem.name().section('#', 1));
+                       QDomText value = doc.createTextNode(metaInfoItem.value().toString());
+                       meta.setAttribute("tool", "KDE Metadata");
+                       meta.appendChild(value);
+                       prod.appendChild(meta);
                     }
                 }
             } else if (type->is("application/x-kdenlivetitle")) {
@@ -604,15 +611,23 @@ void ClipManager::slotAddClipList(const KUrl::List urls, QMap <QString, QString>
                             }
                         }
                     }
-                    QString titleData = txtdoc.toString();
-                    prod.setAttribute("xmldata", titleData);
                     prod.setAttribute("transparency", 1);
                     prod.setAttribute("in", 0);
-                    int out = txtdoc.documentElement().attribute("out").toInt();
-                    if (out > 0)
-                        prod.setAttribute("out", out);
-                    else
-                        prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::title_duration()) - 1);
+                   if (!txtdoc.documentElement().hasAttribute("out")) {
+                       prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::title_duration()) - 1);
+                       txtdoc.documentElement().setAttribute("out", m_doc->getFramePos(KdenliveSettings::title_duration()) - 1);
+                   }
+                   else {
+                       int out = txtdoc.documentElement().attribute("out").toInt();
+                       if (out >= 0)
+                           prod.setAttribute("out", out);
+                       else {
+                           prod.setAttribute("out", m_doc->getFramePos(KdenliveSettings::title_duration()) - 1);
+                           txtdoc.documentElement().setAttribute("out", m_doc->getFramePos(KdenliveSettings::title_duration()) - 1);
+                       }
+                   }
+                   QString titleData = txtdoc.toString();
+                    prod.setAttribute("xmldata", titleData);
                 } else
                     txtfile.close();
             }
@@ -648,7 +663,7 @@ void ClipManager::slotAddXmlClipFile(const QString &name, const QDomElement &xml
     m_doc->commandStack()->push(command);
 }
 
-void ClipManager::slotAddColorClipFile(const QString &name, const QString &color, QString duration, const QString &group, const QString &groupId)
+void ClipManager::slotAddColorClipFile(const QString &name, const QString &color, const QString &duration, const QString &group, const QString &groupId)
 {
     QDomDocument doc;
     QDomElement prod = doc.createElement("producer");
@@ -730,16 +745,22 @@ void ClipManager::slotAddTextTemplateClip(QString titleName, const KUrl &path, c
     prod.setAttribute("transparency", "1");
     prod.setAttribute("in", "0");
 
-    int out = 0;
+    int duration = 0;
     QDomDocument titledoc;
     QFile txtfile(path.path());
     if (txtfile.open(QIODevice::ReadOnly) && titledoc.setContent(&txtfile)) {
         txtfile.close();
-        out = titledoc.documentElement().attribute("out").toInt();
+       if (titledoc.documentElement().hasAttribute("duration")) {
+           duration = titledoc.documentElement().attribute("duration").toInt();
+       }
+        else {
+           // keep some time for backwards compatibility - 26/12/12
+           duration = titledoc.documentElement().attribute("out").toInt();
+       }
     } else txtfile.close();
 
-    if (out == 0) out = m_doc->getFramePos(KdenliveSettings::image_duration());
-    prod.setAttribute("out", out);
+    if (duration == 0) duration = m_doc->getFramePos(KdenliveSettings::title_duration());
+    prod.setAttribute("out", duration - 1);
 
     AddClipCommand *command = new AddClipCommand(m_doc, doc.documentElement(), QString::number(id), true);
     m_doc->commandStack()->push(command);
@@ -961,7 +982,7 @@ bool ClipManager::isOnRemovableDevice(const KUrl &url)
     return volumeMatch;
 }
 
-void ClipManager::projectTreeThumbReady(const QString &id, int frame, QImage img, int type)
+void ClipManager::projectTreeThumbReady(const QString &id, int frame, const QImage &img, int type)
 {
     switch (type) {
       case 2: