--- a/satoritypes.h Fri Aug 08 09:46:55 2025 +0800 +++ b/satoritypes.h Sat Aug 09 00:19:03 2025 +0800 @@ -19,7 +19,9 @@ #ifndef SATORI_TYPES_H #define SATORI_TYPES_H +#include "purplesatoriprotocolconversation.h" #include <glib.h> +#include <json-glib/json-glib.h> typedef enum { SATORI_WEBSOCKET_OP_EVENT = 0, @@ -30,12 +32,59 @@ SATORI_WEBSOCKET_OP_META, } SatoriWebsocketOpcode; -typedef struct { - const gchar *id; - const gchar *name; - const gchar *nick; - const gchar *avatar; - gboolean is_bot; +typedef struct satori_user { + const gchar *id; + const gchar *name; + const gchar *nick; + const gchar *avatar; + gboolean is_bot; } SatoriUser; +typedef enum { + SATORI_CHANNEL_TEXT = 0, + SATORI_CHANNEL_DIRECT, + SATORI_CHANNEL_CATEGORY, + SATORI_CHANNEL_VOICE, +} SatoriChannelType; + +static inline void +satori_user_from_json(JsonObject *user_obj, SatoriUser *out_user) { + out_user->id = json_object_get_string_member(user_obj, "id"); + out_user->name = json_object_get_string_member_with_default( + user_obj, "name", NULL); + out_user->nick = json_object_get_string_member_with_default( + user_obj, "nick", NULL); + out_user->avatar = json_object_get_string_member_with_default( + user_obj, "avatar", NULL); + out_user->is_bot = json_object_get_boolean_member_with_default( + user_obj, "is_bot", FALSE); +} + +static inline void +satori_user_from_contactinfo(PurpleContactInfo *info, SatoriUser *out_user) { + out_user->nick = out_user->name = \ + purple_contact_info_get_display_name(info); + out_user->id = \ + purple_contact_info_get_id(info); +} + +typedef struct satori_channel { + const gchar *id; + SatoriChannelType type; + const gchar *name; + const gchar *parent_id; +} SatoriChannel; + +static inline void +satori_channel_from_json(JsonObject *obj, SatoriChannel *out_chan) { + out_chan->id = json_object_get_string_member(obj, "id"); + out_chan->type = (SatoriChannelType) json_object_get_int_member( + obj, "type"); + out_chan->name = json_object_get_string_member_with_default( + obj, "name", NULL); + out_chan->parent_id = json_object_get_string_member_with_default( + obj, "parent_id", NULL); +} + + #endif /* SATORI_TYPES_H */