Files
fastfetch/src/modules/localip.c
T
2022-10-16 01:34:26 +08:00

70 lines
1.9 KiB
C

#include "fastfetch.h"
#include "common/printing.h"
#include "detection/localip/localip.h"
#define FF_LOCALIP_MODULE_NAME "Local IP"
#define FF_LOCALIP_NUM_FORMAT_ARGS 2
void ffPrintLocalIp(FFinstance* instance)
{
FFlist results;
ffListInit(&results, sizeof(FFLocalIpResult));
const char* error = ffDetectLocalIps(instance, &results);
if(error)
{
ffPrintError(instance, FF_LOCALIP_MODULE_NAME, 0, &instance->config.localIP, "%s", error);
goto exit;
}
if(results.length == 0)
{
ffPrintError(instance, FF_LOCALIP_MODULE_NAME, 0, &instance->config.localIP, "Failed to detect any IPs");
goto exit;
}
FFstrbuf key;
ffStrbufInit(&key);
for(uint32_t i = 0; i < results.length; ++i)
{
FFLocalIpResult* ip = (FFLocalIpResult*) ffListGet(&results, i);
if(instance->config.localIP.key.length == 0)
{
if(ip->name.length)
ffStrbufSetF(&key, FF_LOCALIP_MODULE_NAME " (%*s)", ip->name.length, ip->name.chars);
else
ffStrbufSetS(&key, FF_LOCALIP_MODULE_NAME);
}
else
{
ffParseFormatString(&key, &instance->config.localIP.key, 1, (FFformatarg[]){
{FF_FORMAT_ARG_TYPE_STRBUF, &ip->name}
});
}
if(instance->config.localIP.outputFormat.length == 0)
{
ffPrintLogoAndKey(instance, key.chars, 0, NULL);
ffStrbufPutTo(&ip->addr, stdout);
}
else
{
ffPrintFormatString(instance, key.chars, 0, NULL, &instance->config.localIP.outputFormat, FF_LOCALIP_NUM_FORMAT_ARGS, (FFformatarg[]){
{FF_FORMAT_ARG_TYPE_STRBUF, &ip->addr},
{FF_FORMAT_ARG_TYPE_STRING, ip->ipv6 ? "IPv6" : "IPv4"}
});
}
ffStrbufDestroy(&ip->name);
ffStrbufDestroy(&ip->addr);
}
ffStrbufDestroy(&key);
exit:
ffListDestroy(&results);
}