File indexing completed on 2024-04-28 05:45:19
0001 /* 0002 * SPDX-FileCopyrightText: 2014 Frank Reininghaus <frank78ac@googlemail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "spaceinfoobserver.h" 0008 0009 #include "mountpointobserver.h" 0010 0011 SpaceInfoObserver::SpaceInfoObserver(const QUrl &url, QObject *parent) 0012 : QObject(parent) 0013 , m_mountPointObserver(nullptr) 0014 , m_hasData(false) 0015 , m_dataSize(0) 0016 , m_dataAvailable(0) 0017 { 0018 m_mountPointObserver = MountPointObserver::observerForUrl(url); 0019 m_mountPointObserver->ref(); 0020 connect(m_mountPointObserver, &MountPointObserver::spaceInfoChanged, this, &SpaceInfoObserver::spaceInfoChanged); 0021 m_mountPointObserver->update(); 0022 } 0023 0024 SpaceInfoObserver::~SpaceInfoObserver() 0025 { 0026 if (m_mountPointObserver) { 0027 m_mountPointObserver->deref(); 0028 m_mountPointObserver = nullptr; 0029 } 0030 } 0031 0032 quint64 SpaceInfoObserver::size() const 0033 { 0034 return m_dataSize; 0035 } 0036 0037 quint64 SpaceInfoObserver::available() const 0038 { 0039 return m_dataAvailable; 0040 } 0041 0042 void SpaceInfoObserver::setUrl(const QUrl &url) 0043 { 0044 MountPointObserver *newObserver = MountPointObserver::observerForUrl(url); 0045 if (newObserver != m_mountPointObserver) { 0046 if (m_mountPointObserver) { 0047 disconnect(m_mountPointObserver, &MountPointObserver::spaceInfoChanged, this, &SpaceInfoObserver::spaceInfoChanged); 0048 m_mountPointObserver->deref(); 0049 m_mountPointObserver = nullptr; 0050 } 0051 0052 m_mountPointObserver = newObserver; 0053 m_mountPointObserver->ref(); 0054 connect(m_mountPointObserver, &MountPointObserver::spaceInfoChanged, this, &SpaceInfoObserver::spaceInfoChanged); 0055 0056 // If newObserver is cached it won't call update until the next timer update, 0057 // so update the observer now. 0058 m_mountPointObserver->update(); 0059 } 0060 } 0061 0062 void SpaceInfoObserver::update() 0063 { 0064 if (m_mountPointObserver) { 0065 m_mountPointObserver->update(); 0066 } 0067 } 0068 0069 void SpaceInfoObserver::spaceInfoChanged(quint64 size, quint64 available) 0070 { 0071 // Make sure that the size has actually changed 0072 if (m_dataSize != size || m_dataAvailable != available || !m_hasData) { 0073 m_hasData = true; 0074 m_dataSize = size; 0075 m_dataAvailable = available; 0076 0077 Q_EMIT valuesChanged(); 0078 } 0079 } 0080 0081 #include "moc_spaceinfoobserver.cpp"