eion/purple-hangouts

fc3fde476a1d
Parents f3ad124b413d
Children 54b26f7ac4e5
Add an account action to join a chat by URL
(has a different protojson response format to every other!)
--- a/hangouts_connection.c Thu Mar 08 08:43:44 2018 +1300
+++ b/hangouts_connection.c Thu Mar 08 09:09:02 2018 +1300
@@ -593,9 +593,13 @@
} else {
gchar *tidied_json = hangouts_json_tidy_blank_arrays(raw_response);
JsonArray *response_array = json_decode_array(tidied_json, -1);
+ const gchar *first_element = json_array_get_string_element(response_array, 0);
+ gboolean ignore_first_element = (first_element != NULL);
- pblite_decode(response_message, response_array, /*Ignore First Item= */TRUE);
- purple_debug_info("hangouts", "A '%s' says '%s'\n", response_message->descriptor->name, json_array_get_string_element(response_array, 0));
+ pblite_decode(response_message, response_array, ignore_first_element);
+ if (ignore_first_element) {
+ purple_debug_info("hangouts", "A '%s' says '%s'\n", response_message->descriptor->name, first_element);
+ }
if (purple_debug_is_verbose()) {
gchar *pretty_json = pblite_dump_json(response_message);
--- a/hangouts_conversation.c Thu Mar 08 08:43:44 2018 +1300
+++ b/hangouts_conversation.c Thu Mar 08 09:09:02 2018 +1300
@@ -690,6 +690,34 @@
hangouts_get_conversation_events(ha, conv_id, 0);
}
+static void
+hangouts_got_join_chat_from_url(HangoutsAccount *ha, OpenGroupConversationFromUrlResponse *response, gpointer user_data)
+{
+ if (!response || !response->conversation_id || !response->conversation_id->id) {
+ purple_notify_error(ha->pc, _("Join from URL Error"), _("Could not join group from URL"), response->response_header ? response->response_header->error_description : _("Unknown Error"), purple_request_cpar_from_connection(pc));
+ return;
+ }
+
+ hangouts_get_conversation_events(ha, response->conversation_id->id, 0);
+}
+
+void
+hangouts_join_chat_from_url(HangoutsAccount *ha, const gchar *url)
+{
+ OpenGroupConversationFromUrlRequest request;
+
+ g_return_if_fail(url != NULL);
+
+ open_group_conversation_from_url_request__init(&request);
+ request.request_header = hangouts_get_request_header(ha);
+
+ request.url = (gchar *) url;
+
+ hangouts_pblite_open_group_conversation_from_url(ha, &request, hangouts_got_join_chat_from_url, NULL);
+
+ hangouts_request_header_free(request.request_header);
+}
+
gchar *
hangouts_get_chat_name(GHashTable *data)
--- a/hangouts_conversation.h Thu Mar 08 08:43:44 2018 +1300
+++ b/hangouts_conversation.h Thu Mar 08 09:09:02 2018 +1300
@@ -34,6 +34,8 @@
void hangouts_join_chat(PurpleConnection *pc, GHashTable *data);
gchar *hangouts_get_chat_name(GHashTable *data);
+void hangouts_join_chat_from_url(HangoutsAccount *ha, const gchar *url);
+
void hangouts_get_all_events(HangoutsAccount *ha, guint64 since_timestamp);
void hangouts_add_conversation_to_blist(HangoutsAccount *ha, Conversation *conversation, GHashTable *unique_user_ids);
--- a/libhangouts.c Thu Mar 08 08:43:44 2018 +1300
+++ b/libhangouts.c Thu Mar 08 09:09:02 2018 +1300
@@ -264,6 +264,23 @@
return m;
}
+static void
+hangouts_join_chat_by_url_action(PurpleProtocolAction *action)
+{
+ PurpleConnection *pc = purple_protocol_action_get_connection(action);
+ HangoutsAccount *ha = purple_connection_get_protocol_data(pc);
+
+ purple_request_input(pc, _("Join chat..."),
+ _("Join a Hangouts group chat from the invite URL..."),
+ NULL,
+ NULL, FALSE, FALSE, "https://hangouts.google.com/group/...",
+ _("_Join"), G_CALLBACK(hangouts_join_chat_from_url),
+ _("_Cancel"), NULL,
+ purple_request_cpar_from_connection(pc),
+ ha);
+
+}
+
static GList *
hangouts_actions(
#if !PURPLE_VERSION_CHECK(3, 0, 0)
@@ -279,6 +296,9 @@
act = purple_protocol_action_new(_("Search for friends..."), hangouts_search_users);
m = g_list_append(m, act);
+ act = purple_protocol_action_new(_("Join a group chat by URL..."), hangouts_join_chat_by_url_action);
+ m = g_list_append(m, act);
+
return m;
}