mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-13 02:14:37 +02:00
Disk: print if a folder removable; improve performance
This commit is contained in:
@@ -32,6 +32,7 @@ void ffDetectDiskWithStatvfs(const char* folderPath, struct statvfs* fs, FFDiskR
|
||||
|
||||
result->used = result->total - (fs->f_bavail * fs->f_frsize);
|
||||
result->files = (uint32_t) (fs->f_files - fs->f_ffree);
|
||||
result->removable = false; //To be set at other place
|
||||
}
|
||||
|
||||
bool ffDiskDetectDiskFolders(FFinstance* instance, FFlist* folders)
|
||||
|
||||
@@ -11,6 +11,7 @@ typedef struct FFDiskResult
|
||||
uint64_t used;
|
||||
uint64_t total;
|
||||
uint32_t files;
|
||||
bool removable;
|
||||
FFstrbuf error;
|
||||
} FFDiskResult;
|
||||
|
||||
|
||||
@@ -20,7 +20,9 @@ const char* ffDiskAutodetectFolders(FFinstance* instance, FFlist* folders)
|
||||
if(removable.boolValue && !instance->config.diskRemovable)
|
||||
continue;
|
||||
|
||||
ffDetectDiskWithStatvfs([url.relativePath cStringUsingEncoding:NSUTF8StringEncoding], NULL, (FFDiskResult*)ffListAdd(folders));
|
||||
FFDiskResult* folder = (FFDiskResult*)ffListAdd(folders);
|
||||
ffDetectDiskWithStatvfs([url.relativePath cStringUsingEncoding:NSUTF8StringEncoding], NULL, folder);
|
||||
folder->removable = removable.boolValue;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
||||
@@ -7,7 +7,10 @@ const char* ffDiskAutodetectFolders(FFinstance* instance, FFlist* folders)
|
||||
{
|
||||
FF_UNUSED(instance);
|
||||
|
||||
IEnumWbemClassObject* pEnumerator = ffQueryWmi(L"SELECT Name, DriveType, FreeSpace, Size FROM Win32_LogicalDisk", nullptr);
|
||||
const wchar_t* query = instance->config.diskRemovable
|
||||
? L"SELECT Name, DriveType, FreeSpace, Size FROM Win32_LogicalDisk"
|
||||
: L"SELECT Name, FreeSpace, Size FROM Win32_LogicalDisk WHERE DriveType != 2";
|
||||
IEnumWbemClassObject* pEnumerator = ffQueryWmi(query, nullptr);
|
||||
|
||||
if(!pEnumerator)
|
||||
return "Query WMI service failed";
|
||||
@@ -17,11 +20,6 @@ const char* ffDiskAutodetectFolders(FFinstance* instance, FFlist* folders)
|
||||
|
||||
while(SUCCEEDED(pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn)) && uReturn != 0)
|
||||
{
|
||||
uint64_t driveType;
|
||||
ffGetWmiObjUnsigned(pclsObj, L"DriveType", &driveType);
|
||||
if(driveType == 2 && !instance->config.diskRemovable)
|
||||
continue;
|
||||
|
||||
FFDiskResult* folder = (FFDiskResult*)ffListAdd(folders);
|
||||
|
||||
ffStrbufInit(&folder->path);
|
||||
@@ -32,6 +30,15 @@ const char* ffDiskAutodetectFolders(FFinstance* instance, FFlist* folders)
|
||||
ffGetWmiObjUnsigned(pclsObj, L"FreeSpace", &free);
|
||||
folder->used = folder->total - free;
|
||||
|
||||
if(instance->config.diskRemovable)
|
||||
{
|
||||
uint64_t driveType;
|
||||
ffGetWmiObjUnsigned(pclsObj, L"DriveType", &driveType);
|
||||
folder->removable = driveType == 2;
|
||||
}
|
||||
else
|
||||
folder->removable = false;
|
||||
|
||||
folder->files = 0; //Unsupported
|
||||
|
||||
ffStrbufInit(&folder->error);
|
||||
|
||||
+1
-1
@@ -37,7 +37,7 @@ static void printFolder(FFinstance* instance, FFDiskResult* folder)
|
||||
if(instance->config.disk.outputFormat.length == 0)
|
||||
{
|
||||
ffPrintLogoAndKey(instance, key.chars, 0, NULL);
|
||||
printf("%s / %s (%u%%)\n", usedPretty.chars, totalPretty.chars, percentage);
|
||||
printf("%s / %s (%u%%)%s\n", usedPretty.chars, totalPretty.chars, percentage, folder->removable ? " [Removable]" : "");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user