[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kdenlive] src/project/dialogs: Cached data manager: fix crash when cache directory is empty
From: Jean-Baptiste Mardelle <jb () kdenlive ! org>
Date: 2016-06-20 19:09:04
Message-ID: E1bF4ZE-0005Dx-3n () code ! kde ! org
[Download RAW message or body]
Git commit b74e93d294de644a9e27d3e1e642cf7387029bf3 by Jean-Baptiste Mardelle.
Committed on 20/06/2016 at 19:08.
Pushed by mardelle into branch 'master'.
Cached data manager: fix crash when cache directory is empty
Really delete cache folder if user asks for it in dialog.
M +26 -7 src/project/dialogs/temporarydata.cpp
M +3 -1 src/project/dialogs/temporarydata.h
http://commits.kde.org/kdenlive/b74e93d294de644a9e27d3e1e642cf7387029bf3
diff --git a/src/project/dialogs/temporarydata.cpp \
b/src/project/dialogs/temporarydata.cpp index b36fb9d..c1540e9 100644
--- a/src/project/dialogs/temporarydata.cpp
+++ b/src/project/dialogs/temporarydata.cpp
@@ -86,6 +86,7 @@ void ChartWidget::paintEvent(QPaintEvent *event)
TemporaryData::TemporaryData(KdenliveDoc *doc, bool currentProjectOnly, QWidget * \
parent) : QWidget(parent)
, m_doc(doc)
+ , m_globalDelete(NULL)
{
chartColors << QColor(Qt::darkRed) << QColor(Qt::darkBlue) << \
QColor(Qt::darkGreen) << QColor(Qt::darkMagenta); mCurrentSizes << 0 << 0 << 0 << 0;
@@ -180,7 +181,7 @@ TemporaryData::TemporaryData(KdenliveDoc *doc, bool \
currentProjectOnly, QWidget m_grid->addWidget(m_currentSize, 5, 3);
del = new QToolButton(this);
del->setIcon(KoIconUtils::themedIcon(QStringLiteral("trash-empty")));
- connect(del, &QToolButton::clicked, this, &TemporaryData::deleteAll);
+ connect(del, &QToolButton::clicked, this, \
&TemporaryData::deleteCurrentCacheData); del->setEnabled(false);
m_grid->addWidget(del, 5, 4);
@@ -391,7 +392,7 @@ void TemporaryData::deleteThumbs()
}
}
-void TemporaryData::deleteAll()
+void TemporaryData::deleteCurrentCacheData()
{
bool ok = false;
QDir dir = m_doc->getCacheDir(CacheBase, &ok);
@@ -459,9 +460,9 @@ void TemporaryData::buildGlobalCacheDialog(int minHeight)
lay->addWidget(lab, 2, 2, 1, 1);
m_selectedSize = new QLabel(this);
lay->addWidget(m_selectedSize, 2, 3, 1, 1);
- QPushButton *del = new QPushButton(i18n("Delete selected cache"), this);
- connect(del, &QPushButton::clicked, this, &TemporaryData::deleteSelected);
- lay->addWidget(del, 2, 4, 1, 1);
+ m_globalDelete = new QPushButton(i18n("Delete selected cache"), this);
+ connect(m_globalDelete, &QPushButton::clicked, this, \
&TemporaryData::deleteSelected); + lay->addWidget(m_globalDelete, 2, 4, 1, 1);
lay->setColumnStretch(4, 10);
lay->setRowStretch(0, 10);
@@ -471,6 +472,7 @@ void TemporaryData::buildGlobalCacheDialog(int minHeight)
void TemporaryData::updateGlobalInfo()
{
+ m_listWidget->blockSignals(true);
m_totalGlobal = 0;
m_listWidget->clear();
bool ok = false;
@@ -484,6 +486,7 @@ void TemporaryData::updateGlobalInfo()
m_processingDirectory.clear();
m_globalDirectories = m_globalDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
processglobalDirectories();
+ m_listWidget->blockSignals(false);
}
void TemporaryData::processglobalDirectories()
@@ -549,8 +552,11 @@ void TemporaryData::refreshGlobalPie()
}
}
m_selectedSize->setText(KIO::convertSize(currentSize));
- int percent = (int) (currentSize * 360 / m_totalGlobal);
+ int percent = m_totalGlobal <= 0 ? 0 : (int) (currentSize * 360 / \
m_totalGlobal); m_globalPie->setSegments(QList <int>() << 360 << percent);
+ if (list.size() == 1 && list.at(0)->text(0) == \
m_doc->getDocumentProperty(QStringLiteral("documentid"))) { + \
m_globalDelete->setText(i18n("Clear current cache")); + } else \
m_globalDelete->setText(i18n("Delete selected cache")); }
void TemporaryData::deleteSelected()
@@ -562,5 +568,18 @@ void TemporaryData::deleteSelected()
folders << current->data(0, Qt::UserRole).toString();
}
}
- KMessageBox::warningContinueCancelList(this, i18n("Delete the following cache \
folders from\n%1", m_globalDir.absolutePath()), folders); + if \
(KMessageBox::warningContinueCancelList(this, i18n("Delete the following cache \
folders from\n%1", m_globalDir.absolutePath()), folders) != KMessageBox::Continue) { \
+ return; + }
+ const QString currentId = \
m_doc->getDocumentProperty(QStringLiteral("documentid")); + foreach(const QString \
folder, folders) { + if (folder == currentId) {
+ // Trying to delete current project's tmp folder. Do not delete, but \
clear it + deleteCurrentCacheData();
+ continue;
+ }
+ QDir toRemove(m_globalDir.absoluteFilePath(folder));
+ toRemove.removeRecursively();
+ }
+ updateGlobalInfo();
}
diff --git a/src/project/dialogs/temporarydata.h \
b/src/project/dialogs/temporarydata.h index cd70b54..7a9d322 100644
--- a/src/project/dialogs/temporarydata.h
+++ b/src/project/dialogs/temporarydata.h
@@ -33,6 +33,7 @@ class QPaintEvent;
class QLabel;
class QGridLayout;
class QTreeWidget;
+class QPushButton;
/**
* @class ChartWidget
@@ -111,6 +112,7 @@ private:
QStringList m_globalDirectories;
QString m_processingDirectory;
QDir m_globalDir;
+ QPushButton *m_globalDelete;
void updateDataInfo();
void updateGlobalInfo();
void updateTotal();
@@ -128,7 +130,7 @@ private slots:
void deleteProxy();
void deleteAudio();
void deleteThumbs();
- void deleteAll();
+ void deleteCurrentCacheData();
void openCacheFolder();
void deleteSelected();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic