--- a/src/spasm-account.c Mon Feb 07 23:48:29 2022 -0600
+++ b/src/spasm-account.c Mon Feb 28 21:43:45 2022 -0600
@@ -38,16 +38,14 @@
+ gchar *broadcaster_type;
+ gchar *profile_image_url;
- gboolean email_verified;
- gboolean twitter_connected;
@@ -94,45 +92,52 @@
spasm_account_update_profile(SpasmAccount *sa, JsonParser *parser) {
- JsonObject *obj = NULL;
+ JsonObject *root_obj = NULL, *obj = NULL; + JsonArray *array = NULL; const gchar *str_attr = NULL;
- "invalid spasm account"
+ return g_error_new(SPASM_DOMAIN, 0, "invalid spasm account"); root = json_parser_get_root(parser);
- obj = json_node_get_object(root);
+ root_obj = json_node_get_object(root); + array = json_object_get_array_member(root_obj, "data"); + return g_error_new(SPASM_DOMAIN, 0, "malformed data"); + if(json_array_get_length(array) != 1) { + return g_error_new(SPASM_DOMAIN, 0, "malformed data"); + obj = json_array_get_object_element(array, 0); + str_attr = json_object_get_string_member(obj, "broadcaster_type"); + sa->broadcaster_type = g_strdup(str_attr); + str_attr = json_object_get_string_member(obj, "description"); + sa->description = g_strdup(str_attr); str_attr = json_object_get_string_member(obj, "display_name");
sa->display_name = g_strdup(str_attr);
- str_attr = json_object_get_string_member(obj, "_id");
+ str_attr = json_object_get_string_member(obj, "email"); + sa->email = g_strdup(str_attr); + str_attr = json_object_get_string_member(obj, "id"); sa->id = g_strdup(str_attr);
- str_attr = json_object_get_string_member(obj, "name");
- sa->name = g_strdup(str_attr);
+ str_attr = json_object_get_string_member(obj, "login"); + sa->login = g_strdup(str_attr); + str_attr = json_object_get_string_member(obj, "profile_image_url"); + sa->profile_image_url = g_strdup(str_attr); str_attr = json_object_get_string_member(obj, "type");
sa->type = g_strdup(str_attr);
- str_attr = json_object_get_string_member(obj, "bio");
- sa->bio = g_strdup(str_attr);
- str_attr = json_object_get_string_member(obj, "logo");
- sa->logo = g_strdup(str_attr);
- str_attr = json_object_get_string_member(obj, "email");
- sa->email = g_strdup(str_attr);
- sa->email_verified = json_object_get_boolean_member(obj, "email_verified");
- sa->partnered = json_object_get_boolean_member(obj, "partnered");
- sa->twitter_connected = json_object_get_boolean_member(obj, "twitter_connected");
@@ -293,6 +298,20 @@
+spasm_account_get_broadcaster_type(const SpasmAccount *sa) { + g_return_val_if_fail(sa, NULL); + return sa->broadcaster_type; +spasm_account_get_description(const SpasmAccount *sa) { + g_return_val_if_fail(sa, NULL); + return sa->description; spasm_account_get_display_name(const SpasmAccount *sa) {
g_return_val_if_fail(sa, NULL);
@@ -300,6 +319,13 @@
+spasm_account_get_display_email(const SpasmAccount *sa) { + g_return_val_if_fail(sa, NULL); spasm_account_get_id(const SpasmAccount *sa) {
g_return_val_if_fail(sa, NULL);
@@ -307,10 +333,17 @@
-spasm_account_get_name(const SpasmAccount *sa) {
+spasm_account_get_login(const SpasmAccount *sa) { g_return_val_if_fail(sa, NULL);
+spasm_account_get_profile_image_url(const SpasmAccount *sa) { + g_return_val_if_fail(sa, NULL); + return sa->profile_image_url; @@ -320,48 +353,6 @@
-spasm_account_get_bio(const SpasmAccount *sa) {
- g_return_val_if_fail(sa, NULL);
-spasm_account_get_logo(const SpasmAccount *sa) {
- g_return_val_if_fail(sa, NULL);
-spasm_account_get_email(const SpasmAccount *sa) {
- g_return_val_if_fail(sa, NULL);
-spasm_account_get_email_verified(const SpasmAccount *sa) {
- g_return_val_if_fail(sa, FALSE);
- return sa->email_verified;
-spasm_account_get_partnered(const SpasmAccount *sa) {
- g_return_val_if_fail(sa, FALSE);
-spasm_account_get_twitter_connected(const SpasmAccount *sa) {
- g_return_val_if_fail(sa, FALSE);
- return sa->twitter_connected;
spasm_account_login(PurpleAccount *account) {
PurpleConnection *pc = NULL;
--- a/src/spasm-account.h Mon Feb 07 23:48:29 2022 -0600
+++ b/src/spasm-account.h Mon Feb 28 21:43:45 2022 -0600
@@ -50,16 +50,14 @@
const gchar *spasm_account_get_access_token(const SpasmAccount *sa);
+const gchar *spasm_account_get_broadcaster_type(const SpasmAccount *sa); +const gchar *spasm_account_get_description(const SpasmAccount *sa); const gchar *spasm_account_get_display_name(const SpasmAccount *sa);
+const gchar *spasm_account_get_email(const SpasmAccount *sa); const gchar *spasm_account_get_id(const SpasmAccount *sa);
-const gchar *spasm_account_get_name(const SpasmAccount *sa);
+const gchar *spasm_account_get_login(const SpasmAccount *sa); +const gchar *spasm_account_get_profile_image_url(const SpasmAccount *sa); const gchar *spasm_account_get_type(const SpasmAccount *sa);
-const gchar *spasm_account_get_bio(const SpasmAccount *sa);
-const gchar *spasm_account_get_logo(const SpasmAccount *sa);
-const gchar *spasm_account_get_email(const SpasmAccount *sa);
-gboolean spasm_account_get_email_verified(const SpasmAccount *sa);
-gboolean spasm_account_get_partnered(const SpasmAccount *sa);
-gboolean spasm_account_get_twitter_connected(const SpasmAccount *sa);
SpasmChatService *spasm_account_get_chat_service(SpasmAccount *sa);
--- a/src/spasm-chat.c Mon Feb 07 23:48:29 2022 -0600
+++ b/src/spasm-chat.c Mon Feb 28 21:43:45 2022 -0600
@@ -109,7 +109,11 @@
buffer = g_strdup_vprintf(format, vargs);
- purple_debug_info("spasm-chat", "send buffer: '%s'\n", buffer);
+ if(g_str_has_prefix(buffer, "PASS")) { + purple_debug_info("spasm-chat", "send buffer: 'PASS <redacted>'\n"); + purple_debug_info("spasm-chat", "send buffer: '%s'\n", buffer); success = g_output_stream_printf(
@@ -558,7 +562,7 @@
spasm_chat_service_real_send(
- spasm_account_get_name(chat->sa)
+ spasm_account_get_login(chat->sa) purple_connection_set_state(purple_connection, PURPLE_CONNECTED);
--- a/src/spasm-const.h Mon Feb 07 23:48:29 2022 -0600
+++ b/src/spasm-const.h Mon Feb 28 21:43:45 2022 -0600
@@ -23,16 +23,16 @@
#define SPASM_PLUGIN_ID "prpl-grim-spasm"
#define SPASM_CHAT_HOSTNAME "irc.chat.twitch.tv"
-#define SPASM_CHAT_PORT 443
+#define SPASM_CHAT_PORT 6697 -#define SPASM_BASE_URL "https://api.twitch.tv/kraken/"
+#define SPASM_BASE_URL "https://api.twitch.tv/helix/" #define SPASM_WEBSOCKET_URL "wss://pubsub-edge.twitch.tv"
#define SPASM_CONTENT_TYPE "application/vnd.twitchtv.v5+json"
#define SPASM_OAUTH2_CLIENT_ID "w7le4wyxwbipv6kf5qmqogwkqskl12"
-#define SPASM_OAUTH2_SCOPES "user_read chat_login"
+#define SPASM_OAUTH2_SCOPES "user:read:email chat:read chat:edit" #define SPASM_OAUTH2_REDIRECT_URI "https://pidgin.im/oauth.html"
-#define SPASM_OAUTH2_URI SPASM_BASE_URL "oauth2/authorize?" \
+#define SPASM_OAUTH2_URI "https://id.twitch.tv/oauth2/authorize?" \ --- a/src/spasm-rest.c Mon Feb 07 23:48:29 2022 -0600
+++ b/src/spasm-rest.c Mon Feb 28 21:43:45 2022 -0600
@@ -158,7 +158,7 @@
// Set the authorization header to the access token
- auth = g_strdup_printf("OAuth %s", spasm_account_get_access_token(sa));
+ auth = g_strdup_printf("Bearer %s", spasm_account_get_access_token(sa)); soup_message_headers_replace(
--- a/src/spasm-user.c Mon Feb 07 23:48:29 2022 -0600
+++ b/src/spasm-user.c Mon Feb 28 21:43:45 2022 -0600
@@ -32,7 +32,7 @@