X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/4a0dbdea4fe8385c7265b5e56f0b0d2c90985cde..edced8460b:/src/panels/places/placesitemlistwidget.cpp diff --git a/src/panels/places/placesitemlistwidget.cpp b/src/panels/places/placesitemlistwidget.cpp index 2f1ac5909..38bc13438 100644 --- a/src/panels/places/placesitemlistwidget.cpp +++ b/src/panels/places/placesitemlistwidget.cpp @@ -6,19 +6,18 @@ #include "placesitemlistwidget.h" -// #include - -#include -#include #include +#include #include -#include #include +#include +#include #define CAPACITYBAR_HEIGHT 2 #define CAPACITYBAR_MARGIN 2 +#define CAPACITYBAR_CACHE_TTL 60000 PlacesItemListWidget::PlacesItemListWidget(KItemListWidgetInformant* informant, QGraphicsItem* parent) : @@ -44,53 +43,53 @@ QPalette::ColorRole PlacesItemListWidget::normalTextColorRole() const void PlacesItemListWidget::updateCapacityBar() { - const bool isDevice = !data().value("udi").toString().isEmpty(); - const QUrl url = data().value("url").toUrl(); - if (isDevice && url.isLocalFile()) { - if (!m_freeSpaceInfo.job - && ( - !m_freeSpaceInfo.lastUpdated.isValid() - || m_freeSpaceInfo.lastUpdated.secsTo(QDateTime::currentDateTimeUtc()) > 60 - ) - ) { - // qDebug() << "url:" << url; - m_freeSpaceInfo.job = KIO::fileSystemFreeSpace(url); - connect( - m_freeSpaceInfo.job, - &KIO::FileSystemFreeSpaceJob::result, - this, - [this](KIO::Job *job, KIO::filesize_t size, KIO::filesize_t available) { - // even if we receive an error we want to refresh lastUpdated to avoid repeatedly querying in this case - m_freeSpaceInfo.lastUpdated = QDateTime::currentDateTimeUtc(); - - if (job->error()) { - return; - } - - m_freeSpaceInfo.size = size; - m_freeSpaceInfo.used = size - available; - m_freeSpaceInfo.usedRatio = (qreal)m_freeSpaceInfo.used / (qreal)m_freeSpaceInfo.size; - m_drawCapacityBar = size > 0; - // qDebug() << "job.url:" << data().value("url").toUrl(); - // qDebug() << "job.size:" << m_freeSpaceInfo.size; - // qDebug() << "job.used:" << m_freeSpaceInfo.used; - // qDebug() << "job.ratio:" << m_freeSpaceInfo.usedRatio; - // qDebug() << "job.draw:" << m_drawCapacityBar; - - update(); - } - ); - } else { - // Job running or cache is still valid. - } - } else { + const QString udi = data().value("udi").toString(); + if (udi.isEmpty()) { resetCapacityBar(); + return; + } + const Solid::Device device = Solid::Device(udi); + if (device.isDeviceInterface(Solid::DeviceInterface::NetworkShare) + || device.isDeviceInterface(Solid::DeviceInterface::OpticalDrive) + || device.isDeviceInterface(Solid::DeviceInterface::OpticalDisc)) { + resetCapacityBar(); + return; + } + const QUrl url = data().value("url").toUrl(); + + if (m_freeSpaceInfo.job || !m_freeSpaceInfo.lastUpdated.hasExpired()) { + // Job running or cache is still valid. + return; } + + m_freeSpaceInfo.job = KIO::fileSystemFreeSpace(url); + connect( + m_freeSpaceInfo.job, + &KIO::FileSystemFreeSpaceJob::result, + this, + [this](KIO::Job *job, KIO::filesize_t size, KIO::filesize_t available) { + // even if we receive an error we want to refresh lastUpdated to avoid repeatedly querying in this case + m_freeSpaceInfo.lastUpdated.setRemainingTime(CAPACITYBAR_CACHE_TTL); + + if (job->error()) { + return; + } + + m_freeSpaceInfo.size = size; + m_freeSpaceInfo.used = size - available; + m_freeSpaceInfo.usedRatio = (qreal)m_freeSpaceInfo.used / (qreal)m_freeSpaceInfo.size; + m_drawCapacityBar = size > 0; + + update(); + } + ); } void PlacesItemListWidget::resetCapacityBar() { m_drawCapacityBar = false; + delete m_freeSpaceInfo.job; + m_freeSpaceInfo.lastUpdated.setRemainingTime(0); m_freeSpaceInfo.size = 0; m_freeSpaceInfo.used = 0; m_freeSpaceInfo.usedRatio = 0;