mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-13 10:52:08 +02:00
Users: JSON format support
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
typedef struct FFUserResult
|
||||
{
|
||||
FFstrbuf name;
|
||||
FFstrbuf hostname;
|
||||
FFstrbuf hostName;
|
||||
FFstrbuf clientIp;
|
||||
FFstrbuf tty;
|
||||
uint64_t loginTime; // ms
|
||||
|
||||
@@ -30,7 +30,7 @@ next:
|
||||
|
||||
FFUserResult* user = (FFUserResult*) ffListAdd(users);
|
||||
ffStrbufInitS(&user->name, n->ut_user);
|
||||
ffStrbufInitS(&user->hostname, n->ut_host);
|
||||
ffStrbufInitS(&user->hostName, n->ut_host);
|
||||
ffStrbufInitS(&user->tty, n->ut_line);
|
||||
#ifdef __linux__
|
||||
if(n->ut_addr_v6[0] || n->ut_addr_v6[1] || n->ut_addr_v6[2] || n->ut_addr_v6[3])
|
||||
|
||||
@@ -27,7 +27,7 @@ const char* ffDetectUsers(FFlist* users)
|
||||
|
||||
FFUserResult* user = (FFUserResult*) ffListAdd(users);
|
||||
ffStrbufInitWS(&user->name, session->pUserName);
|
||||
ffStrbufInitWS(&user->hostname, session->pHostName);
|
||||
ffStrbufInitWS(&user->hostName, session->pHostName);
|
||||
|
||||
DWORD bytes = 0;
|
||||
PWTS_CLIENT_ADDRESS address = NULL;
|
||||
|
||||
@@ -51,8 +51,8 @@ void ffPrintUsers(FFUsersOptions* options)
|
||||
ffPrintLogoAndKey(FF_USERS_MODULE_NAME, users.length == 1 ? 0 : (uint8_t) (i + 1), &options->moduleArgs, FF_PRINT_TYPE_DEFAULT);
|
||||
|
||||
FF_STRBUF_AUTO_DESTROY result = ffStrbufCreateCopy(&user->name);
|
||||
if(user->hostname.length)
|
||||
ffStrbufAppendF(&result, "@%s", user->hostname.chars);
|
||||
if(user->hostName.length)
|
||||
ffStrbufAppendF(&result, "@%s", user->hostName.chars);
|
||||
|
||||
if(user->loginTime)
|
||||
{
|
||||
@@ -74,7 +74,7 @@ void ffPrintUsers(FFUsersOptions* options)
|
||||
|
||||
ffPrintFormat(FF_USERS_MODULE_NAME, users.length == 1 ? 0 : (uint8_t) (i + 1), &options->moduleArgs, FF_USERS_NUM_FORMAT_ARGS, (FFformatarg[]){
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, &user->name},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, &user->hostname},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, &user->hostName},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, &user->tty},
|
||||
{FF_FORMAT_ARG_TYPE_STRBUF, &user->clientIp},
|
||||
{FF_FORMAT_ARG_TYPE_UINT64, &user->loginTime},
|
||||
@@ -85,7 +85,7 @@ void ffPrintUsers(FFUsersOptions* options)
|
||||
FF_LIST_FOR_EACH(FFUserResult, user, users)
|
||||
{
|
||||
ffStrbufDestroy(&user->clientIp);
|
||||
ffStrbufDestroy(&user->hostname);
|
||||
ffStrbufDestroy(&user->hostName);
|
||||
ffStrbufDestroy(&user->tty);
|
||||
ffStrbufDestroy(&user->name);
|
||||
}
|
||||
@@ -93,7 +93,7 @@ void ffPrintUsers(FFUsersOptions* options)
|
||||
|
||||
void ffInitUsersOptions(FFUsersOptions* options)
|
||||
{
|
||||
ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_USERS_MODULE_NAME, ffParseUsersCommandOptions, ffParseUsersJsonObject, ffPrintUsers, NULL);
|
||||
ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_USERS_MODULE_NAME, ffParseUsersCommandOptions, ffParseUsersJsonObject, ffPrintUsers, ffGenerateUsersJson);
|
||||
ffOptionInitModuleArg(&options->moduleArgs);
|
||||
|
||||
options->compact = true;
|
||||
@@ -142,3 +142,36 @@ void ffParseUsersJsonObject(FFUsersOptions* options, yyjson_val* module)
|
||||
ffPrintError(FF_USERS_MODULE_NAME, 0, &options->moduleArgs, "Unknown JSON key %s", key);
|
||||
}
|
||||
}
|
||||
|
||||
void ffGenerateUsersJson(FF_MAYBE_UNUSED FFUsersOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module)
|
||||
{
|
||||
FF_LIST_AUTO_DESTROY results = ffListCreate(sizeof(FFUserResult));
|
||||
|
||||
const char* error = ffDetectUsers(&results);
|
||||
|
||||
if(error)
|
||||
{
|
||||
yyjson_mut_obj_add_str(doc, module, "error", error);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
yyjson_mut_val* arr = yyjson_mut_obj_add_arr(doc, module, "result");
|
||||
FF_LIST_FOR_EACH(FFUserResult, user, results)
|
||||
{
|
||||
yyjson_mut_val* obj = yyjson_mut_arr_add_obj(doc, arr);
|
||||
yyjson_mut_obj_add_strbuf(doc, obj, "clientIp", &user->clientIp);
|
||||
yyjson_mut_obj_add_strbuf(doc, obj, "hostName", &user->hostName);
|
||||
yyjson_mut_obj_add_uint(doc, obj, "loginTime", user->loginTime);
|
||||
yyjson_mut_obj_add_strbuf(doc, obj, "name", &user->name);
|
||||
yyjson_mut_obj_add_strbuf(doc, obj, "tty", &user->tty);
|
||||
}
|
||||
|
||||
exit:
|
||||
FF_LIST_FOR_EACH(FFUserResult, user, results)
|
||||
{
|
||||
ffStrbufDestroy(&user->clientIp);
|
||||
ffStrbufDestroy(&user->hostName);
|
||||
ffStrbufDestroy(&user->tty);
|
||||
ffStrbufDestroy(&user->name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,3 +9,4 @@ void ffInitUsersOptions(FFUsersOptions* options);
|
||||
bool ffParseUsersCommandOptions(FFUsersOptions* options, const char* key, const char* value);
|
||||
void ffDestroyUsersOptions(FFUsersOptions* options);
|
||||
void ffParseUsersJsonObject(FFUsersOptions* options, yyjson_val* module);
|
||||
void ffGenerateUsersJson(FFUsersOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module);
|
||||
|
||||
Reference in New Issue
Block a user