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 }