Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --- libmattermost.c.org 2017-10-17 17:50:16.979166363 +0300
- +++ libmattermost.c 2017-10-17 17:50:13.125832943 +0300
- @@ -18,6 +18,7 @@
- // Glib
- #include <glib.h>
- +#include <pthread.h>
- #if !GLIB_CHECK_VERSION(2, 32, 0)
- #define g_hash_table_contains(hash_table, key) g_hash_table_lookup_extended(hash_table, key, NULL, NULL)
- @@ -146,7 +147,7 @@
- #define MATTERMOST_SERVER_SPLIT_CHAR '|'
- #define MATTERMOST_CHANNEL_SEPARATOR_VISUAL " / "
- -#define MATTERMOST_CHANNEL_SEPARATOR "---"
- +//#define MATTERMOST_CHANNEL_SEPARATOR "---"
- #define MATTERMOST_CHANNEL_OPEN 'O'
- #define MATTERMOST_CHANNEL_PRIVATE 'P'
- #define MATTERMOST_CHANNEL_DIRECT 'D'
- @@ -192,11 +193,23 @@
- #define PURPLE_IS_IM_CONVERSATION(conv) (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM)
- #define PURPLE_IS_CHAT_CONVERSATION(conv) (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT)
- #define PURPLE_CONVERSATION(chatorim) (chatorim == NULL ? NULL : chatorim->conv)
- -#define PURPLE_IM_CONVERSATION(conv) PURPLE_CONV_IM(conv)
- -#define PURPLE_CHAT_CONVERSATION(conv) PURPLE_CONV_CHAT(conv)
- +#define PURPLE_IM_CONVERSATION(conv) PURPLE_CONV_IM(conv == NULL ? NULL : conv)
- +#define PURPLE_CHAT_CONVERSATION(conv) PURPLE_CONV_CHAT(conv == NULL ? NULL : conv)
- #define purple_conversation_present_error purple_conv_present_error
- -#define purple_serv_got_joined_chat(pc, id, name) PURPLE_CONV_CHAT(serv_got_joined_chat(pc, id, name))
- -#define purple_conversations_find_chat(pc, id) PURPLE_CONV_CHAT(purple_find_chat(pc, id))
- +
- +
- +PurpleChatConversation* purple_serv_got_joined_chat(PurpleConnection *pc, int id, gchar *name)
- +{
- + PurpleConversation *ret = serv_got_joined_chat(pc, id, name);
- + return ret == NULL ? NULL : PURPLE_CONV_CHAT(ret);
- +}
- +
- +PurpleChatConversation* purple_conversations_find_chat(PurpleConnection *pc, int id)
- +{
- + PurpleConversation *ret = purple_find_chat(pc, id);
- + return ret == NULL ? NULL : PURPLE_CONV_CHAT(ret);
- +}
- +
- #define purple_serv_got_chat_in serv_got_chat_in
- #define purple_serv_got_chat_left serv_got_chat_left
- #define purple_chat_conversation_add_user purple_conv_chat_add_user
- @@ -1557,12 +1566,11 @@
- if (chat == NULL) {
- GHashTable *defaults = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
- -
- g_hash_table_insert(defaults, "team_id", g_strdup(channel->team_id));
- g_hash_table_insert(defaults, "id", g_strdup(channel->id));
- - g_hash_table_insert(defaults, "name", g_strconcat(channel->name, MATTERMOST_CHANNEL_SEPARATOR, g_hash_table_lookup(ma->teams, channel->team_id), NULL));
- -
- - chat = purple_chat_new(ma->account, channel->name, defaults);
- + g_hash_table_insert(defaults, "name", g_strdup(channel->name));
- + g_hash_table_insert(defaults, "topic", g_strdup(channel->display_name));
- + chat = purple_chat_new(ma->account, channel->id, defaults);
- purple_blist_add_chat(chat, mm_get_or_create_default_group(), NULL);
- purple_blist_node_set_string(PURPLE_BLIST_NODE(chat), "type", channel->type);
- @@ -1575,6 +1583,7 @@
- g_hash_table_replace(ma->group_chats, g_strdup(channel->id), g_strdup(channel->name));
- g_hash_table_replace(ma->group_chats_rev, g_strdup(channel->name), g_strdup(channel->id));
- + g_hash_table_replace(ma->channel_teams, g_strdup(channel->id), g_strdup(channel->team_id));
- if (channel->creator_id) {
- g_hash_table_replace(ma->group_chats_creators, g_strdup(channel->id), g_strdup(channel->creator_id));
- @@ -1583,6 +1592,7 @@
- if (autojoin) {
- PurpleChatConversation *conv = purple_serv_got_joined_chat(ma->pc, g_str_hash(channel->id), alias);
- + purple_conv_chat_set_id(conv, g_str_hash(channel->id));
- purple_conversation_set_data(PURPLE_CONVERSATION(conv), "id", g_strdup(channel->id));
- purple_conversation_set_data(PURPLE_CONVERSATION(conv), "team_id", g_strdup(channel->team_id));
- purple_conversation_set_data(PURPLE_CONVERSATION(conv), "name", g_strdup(alias));
- @@ -1780,9 +1789,9 @@
- mm_get_info(PurpleConnection *pc,const gchar *username)
- {
- MattermostAccount *ma = purple_connection_get_protocol_data(pc);
- - PurpleBuddy *buddy = purple_blist_find_buddy(ma->account, username);
- gchar *url;
- + PurpleBuddy *buddy = purple_blist_find_buddy(ma->account, username);
- // Don't add BOT to buddies
- // hope no user account/alias ends in [BOT] ...
- if (purple_str_has_suffix(username, MATTERMOST_BOT_LABEL)) {
- @@ -1838,9 +1847,10 @@
- g_hash_table_insert(defaults, "team_id", g_strdup(team_id));
- g_hash_table_insert(defaults, "id", g_strdup(id));
- - g_hash_table_insert(defaults, "name", g_strconcat(name, MATTERMOST_CHANNEL_SEPARATOR, g_hash_table_lookup(ma->teams, team_id), NULL));
- + g_hash_table_insert(defaults, "name", g_strdup(name));
- + g_hash_table_insert(defaults, "topic", g_strdup(name));
- - chat = purple_chat_new(ma->account, name, defaults);
- + chat = purple_chat_new(ma->account, id, defaults);
- purple_blist_add_chat(chat, mm_get_or_create_default_group(), NULL);
- mm_set_group_chat(ma, team_id, name, id);
- @@ -2024,13 +2034,9 @@
- static void
- mm_set_group_chat(MattermostAccount *ma, const gchar *team_id, const gchar *channel_name, const gchar *channel_id)
- {
- - gchar *tmpn = g_strconcat(channel_name, MATTERMOST_CHANNEL_SEPARATOR, g_hash_table_lookup(ma->channel_teams, team_id), NULL);
- -
- - g_hash_table_replace(ma->group_chats, g_strdup(channel_id), g_strdup(tmpn));
- - g_hash_table_replace(ma->group_chats_rev, g_strdup(tmpn), g_strdup(channel_id));
- + g_hash_table_replace(ma->group_chats, g_strdup(channel_id), g_strdup(channel_name));
- + g_hash_table_replace(ma->group_chats_rev, g_strdup(channel_name), g_strdup(channel_id));
- g_hash_table_replace(ma->channel_teams, g_strdup(channel_id), g_strdup(team_id));
- -
- - g_free(tmpn);
- }
- static void
- @@ -2363,7 +2369,7 @@
- static PurpleChatUserFlags
- mm_role_to_purple_flag(MattermostAccount *ma, const gchar *rolelist)
- {
- - PurpleChatUserFlags flags = PURPLE_CHAT_USER_NONE;
- + PurpleChatUserFlags flags = PURPLE_CHAT_USER_VOICE;
- gchar **roles = g_strsplit_set(rolelist, " ", -1);
- gint i;
- @@ -2565,6 +2571,7 @@
- g_hash_table_replace(ma->usernames_to_ids, g_strdup(username), g_strdup(user_id));
- } else if (username == NULL) {
- username = g_hash_table_lookup(ma->ids_to_usernames, user_id);
- + use_username = g_strdup(username);
- }
- if (!g_hash_table_contains(ma->channel_teams, channel_id)) {
- @@ -3099,9 +3106,9 @@
- default: type_str = _("Unknown"); break;
- }
- - room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM, name, team_category);
- -
- - purple_roomlist_room_add_field(roomlist, room, id);
- + room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM,
- + id, team_category);
- + purple_roomlist_room_add_field(roomlist, room, name);
- purple_roomlist_room_add_field(roomlist, room, team_id);
- purple_roomlist_room_add_field(roomlist, room, team_name);
- purple_roomlist_room_add_field(roomlist, room, name);
- @@ -3142,34 +3145,30 @@
- const gchar *team_id = g_list_nth_data(fields, 1);
- const gchar *team_name = g_list_nth_data(fields, 2);
- const gchar *name = g_list_nth_data(fields, 3);
- -
- //TODO: add alias ?
- - return g_strconcat(team_id, "^", id, "^", name, MATTERMOST_CHANNEL_SEPARATOR, team_name, NULL); //FIXME: need proper separator - unique !
- + return id; //FIXME: need proper separator - unique !
- }
- //roomlist_deserialize
- static GHashTable *
- -mm_chat_info_defaults(PurpleConnection *pc, const char *chatname)
- +mm_chat_info_defaults(PurpleConnection *pc, const char *channel_id)
- {
- + MattermostAccount *ma = purple_connection_get_protocol_data(pc);
- GHashTable *defaults = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
- - if (chatname != NULL)
- + if (channel_id != NULL)
- {
- - gchar **chat_parts = g_strsplit_set(chatname, "^", 3); //FIXME: need proper separator - unique !
- -
- - if (chat_parts[0]) {
- - g_hash_table_insert(defaults, "team_id", g_strdup(chat_parts[0]));
- - if (chat_parts[1]) {
- - g_hash_table_insert(defaults, "id", g_strdup(chat_parts[1]));
- - if (chat_parts[2]) {
- - g_hash_table_insert(defaults, "name", g_strdup(chat_parts[2]));
- - }
- - }
- + g_hash_table_insert(defaults, "id", g_strdup(channel_id));
- + gchar *team_id = g_hash_table_lookup(ma->channel_teams, channel_id);
- + if(team_id != NULL)
- + {
- + g_hash_table_insert(defaults, "team_id", g_strdup(team_id));
- + } else {
- + g_hash_table_insert(defaults, "team_id", g_strdup(mm_get_first_team_id(ma)));
- }
- //TODO: add alias ?
- - g_strfreev(chat_parts);
- } else {
- - g_hash_table_insert(defaults, "team_id", g_strdup(mm_get_first_team_id(purple_connection_get_protocol_data(pc))));
- + g_hash_table_insert(defaults, "team_id", g_strdup(mm_get_first_team_id(ma)));
- }
- return defaults;
- @@ -3199,7 +3198,7 @@
- f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Name"), "name", TRUE);
- fields = g_list_append(fields, f);
- - f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Display Name"), "display_name", FALSE);
- + f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Topic"), "topic", FALSE);
- fields = g_list_append(fields, f);
- f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Type"), "type", FALSE);
- @@ -3246,6 +3245,7 @@
- ma->roomlist_team_count++;
- }
- + purple_roomlist_set_in_progress(roomlist, FALSE);
- return roomlist;
- }
- @@ -4372,6 +4371,9 @@
- return;
- }
- + if (name == NULL) {
- + name = g_hash_table_lookup(ma->group_chats, id);
- + }
- if (id == NULL) {
- id = g_hash_table_lookup(ma->group_chats_rev, name);
- }
- @@ -4390,7 +4392,8 @@
- mm_set_group_chat(ma, team_id, name, id);
- - chatconv = purple_serv_got_joined_chat(pc, id_hash, name);
- + chatconv = purple_serv_got_joined_chat(pc, id_hash, id /*name*/);
- + purple_conv_chat_set_id(chatconv, g_str_hash(id));
- purple_conversation_set_data(PURPLE_CONVERSATION(chatconv), "id", g_strdup(id));
- purple_conversation_set_data(PURPLE_CONVERSATION(chatconv), "team_id", g_strdup(team_id));
- purple_conversation_set_data(PURPLE_CONVERSATION(chatconv), "name", g_strdup(name));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement