From da671d6cfecd4a7ce202cfb0636c45585d818516 Mon Sep 17 00:00:00 2001 From: Linus Dierheimer Date: Sun, 10 Jul 2022 18:28:17 +0200 Subject: [PATCH] Start cleaning up of config struct --- src/common/init.c | 18 +++++++------- src/fastfetch.c | 56 +++++++++++++++++++++--------------------- src/fastfetch.h | 19 ++++++++------ src/logo/image/image.c | 26 ++++++++++---------- src/logo/logo.c | 42 +++++++++++++++---------------- 5 files changed, 82 insertions(+), 79 deletions(-) diff --git a/src/common/init.c b/src/common/init.c index 01eb17321..2dc0ca98e 100644 --- a/src/common/init.c +++ b/src/common/init.c @@ -113,15 +113,15 @@ static void initModuleArg(FFModuleArgs* args) static void defaultConfig(FFinstance* instance) { - ffStrbufInit(&instance->config.logoSource); - instance->config.logoType = FF_LOGO_TYPE_AUTO; + ffStrbufInit(&instance->config.logo.source); + instance->config.logo.type = FF_LOGO_TYPE_AUTO; for(uint8_t i = 0; i < (uint8_t) FASTFETCH_LOGO_MAX_COLORS; ++i) - ffStrbufInit(&instance->config.logoColors[i]); - instance->config.logoWidth = 0; - instance->config.logoHeight = 0; //preserve aspect ratio - instance->config.logoPaddingLeft = 0; - instance->config.logoPaddingRight = 4; - instance->config.logoPrintRemaining = true; + ffStrbufInit(&instance->config.logo.colors[i]); + instance->config.logo.width = 0; + instance->config.logo.height = 0; //preserve aspect ratio + instance->config.logo.paddingLeft = 0; + instance->config.logo.paddingRight = 4; + instance->config.logo.printRemaining = true; ffStrbufInit(&instance->config.mainColor); ffStrbufInit(&instance->config.separator); @@ -266,7 +266,7 @@ void ffStart(FFinstance* instance) void ffFinish(FFinstance* instance) { - if(instance->config.logoPrintRemaining) + if(instance->config.logo.printRemaining) ffLogoPrintRemaining(instance); resetConsole(); diff --git a/src/fastfetch.c b/src/fastfetch.c index ae5591b35..5ba63f31d 100644 --- a/src/fastfetch.c +++ b/src/fastfetch.c @@ -758,13 +758,13 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con else if(strcasecmp(key, "-l") == 0 || strcasecmp(key, "--logo") == 0) { - optionParseString(key, value, &instance->config.logoSource); + optionParseString(key, value, &instance->config.logo.source); //this is usally wanted when using the none logo if(strcasecmp(value, "none") == 0) { - instance->config.logoPaddingRight = 0; - instance->config.logoPaddingLeft = 0; + instance->config.logo.paddingRight = 0; + instance->config.logo.paddingLeft = 0; } } else if(strcasecmp(key, "--logo-type") == 0) @@ -776,19 +776,19 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con } if(strcasecmp(value, "auto") == 0) - instance->config.logoType = FF_LOGO_TYPE_AUTO; + instance->config.logo.type = FF_LOGO_TYPE_AUTO; else if(strcasecmp(value, "builtin") == 0) - instance->config.logoType = FF_LOGO_TYPE_BUILTIN; + instance->config.logo.type = FF_LOGO_TYPE_BUILTIN; else if(strcasecmp(value, "file") == 0) - instance->config.logoType = FF_LOGO_TYPE_FILE; + instance->config.logo.type = FF_LOGO_TYPE_FILE; else if(strcasecmp(value, "raw") == 0) - instance->config.logoType = FF_LOGO_TYPE_RAW; + instance->config.logo.type = FF_LOGO_TYPE_RAW; else if(strcasecmp(value, "sixel") == 0) - instance->config.logoType = FF_LOGO_TYPE_SIXEL; + instance->config.logo.type = FF_LOGO_TYPE_SIXEL; else if(strcasecmp(value, "kitty") == 0) - instance->config.logoType = FF_LOGO_TYPE_KITTY; + instance->config.logo.type = FF_LOGO_TYPE_KITTY; else if(strcasecmp(value, "chafa") == 0) - instance->config.logoType = FF_LOGO_TYPE_CHAFA; + instance->config.logo.type = FF_LOGO_TYPE_CHAFA; else { fprintf(stderr, "Error: unknown logo type: %s\n", value); @@ -807,48 +807,48 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con exit(472); } - optionParseColor(key, value, &instance->config.logoColors[index]); + optionParseColor(key, value, &instance->config.logo.colors[index]); } else if(strcasecmp(key, "--logo-width") == 0) - instance->config.logoWidth = optionParseUInt32(key, value); + instance->config.logo.width = optionParseUInt32(key, value); else if(strcasecmp(key, "--logo-height") == 0) - instance->config.logoHeight = optionParseUInt32(key, value); + instance->config.logo.height = optionParseUInt32(key, value); else if(strcasecmp(key, "--logo-padding") == 0) { uint32_t padding = optionParseUInt32(key, value); - instance->config.logoPaddingLeft = padding; - instance->config.logoPaddingRight = padding; + instance->config.logo.paddingLeft = padding; + instance->config.logo.paddingRight = padding; } else if(strcasecmp(key, "--logo-padding-left") == 0) - instance->config.logoPaddingLeft = optionParseUInt32(key, value); + instance->config.logo.paddingLeft = optionParseUInt32(key, value); else if(strcasecmp(key, "--logo-padding-right") == 0) - instance->config.logoPaddingRight = optionParseUInt32(key, value); + instance->config.logo.paddingRight = optionParseUInt32(key, value); else if(strcasecmp(key, "--logo-print-remaining") == 0) - instance->config.logoPrintRemaining = optionParseBoolean(value); + instance->config.logo.printRemaining = optionParseBoolean(value); else if(strcasecmp(key, "--sixel") == 0) { - optionParseString(key, value, &instance->config.logoSource); - instance->config.logoType = FF_LOGO_TYPE_SIXEL; + optionParseString(key, value, &instance->config.logo.source); + instance->config.logo.type = FF_LOGO_TYPE_SIXEL; } else if(strcasecmp(key, "--kitty") == 0) { - optionParseString(key, value, &instance->config.logoSource); - instance->config.logoType = FF_LOGO_TYPE_KITTY; + optionParseString(key, value, &instance->config.logo.source); + instance->config.logo.type = FF_LOGO_TYPE_KITTY; } else if(strcasecmp(key, "--file") == 0) { - optionCheckString(key, value, &instance->config.logoSource); - instance->config.logoType = FF_LOGO_TYPE_FILE; + optionCheckString(key, value, &instance->config.logo.source); + instance->config.logo.type = FF_LOGO_TYPE_FILE; } else if(strcasecmp(key, "--raw") == 0) { - optionParseString(key, value, &instance->config.logoSource); - instance->config.logoType = FF_LOGO_TYPE_RAW; + optionParseString(key, value, &instance->config.logo.source); + instance->config.logo.type = FF_LOGO_TYPE_RAW; } else if(strcasecmp(key, "--chafa") == 0) { - optionParseString(key, value, &instance->config.logoSource); - instance->config.logoType = FF_LOGO_TYPE_CHAFA; + optionParseString(key, value, &instance->config.logo.source); + instance->config.logo.type = FF_LOGO_TYPE_CHAFA; } /////////////////// diff --git a/src/fastfetch.h b/src/fastfetch.h index 9c1c2bb54..0c0a483e4 100644 --- a/src/fastfetch.h +++ b/src/fastfetch.h @@ -54,14 +54,17 @@ typedef struct FFModuleArgs typedef struct FFconfig { - FFstrbuf logoSource; - FFLogoType logoType; - FFstrbuf logoColors[FASTFETCH_LOGO_MAX_COLORS]; - uint32_t logoWidth; - uint32_t logoHeight; - uint32_t logoPaddingLeft; - uint32_t logoPaddingRight; - bool logoPrintRemaining; + struct + { + FFstrbuf source; + FFLogoType type; + FFstrbuf colors[FASTFETCH_LOGO_MAX_COLORS]; + uint32_t width; + uint32_t height; + uint32_t paddingLeft; + uint32_t paddingRight; + bool printRemaining; + } logo; FFstrbuf mainColor; //If this is empty, ffLogoPrint will set it to the main color of the logo FFstrbuf separator; diff --git a/src/logo/image/image.c b/src/logo/image/image.c index 057beac77..74f2a7abd 100644 --- a/src/logo/image/image.c +++ b/src/logo/image/image.c @@ -109,7 +109,7 @@ static void writeCacheUint32(FFLogoRequestData* requestData, uint32_t value, con static void printImagePixels(FFinstance* instance, FFLogoRequestData* requestData, const FFstrbuf* result, const char* cacheFileName) { //Calculate character dimensions - instance->state.logoWidth = requestData->logoCharacterWidth + instance->config.logoPaddingLeft + instance->config.logoPaddingRight; + instance->state.logoWidth = requestData->logoCharacterWidth + instance->config.logo.paddingLeft + instance->config.logo.paddingRight; instance->state.logoHeight = requestData->logoCharacterHeight; if(requestData->type == FF_LOGO_TYPE_KITTY) @@ -118,14 +118,14 @@ static void printImagePixels(FFinstance* instance, FFLogoRequestData* requestDat //Write cache files writeCacheStrbuf(requestData, result, cacheFileName); - if(instance->config.logoWidth == 0) + if(instance->config.logo.width == 0) writeCacheUint32(requestData, instance->state.logoWidth, FF_CACHE_FILE_WIDTH); - if(instance->config.logoHeight == 0) + if(instance->config.logo.height == 0) writeCacheUint32(requestData, instance->state.logoHeight, FF_CACHE_FILE_HEIGHT); //Write result to stdout - ffPrintCharTimes(' ', instance->config.logoPaddingLeft); + ffPrintCharTimes(' ', instance->config.logo.paddingLeft); fflush(stdout); ffWriteFDBuffer(STDOUT_FILENO, result); @@ -296,7 +296,7 @@ FFLogoImageResult ffLogoPrintImageImpl(FFinstance* instance, FFLogoRequestData* } //+1, because we need to copy the null byte too - imageData.ffCopyMagickString(imageInfoIn->filename, instance->config.logoSource.chars, instance->config.logoSource.length + 1); + imageData.ffCopyMagickString(imageInfoIn->filename, instance->config.logo.source.chars, instance->config.logo.source.length + 1); imageData.image = ffReadImage(imageInfoIn, imageData.exceptionInfo); ffDestroyImageInfo(imageInfoIn); @@ -421,7 +421,7 @@ static bool printCachedChars(FFinstance* instance, FFLogoRequestData* requestDat static bool printCachedPixel(FFinstance* instance, FFLogoRequestData* requestData) { - requestData->logoCharacterWidth = instance->config.logoWidth; + requestData->logoCharacterWidth = instance->config.logo.width; if(requestData->logoCharacterWidth == 0) { requestData->logoCharacterWidth = readCachedUint32(requestData, FF_CACHE_FILE_WIDTH); @@ -429,7 +429,7 @@ static bool printCachedPixel(FFinstance* instance, FFLogoRequestData* requestDat return false; } - requestData->logoCharacterHeight = instance->config.logoHeight; + requestData->logoCharacterHeight = instance->config.logo.height; if(requestData->logoCharacterHeight == 0) { requestData->logoCharacterHeight = readCachedUint32(requestData, FF_CACHE_FILE_HEIGHT); @@ -450,7 +450,7 @@ static bool printCachedPixel(FFinstance* instance, FFLogoRequestData* requestDat if(fd == -1) return false; - ffPrintCharTimes(' ', instance->config.logoPaddingLeft); + ffPrintCharTimes(' ', instance->config.logo.paddingLeft); fflush(stdout); char buffer[32768]; @@ -460,7 +460,7 @@ static bool printCachedPixel(FFinstance* instance, FFLogoRequestData* requestDat close(fd); - instance->state.logoWidth = requestData->logoCharacterWidth + instance->config.logoPaddingLeft + instance->config.logoPaddingRight; + instance->state.logoWidth = requestData->logoCharacterWidth + instance->config.logo.paddingLeft + instance->config.logo.paddingRight; instance->state.logoHeight = requestData->logoCharacterHeight; //Go to upper left corner @@ -515,20 +515,20 @@ bool ffLogoPrintImageIfExists(FFinstance* instance, FFLogoType type) requestData.characterPixelHeight = 1; if( - (type != FF_LOGO_TYPE_CHAFA || instance->config.logoWidth == 0 || instance->config.logoHeight == 0) && + (type != FF_LOGO_TYPE_CHAFA || instance->config.logo.width == 0 || instance->config.logo.height == 0) && !getCharacterPixelDimensions(&requestData) ) return false; - requestData.logoPixelWidth = simpleCeil((double) instance->config.logoWidth * requestData.characterPixelWidth); - requestData.logoPixelHeight = simpleCeil((double) instance->config.logoHeight * requestData.characterPixelHeight); + requestData.logoPixelWidth = simpleCeil((double) instance->config.logo.width * requestData.characterPixelWidth); + requestData.logoPixelHeight = simpleCeil((double) instance->config.logo.height * requestData.characterPixelHeight); ffStrbufInitA(&requestData.cacheDir, PATH_MAX * 2); ffStrbufAppend(&requestData.cacheDir, &instance->state.cacheDir); ffStrbufAppendS(&requestData.cacheDir, "images"); ffStrbufEnsureFree(&requestData.cacheDir, PATH_MAX); - if(realpath(instance->config.logoSource.chars, requestData.cacheDir.chars + requestData.cacheDir.length) == NULL) + if(realpath(instance->config.logo.source.chars, requestData.cacheDir.chars + requestData.cacheDir.length) == NULL) { //We can safely return here, because if realpath failed, we surely won't be able to read the file ffStrbufDestroy(&requestData.cacheDir); diff --git a/src/logo/logo.c b/src/logo/logo.c index 05faa7af8..db1e540ae 100644 --- a/src/logo/logo.c +++ b/src/logo/logo.c @@ -8,18 +8,18 @@ void ffLogoPrintChars(FFinstance* instance, const char* data, bool doColorReplac uint32_t currentlineLength = 0; fputs(FASTFETCH_TEXT_MODIFIER_BOLT, stdout); - ffPrintCharTimes(' ', instance->config.logoPaddingLeft); + ffPrintCharTimes(' ', instance->config.logo.paddingLeft); //Use logoColor[0] as the default color if(doColorReplacement) - ffPrintColor(&instance->config.logoColors[0]); + ffPrintColor(&instance->config.logo.colors[0]); while(*data != '\0') { //We are at the end of a line. Print paddings and update max line length if(*data == '\n' || (*data == '\r' && *(data + 1) == '\n')) { - ffPrintCharTimes(' ', instance->config.logoPaddingRight); + ffPrintCharTimes(' ', instance->config.logo.paddingRight); //We have \r\n, skip the \r if(*data == '\r') @@ -28,7 +28,7 @@ void ffLogoPrintChars(FFinstance* instance, const char* data, bool doColorReplac putchar('\n'); ++data; - ffPrintCharTimes(' ', instance->config.logoPaddingLeft); + ffPrintCharTimes(' ', instance->config.logo.paddingLeft); if(currentlineLength > instance->state.logoWidth) instance->state.logoWidth = currentlineLength; @@ -96,7 +96,7 @@ void ffLogoPrintChars(FFinstance* instance, const char* data, bool doColorReplac } else { - ffPrintColor(&instance->config.logoColors[index]); + ffPrintColor(&instance->config.logo.colors[index]); ++data; continue; } @@ -129,14 +129,14 @@ void ffLogoPrintChars(FFinstance* instance, const char* data, bool doColorReplac } } - ffPrintCharTimes(' ', instance->config.logoPaddingRight); + ffPrintCharTimes(' ', instance->config.logo.paddingRight); fputs(FASTFETCH_TEXT_MODIFIER_RESET, stdout); //Happens if the last line is the longest if(currentlineLength > instance->state.logoWidth) instance->state.logoWidth = currentlineLength; - instance->state.logoWidth += instance->config.logoPaddingLeft + instance->config.logoPaddingRight; + instance->state.logoWidth += instance->config.logo.paddingLeft + instance->config.logo.paddingRight; //Go to the leftmost position fputs("\033[9999999D", stdout); @@ -222,8 +222,8 @@ static void logoPrintStruct(FFinstance* instance, const FFlogo* logo) const char** colors = logo->builtinColors; for(int i = 0; *colors != NULL && i < FASTFETCH_LOGO_MAX_COLORS; i++, colors++) { - if(instance->config.logoColors[i].length == 0) - ffStrbufAppendS(&instance->config.logoColors[i], *colors); + if(instance->config.logo.colors[i].length == 0) + ffStrbufAppendS(&instance->config.logo.colors[i], *colors); } ffLogoPrintChars(instance, logo->data, true); @@ -249,7 +249,7 @@ static bool logoPrintFileIfExists(FFinstance* instance, bool doColorReplacement) FFstrbuf content; ffStrbufInitA(&content, 2047); - if(!ffAppendFileBuffer(instance->config.logoSource.chars, &content)) + if(!ffAppendFileBuffer(instance->config.logo.source.chars, &content)) { ffStrbufDestroy(&content); return false; @@ -261,9 +261,9 @@ static bool logoPrintFileIfExists(FFinstance* instance, bool doColorReplacement) return true; } -static bool logoPrintImageIfExists(FFinstance* instance, FFLogoType logoType) +static bool logoPrintImageIfExists(FFinstance* instance, FFLogoType logo) { - if(!ffLogoPrintImageIfExists(instance, logoType)) + if(!ffLogoPrintImageIfExists(instance, logo)) return false; logoApplyMainColorDetected(instance); @@ -274,14 +274,14 @@ static void logoPrintKnownType(FFinstance* instance) { bool successfull; - if(instance->config.logoType == FF_LOGO_TYPE_BUILTIN) - successfull = logoPrintBuiltinIfExists(instance, instance->config.logoSource.chars); - else if(instance->config.logoType == FF_LOGO_TYPE_FILE) + if(instance->config.logo.type == FF_LOGO_TYPE_BUILTIN) + successfull = logoPrintBuiltinIfExists(instance, instance->config.logo.source.chars); + else if(instance->config.logo.type == FF_LOGO_TYPE_FILE) successfull = logoPrintFileIfExists(instance, true); - else if(instance->config.logoType == FF_LOGO_TYPE_RAW) + else if(instance->config.logo.type == FF_LOGO_TYPE_RAW) successfull = logoPrintFileIfExists(instance, false); else //image - successfull = logoPrintImageIfExists(instance, instance->config.logoType); + successfull = logoPrintImageIfExists(instance, instance->config.logo.type); if(!successfull) logoPrintDetected(instance); @@ -300,21 +300,21 @@ void ffLogoPrint(FFinstance* instance) } //If the source is not set, we can directly print the detected logo. - if(instance->config.logoSource.length == 0) + if(instance->config.logo.source.length == 0) { logoPrintDetected(instance); return; } //If the source and source type is set to something else than auto, always print with the set type. - if(instance->config.logoSource.length > 0 && instance->config.logoType != FF_LOGO_TYPE_AUTO) + if(instance->config.logo.source.length > 0 && instance->config.logo.type != FF_LOGO_TYPE_AUTO) { logoPrintKnownType(instance); return; } //If source matches the name of a builtin logo, print it and return. - if(logoPrintBuiltinIfExists(instance, instance->config.logoSource.chars)) + if(logoPrintBuiltinIfExists(instance, instance->config.logo.source.chars)) return; const FFTerminalShellResult* terminalShell = ffDetectTerminalShell(instance); @@ -369,7 +369,7 @@ void ffLogoBuiltinPrint(FFinstance* instance) instance->state.logoHeight = 0; instance->state.keysHeight = 0; for(uint8_t i = 0; i < FASTFETCH_LOGO_MAX_COLORS; i++) - ffStrbufClear(&instance->config.logoColors[i]); + ffStrbufClear(&instance->config.logo.colors[i]); puts("\n"); ++methods;