File indexing completed on 2024-04-21 04:57:27

0001 /*
0002  * SPDX-FileCopyrightText: 2022 Kai Uwe Broulik <kde@broulik.de>
0003  * SPDX-License-Identifier: GPL-2.0-or-later
0004  */
0005 
0006 #include "afcdiskusage.h"
0007 
0008 #include "afc_debug.h"
0009 
0010 #include <QScopeGuard>
0011 
0012 using namespace KIO;
0013 
0014 AfcDiskUsage::AfcDiskUsage() = default;
0015 
0016 AfcDiskUsage::AfcDiskUsage(const AfcClient::Ptr &client)
0017 {
0018     char **info = nullptr;
0019     const auto ret = afc_get_device_info(client->internalClient(), &info);
0020     if (ret != AFC_E_SUCCESS) {
0021         qCWarning(KIO_AFC_LOG) << "Failed to get device info for free disk usage" << ret;
0022         return;
0023     }
0024 
0025     auto cleanup = qScopeGuard([info] {
0026         afc_dictionary_free(info);
0027     });
0028 
0029     bool totalFound = false;
0030     bool freeFound = false;
0031 
0032     for (int i = 0; info[i]; i += 2) {
0033         const auto *key = info[i];
0034         const auto *value = info[i + 1];
0035 
0036         if (!totalFound && strcmp(key, "FSTotalBytes") == 0) {
0037             m_total = atoll(value);
0038             totalFound = true;
0039         } else if (!freeFound && strcmp(key, "FSFreeBytes") == 0) {
0040             m_free = atoll(value);
0041             freeFound = true;
0042         }
0043     }
0044 
0045     m_valid = totalFound && freeFound;
0046 }
0047 
0048 bool AfcDiskUsage::isValid() const
0049 {
0050     return m_valid;
0051 }
0052 
0053 filesize_t AfcDiskUsage::total() const
0054 {
0055     return m_total;
0056 }
0057 
0058 filesize_t AfcDiskUsage::free() const
0059 {
0060     return m_free;
0061 }