mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2025-02-20 11:43:27 +08:00
parent
4e9ee9aa03
commit
15bb5bfb24
@ -1469,10 +1469,10 @@
|
|||||||
"const": "packages",
|
"const": "packages",
|
||||||
"description": "List installed package managers and count of installed packages"
|
"description": "List installed package managers and count of installed packages"
|
||||||
},
|
},
|
||||||
"winget": {
|
"disabled": {
|
||||||
"description": "Set if winget package count should be detected.\nNote this is very slow operation. Please make sure `winget list` works before enable this option\nWindows only",
|
"description": "A colon separated list of package managers to be disabled when detecting",
|
||||||
"type": "boolean",
|
"type": "string",
|
||||||
"default": false
|
"default": "winget"
|
||||||
},
|
},
|
||||||
"key": {
|
"key": {
|
||||||
"$ref": "#/$defs/key"
|
"$ref": "#/$defs/key"
|
||||||
|
@ -1013,17 +1013,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"long": "packages-winget",
|
"long": "packages-disabled",
|
||||||
"desc": "Set if winget package count should be detected",
|
"desc": "A colon separated list of package managers to be disabled when detecting",
|
||||||
"remark": [
|
"remark": [
|
||||||
"This option is extremely slow.",
|
"Some detection methods can be very slow.",
|
||||||
"You may need to increase value of '--processing-timeout' to make it actually work.",
|
"You may need to increase value of '--processing-timeout' to make it actually work.",
|
||||||
"Windows only"
|
"Use `--packages-disabled none` to enable all."
|
||||||
],
|
],
|
||||||
"arg": {
|
"arg": {
|
||||||
"type": "bool",
|
"type": "string",
|
||||||
"optional": true,
|
"default": "winget"
|
||||||
"default": false
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -99,14 +99,16 @@ static uint32_t getNixPackages(FFstrbuf* baseDir, const char* dirname)
|
|||||||
return num_elements;
|
return num_elements;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ffDetectPackagesImpl(FFPackagesResult* result, FF_MAYBE_UNUSED FFPackagesOptions* options)
|
void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options)
|
||||||
{
|
{
|
||||||
getBrewPackages(result);
|
if (!(options->disabled & FF_PACKAGES_FLAG_BREW_BIT)) getBrewPackages(result);
|
||||||
result->macports = getMacPortsPackages();
|
if (!(options->disabled & FF_PACKAGES_FLAG_MACPORTS_BIT)) result->macports = getMacPortsPackages();
|
||||||
|
if (!(options->disabled & FF_PACKAGES_FLAG_NIX_BIT))
|
||||||
|
{
|
||||||
FF_STRBUF_AUTO_DESTROY baseDir = ffStrbufCreateS(FASTFETCH_TARGET_DIR_ROOT);
|
FF_STRBUF_AUTO_DESTROY baseDir = ffStrbufCreateS(FASTFETCH_TARGET_DIR_ROOT);
|
||||||
result->nixDefault += getNixPackages(&baseDir, "/nix/var/nix/profiles/default");
|
result->nixDefault += getNixPackages(&baseDir, "/nix/var/nix/profiles/default");
|
||||||
result->nixSystem += getNixPackages(&baseDir, "/run/current-system");
|
result->nixSystem += getNixPackages(&baseDir, "/run/current-system");
|
||||||
ffStrbufSet(&baseDir, &instance.state.platform.homeDir);
|
ffStrbufSet(&baseDir, &instance.state.platform.homeDir);
|
||||||
result->nixUser = getNixPackages(&baseDir, "/.nix-profile");
|
result->nixUser = getNixPackages(&baseDir, "/.nix-profile");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,5 +4,6 @@
|
|||||||
|
|
||||||
void ffDetectPackagesImpl(FFPackagesResult* result, FF_MAYBE_UNUSED FFPackagesOptions* options)
|
void ffDetectPackagesImpl(FFPackagesResult* result, FF_MAYBE_UNUSED FFPackagesOptions* options)
|
||||||
{
|
{
|
||||||
|
if (!(options->disabled & FF_PACKAGES_FLAG_PKG_BIT))
|
||||||
result->pkg = (uint32_t) ffSettingsGetSQLite3Int(FASTFETCH_TARGET_DIR_ROOT "/var/db/pkg/local.sqlite", "SELECT count(*) FROM packages");
|
result->pkg = (uint32_t) ffSettingsGetSQLite3Int(FASTFETCH_TARGET_DIR_ROOT "/var/db/pkg/local.sqlite", "SELECT count(*) FROM packages");
|
||||||
}
|
}
|
||||||
|
@ -253,38 +253,47 @@ static uint32_t getRpmFromLibrpm(void)
|
|||||||
|
|
||||||
#endif //FF_HAVE_RPM
|
#endif //FF_HAVE_RPM
|
||||||
|
|
||||||
static void getPackageCounts(FFstrbuf* baseDir, FFPackagesResult* packageCounts)
|
static void getPackageCounts(FFstrbuf* baseDir, FFPackagesResult* packageCounts, FFPackagesOptions* options)
|
||||||
{
|
{
|
||||||
packageCounts->apk += getNumStrings(baseDir, "/lib/apk/db/installed", "C:Q");
|
if (!(options->disabled & FF_PACKAGES_FLAG_APK_BIT)) packageCounts->apk += getNumStrings(baseDir, "/lib/apk/db/installed", "C:Q");
|
||||||
packageCounts->dpkg += getNumStrings(baseDir, "/var/lib/dpkg/status", "Status: install ok installed");
|
if (!(options->disabled & FF_PACKAGES_FLAG_DPKG_BIT)) packageCounts->dpkg += getNumStrings(baseDir, "/var/lib/dpkg/status", "Status: install ok installed");
|
||||||
packageCounts->emerge += countFilesRecursive(baseDir, "/var/db/pkg", "SIZE");
|
if (!(options->disabled & FF_PACKAGES_FLAG_EMERGE_BIT)) packageCounts->emerge += countFilesRecursive(baseDir, "/var/db/pkg", "SIZE");
|
||||||
packageCounts->eopkg += getNumElements(baseDir, "/var/lib/eopkg/package", DT_DIR);
|
if (!(options->disabled & FF_PACKAGES_FLAG_EOPKG_BIT)) packageCounts->eopkg += getNumElements(baseDir, "/var/lib/eopkg/package", DT_DIR);
|
||||||
packageCounts->flatpakSystem += getFlatpak(baseDir, "/var/lib/flatpak");
|
if (!(options->disabled & FF_PACKAGES_FLAG_FLATPAK_BIT)) packageCounts->flatpakSystem += getFlatpak(baseDir, "/var/lib/flatpak");
|
||||||
|
if (!(options->disabled & FF_PACKAGES_FLAG_NIX_BIT))
|
||||||
|
{
|
||||||
packageCounts->nixDefault += getNixPackages(baseDir, "/nix/var/nix/profiles/default");
|
packageCounts->nixDefault += getNixPackages(baseDir, "/nix/var/nix/profiles/default");
|
||||||
packageCounts->nixSystem += getNixPackages(baseDir, "/run/current-system");
|
packageCounts->nixSystem += getNixPackages(baseDir, "/run/current-system");
|
||||||
packageCounts->pacman += getNumElements(baseDir, "/var/lib/pacman/local", DT_DIR);
|
}
|
||||||
packageCounts->pkgtool += getNumElements(baseDir, "/var/log/packages", DT_REG);
|
if (!(options->disabled & FF_PACKAGES_FLAG_PACMAN_BIT)) packageCounts->pacman += getNumElements(baseDir, "/var/lib/pacman/local", DT_DIR);
|
||||||
packageCounts->rpm += getSQLite3Int(baseDir, "/var/lib/rpm/rpmdb.sqlite", "SELECT count(*) FROM Packages");
|
if (!(options->disabled & FF_PACKAGES_FLAG_PKGTOOL_BIT)) packageCounts->pkgtool += getNumElements(baseDir, "/var/log/packages", DT_REG);
|
||||||
packageCounts->snap += getSnap(baseDir);
|
if (!(options->disabled & FF_PACKAGES_FLAG_RPM_BIT)) packageCounts->rpm += getSQLite3Int(baseDir, "/var/lib/rpm/rpmdb.sqlite", "SELECT count(*) FROM Packages");
|
||||||
packageCounts->xbps += getXBPS(baseDir, "/var/db/xbps");
|
if (!(options->disabled & FF_PACKAGES_FLAG_SNAP_BIT)) packageCounts->snap += getSnap(baseDir);
|
||||||
|
if (!(options->disabled & FF_PACKAGES_FLAG_XBPS_BIT)) packageCounts->xbps += getXBPS(baseDir, "/var/db/xbps");
|
||||||
|
if (!(options->disabled & FF_PACKAGES_FLAG_BREW_BIT))
|
||||||
|
{
|
||||||
packageCounts->brewCask += getNumElements(baseDir, "/home/linuxbrew/.linuxbrew/Caskroom", DT_DIR);
|
packageCounts->brewCask += getNumElements(baseDir, "/home/linuxbrew/.linuxbrew/Caskroom", DT_DIR);
|
||||||
packageCounts->brew += getNumElements(baseDir, "/home/linuxbrew/.linuxbrew/Cellar", DT_DIR);
|
packageCounts->brew += getNumElements(baseDir, "/home/linuxbrew/.linuxbrew/Cellar", DT_DIR);
|
||||||
packageCounts->paludis += countFilesRecursive(baseDir, "/var/db/paludis/repositories", "environment.bz2");
|
}
|
||||||
packageCounts->opkg += getNumStrings(baseDir, "/usr/lib/opkg/status", "Package:"); // openwrt
|
if (!(options->disabled & FF_PACKAGES_FLAG_PALUDIS_BIT)) packageCounts->paludis += countFilesRecursive(baseDir, "/var/db/paludis/repositories", "environment.bz2");
|
||||||
|
if (!(options->disabled & FF_PACKAGES_FLAG_OPKG_BIT)) packageCounts->opkg += getNumStrings(baseDir, "/usr/lib/opkg/status", "Package:"); // openwrt
|
||||||
}
|
}
|
||||||
|
|
||||||
static void getPackageCountsRegular(FFstrbuf* baseDir, FFPackagesResult* packageCounts)
|
static void getPackageCountsRegular(FFstrbuf* baseDir, FFPackagesResult* packageCounts, FFPackagesOptions* options)
|
||||||
{
|
{
|
||||||
getPackageCounts(baseDir, packageCounts);
|
getPackageCounts(baseDir, packageCounts, options);
|
||||||
|
|
||||||
|
if (!(options->disabled & FF_PACKAGES_FLAG_PACMAN_BIT))
|
||||||
|
{
|
||||||
uint32_t baseDirLength = baseDir->length;
|
uint32_t baseDirLength = baseDir->length;
|
||||||
ffStrbufAppendS(baseDir, FASTFETCH_TARGET_DIR_ETC "/pacman-mirrors.conf");
|
ffStrbufAppendS(baseDir, FASTFETCH_TARGET_DIR_ETC "/pacman-mirrors.conf");
|
||||||
if(ffParsePropFile(baseDir->chars, "Branch =", &packageCounts->pacmanBranch) && packageCounts->pacmanBranch.length == 0)
|
if(ffParsePropFile(baseDir->chars, "Branch =", &packageCounts->pacmanBranch) && packageCounts->pacmanBranch.length == 0)
|
||||||
ffStrbufAppendS(&packageCounts->pacmanBranch, "stable");
|
ffStrbufAppendS(&packageCounts->pacmanBranch, "stable");
|
||||||
ffStrbufSubstrBefore(baseDir, baseDirLength);
|
ffStrbufSubstrBefore(baseDir, baseDirLength);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void getPackageCountsBedrock(FFstrbuf* baseDir, FFPackagesResult* packageCounts)
|
static void getPackageCountsBedrock(FFstrbuf* baseDir, FFPackagesResult* packageCounts, FFPackagesOptions* options)
|
||||||
{
|
{
|
||||||
uint32_t baseDirLength = baseDir->length;
|
uint32_t baseDirLength = baseDir->length;
|
||||||
|
|
||||||
@ -309,32 +318,34 @@ static void getPackageCountsBedrock(FFstrbuf* baseDir, FFPackagesResult* package
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
ffStrbufAppendS(baseDir, entry->d_name);
|
ffStrbufAppendS(baseDir, entry->d_name);
|
||||||
getPackageCounts(baseDir, packageCounts);
|
getPackageCounts(baseDir, packageCounts, options);
|
||||||
ffStrbufSubstrBefore(baseDir, baseDirLength2);
|
ffStrbufSubstrBefore(baseDir, baseDirLength2);
|
||||||
}
|
}
|
||||||
|
|
||||||
ffStrbufSubstrBefore(baseDir, baseDirLength);
|
ffStrbufSubstrBefore(baseDir, baseDirLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ffDetectPackagesImpl(FFPackagesResult* result, FF_MAYBE_UNUSED FFPackagesOptions* options)
|
void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options)
|
||||||
{
|
{
|
||||||
FF_STRBUF_AUTO_DESTROY baseDir = ffStrbufCreateA(512);
|
FF_STRBUF_AUTO_DESTROY baseDir = ffStrbufCreateA(512);
|
||||||
ffStrbufAppendS(&baseDir, FASTFETCH_TARGET_DIR_ROOT);
|
ffStrbufAppendS(&baseDir, FASTFETCH_TARGET_DIR_ROOT);
|
||||||
|
|
||||||
if(ffStrbufIgnCaseEqualS(&ffDetectOS()->id, "bedrock"))
|
if(ffStrbufIgnCaseEqualS(&ffDetectOS()->id, "bedrock"))
|
||||||
getPackageCountsBedrock(&baseDir, result);
|
getPackageCountsBedrock(&baseDir, result, options);
|
||||||
else
|
else
|
||||||
getPackageCountsRegular(&baseDir, result);
|
getPackageCountsRegular(&baseDir, result, options);
|
||||||
|
|
||||||
// If SQL failed, we can still try with librpm.
|
// If SQL failed, we can still try with librpm.
|
||||||
// This is needed on openSUSE, which seems to use a proprietary database file
|
// This is needed on openSUSE, which seems to use a proprietary database file
|
||||||
// This method doesn't work on bedrock, so we do it here.
|
// This method doesn't work on bedrock, so we do it here.
|
||||||
#ifdef FF_HAVE_RPM
|
#ifdef FF_HAVE_RPM
|
||||||
if(result->rpm == 0)
|
if(!(options->disabled & FF_PACKAGES_FLAG_RPM_BIT) && result->rpm == 0)
|
||||||
result->rpm = getRpmFromLibrpm();
|
result->rpm = getRpmFromLibrpm();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ffStrbufSet(&baseDir, &instance.state.platform.homeDir);
|
ffStrbufSet(&baseDir, &instance.state.platform.homeDir);
|
||||||
|
if (!(options->disabled & FF_PACKAGES_FLAG_NIX_BIT))
|
||||||
result->nixUser = getNixPackages(&baseDir, "/.nix-profile");
|
result->nixUser = getNixPackages(&baseDir, "/.nix-profile");
|
||||||
|
if (!(options->disabled & FF_PACKAGES_FLAG_FLATPAK_BIT))
|
||||||
result->flatpakUser = getFlatpak(&baseDir, "/.local/share/flatpak");
|
result->flatpakUser = getFlatpak(&baseDir, "/.local/share/flatpak");
|
||||||
}
|
}
|
||||||
|
@ -107,9 +107,8 @@ static void detectWinget(FFPackagesResult* result)
|
|||||||
|
|
||||||
void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options)
|
void ffDetectPackagesImpl(FFPackagesResult* result, FFPackagesOptions* options)
|
||||||
{
|
{
|
||||||
detectScoop(result);
|
if (!(options->disabled & FF_PACKAGES_FLAG_SCOOP_BIT)) detectScoop(result);
|
||||||
detectChoco(result);
|
if (!(options->disabled & FF_PACKAGES_FLAG_CHOCO_BIT)) detectChoco(result);
|
||||||
detectPacman(result);
|
if (!(options->disabled & FF_PACKAGES_FLAG_PACMAN_BIT)) detectPacman(result);
|
||||||
if (options->winget)
|
if (!(options->disabled & FF_PACKAGES_FLAG_WINGET_BIT)) detectWinget(result);
|
||||||
detectWinget(result);
|
|
||||||
}
|
}
|
||||||
|
@ -4,12 +4,34 @@
|
|||||||
|
|
||||||
#include "common/option.h"
|
#include "common/option.h"
|
||||||
|
|
||||||
|
typedef enum FFPackagesFlags
|
||||||
|
{
|
||||||
|
FF_PACKAGES_FLAG_NONE = 0,
|
||||||
|
FF_PACKAGES_FLAG_APK_BIT = 1 << 0,
|
||||||
|
FF_PACKAGES_FLAG_BREW_BIT = 1 << 1,
|
||||||
|
FF_PACKAGES_FLAG_CHOCO_BIT = 1 << 2,
|
||||||
|
FF_PACKAGES_FLAG_DPKG_BIT = 1 << 3,
|
||||||
|
FF_PACKAGES_FLAG_EMERGE_BIT = 1 << 4,
|
||||||
|
FF_PACKAGES_FLAG_EOPKG_BIT = 1 << 5,
|
||||||
|
FF_PACKAGES_FLAG_FLATPAK_BIT = 1 << 6,
|
||||||
|
FF_PACKAGES_FLAG_NIX_BIT = 1 << 7,
|
||||||
|
FF_PACKAGES_FLAG_OPKG_BIT = 1 << 8,
|
||||||
|
FF_PACKAGES_FLAG_PACMAN_BIT = 1 << 9,
|
||||||
|
FF_PACKAGES_FLAG_PALUDIS_BIT = 1 << 10,
|
||||||
|
FF_PACKAGES_FLAG_PKG_BIT = 1 << 11,
|
||||||
|
FF_PACKAGES_FLAG_PKGTOOL_BIT = 1 << 12,
|
||||||
|
FF_PACKAGES_FLAG_MACPORTS_BIT = 1 << 13,
|
||||||
|
FF_PACKAGES_FLAG_RPM_BIT = 1 << 14,
|
||||||
|
FF_PACKAGES_FLAG_SCOOP_BIT = 1 << 15,
|
||||||
|
FF_PACKAGES_FLAG_SNAP_BIT = 1 << 16,
|
||||||
|
FF_PACKAGES_FLAG_WINGET_BIT = 1 << 17,
|
||||||
|
FF_PACKAGES_FLAG_XBPS_BIT = 1 << 18,
|
||||||
|
} FFPackagesFlags;
|
||||||
|
|
||||||
typedef struct FFPackagesOptions
|
typedef struct FFPackagesOptions
|
||||||
{
|
{
|
||||||
FFModuleBaseInfo moduleInfo;
|
FFModuleBaseInfo moduleInfo;
|
||||||
FFModuleArgs moduleArgs;
|
FFModuleArgs moduleArgs;
|
||||||
|
|
||||||
#ifdef _WIN32
|
FFPackagesFlags disabled;
|
||||||
bool winget;
|
|
||||||
#endif
|
|
||||||
} FFPackagesOptions;
|
} FFPackagesOptions;
|
||||||
|
@ -40,9 +40,8 @@ void ffPrintPackages(FFPackagesOptions* options)
|
|||||||
if(counts.pacmanBranch.length > 0)
|
if(counts.pacmanBranch.length > 0)
|
||||||
printf("[%s]", counts.pacmanBranch.chars);
|
printf("[%s]", counts.pacmanBranch.chars);
|
||||||
if((all -= counts.pacman) > 0)
|
if((all -= counts.pacman) > 0)
|
||||||
fputs(", ", stdout);
|
printf(", ");
|
||||||
};
|
};
|
||||||
|
|
||||||
FF_PRINT_PACKAGE(dpkg)
|
FF_PRINT_PACKAGE(dpkg)
|
||||||
FF_PRINT_PACKAGE(rpm)
|
FF_PRINT_PACKAGE(rpm)
|
||||||
FF_PRINT_PACKAGE(emerge)
|
FF_PRINT_PACKAGE(emerge)
|
||||||
@ -109,13 +108,52 @@ bool ffParsePackagesCommandOptions(FFPackagesOptions* options, const char* key,
|
|||||||
if (ffOptionParseModuleArgs(key, subKey, value, &options->moduleArgs))
|
if (ffOptionParseModuleArgs(key, subKey, value, &options->moduleArgs))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
#ifdef _WIN32
|
if (ffStrEqualsIgnCase(subKey, "disabled"))
|
||||||
if(ffStrEqualsIgnCase(subKey, "winget"))
|
|
||||||
{
|
{
|
||||||
options->winget = ffOptionParseBoolean(value);
|
options->disabled = FF_PACKAGES_FLAG_NONE;
|
||||||
|
FF_STRBUF_AUTO_DESTROY buffer = ffStrbufCreate();
|
||||||
|
ffOptionParseString(key, value, &buffer);
|
||||||
|
|
||||||
|
char *start = buffer.chars, *end = strchr(start, ':');
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
if (end)
|
||||||
|
*end = '\0';
|
||||||
|
|
||||||
|
#define FF_TEST_PACKAGE_NAME(name) else if (ffStrEqualsIgnCase(start, #name)) { options->disabled |= FF_PACKAGES_FLAG_ ## name ## _BIT; }
|
||||||
|
if (false);
|
||||||
|
FF_TEST_PACKAGE_NAME(APK)
|
||||||
|
FF_TEST_PACKAGE_NAME(BREW)
|
||||||
|
FF_TEST_PACKAGE_NAME(CHOCO)
|
||||||
|
FF_TEST_PACKAGE_NAME(DPKG)
|
||||||
|
FF_TEST_PACKAGE_NAME(EMERGE)
|
||||||
|
FF_TEST_PACKAGE_NAME(EOPKG)
|
||||||
|
FF_TEST_PACKAGE_NAME(FLATPAK)
|
||||||
|
FF_TEST_PACKAGE_NAME(NIX)
|
||||||
|
FF_TEST_PACKAGE_NAME(OPKG)
|
||||||
|
FF_TEST_PACKAGE_NAME(PACMAN)
|
||||||
|
FF_TEST_PACKAGE_NAME(PALUDIS)
|
||||||
|
FF_TEST_PACKAGE_NAME(PKG)
|
||||||
|
FF_TEST_PACKAGE_NAME(PKGTOOL)
|
||||||
|
FF_TEST_PACKAGE_NAME(MACPORTS)
|
||||||
|
FF_TEST_PACKAGE_NAME(RPM)
|
||||||
|
FF_TEST_PACKAGE_NAME(SCOOP)
|
||||||
|
FF_TEST_PACKAGE_NAME(SNAP)
|
||||||
|
FF_TEST_PACKAGE_NAME(WINGET)
|
||||||
|
FF_TEST_PACKAGE_NAME(XBPS)
|
||||||
|
#undef FF_TEST_PACKAGE_NAME
|
||||||
|
|
||||||
|
if (end)
|
||||||
|
{
|
||||||
|
start = end + 1;
|
||||||
|
end = strchr(end, ':');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -127,19 +165,55 @@ void ffParsePackagesJsonObject(FFPackagesOptions* options, yyjson_val* module)
|
|||||||
yyjson_obj_foreach(module, idx, max, key_, val)
|
yyjson_obj_foreach(module, idx, max, key_, val)
|
||||||
{
|
{
|
||||||
const char* key = yyjson_get_str(key_);
|
const char* key = yyjson_get_str(key_);
|
||||||
if(ffStrEqualsIgnCase(key, "type"))
|
if (ffStrEqualsIgnCase(key, "type"))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (ffJsonConfigParseModuleArgs(key, val, &options->moduleArgs))
|
if (ffJsonConfigParseModuleArgs(key, val, &options->moduleArgs))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
#ifdef _WIN32
|
if (ffStrEqualsIgnCase(key, "disabled"))
|
||||||
if (ffStrEqualsIgnCase(key, "winget"))
|
|
||||||
{
|
{
|
||||||
options->winget = yyjson_get_bool(val);
|
if (!yyjson_is_null(val) && !yyjson_is_arr(val))
|
||||||
|
{
|
||||||
|
ffPrintError(FF_PACKAGES_MODULE_NAME, 0, &options->moduleArgs, "Invalid JSON value for %s", key);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
options->disabled = FF_PACKAGES_FLAG_NONE;
|
||||||
|
|
||||||
|
if (yyjson_is_arr(val))
|
||||||
|
{
|
||||||
|
yyjson_val* flagObj;
|
||||||
|
size_t flagIdx, flagMax;
|
||||||
|
yyjson_arr_foreach(val, flagIdx, flagMax, flagObj)
|
||||||
|
{
|
||||||
|
const char* flag = yyjson_get_str(flagObj);
|
||||||
|
|
||||||
|
#define FF_TEST_PACKAGE_NAME(name) else if (ffStrEqualsIgnCase(flag, #name)) { options->disabled |= FF_PACKAGES_FLAG_ ## name ## _BIT; }
|
||||||
|
if (false);
|
||||||
|
FF_TEST_PACKAGE_NAME(APK)
|
||||||
|
FF_TEST_PACKAGE_NAME(BREW)
|
||||||
|
FF_TEST_PACKAGE_NAME(CHOCO)
|
||||||
|
FF_TEST_PACKAGE_NAME(DPKG)
|
||||||
|
FF_TEST_PACKAGE_NAME(EMERGE)
|
||||||
|
FF_TEST_PACKAGE_NAME(EOPKG)
|
||||||
|
FF_TEST_PACKAGE_NAME(FLATPAK)
|
||||||
|
FF_TEST_PACKAGE_NAME(NIX)
|
||||||
|
FF_TEST_PACKAGE_NAME(OPKG)
|
||||||
|
FF_TEST_PACKAGE_NAME(PACMAN)
|
||||||
|
FF_TEST_PACKAGE_NAME(PALUDIS)
|
||||||
|
FF_TEST_PACKAGE_NAME(PKG)
|
||||||
|
FF_TEST_PACKAGE_NAME(PKGTOOL)
|
||||||
|
FF_TEST_PACKAGE_NAME(MACPORTS)
|
||||||
|
FF_TEST_PACKAGE_NAME(RPM)
|
||||||
|
FF_TEST_PACKAGE_NAME(SCOOP)
|
||||||
|
FF_TEST_PACKAGE_NAME(SNAP)
|
||||||
|
FF_TEST_PACKAGE_NAME(WINGET)
|
||||||
|
FF_TEST_PACKAGE_NAME(XBPS)
|
||||||
|
#undef FF_TEST_PACKAGE_NAME
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ffPrintError(FF_PACKAGES_MODULE_NAME, 0, &options->moduleArgs, "Unknown JSON key %s", key);
|
ffPrintError(FF_PACKAGES_MODULE_NAME, 0, &options->moduleArgs, "Unknown JSON key %s", key);
|
||||||
}
|
}
|
||||||
@ -152,10 +226,32 @@ void ffGeneratePackagesJsonConfig(FFPackagesOptions* options, yyjson_mut_doc* do
|
|||||||
|
|
||||||
ffJsonConfigGenerateModuleArgsConfig(doc, module, &defaultOptions.moduleArgs, &options->moduleArgs);
|
ffJsonConfigGenerateModuleArgsConfig(doc, module, &defaultOptions.moduleArgs, &options->moduleArgs);
|
||||||
|
|
||||||
#ifdef _WIN32
|
if (options->disabled != defaultOptions.disabled)
|
||||||
if (options->winget != defaultOptions.winget)
|
{
|
||||||
yyjson_mut_obj_add_bool(doc, module, "winget", options->winget);
|
yyjson_mut_val* arr = yyjson_mut_obj_add_arr(doc, module, "disabled");
|
||||||
#endif
|
#define FF_TEST_PACKAGE_NAME(name) else if ((options->disabled & FF_PACKAGES_FLAG_ ## name ## _BIT) != (defaultOptions.disabled & FF_PACKAGES_FLAG_ ## name ## _BIT)) { yyjson_mut_arr_add_str(doc, arr, #name); }
|
||||||
|
if (false);
|
||||||
|
FF_TEST_PACKAGE_NAME(APK)
|
||||||
|
FF_TEST_PACKAGE_NAME(BREW)
|
||||||
|
FF_TEST_PACKAGE_NAME(CHOCO)
|
||||||
|
FF_TEST_PACKAGE_NAME(DPKG)
|
||||||
|
FF_TEST_PACKAGE_NAME(EMERGE)
|
||||||
|
FF_TEST_PACKAGE_NAME(EOPKG)
|
||||||
|
FF_TEST_PACKAGE_NAME(FLATPAK)
|
||||||
|
FF_TEST_PACKAGE_NAME(NIX)
|
||||||
|
FF_TEST_PACKAGE_NAME(OPKG)
|
||||||
|
FF_TEST_PACKAGE_NAME(PACMAN)
|
||||||
|
FF_TEST_PACKAGE_NAME(PALUDIS)
|
||||||
|
FF_TEST_PACKAGE_NAME(PKG)
|
||||||
|
FF_TEST_PACKAGE_NAME(PKGTOOL)
|
||||||
|
FF_TEST_PACKAGE_NAME(MACPORTS)
|
||||||
|
FF_TEST_PACKAGE_NAME(RPM)
|
||||||
|
FF_TEST_PACKAGE_NAME(SCOOP)
|
||||||
|
FF_TEST_PACKAGE_NAME(SNAP)
|
||||||
|
FF_TEST_PACKAGE_NAME(WINGET)
|
||||||
|
FF_TEST_PACKAGE_NAME(XBPS)
|
||||||
|
#undef FF_TEST_PACKAGE_NAME
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ffGeneratePackagesJsonResult(FF_MAYBE_UNUSED FFPackagesOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module)
|
void ffGeneratePackagesJsonResult(FF_MAYBE_UNUSED FFPackagesOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module)
|
||||||
@ -248,9 +344,7 @@ void ffInitPackagesOptions(FFPackagesOptions* options)
|
|||||||
);
|
);
|
||||||
ffOptionInitModuleArg(&options->moduleArgs);
|
ffOptionInitModuleArg(&options->moduleArgs);
|
||||||
|
|
||||||
#ifdef _WIN32
|
options->disabled = FF_PACKAGES_FLAG_WINGET_BIT;
|
||||||
options->winget = false;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ffDestroyPackagesOptions(FFPackagesOptions* options)
|
void ffDestroyPackagesOptions(FFPackagesOptions* options)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user