Packages (Windows): support winget packages count

Guarded behind `--allow-slow-operations`
This commit is contained in:
李通洲
2023-09-08 15:25:22 +08:00
parent cde2ba2c18
commit 7f1e2d2f03
4 changed files with 40 additions and 3 deletions
+1
View File
@@ -27,6 +27,7 @@ typedef struct FFPackagesResult
uint32_t rpm;
uint32_t scoop;
uint32_t snap;
uint32_t winget;
uint32_t xbps;
uint32_t all; //Make sure this goes last
+33 -1
View File
@@ -1,4 +1,5 @@
#include "packages.h"
#include "common/processing.h"
#include "util/stringUtils.h"
#include <handleapi.h>
@@ -62,7 +63,7 @@ static void detectChoco(FF_MAYBE_UNUSED FFPackagesResult* result)
result->choco = getNumElements(chocoPath, FILE_ATTRIBUTE_DIRECTORY, "choco");
}
static void detectPacman(FF_MAYBE_UNUSED FFPackagesResult* result)
static void detectPacman(FFPackagesResult* result)
{
const char* msystemPrefix = getenv("MSYSTEM_PREFIX");
if(!msystemPrefix)
@@ -75,9 +76,40 @@ static void detectPacman(FF_MAYBE_UNUSED FFPackagesResult* result)
result->pacman = getNumElements(pacmanPath, FILE_ATTRIBUTE_DIRECTORY, NULL);
}
static void detectWinget(FFPackagesResult* result)
{
FF_STRBUF_AUTO_DESTROY buffer = ffStrbufCreate();
if (ffProcessAppendStdOut(&buffer, (char* []) {
"winget.exe",
"list",
"--disable-interactivity",
NULL,
}))
return;
uint32_t index = ffStrbufFirstIndexS(&buffer, "--\r\n"); // Ignore garbage and table headers
if (index == buffer.length)
return;
uint32_t count = 0;
for (
index += strlen("--\r\n");
(index = ffStrbufNextIndexC(&buffer, index, '\n')) < buffer.length;
++index
)
++count;
if (buffer.chars[buffer.length - 1] != '\n') // count last line
++count;
result->winget = count;
}
void ffDetectPackagesImpl(FFPackagesResult* result)
{
detectScoop(result);
detectChoco(result);
detectPacman(result);
if (instance.config.allowSlowOperations)
detectWinget(result);
}