Advertisement
Guest User

purple-mattermost: spectrum2 patch

a guest
Oct 17th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 10.16 KB | None | 0 0
  1. --- libmattermost.c.org 2017-10-17 17:50:16.979166363 +0300
  2. +++ libmattermost.c 2017-10-17 17:50:13.125832943 +0300
  3. @@ -18,6 +18,7 @@
  4.  
  5.  // Glib
  6.  #include <glib.h>
  7. +#include <pthread.h>
  8.  
  9.  #if !GLIB_CHECK_VERSION(2, 32, 0)
  10.  #define g_hash_table_contains(hash_table, key) g_hash_table_lookup_extended(hash_table, key, NULL, NULL)
  11. @@ -146,7 +147,7 @@
  12.  #define MATTERMOST_SERVER_SPLIT_CHAR '|'
  13.  
  14.  #define MATTERMOST_CHANNEL_SEPARATOR_VISUAL " / "
  15. -#define MATTERMOST_CHANNEL_SEPARATOR "---"
  16. +//#define MATTERMOST_CHANNEL_SEPARATOR "---"
  17.  #define MATTERMOST_CHANNEL_OPEN 'O'
  18.  #define MATTERMOST_CHANNEL_PRIVATE 'P'
  19.  #define MATTERMOST_CHANNEL_DIRECT 'D'
  20. @@ -192,11 +193,23 @@
  21.  #define PURPLE_IS_IM_CONVERSATION(conv)       (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM)
  22.  #define PURPLE_IS_CHAT_CONVERSATION(conv)     (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT)
  23.  #define PURPLE_CONVERSATION(chatorim)         (chatorim == NULL ? NULL : chatorim->conv)
  24. -#define PURPLE_IM_CONVERSATION(conv)          PURPLE_CONV_IM(conv)
  25. -#define PURPLE_CHAT_CONVERSATION(conv)        PURPLE_CONV_CHAT(conv)
  26. +#define PURPLE_IM_CONVERSATION(conv)                   PURPLE_CONV_IM(conv == NULL ? NULL : conv)
  27. +#define PURPLE_CHAT_CONVERSATION(conv)             PURPLE_CONV_CHAT(conv == NULL ? NULL : conv)
  28.  #define purple_conversation_present_error     purple_conv_present_error
  29. -#define purple_serv_got_joined_chat(pc, id, name)  PURPLE_CONV_CHAT(serv_got_joined_chat(pc, id, name))
  30. -#define purple_conversations_find_chat(pc, id)  PURPLE_CONV_CHAT(purple_find_chat(pc, id))
  31. +
  32. +
  33. +PurpleChatConversation* purple_serv_got_joined_chat(PurpleConnection *pc, int id, gchar *name)
  34. +{
  35. +   PurpleConversation *ret = serv_got_joined_chat(pc, id, name);
  36. +   return ret == NULL ? NULL : PURPLE_CONV_CHAT(ret);
  37. +}
  38. +
  39. +PurpleChatConversation* purple_conversations_find_chat(PurpleConnection *pc, int id)
  40. +{
  41. +   PurpleConversation *ret = purple_find_chat(pc, id);
  42. +   return ret == NULL ? NULL : PURPLE_CONV_CHAT(ret);
  43. +}
  44. +
  45.  #define purple_serv_got_chat_in                    serv_got_chat_in
  46.  #define purple_serv_got_chat_left                  serv_got_chat_left
  47.  #define purple_chat_conversation_add_user     purple_conv_chat_add_user
  48. @@ -1557,12 +1566,11 @@
  49.         if (chat == NULL) {
  50.             GHashTable *defaults = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
  51.  
  52. -
  53.             g_hash_table_insert(defaults, "team_id", g_strdup(channel->team_id));
  54.             g_hash_table_insert(defaults, "id", g_strdup(channel->id));
  55. -           g_hash_table_insert(defaults, "name", g_strconcat(channel->name, MATTERMOST_CHANNEL_SEPARATOR, g_hash_table_lookup(ma->teams, channel->team_id), NULL));                           
  56. -          
  57. -           chat = purple_chat_new(ma->account, channel->name, defaults);
  58. +           g_hash_table_insert(defaults, "name", g_strdup(channel->name));
  59. +           g_hash_table_insert(defaults, "topic", g_strdup(channel->display_name));
  60. +           chat = purple_chat_new(ma->account, channel->id, defaults);
  61.  
  62.             purple_blist_add_chat(chat, mm_get_or_create_default_group(), NULL);
  63.             purple_blist_node_set_string(PURPLE_BLIST_NODE(chat), "type", channel->type);
  64. @@ -1575,6 +1583,7 @@
  65.  
  66.             g_hash_table_replace(ma->group_chats, g_strdup(channel->id), g_strdup(channel->name));
  67.             g_hash_table_replace(ma->group_chats_rev, g_strdup(channel->name), g_strdup(channel->id));
  68. +           g_hash_table_replace(ma->channel_teams, g_strdup(channel->id), g_strdup(channel->team_id));
  69.      
  70.             if (channel->creator_id) {
  71.                 g_hash_table_replace(ma->group_chats_creators, g_strdup(channel->id), g_strdup(channel->creator_id));
  72. @@ -1583,6 +1592,7 @@
  73.             if (autojoin) {
  74.                 PurpleChatConversation *conv = purple_serv_got_joined_chat(ma->pc, g_str_hash(channel->id), alias);
  75.    
  76. +               purple_conv_chat_set_id(conv, g_str_hash(channel->id));
  77.                 purple_conversation_set_data(PURPLE_CONVERSATION(conv), "id", g_strdup(channel->id));
  78.                 purple_conversation_set_data(PURPLE_CONVERSATION(conv), "team_id", g_strdup(channel->team_id));
  79.                 purple_conversation_set_data(PURPLE_CONVERSATION(conv), "name", g_strdup(alias));
  80. @@ -1780,9 +1789,9 @@
  81.  mm_get_info(PurpleConnection *pc,const gchar *username)
  82.  {
  83.          MattermostAccount *ma = purple_connection_get_protocol_data(pc);
  84. -        PurpleBuddy *buddy = purple_blist_find_buddy(ma->account, username);
  85.          gchar *url;
  86.  
  87. +   PurpleBuddy *buddy = purple_blist_find_buddy(ma->account, username);
  88.         // Don't add BOT to buddies
  89.         // hope no user account/alias ends in [BOT] ...
  90.         if (purple_str_has_suffix(username, MATTERMOST_BOT_LABEL)) {
  91. @@ -1838,9 +1847,10 @@
  92.  
  93.         g_hash_table_insert(defaults, "team_id", g_strdup(team_id));
  94.         g_hash_table_insert(defaults, "id", g_strdup(id));
  95. -       g_hash_table_insert(defaults, "name", g_strconcat(name, MATTERMOST_CHANNEL_SEPARATOR, g_hash_table_lookup(ma->teams, team_id), NULL));
  96. +       g_hash_table_insert(defaults, "name", g_strdup(name));
  97. +       g_hash_table_insert(defaults, "topic", g_strdup(name));
  98.  
  99. -       chat = purple_chat_new(ma->account, name, defaults);
  100. +       chat = purple_chat_new(ma->account, id, defaults);
  101.         purple_blist_add_chat(chat, mm_get_or_create_default_group(), NULL);
  102.  
  103.         mm_set_group_chat(ma, team_id, name, id);
  104. @@ -2024,13 +2034,9 @@
  105.  static void
  106.  mm_set_group_chat(MattermostAccount *ma, const gchar *team_id, const gchar *channel_name, const gchar *channel_id)
  107.  {
  108. -   gchar *tmpn = g_strconcat(channel_name, MATTERMOST_CHANNEL_SEPARATOR, g_hash_table_lookup(ma->channel_teams, team_id), NULL);
  109. -
  110. -   g_hash_table_replace(ma->group_chats, g_strdup(channel_id), g_strdup(tmpn));
  111. -   g_hash_table_replace(ma->group_chats_rev, g_strdup(tmpn), g_strdup(channel_id));
  112. +   g_hash_table_replace(ma->group_chats, g_strdup(channel_id), g_strdup(channel_name));
  113. +   g_hash_table_replace(ma->group_chats_rev, g_strdup(channel_name), g_strdup(channel_id));
  114.     g_hash_table_replace(ma->channel_teams, g_strdup(channel_id), g_strdup(team_id));
  115. -
  116. -   g_free(tmpn);
  117.  }
  118.  
  119.  static void
  120. @@ -2363,7 +2369,7 @@
  121.  static PurpleChatUserFlags
  122.  mm_role_to_purple_flag(MattermostAccount *ma, const gchar *rolelist)
  123.  {
  124. -   PurpleChatUserFlags flags = PURPLE_CHAT_USER_NONE;
  125. +   PurpleChatUserFlags flags = PURPLE_CHAT_USER_VOICE;
  126.     gchar **roles = g_strsplit_set(rolelist, " ", -1);
  127.     gint i;
  128.    
  129. @@ -2565,6 +2571,7 @@
  130.         g_hash_table_replace(ma->usernames_to_ids, g_strdup(username), g_strdup(user_id));
  131.     } else if (username == NULL) {
  132.         username = g_hash_table_lookup(ma->ids_to_usernames, user_id);
  133. +       use_username = g_strdup(username);
  134.     }
  135.    
  136.     if (!g_hash_table_contains(ma->channel_teams, channel_id)) {
  137. @@ -3099,9 +3106,9 @@
  138.             default:  type_str = _("Unknown"); break;
  139.         }
  140.  
  141. -       room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM, name, team_category);
  142. -      
  143. -       purple_roomlist_room_add_field(roomlist, room, id);
  144. +       room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM,
  145. +                                                                       id, team_category);
  146. +       purple_roomlist_room_add_field(roomlist, room, name);
  147.         purple_roomlist_room_add_field(roomlist, room, team_id);
  148.         purple_roomlist_room_add_field(roomlist, room, team_name);
  149.         purple_roomlist_room_add_field(roomlist, room, name);
  150. @@ -3142,34 +3145,30 @@
  151.     const gchar *team_id = g_list_nth_data(fields, 1);
  152.     const gchar *team_name = g_list_nth_data(fields, 2);
  153.     const gchar *name = g_list_nth_data(fields, 3);
  154. -  
  155.     //TODO: add alias ?
  156. -   return g_strconcat(team_id, "^", id, "^", name, MATTERMOST_CHANNEL_SEPARATOR, team_name, NULL); //FIXME: need proper separator - unique !
  157. +   return id; //FIXME: need proper separator - unique !
  158.  }
  159.  
  160.  //roomlist_deserialize
  161.  static GHashTable *
  162. -mm_chat_info_defaults(PurpleConnection *pc, const char *chatname)
  163. +mm_chat_info_defaults(PurpleConnection *pc, const char *channel_id)
  164.  {
  165. +   MattermostAccount *ma = purple_connection_get_protocol_data(pc);
  166.     GHashTable *defaults = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
  167.    
  168. -   if (chatname != NULL)
  169. +   if (channel_id != NULL)
  170.     {
  171. -       gchar **chat_parts = g_strsplit_set(chatname, "^", 3); //FIXME: need proper separator - unique !
  172. -      
  173. -       if (chat_parts[0]) {
  174. -           g_hash_table_insert(defaults, "team_id", g_strdup(chat_parts[0]));
  175. -           if (chat_parts[1]) {
  176. -               g_hash_table_insert(defaults, "id", g_strdup(chat_parts[1]));
  177. -               if (chat_parts[2]) {
  178. -                   g_hash_table_insert(defaults, "name", g_strdup(chat_parts[2]));
  179. -               }
  180. -           }
  181. +       g_hash_table_insert(defaults, "id", g_strdup(channel_id));
  182. +       gchar *team_id = g_hash_table_lookup(ma->channel_teams, channel_id);
  183. +       if(team_id != NULL)
  184. +       {
  185. +           g_hash_table_insert(defaults, "team_id", g_strdup(team_id));
  186. +       } else {
  187. +           g_hash_table_insert(defaults, "team_id", g_strdup(mm_get_first_team_id(ma)));
  188.         }
  189.         //TODO: add alias ?
  190. -       g_strfreev(chat_parts);
  191.     } else {
  192. -       g_hash_table_insert(defaults, "team_id", g_strdup(mm_get_first_team_id(purple_connection_get_protocol_data(pc))));
  193. +       g_hash_table_insert(defaults, "team_id", g_strdup(mm_get_first_team_id(ma)));
  194.     }
  195.  
  196.     return defaults;
  197. @@ -3199,7 +3198,7 @@
  198.     f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Name"), "name", TRUE);
  199.     fields = g_list_append(fields, f);
  200.  
  201. -   f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Display Name"), "display_name", FALSE);
  202. +   f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Topic"), "topic", FALSE);
  203.     fields = g_list_append(fields, f);
  204.  
  205.     f = purple_roomlist_field_new(PURPLE_ROOMLIST_FIELD_STRING, _("Type"), "type", FALSE);
  206. @@ -3246,6 +3245,7 @@
  207.         ma->roomlist_team_count++;
  208.     }
  209.    
  210. +   purple_roomlist_set_in_progress(roomlist, FALSE);
  211.     return roomlist;
  212.  }
  213.  
  214. @@ -4372,6 +4371,9 @@
  215.         return;
  216.     }
  217.    
  218. +   if (name == NULL) {
  219. +       name = g_hash_table_lookup(ma->group_chats, id);
  220. +   }
  221.     if (id == NULL) {
  222.         id = g_hash_table_lookup(ma->group_chats_rev, name);
  223.     }
  224. @@ -4390,7 +4392,8 @@
  225.    
  226.     mm_set_group_chat(ma, team_id, name, id);
  227.  
  228. -   chatconv = purple_serv_got_joined_chat(pc, id_hash, name);
  229. +   chatconv = purple_serv_got_joined_chat(pc, id_hash, id /*name*/);
  230. +   purple_conv_chat_set_id(chatconv, g_str_hash(id));
  231.     purple_conversation_set_data(PURPLE_CONVERSATION(chatconv), "id", g_strdup(id));
  232.     purple_conversation_set_data(PURPLE_CONVERSATION(chatconv), "team_id", g_strdup(team_id));
  233.     purple_conversation_set_data(PURPLE_CONVERSATION(chatconv), "name", g_strdup(name));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement