grim/purple-spasm

Migrate to the Helix API

2022-02-28, Gary Kramlich
e89e21302de6
Parents 97c738eda658
Children ca9c17d5becc
Migrate to the Helix API
--- 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 *access_token;
+ gchar *broadcaster_type;
+ gchar *description;
gchar *display_name;
+ gchar *email;
gchar *id;
- gchar *name;
+ gchar *login;
+ gchar *profile_image_url;
gchar *type;
- gchar *bio;
- gchar *logo;
- gchar *email;
- gboolean email_verified;
- gboolean partnered;
- gboolean twitter_connected;
SpasmChatService *chat;
};
@@ -94,45 +92,52 @@
static GError *
spasm_account_update_profile(SpasmAccount *sa, JsonParser *parser) {
JsonNode *root = NULL;
- JsonObject *obj = NULL;
+ JsonObject *root_obj = NULL, *obj = NULL;
+ JsonArray *array = NULL;
const gchar *str_attr = NULL;
if(sa == NULL) {
- return g_error_new(
- SPASM_DOMAIN,
- 0,
- "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");
+ if(array == NULL) {
+ 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");
-
return NULL;
}
@@ -293,6 +298,20 @@
}
const gchar *
+spasm_account_get_broadcaster_type(const SpasmAccount *sa) {
+ g_return_val_if_fail(sa, NULL);
+
+ return sa->broadcaster_type;
+}
+
+const gchar *
+spasm_account_get_description(const SpasmAccount *sa) {
+ g_return_val_if_fail(sa, NULL);
+
+ return sa->description;
+}
+
+const gchar *
spasm_account_get_display_name(const SpasmAccount *sa) {
g_return_val_if_fail(sa, NULL);
@@ -300,6 +319,13 @@
}
const gchar *
+spasm_account_get_display_email(const SpasmAccount *sa) {
+ g_return_val_if_fail(sa, NULL);
+
+ return sa->email;
+}
+
+const gchar *
spasm_account_get_id(const SpasmAccount *sa) {
g_return_val_if_fail(sa, NULL);
@@ -307,10 +333,17 @@
}
const gchar *
-spasm_account_get_name(const SpasmAccount *sa) {
+spasm_account_get_login(const SpasmAccount *sa) {
g_return_val_if_fail(sa, NULL);
- return sa->name;
+ return sa->login;
+}
+
+const gchar *
+spasm_account_get_profile_image_url(const SpasmAccount *sa) {
+ g_return_val_if_fail(sa, NULL);
+
+ return sa->profile_image_url;
}
const gchar *
@@ -320,48 +353,6 @@
return sa->type;
}
-const gchar *
-spasm_account_get_bio(const SpasmAccount *sa) {
- g_return_val_if_fail(sa, NULL);
-
- return sa->bio;
-}
-
-const gchar *
-spasm_account_get_logo(const SpasmAccount *sa) {
- g_return_val_if_fail(sa, NULL);
-
- return sa->logo;
-}
-
-const gchar *
-spasm_account_get_email(const SpasmAccount *sa) {
- g_return_val_if_fail(sa, NULL);
-
- return sa->email;
-}
-
-gboolean
-spasm_account_get_email_verified(const SpasmAccount *sa) {
- g_return_val_if_fail(sa, FALSE);
-
- return sa->email_verified;
-}
-
-gboolean
-spasm_account_get_partnered(const SpasmAccount *sa) {
- g_return_val_if_fail(sa, FALSE);
-
- return sa->partnered;
-}
-
-gboolean
-spasm_account_get_twitter_connected(const SpasmAccount *sa) {
- g_return_val_if_fail(sa, FALSE);
-
- return sa->twitter_connected;
-}
-
void
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);
va_end(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");
+ } else {
+ purple_debug_info("spasm-chat", "send buffer: '%s'\n", buffer);
+ }
success = g_output_stream_printf(
chat->output_stream,
@@ -558,7 +562,7 @@
spasm_chat_service_real_send(
chat,
"NICK %s",
- 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?" \
"response_type=token&" \
"client_id=%s&" \
"redirect_uri=%s&" \
--- 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(
msg->request_headers,
"Authorization", auth
--- 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 @@
spasm_rest_request(
sa,
"GET",
- "/user",
+ "/users",
NULL,
cb,
data