Disk: print if a folder removable; improve performance

This commit is contained in:
李通洲
2022-10-07 01:36:32 +08:00
parent 49921f5ed1
commit a7e93faac8
5 changed files with 19 additions and 8 deletions
+1
View File
@@ -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)
+1
View File
@@ -11,6 +11,7 @@ typedef struct FFDiskResult
uint64_t used;
uint64_t total;
uint32_t files;
bool removable;
FFstrbuf error;
} FFDiskResult;
+3 -1
View File
@@ -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;
+13 -6
View File
@@ -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
View File
@@ -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
{