X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Farchivewidget.cpp;h=a645172e5a9efe19f83a28dc7423d5a5f6d353c4;hb=c3302003093710ee247ad84c0fe2ef3c579d417f;hp=4a99f759ac0883c5d546a9b70eb5f8bf555bb556;hpb=f41770656c58ffc541441d04a3845cd1005fcdcf;p=kdenlive diff --git a/src/archivewidget.cpp b/src/archivewidget.cpp index 4a99f759..a645172e 100644 --- a/src/archivewidget.cpp +++ b/src/archivewidget.cpp @@ -41,22 +41,24 @@ #include "projectsettings.h" -ArchiveWidget::ArchiveWidget(QString projectName, QDomDocument doc, QList list, QStringList luma_list, QWidget * parent) : - QDialog(parent), - m_requestedSize(0), - m_copyJob(NULL), - m_name(projectName.section('.', 0, -2)), - m_doc(doc), - m_abortArchive(false), - m_extractMode(false), - m_extractArchive(NULL), - m_missingClips(0) +ArchiveWidget::ArchiveWidget(const QString &projectName, const QDomDocument &doc, const QList &list, const QStringList &luma_list, QWidget * parent) : + QDialog(parent) + , m_requestedSize(0) + , m_copyJob(NULL) + , m_name(projectName.section('.', 0, -2)) + , m_doc(doc) + , m_temp(NULL) + , m_abortArchive(false) + , m_extractMode(false) + , m_progressTimer(NULL) + , m_extractArchive(NULL) + , m_missingClips(0) { setAttribute(Qt::WA_DeleteOnClose); setupUi(this); setWindowTitle(i18n("Archive Project")); archive_url->setUrl(KUrl(QDir::homePath())); - connect(archive_url, SIGNAL(textChanged (const QString &)), this, SLOT(slotCheckSpace())); + connect(archive_url, SIGNAL(textChanged(QString)), this, SLOT(slotCheckSpace())); connect(this, SIGNAL(archivingFinished(bool)), this, SLOT(slotArchivingFinished(bool))); connect(this, SIGNAL(archiveProgress(int)), this, SLOT(slotArchivingProgress(int))); connect(proxy_only, SIGNAL(stateChanged(int)), this, SLOT(slotProxyOnly(int))); @@ -115,7 +117,7 @@ ArchiveWidget::ArchiveWidget(QString projectName, QDomDocument doc, QList playlistUrls; QMap proxyUrls; - for (int i = 0; i < list.count(); i++) { + for (int i = 0; i < list.count(); ++i) { DocClipBase *clip = list.at(i); CLIPTYPE t = clip->clipType(); QString id = clip->getId(); @@ -182,7 +184,7 @@ ArchiveWidget::ArchiveWidget(QString projectName, QDomDocument doc, QList topLevelItemCount(); i++) { + for (int i = 0; i < files_list->topLevelItemCount(); ++i) { QTreeWidgetItem *parentItem = files_list->topLevelItem(i); int items = parentItem->childCount(); if (items == 0) { @@ -206,7 +208,7 @@ ArchiveWidget::ArchiveWidget(QString projectName, QDomDocument doc, QList button(QDialogButtonBox::Apply)->setText(i18n("Archive")); connect(buttonBox->button(QDialogButtonBox::Apply), SIGNAL(clicked()), this, SLOT(slotStartArchiving())); buttonBox->button(QDialogButtonBox::Apply)->setEnabled(false); - + slotCheckSpace(); } @@ -219,8 +221,12 @@ ArchiveWidget::ArchiveWidget(const KUrl &url, QWidget * parent): //setAttribute(Qt::WA_DeleteOnClose); setupUi(this); + m_progressTimer = new QTimer; + m_progressTimer->setInterval(800); + m_progressTimer->setSingleShot(false); + connect(m_progressTimer, SIGNAL(timeout()), this, SLOT(slotExtractProgress())); connect(this, SIGNAL(extractingFinished()), this, SLOT(slotExtractingFinished())); - connect(this, SIGNAL(showMessage(const QString &, const QString &)), this, SLOT(slotDisplayMessage(const QString &, const QString &))); + connect(this, SIGNAL(showMessage(QString,QString)), this, SLOT(slotDisplayMessage(QString,QString))); compressed_archive->setHidden(true); proxy_only->setHidden(true); @@ -239,7 +245,8 @@ ArchiveWidget::ArchiveWidget(const KUrl &url, QWidget * parent): ArchiveWidget::~ArchiveWidget() { - if (m_extractArchive) delete m_extractArchive; + delete m_extractArchive; + delete m_progressTimer; } void ArchiveWidget::slotDisplayMessage(const QString &icon, const QString &text) @@ -274,7 +281,7 @@ void ArchiveWidget::openArchiveForExtraction() // Check that it is a kdenlive project archive bool isProjectArchive = false; QStringList files = m_extractArchive->directory()->entries(); - for (int i = 0; i < files.count(); i++) { + for (int i = 0; i < files.count(); ++i) { if (files.at(i).endsWith(".kdenlive")) { m_projectName = files.at(i); isProjectArchive = true; @@ -285,6 +292,7 @@ void ArchiveWidget::openArchiveForExtraction() if (!isProjectArchive) { emit showMessage("dialog-close", i18n("File %1\n is not an archived Kdenlive project", m_extractUrl.path())); groupBox->setEnabled(false); + buttonBox->button(QDialogButtonBox::Apply)->setEnabled(false); return; } buttonBox->button(QDialogButtonBox::Apply)->setEnabled(true); @@ -317,7 +325,7 @@ bool ArchiveWidget::closeAccepted() } -void ArchiveWidget::generateItems(QTreeWidgetItem *parentItem, QStringList items) +void ArchiveWidget::generateItems(QTreeWidgetItem *parentItem, const QStringList& items) { QStringList filesList; QString fileName; @@ -335,14 +343,13 @@ void ArchiveWidget::generateItems(QTreeWidgetItem *parentItem, QStringList items if (slideUrl.fileName().startsWith(".all.")) { // mimetype slideshow (for example *.png) QStringList filters; - QString extension; // 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++) { + for (int i = 0; i < resultList.count(); ++i) { totalSize += resultList.at(i).size(); slideImages << resultList.at(i).absoluteFilePath(); } @@ -399,7 +406,7 @@ void ArchiveWidget::generateItems(QTreeWidgetItem *parentItem, QStringList items } } -void ArchiveWidget::generateItems(QTreeWidgetItem *parentItem, QMap items) +void ArchiveWidget::generateItems(QTreeWidgetItem *parentItem, const QMap & items) { QStringList filesList; QString fileName; @@ -421,14 +428,13 @@ void ArchiveWidget::generateItems(QTreeWidgetItem *parentItem, QMap topLevelItemCount(); i++) { + for (int i = 0; i < files_list->topLevelItemCount(); ++i) { parentItem = files_list->topLevelItem(i); if (parentItem->isDisabled()) { parentItem->setExpanded(false); @@ -590,7 +595,7 @@ bool ArchiveWidget::slotStartArchiving(bool firstPass) if (items == 0) { // No clips to archive - if (isArchive) slotArchivingFinished(NULL, true); + slotArchivingFinished(NULL, true); return true; } @@ -603,15 +608,15 @@ bool ArchiveWidget::slotStartArchiving(bool firstPass) KUrl startJobDst = i.value(); m_duplicateFiles.remove(startJobSrc); KIO::CopyJob *job = KIO::copyAs(startJobSrc, startJobDst, KIO::HideProgressInfo); - connect(job, SIGNAL(result(KJob *)), this, SLOT(slotArchivingFinished(KJob *))); - connect(job, SIGNAL(processedSize(KJob *, qulonglong)), this, SLOT(slotArchivingProgress(KJob *, qulonglong))); + connect(job, SIGNAL(result(KJob*)), this, SLOT(slotArchivingFinished(KJob*))); + connect(job, SIGNAL(processedSize(KJob*,qulonglong)), this, SLOT(slotArchivingProgress(KJob*,qulonglong))); } return true; } if (isArchive) { m_foldersList.append(destPath); - for (int i = 0; i < files.count(); i++) { + for (int i = 0; i < files.count(); ++i) { m_filesList.insert(files.at(i).path(), destPath + files.at(i).fileName()); } slotArchivingFinished(); @@ -622,8 +627,8 @@ bool ArchiveWidget::slotStartArchiving(bool firstPass) else { KIO::NetAccess::mkdir(destUrl, this); m_copyJob = KIO::copy (files, destUrl, KIO::HideProgressInfo); - connect(m_copyJob, SIGNAL(result(KJob *)), this, SLOT(slotArchivingFinished(KJob *))); - connect(m_copyJob, SIGNAL(processedSize(KJob *, qulonglong)), this, SLOT(slotArchivingProgress(KJob *, qulonglong))); + connect(m_copyJob, SIGNAL(result(KJob*)), this, SLOT(slotArchivingFinished(KJob*))); + connect(m_copyJob, SIGNAL(processedSize(KJob*,qulonglong)), this, SLOT(slotArchivingProgress(KJob*,qulonglong))); } if (firstPass) { progressBar->setValue(0); @@ -659,7 +664,7 @@ void ArchiveWidget::slotArchivingFinished(KJob *job, bool finished) archive_url->setEnabled(true); proxy_only->setEnabled(true); compressed_archive->setEnabled(true); - for (int i = 0; i < files_list->topLevelItemCount(); i++) { + for (int i = 0; i < files_list->topLevelItemCount(); ++i) { files_list->topLevelItem(i)->setDisabled(false); for (int j = 0; j < files_list->topLevelItem(i)->childCount(); j++) files_list->topLevelItem(i)->child(j)->setDisabled(false); @@ -679,7 +684,7 @@ bool ArchiveWidget::processProjectFile() QTreeWidgetItem *item; bool isArchive = compressed_archive->isChecked(); - for (int i = 0; i < files_list->topLevelItemCount(); i++) { + for (int i = 0; i < files_list->topLevelItemCount(); ++i) { QTreeWidgetItem *parentItem = files_list->topLevelItem(i); if (parentItem->childCount() > 0) { destUrl = KUrl(archive_url->url().path(KUrl::AddTrailingSlash) + parentItem->data(0, Qt::UserRole).toString()); @@ -715,7 +720,7 @@ bool ArchiveWidget::processProjectFile() // process kdenlive producers QDomNodeList prods = mlt.elementsByTagName("kdenlive_producer"); - for (int i = 0; i < prods.count(); i++) { + for (int i = 0; i < prods.count(); ++i) { QDomElement e = prods.item(i).toElement(); if (e.isNull()) continue; if (e.hasAttribute("resource")) { @@ -732,7 +737,7 @@ bool ArchiveWidget::processProjectFile() // process mlt producers prods = mlt.elementsByTagName("producer"); - for (int i = 0; i < prods.count(); i++) { + for (int i = 0; i < prods.count(); ++i) { QDomElement e = prods.item(i).toElement(); if (e.isNull()) continue; QString src = EffectsList::property(e, "resource"); @@ -747,7 +752,7 @@ bool ArchiveWidget::processProjectFile() // process mlt transitions (for luma files) prods = mlt.elementsByTagName("transition"); QString attribute; - for (int i = 0; i < prods.count(); i++) { + for (int i = 0; i < prods.count(); ++i) { QDomElement e = prods.item(i).toElement(); if (e.isNull()) continue; attribute = "resource"; @@ -825,9 +830,13 @@ void ArchiveWidget::createArchive() } // Add project file - archive.addLocalFile(m_temp->fileName(), m_name + ".kdenlive"); - bool result = archive.close(); - delete m_temp; + bool result = false; + if (m_temp) { + archive.addLocalFile(m_temp->fileName(), m_name + ".kdenlive"); + result = archive.close(); + delete m_temp; + m_temp = 0; + } emit archivingFinished(result); } @@ -845,7 +854,7 @@ void ArchiveWidget::slotArchivingFinished(bool result) archive_url->setEnabled(true); proxy_only->setEnabled(true); compressed_archive->setEnabled(true); - for (int i = 0; i < files_list->topLevelItemCount(); i++) { + for (int i = 0; i < files_list->topLevelItemCount(); ++i) { files_list->topLevelItem(i)->setDisabled(false); for (int j = 0; j < files_list->topLevelItem(i)->childCount(); j++) files_list->topLevelItem(i)->child(j)->setDisabled(false); @@ -868,10 +877,6 @@ void ArchiveWidget::slotStartExtracting() KIO::NetAccess::mkdir(archive_url->url().path(KUrl::RemoveTrailingSlash), this); slotDisplayMessage("system-run", i18n("Extracting...")); buttonBox->button(QDialogButtonBox::Apply)->setText(i18n("Abort")); - m_progressTimer = new QTimer; - m_progressTimer->setInterval(800); - m_progressTimer->setSingleShot(false); - connect(m_progressTimer, SIGNAL(timeout()), this, SLOT(slotExtractProgress())); m_archiveThread = QtConcurrent::run(this, &ArchiveWidget::doExtracting); m_progressTimer->start(); } @@ -898,7 +903,7 @@ void ArchiveWidget::doExtracting() emit extractingFinished(); } -QString ArchiveWidget::extractedProjectFile() +QString ArchiveWidget::extractedProjectFile() const { return archive_url->url().path(KUrl::AddTrailingSlash) + m_projectName; } @@ -906,7 +911,6 @@ QString ArchiveWidget::extractedProjectFile() void ArchiveWidget::slotExtractingFinished() { m_progressTimer->stop(); - delete m_progressTimer; // Process project file QFile file(extractedProjectFile()); bool error = false; @@ -914,7 +918,7 @@ void ArchiveWidget::slotExtractingFinished() error = true; } else { - QString playList = file.readAll(); + QString playList = QString::fromUtf8(file.readAll()); file.close(); if (playList.isEmpty()) { error = true; @@ -950,7 +954,7 @@ void ArchiveWidget::slotProxyOnly(int onlyProxy) QTreeWidgetItem *parentItem = NULL; // Build list of existing proxy ids - for (int i = 0; i < files_list->topLevelItemCount(); i++) { + for (int i = 0; i < files_list->topLevelItemCount(); ++i) { parentItem = files_list->topLevelItem(i); if (parentItem->data(0, Qt::UserRole).toString() == "proxy") break; } @@ -961,7 +965,7 @@ void ArchiveWidget::slotProxyOnly(int onlyProxy) } // Parse all items to disable original clips for existing proxies - for (int i = 0; i < proxyIdList.count(); i++) { + for (int i = 0; i < proxyIdList.count(); ++i) { QString id = proxyIdList.at(i); if (id.isEmpty()) continue; for (int j = 0; j < files_list->topLevelItemCount(); j++) { @@ -980,7 +984,7 @@ void ArchiveWidget::slotProxyOnly(int onlyProxy) } else { // Archive all clips - for (int i = 0; i < files_list->topLevelItemCount(); i++) { + for (int i = 0; i < files_list->topLevelItemCount(); ++i) { QTreeWidgetItem *parentItem = files_list->topLevelItem(i); int items = parentItem->childCount(); for (int j = 0; j < items; j++) { @@ -991,7 +995,7 @@ void ArchiveWidget::slotProxyOnly(int onlyProxy) // Calculate requested size int total = 0; - for (int i = 0; i < files_list->topLevelItemCount(); i++) { + for (int i = 0; i < files_list->topLevelItemCount(); ++i) { QTreeWidgetItem *parentItem = files_list->topLevelItem(i); int items = parentItem->childCount(); int itemsCount = 0; @@ -1011,3 +1015,5 @@ void ArchiveWidget::slotProxyOnly(int onlyProxy) slotCheckSpace(); } + +#include "archivewidget.moc"