libpurple/protocols/gg/chat.c

Wed, 06 Feb 2013 13:39:48 +0100

author
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
date
Wed, 06 Feb 2013 13:39:48 +0100
changeset 34418
c27e31267e8d
parent 34406
46f06ef265e3
child 34430
15639e15839e
permissions
-rw-r--r--

Gadu-Gadu: fix compilation on 64-bit targets

34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
1 #include "chat.h"
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
2
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
3 #include <debug.h>
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
4
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
5 #include "gg.h"
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
6 #include "utils.h"
34369
6ae053435538 Gadu-Gadu: enable inline images and GG11 formatting for conferences
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34361
diff changeset
7 #include "message-prpl.h"
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
8
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
9 typedef struct _ggp_chat_local_info ggp_chat_local_info;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
10
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
11 struct _ggp_chat_session_data
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
12 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
13 ggp_chat_local_info *chats;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
14 int chats_count;
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
15
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
16 gboolean got_all_chats_info;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
17 GSList *pending_joins;
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
18 };
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
19
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
20 struct _ggp_chat_local_info
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
21 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
22 int local_id;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
23 uint64_t id;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
24
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
25 PurpleConversation *conv;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
26 PurpleConnection *gc;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
27
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
28 gboolean left;
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
29 gboolean previously_joined;
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
30
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
31 uin_t *participants;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
32 int participants_count;
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
33 };
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
34
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
35 static ggp_chat_local_info * ggp_chat_new(PurpleConnection *gc, uint64_t id);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
36 static ggp_chat_local_info * ggp_chat_get(PurpleConnection *gc, uint64_t id);
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
37 static void ggp_chat_open_conv(ggp_chat_local_info *chat);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
38 static ggp_chat_local_info * ggp_chat_get_local(PurpleConnection *gc,
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
39 int local_id);
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
40 static void ggp_chat_joined(ggp_chat_local_info *chat, uin_t uin);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
41 static void ggp_chat_left(ggp_chat_local_info *chat, uin_t uin);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
42 static const gchar * ggp_chat_get_name_from_id(uint64_t id);
34352
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
43 static uint64_t ggp_chat_get_id_from_name(const gchar * name);
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
44 static void ggp_chat_join_id(PurpleConnection *gc, uint64_t id);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
45
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
46 static inline ggp_chat_session_data *
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
47 ggp_chat_get_sdata(PurpleConnection *gc)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
48 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
49 GGPInfo *accdata = purple_connection_get_protocol_data(gc);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
50 return accdata->chat_data;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
51 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
52
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
53 void ggp_chat_setup(PurpleConnection *gc)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
54 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
55 GGPInfo *accdata = purple_connection_get_protocol_data(gc);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
56 ggp_chat_session_data *sdata = g_new0(ggp_chat_session_data, 1);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
57
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
58 accdata->chat_data = sdata;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
59 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
60
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
61 void ggp_chat_cleanup(PurpleConnection *gc)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
62 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
63 ggp_chat_session_data *sdata = ggp_chat_get_sdata(gc);
34354
7618c770a586 Gadu-Gadu: fix leaks
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34353
diff changeset
64 int i;
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
65
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
66 g_slist_free_full(sdata->pending_joins, g_free);
34354
7618c770a586 Gadu-Gadu: fix leaks
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34353
diff changeset
67 for (i = 0; i < sdata->chats_count; i++)
7618c770a586 Gadu-Gadu: fix leaks
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34353
diff changeset
68 g_free(sdata->chats[i].participants);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
69 g_free(sdata->chats);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
70 g_free(sdata);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
71 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
72
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
73 static ggp_chat_local_info * ggp_chat_new(PurpleConnection *gc, uint64_t id)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
74 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
75 ggp_chat_session_data *sdata = ggp_chat_get_sdata(gc);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
76 int local_id;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
77 ggp_chat_local_info *chat;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
78
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
79 if (NULL != (chat = ggp_chat_get(gc, id)))
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
80 return chat;
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
81
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
82 local_id = sdata->chats_count++;
34354
7618c770a586 Gadu-Gadu: fix leaks
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34353
diff changeset
83 sdata->chats = g_realloc(sdata->chats,
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
84 sdata->chats_count * sizeof(ggp_chat_local_info));
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
85 chat = &sdata->chats[local_id];
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
86
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
87 chat->local_id = local_id;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
88 chat->id = id;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
89 chat->conv = NULL;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
90 chat->gc = gc;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
91 chat->left = FALSE;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
92 chat->previously_joined = FALSE;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
93 chat->participants = NULL;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
94 chat->participants_count = 0;
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
95
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
96 return chat;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
97 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
98
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
99 static ggp_chat_local_info * ggp_chat_get(PurpleConnection *gc, uint64_t id)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
100 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
101 ggp_chat_session_data *sdata = ggp_chat_get_sdata(gc);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
102 int i;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
103
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
104 for (i = 0; i < sdata->chats_count; i++)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
105 if (sdata->chats[i].id == id)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
106 return &sdata->chats[i];
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
107
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
108 return NULL;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
109 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
110
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
111 static void ggp_chat_open_conv(ggp_chat_local_info *chat)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
112 {
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
113 PurpleConvChat *pcchat;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
114 int i;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
115
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
116 if (chat->conv != NULL)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
117 return;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
118
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
119 chat->conv = serv_got_joined_chat(chat->gc, chat->local_id,
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
120 ggp_chat_get_name_from_id(chat->id));
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
121 if (chat->previously_joined)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
122 {
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
123 purple_conversation_write(chat->conv, NULL,
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
124 _("You have re-joined the chat"), PURPLE_MESSAGE_SYSTEM,
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
125 time(NULL));
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
126 }
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
127 chat->previously_joined = TRUE;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
128
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
129 pcchat = purple_conversation_get_chat_data(chat->conv);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
130 purple_conv_chat_clear_users(pcchat);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
131 for (i = 0; i < chat->participants_count; i++)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
132 purple_conv_chat_add_user(pcchat,
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
133 ggp_uin_to_str(chat->participants[i]), NULL,
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
134 PURPLE_CBFLAGS_NONE, FALSE);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
135 }
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
136
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
137 static ggp_chat_local_info * ggp_chat_get_local(PurpleConnection *gc,
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
138 int local_id)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
139 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
140 ggp_chat_session_data *sdata = ggp_chat_get_sdata(gc);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
141 int i;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
142
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
143 for (i = 0; i < sdata->chats_count; i++)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
144 if (sdata->chats[i].local_id == local_id)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
145 return &sdata->chats[i];
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
146
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
147 return NULL;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
148 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
149
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
150 void ggp_chat_got_event(PurpleConnection *gc, const struct gg_event *ev)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
151 {
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
152 ggp_chat_session_data *sdata = ggp_chat_get_sdata(gc);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
153 ggp_chat_local_info *chat;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
154 int i;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
155
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
156 if (ev->type == GG_EVENT_CHAT_INFO)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
157 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
158 const struct gg_event_chat_info *eci = &ev->event.chat_info;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
159 chat = ggp_chat_new(gc, eci->id);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
160 for (i = 0; i < eci->participants_count; i++)
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
161 ggp_chat_joined(chat, eci->participants[i]);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
162 }
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
163 else if (ev->type == GG_EVENT_CHAT_INFO_GOT_ALL)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
164 {
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
165 GSList *it = sdata->pending_joins;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
166 sdata->got_all_chats_info = TRUE;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
167 while (it)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
168 {
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
169 uint64_t *id_p = it->data;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
170 ggp_chat_join_id(gc, *id_p);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
171 it = g_slist_next(it);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
172 }
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
173 g_slist_free_full(sdata->pending_joins, g_free);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
174 sdata->pending_joins = NULL;
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
175 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
176 else if (ev->type == GG_EVENT_CHAT_INFO_UPDATE)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
177 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
178 const struct gg_event_chat_info_update *eciu =
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
179 &ev->event.chat_info_update;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
180 chat = ggp_chat_get(gc, eciu->id);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
181 if (!chat)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
182 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
183 purple_debug_error("gg", "ggp_chat_got_event: "
34418
c27e31267e8d Gadu-Gadu: fix compilation on 64-bit targets
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34406
diff changeset
184 "chat %" G_GUINT64_FORMAT " not found\n",
c27e31267e8d Gadu-Gadu: fix compilation on 64-bit targets
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34406
diff changeset
185 eciu->id);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
186 return;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
187 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
188 if (eciu->type == GG_CHAT_INFO_UPDATE_ENTERED)
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
189 ggp_chat_joined(chat, eciu->participant);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
190 else if (eciu->type == GG_CHAT_INFO_UPDATE_EXITED)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
191 ggp_chat_left(chat, eciu->participant);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
192 else
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
193 purple_debug_warning("gg", "ggp_chat_got_event: "
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
194 "unknown update type - %d", eciu->type);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
195 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
196 else if (ev->type == GG_EVENT_CHAT_CREATED)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
197 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
198 const struct gg_event_chat_created *ecc =
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
199 &ev->event.chat_created;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
200 uin_t me = ggp_str_to_uin(purple_account_get_username(
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
201 purple_connection_get_account(gc)));
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
202 chat = ggp_chat_new(gc, ecc->id);
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
203 ggp_chat_joined(chat, me);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
204 ggp_chat_open_conv(chat);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
205 }
34406
46f06ef265e3 Gadu-Gadu: update for the newest devel libgadu
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34369
diff changeset
206 else if (ev->type == GG_EVENT_CHAT_INVITE_ACK)
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
207 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
208 /* ignore */
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
209 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
210 else
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
211 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
212 purple_debug_fatal("gg", "ggp_chat_got_event: unexpected event "
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
213 "- %d\n", ev->type);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
214 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
215 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
216
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
217 static int ggp_chat_participant_find(ggp_chat_local_info *chat, uin_t uin)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
218 {
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
219 int i;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
220 for (i = 0; i < chat->participants_count; i++)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
221 if (chat->participants[i] == uin)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
222 return i;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
223 return -1;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
224 }
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
225
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
226 static void ggp_chat_joined(ggp_chat_local_info *chat, uin_t uin)
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
227 {
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
228 int idx = ggp_chat_participant_find(chat, uin);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
229 if (idx >= 0)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
230 {
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
231 purple_debug_warning("gg", "ggp_chat_joined: "
34418
c27e31267e8d Gadu-Gadu: fix compilation on 64-bit targets
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34406
diff changeset
232 "user %u is already present in chat %" G_GUINT64_FORMAT
c27e31267e8d Gadu-Gadu: fix compilation on 64-bit targets
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34406
diff changeset
233 "\n", uin, chat->id);
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
234 return;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
235 }
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
236 chat->participants_count++;
34354
7618c770a586 Gadu-Gadu: fix leaks
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34353
diff changeset
237 chat->participants = g_realloc(chat->participants,
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
238 sizeof(uin) * chat->participants_count);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
239 chat->participants[chat->participants_count - 1] = uin;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
240
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
241 if (!chat->conv)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
242 return;
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
243 purple_conv_chat_add_user(purple_conversation_get_chat_data(chat->conv),
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
244 ggp_uin_to_str(uin), NULL, PURPLE_CBFLAGS_NONE, TRUE);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
245 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
246
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
247 static void ggp_chat_left(ggp_chat_local_info *chat, uin_t uin)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
248 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
249 uin_t me;
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
250 int idx = ggp_chat_participant_find(chat, uin);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
251
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
252 if (idx < 0)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
253 {
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
254 purple_debug_warning("gg", "ggp_chat_joined: "
34418
c27e31267e8d Gadu-Gadu: fix compilation on 64-bit targets
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34406
diff changeset
255 "user %u isn't present in chat %" G_GUINT64_FORMAT "\n",
c27e31267e8d Gadu-Gadu: fix compilation on 64-bit targets
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34406
diff changeset
256 uin, chat->id);
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
257 return;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
258 }
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
259 chat->participants[idx] =
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
260 chat->participants[chat->participants_count - 1];
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
261 chat->participants_count--;
34354
7618c770a586 Gadu-Gadu: fix leaks
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34353
diff changeset
262 chat->participants = g_realloc(chat->participants,
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
263 sizeof(uin) * chat->participants_count);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
264
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
265 if (chat->conv == NULL)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
266 return;
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
267
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
268 me = ggp_str_to_uin(purple_account_get_username(
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
269 purple_connection_get_account(chat->gc)));
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
270
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
271 if (me == uin)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
272 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
273 purple_conversation_write(chat->conv, NULL,
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
274 _("You have left the chat"), PURPLE_MESSAGE_SYSTEM,
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
275 time(NULL));
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
276 serv_got_chat_left(chat->gc, chat->local_id);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
277 chat->conv = NULL;
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
278 chat->left = TRUE;
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
279 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
280 purple_conv_chat_remove_user(purple_conversation_get_chat_data(
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
281 chat->conv), ggp_uin_to_str(uin), NULL);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
282 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
283
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
284 GList * ggp_chat_info(PurpleConnection *gc)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
285 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
286 GList *m = NULL;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
287 struct proto_chat_entry *pce;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
288
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
289 pce = g_new0(struct proto_chat_entry, 1);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
290 pce->label = _("_Conference identifier:");
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
291 pce->identifier = "id";
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
292 pce->required = FALSE;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
293 m = g_list_append(m, pce);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
294
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
295 return m;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
296 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
297
34352
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
298 GHashTable * ggp_chat_info_defaults(PurpleConnection *gc, const char *chat_name)
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
299 {
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
300 GHashTable *defaults;
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
301
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
302 defaults = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free);
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
303
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
304 if (chat_name != NULL && ggp_chat_get_id_from_name(chat_name) != 0)
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
305 g_hash_table_insert(defaults, "id", g_strdup(chat_name));
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
306
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
307 return defaults;
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
308 }
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
309
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
310 char * ggp_chat_get_name(GHashTable *components)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
311 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
312 return g_strdup((gchar*)g_hash_table_lookup(components, "id"));
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
313 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
314
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
315 static const gchar * ggp_chat_get_name_from_id(uint64_t id)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
316 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
317 static gchar buff[30];
34418
c27e31267e8d Gadu-Gadu: fix compilation on 64-bit targets
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34406
diff changeset
318 g_snprintf(buff, sizeof(buff), "%" G_GUINT64_FORMAT, id);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
319 return buff;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
320 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
321
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
322 static uint64_t ggp_chat_get_id_from_name(const gchar * name)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
323 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
324 uint64_t id;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
325 gchar *endptr;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
326
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
327 if (name == NULL)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
328 return 0;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
329
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
330 id = g_ascii_strtoull(name, &endptr, 10);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
331
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
332 if (*endptr != '\0' || id == G_MAXUINT64)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
333 return 0;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
334
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
335 return id;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
336 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
337
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
338 void ggp_chat_join(PurpleConnection *gc, GHashTable *components)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
339 {
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
340 ggp_chat_session_data *sdata = ggp_chat_get_sdata(gc);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
341 GGPInfo *info = purple_connection_get_protocol_data(gc);
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
342 const gchar *id_cs;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
343 gchar *id_s;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
344 uint64_t id;
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
345
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
346 id_cs = g_hash_table_lookup(components, "id");
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
347 id_s = g_strdup(id_cs);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
348 if (id_s)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
349 g_strstrip(id_s);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
350 if (id_s == NULL || id_s[0] == '\0')
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
351 {
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
352 g_free(id_s);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
353 if (gg_chat_create(info->session) < 0)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
354 {
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
355 purple_debug_error("gg", "ggp_chat_join; "
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
356 "cannot create\n");
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
357 purple_serv_got_join_chat_failed(gc, components);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
358 }
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
359 return;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
360 }
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
361 id = ggp_chat_get_id_from_name(id_s);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
362 g_free(id_s);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
363
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
364 if (!id)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
365 {
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
366 char *buff = g_strdup_printf(
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
367 _("%s is not a valid room identifier"), id_cs);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
368 purple_notify_error(gc, _("Invalid Room Identifier"),
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
369 _("Invalid Room Identifier"), buff);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
370 g_free(buff);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
371 purple_serv_got_join_chat_failed(gc, components);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
372 return;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
373 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
374
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
375 if (sdata->got_all_chats_info)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
376 ggp_chat_join_id(gc, id);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
377 else
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
378 {
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
379 uint64_t *id_p = g_new(uint64_t, 1);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
380 *id_p = id;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
381 sdata->pending_joins = g_slist_append(sdata->pending_joins, id_p);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
382 }
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
383
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
384 }
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
385
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
386 static void ggp_chat_join_id(PurpleConnection *gc, uint64_t id)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
387 {
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
388 GHashTable *components;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
389 ggp_chat_local_info *chat = ggp_chat_get(gc, id);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
390
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
391 if (chat && !chat->left)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
392 {
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
393 ggp_chat_open_conv(chat);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
394 return;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
395 }
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
396
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
397 if (!chat)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
398 {
34418
c27e31267e8d Gadu-Gadu: fix compilation on 64-bit targets
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34406
diff changeset
399 char *id_s = g_strdup_printf("%" G_GUINT64_FORMAT, id);
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
400 char *buff = g_strdup_printf(
34418
c27e31267e8d Gadu-Gadu: fix compilation on 64-bit targets
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34406
diff changeset
401 _("%s is not a valid room identifier"), id_s);
c27e31267e8d Gadu-Gadu: fix compilation on 64-bit targets
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34406
diff changeset
402 g_free(id_s);
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
403 purple_notify_error(gc, _("Invalid Room Identifier"),
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
404 _("Invalid Room Identifier"), buff);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
405 g_free(buff);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
406 }
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
407 else /* if (chat->left) */
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
408 {
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
409 purple_notify_error(gc, _("Could not join chat room"),
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
410 _("Could not join chat room"),
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
411 _("You have to ask for invitation from another chat "
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
412 "participant"));
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
413 }
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
414
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
415 components = ggp_chat_info_defaults(gc, ggp_chat_get_name_from_id(id));
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
416 purple_serv_got_join_chat_failed(gc, components);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
417 g_hash_table_destroy(components);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
418 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
419
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
420 void ggp_chat_leave(PurpleConnection *gc, int local_id)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
421 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
422 GGPInfo *info = purple_connection_get_protocol_data(gc);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
423 ggp_chat_local_info *chat;
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
424 uin_t me;
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
425
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
426 chat = ggp_chat_get_local(gc, local_id);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
427 if (!chat)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
428 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
429 purple_debug_error("gg", "ggp_chat_leave: "
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
430 "chat %u doesn't exists\n", local_id);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
431 return;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
432 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
433
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
434 if (gg_chat_leave(info->session, chat->id) < 0)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
435 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
436 purple_debug_error("gg", "ggp_chat_leave: "
34418
c27e31267e8d Gadu-Gadu: fix compilation on 64-bit targets
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34406
diff changeset
437 "unable to leave chat %" G_GUINT64_FORMAT "\n",
c27e31267e8d Gadu-Gadu: fix compilation on 64-bit targets
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34406
diff changeset
438 chat->id);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
439 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
440 chat->conv = NULL;
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
441
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
442 me = ggp_str_to_uin(purple_account_get_username(
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
443 purple_connection_get_account(chat->gc)));
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
444
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
445 ggp_chat_left(chat, me);
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
446 chat->left = TRUE;
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
447 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
448
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
449 void ggp_chat_invite(PurpleConnection *gc, int local_id, const char *message,
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
450 const char *who)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
451 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
452 GGPInfo *info = purple_connection_get_protocol_data(gc);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
453 ggp_chat_local_info *chat;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
454 uin_t invited;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
455
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
456 chat = ggp_chat_get_local(gc, local_id);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
457 if (!chat)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
458 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
459 purple_debug_error("gg", "ggp_chat_invite: "
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
460 "chat %u doesn't exists\n", local_id);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
461 return;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
462 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
463
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
464 invited = ggp_str_to_uin(who);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
465 if (gg_chat_invite(info->session, chat->id, &invited, 1) < 0)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
466 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
467 purple_debug_error("gg", "ggp_chat_invite: "
34418
c27e31267e8d Gadu-Gadu: fix compilation on 64-bit targets
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34406
diff changeset
468 "unable to invite %s to chat %" G_GUINT64_FORMAT "\n",
c27e31267e8d Gadu-Gadu: fix compilation on 64-bit targets
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34406
diff changeset
469 who, chat->id);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
470 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
471 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
472
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
473 int ggp_chat_send(PurpleConnection *gc, int local_id, const char *message,
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
474 PurpleMessageFlags flags)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
475 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
476 GGPInfo *info = purple_connection_get_protocol_data(gc);
34369
6ae053435538 Gadu-Gadu: enable inline images and GG11 formatting for conferences
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34361
diff changeset
477 PurpleConversation *conv;
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
478 ggp_chat_local_info *chat;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
479 gboolean succ = TRUE;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
480 const gchar *me;
34369
6ae053435538 Gadu-Gadu: enable inline images and GG11 formatting for conferences
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34361
diff changeset
481 gchar *gg_msg;
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
482
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
483 chat = ggp_chat_get_local(gc, local_id);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
484 if (!chat)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
485 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
486 purple_debug_error("gg", "ggp_chat_send: "
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
487 "chat %u doesn't exists\n", local_id);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
488 return -1;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
489 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
490
34369
6ae053435538 Gadu-Gadu: enable inline images and GG11 formatting for conferences
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34361
diff changeset
491 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT,
6ae053435538 Gadu-Gadu: enable inline images and GG11 formatting for conferences
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34361
diff changeset
492 ggp_chat_get_name_from_id(chat->id),
6ae053435538 Gadu-Gadu: enable inline images and GG11 formatting for conferences
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34361
diff changeset
493 purple_connection_get_account(gc));
6ae053435538 Gadu-Gadu: enable inline images and GG11 formatting for conferences
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34361
diff changeset
494
6ae053435538 Gadu-Gadu: enable inline images and GG11 formatting for conferences
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34361
diff changeset
495 gg_msg = ggp_message_format_to_gg(conv, message);
6ae053435538 Gadu-Gadu: enable inline images and GG11 formatting for conferences
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34361
diff changeset
496
6ae053435538 Gadu-Gadu: enable inline images and GG11 formatting for conferences
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34361
diff changeset
497 if (gg_chat_send_message(info->session, chat->id, gg_msg, TRUE) < 0)
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
498 succ = FALSE;
34369
6ae053435538 Gadu-Gadu: enable inline images and GG11 formatting for conferences
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34361
diff changeset
499 g_free(gg_msg);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
500
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
501 me = purple_account_get_username(purple_connection_get_account(gc));
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
502 serv_got_chat_in(gc, chat->local_id, me, flags, message, time(NULL));
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
503
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
504 return succ ? 0 : -1;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
505 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
506
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
507 void ggp_chat_got_message(PurpleConnection *gc, uint64_t chat_id,
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
508 const char *message, time_t time, uin_t who)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
509 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
510 ggp_chat_local_info *chat;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
511 uin_t me;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
512
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
513 me = ggp_str_to_uin(purple_account_get_username(
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
514 purple_connection_get_account(gc)));
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
515
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
516 chat = ggp_chat_get(gc, chat_id);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
517 if (!chat)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
518 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
519 purple_debug_error("gg", "ggp_chat_got_message: "
34418
c27e31267e8d Gadu-Gadu: fix compilation on 64-bit targets
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34406
diff changeset
520 "chat %" G_GUINT64_FORMAT " doesn't exists\n", chat_id);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
521 return;
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
522 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
523
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
524 ggp_chat_open_conv(chat);
34350
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
525 if (who == me)
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
526 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
527 purple_conversation_write(chat->conv, ggp_uin_to_str(who),
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
528 message, PURPLE_MESSAGE_SEND, time);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
529 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
530 else
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
531 {
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
532 serv_got_chat_in(gc, chat->local_id, ggp_uin_to_str(who),
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
533 PURPLE_MESSAGE_RECV, message, time);
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
534 }
89441dbabc83 Gadu-Gadu: initial GG11 conferences support
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
diff changeset
535 }
34352
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
536
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
537 static gboolean ggp_chat_roomlist_get_list_finish(gpointer roomlist)
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
538 {
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
539 purple_roomlist_set_in_progress((PurpleRoomlist*)roomlist, FALSE);
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
540 return FALSE;
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
541 }
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
542
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
543 PurpleRoomlist * ggp_chat_roomlist_get_list(PurpleConnection *gc)
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
544 {
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
545 ggp_chat_session_data *sdata = ggp_chat_get_sdata(gc);
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
546 PurpleRoomlist *roomlist;
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
547 GList *fields = NULL;
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
548 int i;
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
549
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
550 purple_debug_info("gg", "ggp_chat_roomlist_get_list\n");
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
551
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
552 roomlist = purple_roomlist_new(purple_connection_get_account(gc));
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
553
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
554 fields = g_list_append(fields, purple_roomlist_field_new(
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
555 PURPLE_ROOMLIST_FIELD_STRING, _("Conference identifier"), "id",
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
556 TRUE));
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
557
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
558 fields = g_list_append(fields, purple_roomlist_field_new(
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
559 PURPLE_ROOMLIST_FIELD_STRING, _("Start Date"), "date",
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
560 FALSE));
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
561
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
562 fields = g_list_append(fields, purple_roomlist_field_new(
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
563 PURPLE_ROOMLIST_FIELD_INT, _("User Count"), "users",
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
564 FALSE));
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
565
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
566 fields = g_list_append(fields, purple_roomlist_field_new(
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
567 PURPLE_ROOMLIST_FIELD_STRING, _("Status"), "status",
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
568 FALSE));
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
569
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
570 purple_roomlist_set_fields(roomlist, fields);
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
571
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
572 for (i = sdata->chats_count - 1; i >= 0 ; i--)
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
573 {
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
574 PurpleRoomlistRoom *room;
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
575 ggp_chat_local_info *chat = &sdata->chats[i];
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
576 const gchar *name;
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
577 time_t date;
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
578 const gchar *status;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
579 int count = chat->participants_count;
34352
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
580
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
581 date = (uint32_t)(chat->id >> 32);
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
582
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
583 if (chat->conv)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
584 status = _("Joined");
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
585 else if (chat->left)
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
586 status = _("Chat left");
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
587 else
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
588 {
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
589 status = _("Can join chat");
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
590 count--;
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
591 }
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
592
34352
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
593 name = ggp_chat_get_name_from_id(chat->id);
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
594 room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM,
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
595 name, NULL);
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
596 purple_roomlist_room_add_field(roomlist, room, name);
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
597 purple_roomlist_room_add_field(roomlist, room, purple_date_format_full(localtime(&date)));
34353
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
598 purple_roomlist_room_add_field(roomlist, room, GINT_TO_POINTER(count));
300c246402ac Gadu-Gadu: delayed chat joining
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34352
diff changeset
599 purple_roomlist_room_add_field(roomlist, room, status);
34352
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
600 purple_roomlist_room_add(roomlist, room);
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
601 }
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
602
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
603 //TODO
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
604 //purple_roomlist_set_in_progress(roomlist, FALSE);
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
605 purple_timeout_add(1, ggp_chat_roomlist_get_list_finish, roomlist);
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
606 return roomlist;
16ee13f507a0 Gadu-Gadu: room list
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 34350
diff changeset
607 }

mercurial