+ return data().value("isHidden").toBool() ||
+ data().value("isGroupHidden").toBool();
+}
+
+QPalette::ColorRole PlacesItemListWidget::normalTextColorRole() const
+{
+ return QPalette::WindowText;
+}
+
+void PlacesItemListWidget::updateCapacityBar()
+{
+ 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;
+}
+
+void PlacesItemListWidget::polishEvent()
+{
+ updateCapacityBar();
+
+ QGraphicsWidget::polishEvent();