--- a/ning/ning_chat.c Sun Mar 01 19:30:36 2020 -0600
+++ b/ning/ning_chat.c Sun Mar 01 19:35:13 2020 -0600
@@ -29,7 +29,7 @@
if (sizeof(gint) >= sizeof(gint64))
gint64 now_millis = (gint64) time(NULL);
now_millis &= 0xFFFFFFFF00000000LL;
@@ -48,8 +48,6 @@
@@ -57,18 +55,18 @@
purple_debug_info("ning", "ning_chat_messages_cb: %s\n", response?response:"(null)");
obj = ning_json_parse(response, len);
if (json_object_has_member(obj, "hash"))
chat->ning_hash = g_strdup(json_node_get_string(json_object_get_member(obj, "hash")));
array = json_node_get_array(json_object_get_member(obj, "messages"));
for(i = 0; i < json_array_get_length(array); i++)
@@ -78,17 +76,15 @@
type = json_node_get_string(json_object_get_member(msgobj, "type"));
body = json_node_get_string(json_object_get_member(msgobj, "body"));
date = json_node_get_int(json_object_get_member(msgobj, "date"));
- roomId = json_node_get_string(json_object_get_member(msgobj, "roomId"));
- targetId = json_node_get_string(json_object_get_member(msgobj, "targetId"));
sender = json_node_get_object(json_object_get_member(msgobj, "sender"));
senderId = json_node_get_string(json_object_get_member(sender, "ningId"));
//Check that they're on the buddy list
buddy = purple_find_buddy(na->account, senderId);
//They aren't, so lets fake it
- buddy = purple_buddy_new(na->account, senderId,
+ buddy = purple_buddy_new(na->account, senderId, json_node_get_string(json_object_get_member(sender, "name")));
group = purple_find_group(NING_TEMP_GROUP_NAME);
@@ -100,9 +96,9 @@
purple_blist_add_buddy(buddy, NULL, group, NULL);
purple_blist_node_set_flags(&buddy->node, PURPLE_BLIST_NODE_FLAG_NO_SAVE);
time_kludge = ning_time_kludge(date);
if (g_str_equal(type, "message"))
serv_got_chat_in(na->pc, chat->purple_id, senderId, PURPLE_MESSAGE_RECV, body, time_kludge);
@@ -114,7 +110,7 @@
purple_debug_info("ning", "unknown message type: %s\n", type);
@@ -128,29 +124,29 @@
encoded_hash = g_strdup(purple_url_encode(chat->ning_hash));
encoded_app = g_strdup(purple_url_encode(na->ning_app));
encoded_id = g_strdup(purple_url_encode(na->ning_id));
encoded_token = g_strdup(purple_url_encode(na->chat_token));
encoded_room = g_strdup(purple_url_encode(chat->roomId));
url = g_strdup_printf("/xn/groupchat/list?h=%s&a=%s&i=%s&t=%s&r=%s", encoded_hash, encoded_app,
encoded_id, encoded_token, encoded_room);
ning_post_or_get(na, NING_METHOD_GET, na->chat_domain,
ning_chat_messages_cb, chat, FALSE);
@@ -172,16 +168,16 @@
PurpleConversationUiOps *uiops;
purple_debug_info("ning", "chat users: %s\n", response?response:"(null)");
obj = ning_json_parse(response, len);
if (json_object_has_member(obj, "hash"))
chat->ning_hash = g_strdup(json_node_get_string(json_object_get_member(obj, "hash")));
conv = purple_find_chat(na->pc, chat->purple_id);
uiops = purple_conversation_get_ui_ops(conv);
@@ -191,7 +187,7 @@
ningId = json_node_get_string(json_array_get_element(array, i));
purple_conv_chat_remove_user(PURPLE_CONV_CHAT(conv), ningId, NULL);
array = json_node_get_array(json_object_get_member(obj, "users"));
if (array && json_array_get_length(array) > 0)
@@ -204,10 +200,10 @@
ningId = json_node_get_string(json_object_get_member(userobj, "ningId"));
name = json_node_get_string(json_object_get_member(userobj, "name"));
isAdmin = json_node_get_boolean(json_object_get_member(userobj, "isAdmin"));
if (!purple_conv_chat_find_user(PURPLE_CONV_CHAT(conv), ningId))
- purple_conv_chat_add_user(PURPLE_CONV_CHAT(conv), ningId,
+ purple_conv_chat_add_user(PURPLE_CONV_CHAT(conv), ningId, NULL, isAdmin?PURPLE_CBFLAGS_OP:PURPLE_CBFLAGS_NONE,
@@ -229,7 +225,7 @@
uiops->chat_update_user(conv, ningId);
@@ -243,29 +239,29 @@
encoded_hash = g_strdup(purple_url_encode(chat->ning_hash));
encoded_app = g_strdup(purple_url_encode(na->ning_app));
encoded_id = g_strdup(purple_url_encode(na->ning_id));
encoded_token = g_strdup(purple_url_encode(na->chat_token));
encoded_room = g_strdup(purple_url_encode(chat->roomId));
url = g_strdup_printf("/xn/presence/list?h=%s&a=%s&i=%s&t=%s&r=%s", encoded_hash, encoded_app,
encoded_id, encoded_token, encoded_room);
ning_post_or_get(na, NING_METHOD_GET, na->chat_domain,
ning_chat_get_users_cb, chat, FALSE);
@@ -278,37 +274,33 @@
encoded_app = g_strdup(purple_url_encode(na->ning_app));
encoded_id = g_strdup(purple_url_encode(na->ning_id));
encoded_token = g_strdup(purple_url_encode(na->chat_token));
encoded_room = g_strdup(purple_url_encode(chat->roomId));
url = g_strdup_printf("/xn/groupchat/poll?a=%s&i=%s&t=%s&r=%s", encoded_app,
encoded_id, encoded_token, encoded_room);
ning_post_or_get(na, NING_METHOD_GET, na->chat_domain,
ning_chat_messages_cb, chat, FALSE);
ning_chat_cb(NingAccount *na, gchar *response, gsize len, gpointer userdata)
- PurpleConversation *conv;
purple_debug_info("ning", "ning_chat_cb: %s\n", response?response:"(null)");
@@ -321,25 +313,25 @@
purple_debug_info("ning", "chat whisper %s %s\n", who, message);
conv = purple_find_chat(pc, id);
app_escaped = g_strdup(purple_url_encode(na->ning_app));
token_escaped = g_strdup(purple_url_encode(na->xg_token));
room_escaped = g_strdup(purple_url_encode(conv->name));
ning_id_escaped = g_strdup(purple_url_encode(na->ning_id));
sender = build_user_json(na);
stripped = purple_markup_strip_html(message);
@@ -349,19 +341,19 @@
message_json = g_strdup_printf("{ \"roomId\":\"%s\", \"type\":\"message\", \"targetId\":null, \"body\":\"%s\", \"sender\":%s }",
message_escaped = g_strdup(purple_url_encode(message_json));
postdata = g_strdup_printf("a=%s&i=%s&t=%s&r=%s&message=%s",
app_escaped, ning_id_escaped,
token_escaped, room_escaped,
ning_post_or_get(na, NING_METHOD_POST, na->chat_domain,
- "/xn/groupchat/publish", postdata,
+ "/xn/groupchat/publish", postdata, ning_chat_cb, conv, FALSE);
@@ -380,10 +372,10 @@
if (flags != PURPLE_MESSAGE_SEND)
chats = purple_get_chats();
for (;chats;chats = chats->next)
@@ -396,7 +388,7 @@
@@ -406,7 +398,7 @@
if (flags != PURPLE_MESSAGE_SEND)
ning_chat_whisper(pc, id, NULL, message);
@@ -415,25 +407,25 @@
ning_join_chat_by_name(NingAccount *na, const gchar *roomId)
if (na == NULL || roomId == NULL)
chat = g_new0(NingChat, 1);
chat->roomId = g_strdup(roomId);
chat->purple_id = g_str_hash(roomId);
chat->ning_hash = g_strdup("null");
serv_got_joined_chat(na->pc, g_str_hash(roomId), roomId);
ning_chat_get_history(chat);
ning_chat_get_users(chat);
chat->userlist_timer = purple_timeout_add_seconds(60, (GSourceFunc) ning_chat_get_users, chat);
ning_chat_poll_messages(chat);
chat->message_poll_timer = purple_timeout_add_seconds(180, (GSourceFunc) ning_chat_poll_messages, chat);
@@ -441,14 +433,14 @@
na->chats = g_list_append(na->chats, chat);
ning_join_chat(PurpleConnection *pc, GHashTable *components)
if (pc == NULL || pc->proto_data == NULL || components == NULL)
ning_join_chat_by_name(na, g_hash_table_lookup(components, "name"));