mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-10-29 00:03:58 +01:00
@@ -4,12 +4,34 @@
|
||||
|
||||
#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
|
||||
{
|
||||
FFModuleBaseInfo moduleInfo;
|
||||
FFModuleArgs moduleArgs;
|
||||
|
||||
#ifdef _WIN32
|
||||
bool winget;
|
||||
#endif
|
||||
FFPackagesFlags disabled;
|
||||
} FFPackagesOptions;
|
||||
|
||||
+113
-19
@@ -40,9 +40,8 @@ void ffPrintPackages(FFPackagesOptions* options)
|
||||
if(counts.pacmanBranch.length > 0)
|
||||
printf("[%s]", counts.pacmanBranch.chars);
|
||||
if((all -= counts.pacman) > 0)
|
||||
fputs(", ", stdout);
|
||||
printf(", ");
|
||||
};
|
||||
|
||||
FF_PRINT_PACKAGE(dpkg)
|
||||
FF_PRINT_PACKAGE(rpm)
|
||||
FF_PRINT_PACKAGE(emerge)
|
||||
@@ -109,13 +108,52 @@ bool ffParsePackagesCommandOptions(FFPackagesOptions* options, const char* key,
|
||||
if (ffOptionParseModuleArgs(key, subKey, value, &options->moduleArgs))
|
||||
return true;
|
||||
|
||||
#ifdef _WIN32
|
||||
if(ffStrEqualsIgnCase(subKey, "winget"))
|
||||
if (ffStrEqualsIgnCase(subKey, "disabled"))
|
||||
{
|
||||
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;
|
||||
}
|
||||
#endif
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -127,19 +165,55 @@ void ffParsePackagesJsonObject(FFPackagesOptions* options, yyjson_val* module)
|
||||
yyjson_obj_foreach(module, idx, max, key_, val)
|
||||
{
|
||||
const char* key = yyjson_get_str(key_);
|
||||
if(ffStrEqualsIgnCase(key, "type"))
|
||||
if (ffStrEqualsIgnCase(key, "type"))
|
||||
continue;
|
||||
|
||||
if (ffJsonConfigParseModuleArgs(key, val, &options->moduleArgs))
|
||||
continue;
|
||||
|
||||
#ifdef _WIN32
|
||||
if (ffStrEqualsIgnCase(key, "winget"))
|
||||
if (ffStrEqualsIgnCase(key, "disabled"))
|
||||
{
|
||||
options->winget = yyjson_get_bool(val);
|
||||
continue;
|
||||
if (!yyjson_is_null(val) && !yyjson_is_arr(val))
|
||||
{
|
||||
ffPrintError(FF_PACKAGES_MODULE_NAME, 0, &options->moduleArgs, "Invalid JSON value for %s", key);
|
||||
continue;
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
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);
|
||||
|
||||
#ifdef _WIN32
|
||||
if (options->winget != defaultOptions.winget)
|
||||
yyjson_mut_obj_add_bool(doc, module, "winget", options->winget);
|
||||
#endif
|
||||
if (options->disabled != defaultOptions.disabled)
|
||||
{
|
||||
yyjson_mut_val* arr = yyjson_mut_obj_add_arr(doc, module, "disabled");
|
||||
#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)
|
||||
@@ -248,9 +344,7 @@ void ffInitPackagesOptions(FFPackagesOptions* options)
|
||||
);
|
||||
ffOptionInitModuleArg(&options->moduleArgs);
|
||||
|
||||
#ifdef _WIN32
|
||||
options->winget = false;
|
||||
#endif
|
||||
options->disabled = FF_PACKAGES_FLAG_WINGET_BIT;
|
||||
}
|
||||
|
||||
void ffDestroyPackagesOptions(FFPackagesOptions* options)
|
||||
|
||||
Reference in New Issue
Block a user