#include "kdenlivesettings.h"
#include "profilesdialog.h"
#include "docclipbase.h"
+#include "titlewidget.h"
+#include "effectslist.h"
#include <KStandardDirs>
#include <KMessageBox>
#include <QDir>
#include <kmessagebox.h>
-ProjectSettings::ProjectSettings(ProjectList *projectlist, int videotracks, int audiotracks, const QString projectPath, bool readOnlyTracks, bool savedProject, QWidget * parent) :
- QDialog(parent), m_savedProject(savedProject), m_projectList(projectlist)
+ProjectSettings::ProjectSettings(ProjectList *projectlist, QStringList lumas, int videotracks, int audiotracks, const QString projectPath, bool readOnlyTracks, bool savedProject, QWidget * parent) :
+ QDialog(parent), m_savedProject(savedProject), m_projectList(projectlist), m_lumas(lumas)
{
setupUi(this);
+ list_search->setListWidget(files_list);
+
QMap <QString, QString> profilesInfo = ProfilesDialog::getProfilesInfo();
QMapIterator<QString, QString> i(profilesInfo);
while (i.hasNext()) {
QList <DocClipBase*> list = m_projectList->documentClipList();
for (int i = 0; i < list.count(); i++) {
DocClipBase *clip = list.at(i);
- if (clip->numReferences() == 0) {
+ if (clip->numReferences() == 0 && clip->clipType() != SLIDESHOW) {
KUrl url = clip->fileURL();
- if (!url.isEmpty()) toDelete << url.path();
+ if (!url.isEmpty() && !toDelete.contains(url.path())) toDelete << url.path();
}
}
- toDelete.removeDuplicates();
// make sure our urls are not used in another clip
for (int i = 0; i < list.count(); i++) {
KIO::filesize_t usedSize = 0;
KIO::filesize_t unUsedSize = 0;
QList <DocClipBase*> list = m_projectList->documentClipList();
+ files_list->clear();
+
+ // List all files that are used in the project. That also means:
+ // images included in slideshow and titles, files in playlist clips
+ // TODO: images used in luma transitions, files used for LADSPA effects?
+ QStringList allFiles;
+ allFiles << m_lumas;
for (int i = 0; i < list.count(); i++) {
DocClipBase *clip = list.at(i);
+ if (clip->clipType() == SLIDESHOW) {
+ // special case, list all images
+ QStringList files = extractSlideshowUrls(clip->fileURL());
+ allFiles << files;
+ } else if (!clip->fileURL().isEmpty()) allFiles.append(clip->fileURL().path());
+ if (clip->clipType() == TEXT) {
+ QStringList images = TitleWidget::extractImageList(clip->getProperty("xmldata"));
+ allFiles << images;
+ } else if (clip->clipType() == PLAYLIST) {
+ QStringList files = extractPlaylistUrls(clip->fileURL().path());
+ allFiles << files;
+ }
+
if (clip->numReferences() == 0) {
unused++;
unUsedSize += clip->fileSize();
usedSize += clip->fileSize();
}
}
+#if QT_VERSION >= 0x040500
+ allFiles.removeDuplicates();
+#endif
+ files_count->setText(QString::number(allFiles.count()));
+ files_list->addItems(allFiles);
used_count->setText(QString::number(used));
used_size->setText(KIO::convertSize(usedSize));
unused_count->setText(QString::number(unused));
return audio_thumbs->isChecked();
}
+//static
+QStringList ProjectSettings::extractPlaylistUrls(QString path)
+{
+ QStringList urls;
+ QDomDocument doc;
+ QFile file(path);
+ if (!file.open(QIODevice::ReadOnly))
+ return urls;
+ if (!doc.setContent(&file)) {
+ file.close();
+ return urls;
+ }
+ file.close();
+ QString root = doc.documentElement().attribute("root");
+ if (!root.isEmpty() && !root.endsWith('/')) root.append('/');
+ QDomNodeList files = doc.elementsByTagName("producer");
+ for (int i = 0; i < files.count(); i++) {
+ QDomElement e = files.at(i).toElement();
+ QString type = EffectsList::property(e, "mlt_service");
+ if (type != "colour") {
+ QString url = EffectsList::property(e, "resource");
+ if (!url.isEmpty()) {
+ if (!url.startsWith('/')) url.prepend(root);
+ if (url.section('.', 0, -2).endsWith("/.all")) {
+ // slideshow clip, extract image urls
+ urls << extractSlideshowUrls(KUrl(url));
+ } else urls << url;
+ if (url.endsWith(".mlt") || url.endsWith(".kdenlive")) {
+ //TODO: Do something to avoid infinite loops if 2 files reference themselves...
+ urls << extractPlaylistUrls(url);
+ }
+ }
+ }
+ }
+
+ // luma files for transitions
+ files = doc.elementsByTagName("transition");
+ for (int i = 0; i < files.count(); i++) {
+ QDomElement e = files.at(i).toElement();
+ QString url = EffectsList::property(e, "luma");
+ if (!url.isEmpty()) {
+ if (!url.startsWith('/')) url.prepend(root);
+ urls << url;
+ }
+ }
+
+ return urls;
+}
+
+
+//static
+QStringList ProjectSettings::extractSlideshowUrls(KUrl url)
+{
+ QStringList urls;
+ QString path = url.directory(KUrl::AppendTrailingSlash);
+ QString ext = url.path().section('.', -1);
+ QDir dir(path);
+ QStringList filters;
+ filters << "*." + ext;
+ dir.setNameFilters(filters);
+ QStringList result = dir.entryList(QDir::Files);
+ for (int j = 0; j < result.count(); j++) {
+ urls.append(path + result.at(j));
+ }
+ return urls;
+}
+
#include "projectsettings.moc"