File indexing completed on 2024-05-12 04:46:01

0001 #include "dirinfo.h"
0002 
0003 #if (defined Q_OS_LINUX || defined Q_OS_FREEBSD) && !defined Q_OS_ANDROID
0004 #include <KIO/DirectorySizeJob>
0005 #include <KIO/FileSystemFreeSpaceJob>
0006 #endif
0007 
0008 #include <QDebug>
0009 #include <MauiKit3/FileBrowsing/fmstatic.h>
0010 
0011 DirInfo::DirInfo(QObject *parent) : QObject(parent)
0012 {
0013 #if (defined Q_OS_LINUX || defined Q_OS_FREEBSD) && !defined Q_OS_ANDROID
0014     auto m_free =  KIO::fileSystemFreeSpace (QUrl("file:///"));
0015     connect(m_free, &KIO::FileSystemFreeSpaceJob::result, [this, m_free](KJob *, KIO::filesize_t size, KIO::filesize_t available)
0016     {
0017         qDebug() << "got dir size info FREEE" << size << available;
0018 
0019         m_totalSpace = size;
0020         m_avaliableSpace = available;
0021 
0022         Q_EMIT this->avaliableSpaceChanged(m_avaliableSpace);
0023         Q_EMIT this->totalSpaceChanged(m_totalSpace);
0024 
0025         m_free->deleteLater();
0026 
0027     });
0028 #endif
0029 }
0030 
0031 QUrl DirInfo::url() const
0032 {
0033     return m_url;
0034 }
0035 
0036 quint64 DirInfo::size() const
0037 {
0038     return m_size;
0039 }
0040 
0041 quint64 DirInfo::dirCount() const
0042 {
0043     return m_dirCount;
0044 }
0045 
0046 quint64 DirInfo::filesCount() const
0047 {
0048     return m_filesCount;
0049 }
0050 
0051 QString DirInfo::sizeString() const
0052 {
0053     QLocale m_locale;
0054     return m_locale.formattedDataSize(m_size);
0055 }
0056 
0057 quint64 DirInfo::avaliableSpace() const
0058 {
0059     return m_avaliableSpace;
0060 }
0061 
0062 quint64 DirInfo::totalSpace() const
0063 {
0064     return m_totalSpace;
0065 }
0066 
0067 QString DirInfo::avaliableSpaceString() const
0068 {
0069     QLocale m_locale;
0070     return m_locale.formattedDataSize(m_avaliableSpace);
0071 }
0072 
0073 QString DirInfo::totalSpaceString() const
0074 {
0075     QLocale m_locale;
0076     return m_locale.formattedDataSize(m_totalSpace);
0077 }
0078 
0079 void DirInfo::setUrl(QUrl url)
0080 {
0081     if (m_url == url)
0082         return;
0083 
0084     m_url = url;
0085     this->getSize();
0086     Q_EMIT urlChanged(m_url);
0087 }
0088 
0089 void DirInfo::getSize()
0090 {
0091     if(!m_url.isValid() || m_url.isEmpty() || !m_url.isLocalFile())
0092         return;
0093     qDebug() << "Askign for dir size" << m_url;
0094 
0095 #if (defined Q_OS_LINUX || defined Q_OS_FREEBSD) && !defined Q_OS_ANDROID
0096     auto m_job = KIO::directorySize(m_url);
0097 
0098     //    connect(m_job, &KIO::DirectorySizeJob::percent, [this, m_job](KJob *, unsigned long percent)
0099     //    {
0100     //        qDebug() << "got dir size info percent" << percent;
0101     //    });
0102 
0103 //    connect(m_job, &KIO::DirectorySizeJob::processedSize, [this, m_job](KJob *, qulonglong size)
0104 //    {
0105 //        qDebug() << "got dir size info processed size" << size;
0106 //    });
0107 
0108     connect(m_job, &KIO::DirectorySizeJob::result, [this, m_job](KJob *)
0109     {
0110         qDebug() << "got dir size info" << m_job->totalSize();
0111         m_size = m_job->totalSize();
0112         m_filesCount = m_job->totalFiles();
0113         m_dirCount = m_job->totalSubdirs();
0114 
0115         Q_EMIT this->sizeChanged(m_size);
0116         Q_EMIT this->filesCountChanged(m_filesCount);
0117         Q_EMIT this->dirsCountChanged(m_dirCount);
0118 
0119     });
0120 
0121 #endif
0122 }
0123