mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-12 10:22:12 +02:00
Packages: support Chocolatey (Windows)
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
#include "packages.h"
|
||||
#include "detection/internal.h"
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
void ffDetectPackagesImpl(const FFinstance* instance, FFPackagesResult* result);
|
||||
|
||||
const FFPackagesResult* ffDetectPackages(const FFinstance* instance)
|
||||
@@ -11,21 +13,7 @@ const FFPackagesResult* ffDetectPackages(const FFinstance* instance)
|
||||
|
||||
ffDetectPackagesImpl(instance, &result);
|
||||
|
||||
result.all = 0
|
||||
+ result.pacman
|
||||
+ result.dpkg
|
||||
+ result.rpm
|
||||
+ result.emerge
|
||||
+ result.xbps
|
||||
+ result.nixSystem
|
||||
+ result.nixUser
|
||||
+ result.nixDefault
|
||||
+ result.apk
|
||||
+ result.pkg
|
||||
+ result.flatpak
|
||||
+ result.snap
|
||||
+ result.brew
|
||||
+ result.port
|
||||
+ result.scoop;
|
||||
for(uint32_t i = 0; i < offsetof(FFPackagesResult, all) / sizeof(uint32_t); ++i)
|
||||
result.all += ((uint32_t *)&result)[i];
|
||||
);
|
||||
}
|
||||
|
||||
@@ -7,10 +7,9 @@
|
||||
|
||||
typedef struct FFPackagesResult
|
||||
{
|
||||
uint32_t all;
|
||||
|
||||
uint32_t apk;
|
||||
uint32_t brew;
|
||||
uint32_t choco;
|
||||
uint32_t dpkg;
|
||||
uint32_t emerge;
|
||||
uint32_t flatpak;
|
||||
@@ -25,6 +24,8 @@ typedef struct FFPackagesResult
|
||||
uint32_t snap;
|
||||
uint32_t xbps;
|
||||
|
||||
uint32_t all; //Make sure this goes last
|
||||
|
||||
FFstrbuf pacmanBranch;
|
||||
} FFPackagesResult;
|
||||
|
||||
|
||||
@@ -25,15 +25,34 @@ static uint32_t getNumElements(const char* searchPath /* including `\*` suffix *
|
||||
return counter;
|
||||
}
|
||||
|
||||
void ffDetectPackagesImpl(const FFinstance* instance, FFPackagesResult* result)
|
||||
static void detectScoop(const FFinstance* instance, FFPackagesResult* result)
|
||||
{
|
||||
char scoopPath[MAX_PATH + 3];
|
||||
strcpy(scoopPath, instance->state.passwd->pw_dir);
|
||||
strncat(scoopPath, "/scoop/apps/*", sizeof(scoopPath) - 1 - strlen(scoopPath));
|
||||
result->scoop = getNumElements(scoopPath, FILE_ATTRIBUTE_DIRECTORY);
|
||||
if(result->scoop > 0)
|
||||
result->scoop--; // scoop
|
||||
}
|
||||
|
||||
static void detectChoco(const FFinstance* instance, FFPackagesResult* result)
|
||||
{
|
||||
FF_UNUSED(instance);
|
||||
|
||||
FFstrbuf scoopPath;
|
||||
ffStrbufInitS(&scoopPath, instance->state.passwd->pw_dir);
|
||||
ffStrbufAppendS(&scoopPath, "/scoop/apps/*");
|
||||
result->scoop = getNumElements(scoopPath.chars, FILE_ATTRIBUTE_DIRECTORY);
|
||||
if(result->scoop > 0)
|
||||
result->scoop--; // scoop
|
||||
ffStrbufDestroy(&scoopPath);
|
||||
const char* chocoInstall = getenv("ChocolateyInstall");
|
||||
if(!chocoInstall || chocoInstall[0] == '\0')
|
||||
return;
|
||||
|
||||
char chocoPath[MAX_PATH + 3];
|
||||
strcpy(chocoPath, chocoInstall);
|
||||
strncat(chocoPath, "/lib/*", sizeof(chocoPath) - 1 - strlen(chocoPath));
|
||||
result->choco = getNumElements(chocoPath, FILE_ATTRIBUTE_DIRECTORY);
|
||||
if(result->choco > 0)
|
||||
result->choco--; // choco
|
||||
}
|
||||
|
||||
void ffDetectPackagesImpl(const FFinstance* instance, FFPackagesResult* result)
|
||||
{
|
||||
detectScoop(instance, result);
|
||||
detectChoco(instance, result);
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ void ffPrintPackages(FFinstance* instance)
|
||||
FF_PRINT_PACKAGE(brew)
|
||||
FF_PRINT_PACKAGE(port)
|
||||
FF_PRINT_PACKAGE(scoop)
|
||||
FF_PRINT_PACKAGE(choco)
|
||||
|
||||
//Fix linter warning of unused value of all
|
||||
(void) all;
|
||||
|
||||
Reference in New Issue
Block a user