mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-13 02:42:09 +02:00
Packages (Windows): find scoop installation path by parsing scoop config file
This commit is contained in:
@@ -37,7 +37,8 @@ typedef struct FFPackagesResult
|
||||
uint32_t pkgsrc;
|
||||
uint32_t pkgtool;
|
||||
uint32_t rpm;
|
||||
uint32_t scoop;
|
||||
uint32_t scoopUser;
|
||||
uint32_t scoopGlobal;
|
||||
uint32_t snap;
|
||||
uint32_t soar;
|
||||
uint32_t sorcery;
|
||||
|
||||
@@ -34,23 +34,53 @@ static uint32_t getNumElements(const char* searchPath /* including `\*` suffix *
|
||||
return counter;
|
||||
}
|
||||
|
||||
static inline void wrapYyjsonFree(yyjson_doc** doc)
|
||||
{
|
||||
assert(doc);
|
||||
if (*doc)
|
||||
yyjson_doc_free(*doc);
|
||||
}
|
||||
|
||||
static void detectScoop(FFPackagesResult* result)
|
||||
{
|
||||
FF_STRBUF_AUTO_DESTROY scoopPath = ffStrbufCreateA(MAX_PATH + 3);
|
||||
ffStrbufAppendS(&scoopPath, instance.state.platform.homeDir.chars);
|
||||
ffStrbufAppendS(&scoopPath, ".config/scoop/config.json");
|
||||
|
||||
if(ffFindExecutableInPath("scoop.cmd", &scoopPath) == NULL)
|
||||
yyjson_val* root = NULL;
|
||||
|
||||
yyjson_doc* __attribute__((__cleanup__(wrapYyjsonFree))) doc = yyjson_read_file(scoopPath.chars, 0, NULL, NULL);
|
||||
if (doc)
|
||||
{
|
||||
// C:\Users\$USER\scoop\shims\scoop.cmd
|
||||
ffStrbufSubstrBeforeLastC(&scoopPath, '\\');
|
||||
ffStrbufSubstrBeforeLastC(&scoopPath, '\\');
|
||||
root = yyjson_doc_get_root(doc);
|
||||
if (!yyjson_is_obj(root)) root = NULL;
|
||||
}
|
||||
|
||||
{
|
||||
ffStrbufClear(&scoopPath);
|
||||
if (root)
|
||||
ffStrbufSetS(&scoopPath, yyjson_get_str(yyjson_obj_get(root, "root_path")));
|
||||
if (scoopPath.length == 0)
|
||||
{
|
||||
ffStrbufSet(&scoopPath, &instance.state.platform.homeDir);
|
||||
ffStrbufAppendS(&scoopPath, "/scoop");
|
||||
}
|
||||
ffStrbufAppendS(&scoopPath, "/apps/*");
|
||||
result->scoopUser = getNumElements(scoopPath.chars, FILE_ATTRIBUTE_DIRECTORY, "scoop");
|
||||
}
|
||||
else
|
||||
|
||||
{
|
||||
ffStrbufAppendS(&scoopPath, instance.state.platform.homeDir.chars);
|
||||
ffStrbufAppendS(&scoopPath, "/scoop/apps/*");
|
||||
ffStrbufClear(&scoopPath);
|
||||
if (root)
|
||||
ffStrbufSetS(&scoopPath, yyjson_get_str(yyjson_obj_get(root, "global_path")));
|
||||
if (scoopPath.length == 0)
|
||||
{
|
||||
ffStrbufSetS(&scoopPath, getenv("ProgramData"));
|
||||
ffStrbufAppendS(&scoopPath, "/scoop");
|
||||
}
|
||||
ffStrbufAppendS(&scoopPath, "/apps/*");
|
||||
result->scoopGlobal = getNumElements(scoopPath.chars, FILE_ATTRIBUTE_DIRECTORY, "scoop");
|
||||
}
|
||||
result->scoop = getNumElements(scoopPath.chars, FILE_ATTRIBUTE_DIRECTORY, "scoop");
|
||||
}
|
||||
|
||||
static void detectChoco(FF_MAYBE_UNUSED FFPackagesResult* result)
|
||||
|
||||
@@ -23,6 +23,7 @@ void ffPrintPackages(FFPackagesOptions* options)
|
||||
uint32_t guixAll = counts.guixSystem + counts.guixUser + counts.guixHome;
|
||||
uint32_t hpkgAll = counts.hpkgSystem + counts.hpkgUser;
|
||||
uint32_t amAll = counts.amSystem + counts.amUser;
|
||||
uint32_t scoopAll = counts.scoopUser + counts.scoopGlobal;
|
||||
|
||||
if(options->moduleArgs.outputFormat.length == 0)
|
||||
{
|
||||
@@ -104,7 +105,15 @@ void ffPrintPackages(FFPackagesOptions* options)
|
||||
FF_PRINT_PACKAGE_NAME(brewCask, "brew-cask")
|
||||
}
|
||||
FF_PRINT_PACKAGE(macports)
|
||||
FF_PRINT_PACKAGE(scoop)
|
||||
if (options->combined)
|
||||
{
|
||||
FF_PRINT_PACKAGE_ALL(scoop);
|
||||
}
|
||||
else
|
||||
{
|
||||
FF_PRINT_PACKAGE_NAME(scoopUser, counts.scoopGlobal ? "scoop-user" : "scoop")
|
||||
FF_PRINT_PACKAGE_NAME(scoopGlobal, "scoop-global")
|
||||
}
|
||||
FF_PRINT_PACKAGE(choco)
|
||||
FF_PRINT_PACKAGE(pkgtool)
|
||||
FF_PRINT_PACKAGE(paludis)
|
||||
@@ -162,7 +171,8 @@ void ffPrintPackages(FFPackagesOptions* options)
|
||||
FF_FORMAT_ARG(counts.brew, "brew"),
|
||||
FF_FORMAT_ARG(counts.brewCask, "brew-cask"),
|
||||
FF_FORMAT_ARG(counts.macports, "macports"),
|
||||
FF_FORMAT_ARG(counts.scoop, "scoop"),
|
||||
FF_FORMAT_ARG(counts.scoopUser, "scoop-user"),
|
||||
FF_FORMAT_ARG(counts.scoopGlobal, "scoop-global"),
|
||||
FF_FORMAT_ARG(counts.choco, "choco"),
|
||||
FF_FORMAT_ARG(counts.pkgtool, "pkgtool"),
|
||||
FF_FORMAT_ARG(counts.paludis, "paludis"),
|
||||
@@ -521,7 +531,8 @@ void ffGeneratePackagesJsonResult(FF_MAYBE_UNUSED FFPackagesOptions* options, yy
|
||||
FF_APPEND_PACKAGE_COUNT(pkgsrc)
|
||||
FF_APPEND_PACKAGE_COUNT(macports)
|
||||
FF_APPEND_PACKAGE_COUNT(rpm)
|
||||
FF_APPEND_PACKAGE_COUNT(scoop)
|
||||
FF_APPEND_PACKAGE_COUNT(scoopUser)
|
||||
FF_APPEND_PACKAGE_COUNT(scoopGlobal)
|
||||
FF_APPEND_PACKAGE_COUNT(snap)
|
||||
FF_APPEND_PACKAGE_COUNT(soar)
|
||||
FF_APPEND_PACKAGE_COUNT(sorcery)
|
||||
@@ -558,7 +569,8 @@ static FFModuleBaseInfo ffModuleInfo = {
|
||||
{"Number of brew packages", "brew"},
|
||||
{"Number of brew-cask packages", "brew-cask"},
|
||||
{"Number of macports packages", "macports"},
|
||||
{"Number of scoop packages", "scoop"},
|
||||
{"Number of scoop-user packages", "scoop-user"},
|
||||
{"Number of scoop-global packages", "scoop-global"},
|
||||
{"Number of choco packages", "choco"},
|
||||
{"Number of pkgtool packages", "pkgtool"},
|
||||
{"Number of paludis packages", "paludis"},
|
||||
|
||||
Reference in New Issue
Block a user