Tue, 07 Aug 2012 20:23:21 +0200
Gadu-Gadu: initial multilogon support
| 11414 | 1 | /** |
| 2 | * @file confer.c | |
| 3 | * | |
| 15884 | 4 | * purple |
| 11414 | 5 | * |
| 6 | * Copyright (C) 2005 Bartosz Oler <bartosz@bzimage.us> | |
| 7 | * | |
| 8 | * This program is free software; you can redistribute it and/or modify | |
| 9 | * it under the terms of the GNU General Public License as published by | |
| 10 | * the Free Software Foundation; either version 2 of the License, or | |
| 11 | * (at your option) any later version. | |
| 12 | * | |
| 13 | * This program is distributed in the hope that it will be useful, | |
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 | * GNU General Public License for more details. | |
| 17 | * | |
| 18 | * You should have received a copy of the GNU General Public License | |
| 19 | * along with this program; if not, write to the Free Software | |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
15884
diff
changeset
|
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 11414 | 21 | */ |
| 22 | ||
| 23 | ||
| 13318 | 24 | #include <libgadu.h> |
| 11414 | 25 | #include "gg.h" |
|
33299
b3c4ab3aeb7f
Gadu-Gadu: utils refactoring, (partially) fix new account registration
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents:
32261
diff
changeset
|
26 | #include "utils.h" |
| 11414 | 27 | #include "confer.h" |
| 28 | ||
| 15884 | 29 | /* PurpleConversation *ggp_confer_find_by_name(PurpleConnection *gc, const gchar *name) {{{ */ |
| 30 | PurpleConversation *ggp_confer_find_by_name(PurpleConnection *gc, const gchar *name) | |
| 11414 | 31 | { |
| 32 | g_return_val_if_fail(gc != NULL, NULL); | |
| 33 | g_return_val_if_fail(name != NULL, NULL); | |
| 34 | ||
| 15884 | 35 | return purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, name, |
| 36 | purple_connection_get_account(gc)); | |
| 11414 | 37 | } |
| 38 | /* }}} */ | |
| 39 | ||
| 15884 | 40 | /* void ggp_confer_participants_add_uin(PurpleConnection *gc, const gchar *chat_name, const uin_t uin) {{{ */ |
| 41 | void ggp_confer_participants_add_uin(PurpleConnection *gc, const gchar *chat_name, | |
| 12007 | 42 | const uin_t uin) |
| 11414 | 43 | { |
| 15884 | 44 | PurpleConversation *conv; |
|
32261
bd956558346e
Convert gg prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data().
Andrew Victor <andrew.victor@mxit.com>
parents:
19859
diff
changeset
|
45 | GGPInfo *info = purple_connection_get_protocol_data(gc); |
| 11414 | 46 | GGPChat *chat; |
| 47 | GList *l; | |
| 48 | gchar *str_uin; | |
| 49 | ||
| 50 | for (l = info->chats; l != NULL; l = l->next) { | |
| 51 | chat = l->data; | |
| 52 | ||
| 12007 | 53 | if (g_utf8_collate(chat->name, chat_name) != 0) |
| 54 | continue; | |
| 55 | ||
| 12961 | 56 | if (g_list_find(chat->participants, GINT_TO_POINTER(uin)) == NULL) { |
| 12007 | 57 | chat->participants = g_list_append( |
| 12961 | 58 | chat->participants, GINT_TO_POINTER(uin)); |
| 12007 | 59 | |
| 12961 | 60 | str_uin = g_strdup_printf("%lu", (unsigned long int)uin); |
| 61 | conv = ggp_confer_find_by_name(gc, chat_name); | |
| 15884 | 62 | purple_conv_chat_add_user(PURPLE_CONV_CHAT(conv), str_uin, NULL, |
| 63 | PURPLE_CBFLAGS_NONE, TRUE); | |
| 12961 | 64 | |
| 65 | g_free(str_uin); | |
| 11414 | 66 | } |
| 12007 | 67 | break; |
| 11414 | 68 | } |
| 69 | } | |
| 70 | /* }}} */ | |
| 71 | ||
| 15884 | 72 | /* void ggp_confer_participants_add(PurpleConnection *gc, const gchar *chat_name, const uin_t *recipients, int count) {{{ */ |
| 73 | void ggp_confer_participants_add(PurpleConnection *gc, const gchar *chat_name, | |
| 12007 | 74 | const uin_t *recipients, int count) |
| 11414 | 75 | { |
|
32261
bd956558346e
Convert gg prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data().
Andrew Victor <andrew.victor@mxit.com>
parents:
19859
diff
changeset
|
76 | GGPInfo *info = purple_connection_get_protocol_data(gc); |
| 11414 | 77 | GList *l; |
| 12961 | 78 | gchar *str_uin; |
| 11414 | 79 | |
| 80 | for (l = info->chats; l != NULL; l = l->next) { | |
|
12373
a8f71f73576d
[gaim-migrate @ 14677]
Richard Laager <rlaager@pidgin.im>
parents:
12007
diff
changeset
|
81 | GGPChat *chat = l->data; |
|
a8f71f73576d
[gaim-migrate @ 14677]
Richard Laager <rlaager@pidgin.im>
parents:
12007
diff
changeset
|
82 | int i; |
| 11414 | 83 | |
| 12007 | 84 | if (g_utf8_collate(chat->name, chat_name) != 0) |
| 85 | continue; | |
| 11414 | 86 | |
| 12007 | 87 | for (i = 0; i < count; i++) { |
| 15884 | 88 | PurpleConversation *conv; |
| 12007 | 89 | |
| 12961 | 90 | if (g_list_find(chat->participants, |
| 91 | GINT_TO_POINTER(recipients[i])) != NULL) { | |
| 12007 | 92 | continue; |
| 93 | } | |
| 11414 | 94 | |
| 12961 | 95 | chat->participants = g_list_append(chat->participants, |
| 96 | GINT_TO_POINTER(recipients[i])); | |
| 12007 | 97 | |
| 12961 | 98 | str_uin = g_strdup_printf("%lu", (unsigned long int)recipients[i]); |
| 99 | conv = ggp_confer_find_by_name(gc, chat_name); | |
| 15884 | 100 | purple_conv_chat_add_user(PURPLE_CONV_CHAT(conv), |
| 12961 | 101 | str_uin, NULL, |
| 15884 | 102 | PURPLE_CBFLAGS_NONE, TRUE); |
|
12373
a8f71f73576d
[gaim-migrate @ 14677]
Richard Laager <rlaager@pidgin.im>
parents:
12007
diff
changeset
|
103 | g_free(str_uin); |
| 11414 | 104 | } |
| 12007 | 105 | break; |
| 11414 | 106 | } |
| 107 | } | |
| 108 | /* }}} */ | |
| 109 | ||
| 15884 | 110 | /* const char *ggp_confer_find_by_participants(PurpleConnection *gc, const uin_t *recipients, int count) {{{ */ |
| 111 | const char *ggp_confer_find_by_participants(PurpleConnection *gc, | |
| 12007 | 112 | const uin_t *recipients, int count) |
| 11414 | 113 | { |
|
32261
bd956558346e
Convert gg prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data().
Andrew Victor <andrew.victor@mxit.com>
parents:
19859
diff
changeset
|
114 | GGPInfo *info = purple_connection_get_protocol_data(gc); |
| 11414 | 115 | GGPChat *chat = NULL; |
|
12373
a8f71f73576d
[gaim-migrate @ 14677]
Richard Laager <rlaager@pidgin.im>
parents:
12007
diff
changeset
|
116 | GList *l; |
|
a8f71f73576d
[gaim-migrate @ 14677]
Richard Laager <rlaager@pidgin.im>
parents:
12007
diff
changeset
|
117 | int matches; |
| 11414 | 118 | |
| 119 | g_return_val_if_fail(info->chats != NULL, NULL); | |
| 120 | ||
| 121 | for (l = info->chats; l != NULL; l = l->next) { | |
|
12373
a8f71f73576d
[gaim-migrate @ 14677]
Richard Laager <rlaager@pidgin.im>
parents:
12007
diff
changeset
|
122 | GList *m; |
|
a8f71f73576d
[gaim-migrate @ 14677]
Richard Laager <rlaager@pidgin.im>
parents:
12007
diff
changeset
|
123 | |
| 11414 | 124 | chat = l->data; |
|
12373
a8f71f73576d
[gaim-migrate @ 14677]
Richard Laager <rlaager@pidgin.im>
parents:
12007
diff
changeset
|
125 | matches = 0; |
| 11414 | 126 | |
| 127 | for (m = chat->participants; m != NULL; m = m->next) { | |
| 12961 | 128 | uin_t uin = GPOINTER_TO_INT(m->data); |
|
12373
a8f71f73576d
[gaim-migrate @ 14677]
Richard Laager <rlaager@pidgin.im>
parents:
12007
diff
changeset
|
129 | int i; |
| 11414 | 130 | |
| 131 | for (i = 0; i < count; i++) | |
| 12961 | 132 | if (uin == recipients[i]) |
|
12373
a8f71f73576d
[gaim-migrate @ 14677]
Richard Laager <rlaager@pidgin.im>
parents:
12007
diff
changeset
|
133 | matches++; |
| 11414 | 134 | } |
| 135 | ||
|
12373
a8f71f73576d
[gaim-migrate @ 14677]
Richard Laager <rlaager@pidgin.im>
parents:
12007
diff
changeset
|
136 | if (matches == count) |
| 11414 | 137 | break; |
| 138 | ||
| 139 | chat = NULL; | |
| 140 | } | |
| 141 | ||
| 142 | if (chat == NULL) | |
| 143 | return NULL; | |
| 144 | else | |
| 145 | return chat->name; | |
| 146 | } | |
| 147 | /* }}} */ | |
| 148 | ||
| 15884 | 149 | /* const char *ggp_confer_add_new(PurpleConnection *gc, const char *name) {{{ */ |
| 150 | const char *ggp_confer_add_new(PurpleConnection *gc, const char *name) | |
| 11414 | 151 | { |
|
32261
bd956558346e
Convert gg prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data().
Andrew Victor <andrew.victor@mxit.com>
parents:
19859
diff
changeset
|
152 | GGPInfo *info = purple_connection_get_protocol_data(gc); |
| 11414 | 153 | GGPChat *chat; |
| 154 | ||
| 155 | chat = g_new0(GGPChat, 1); | |
| 156 | ||
| 157 | if (name == NULL) | |
| 158 | chat->name = g_strdup_printf("conf#%d", info->chats_count++); | |
| 159 | else | |
| 160 | chat->name = g_strdup(name); | |
| 161 | ||
| 162 | chat->participants = NULL; | |
| 163 | ||
| 164 | info->chats = g_list_append(info->chats, chat); | |
| 165 | ||
| 166 | return chat->name; | |
| 167 | } | |
| 168 | /* }}} */ | |
| 169 | ||
| 12007 | 170 | /* vim: set ts=8 sts=0 sw=8 noet: */ |