+ QString newFileName = fileName.section('.', 0, -2) + '_' + QString::number(ix) + '.' + fileName.section('.', -1);
+ while (filesList.contains(newFileName)) {
+ ix ++;
+ newFileName = fileName.section('.', 0, -2) + '_' + QString::number(ix) + '.' + fileName.section('.', -1);
+ }
+ fileName = newFileName;
+ item->setData(0, Qt::UserRole, fileName);
+ }
+ if (!isSlideshow) {
+ qint64 fileSize = QFileInfo(file).size();
+ if (fileSize <= 0) {
+ item->setIcon(0, KIcon("edit-delete"));
+ m_missingClips++;
+ }
+ else {
+ m_requestedSize += fileSize;
+ item->setData(0, Qt::UserRole + 3, fileSize);
+ }
+ filesList << fileName;
+ }
+ }
+}
+
+void ArchiveWidget::generateItems(QTreeWidgetItem *parentItem, const QMap <QString, QString>& items)
+{
+ QStringList filesList;
+ QString fileName;
+ int ix = 0;
+ bool isSlideshow = parentItem->data(0, Qt::UserRole).toString() == "slideshows";
+ QMap<QString, QString>::const_iterator it = items.constBegin();
+ while (it != items.constEnd()) {
+ QString file = it.value();
+ QTreeWidgetItem *item = new QTreeWidgetItem(parentItem, QStringList() << file);
+ // Store the clip's id
+ item->setData(0, Qt::UserRole + 2, it.key());
+ fileName = KUrl(file).fileName();
+ if (isSlideshow) {
+ // we store each slideshow in a separate subdirectory
+ item->setData(0, Qt::UserRole, ix);
+ ix++;
+ KUrl slideUrl(file);
+ QDir dir(slideUrl.directory(KUrl::AppendTrailingSlash));
+ if (slideUrl.fileName().startsWith(".all.")) {
+ // mimetype slideshow (for example *.png)
+ QStringList filters;
+ // TODO: improve jpeg image detection with extension like jpeg, requires change in MLT image producers
+ filters << "*." + slideUrl.fileName().section('.', -1);
+ dir.setNameFilters(filters);
+ QFileInfoList resultList = dir.entryInfoList(QDir::Files);
+ QStringList slideImages;
+ qint64 totalSize = 0;
+ for (int i = 0; i < resultList.count(); ++i) {
+ totalSize += resultList.at(i).size();
+ slideImages << resultList.at(i).absoluteFilePath();
+ }
+ item->setData(0, Qt::UserRole + 1, slideImages);
+ item->setData(0, Qt::UserRole + 3, totalSize);
+ m_requestedSize += totalSize;
+ }
+ else {
+ // pattern url (like clip%.3d.png)
+ QStringList result = dir.entryList(QDir::Files);
+ QString filter = slideUrl.fileName();
+ QString ext = filter.section('.', -1);
+ filter = filter.section('%', 0, -2);
+ QString regexp = '^' + filter + "\\d+\\." + ext + '$';
+ QRegExp rx(regexp);
+ QStringList slideImages;
+ qint64 totalSize = 0;
+ QString directory = dir.absolutePath();
+ if (!directory.endsWith('/')) directory.append('/');
+ foreach(const QString & path, result) {
+ if (rx.exactMatch(path)) {
+ totalSize += QFileInfo(directory + path).size();
+ slideImages << directory + path;
+ }
+ }
+ item->setData(0, Qt::UserRole + 1, slideImages);
+ item->setData(0, Qt::UserRole + 3, totalSize);
+ m_requestedSize += totalSize;
+ }
+ }
+ else if (filesList.contains(fileName)) {
+ // we have 2 files with same name
+ int ix = 0;
+ QString newFileName = fileName.section('.', 0, -2) + '_' + QString::number(ix) + '.' + fileName.section('.', -1);