src/roomlist.c

Sat, 08 May 2004 23:34:30 +0000

author
Gary Kramlich <grim@pidgin.im>
date
Sat, 08 May 2004 23:34:30 +0000
changeset 8907
17b9da22de1e
parent 8584
871f67e4aa3c
child 8937
b436e9cbd701
permissions
-rw-r--r--

[gaim-migrate @ 9677]
" Fixes a few warnings on 64bit machines. Also fixes
yahoo auth on 64bit machines which would have taken me
awhile if marv didn't point me in the right direction.
I've applied to my local 32bit copy and everything
seems to be working fine." --Gary Kramlich

committer: Luke Schierer <lschiere@pidgin.im>

8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
1 /**
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
2 * @file roomlist.c Room List API
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
3 * @ingroup core
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
4 *
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
5 * gaim
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
6 *
8146
4961c9c5fd61 [gaim-migrate @ 8854]
John Silvestri <john.silvestri@gmail.com>
parents: 8113
diff changeset
7 * Gaim is the legal property of its developers, whose names are too numerous
4961c9c5fd61 [gaim-migrate @ 8854]
John Silvestri <john.silvestri@gmail.com>
parents: 8113
diff changeset
8 * to list here. Please refer to the COPYRIGHT file distributed with this
4961c9c5fd61 [gaim-migrate @ 8854]
John Silvestri <john.silvestri@gmail.com>
parents: 8113
diff changeset
9 * source distribution.
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
10 *
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
11 * This program is free software; you can redistribute it and/or modify
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
12 * it under the terms of the GNU General Public License as published by
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
14 * (at your option) any later version.
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
15 *
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
16 * This program is distributed in the hope that it will be useful,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
19 * GNU General Public License for more details.
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
20 *
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
22 * along with this program; if not, write to the Free Software
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
24 */
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
25
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
26 #include <glib.h>
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
27
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
28 #include "account.h"
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
29 #include "connection.h"
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
30 #include "debug.h"
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
31 #include "roomlist.h"
8199
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
32 #include "server.h"
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
33
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
34
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
35 static GaimRoomlistUiOps *ops = NULL;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
36
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
37 /**************************************************************************/
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
38 /** @name Room List API */
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
39 /**************************************************************************/
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
40 /*@{*/
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
41
8352
cf7ca701b213 [gaim-migrate @ 9076]
Tim Ringenbach <marv@pidgin.im>
parents: 8199
diff changeset
42 void gaim_roomlist_show_with_account(GaimAccount *account)
cf7ca701b213 [gaim-migrate @ 9076]
Tim Ringenbach <marv@pidgin.im>
parents: 8199
diff changeset
43 {
cf7ca701b213 [gaim-migrate @ 9076]
Tim Ringenbach <marv@pidgin.im>
parents: 8199
diff changeset
44 if (ops && ops->show_with_account)
cf7ca701b213 [gaim-migrate @ 9076]
Tim Ringenbach <marv@pidgin.im>
parents: 8199
diff changeset
45 ops->show_with_account(account);
cf7ca701b213 [gaim-migrate @ 9076]
Tim Ringenbach <marv@pidgin.im>
parents: 8199
diff changeset
46 }
cf7ca701b213 [gaim-migrate @ 9076]
Tim Ringenbach <marv@pidgin.im>
parents: 8199
diff changeset
47
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
48 GaimRoomlist *gaim_roomlist_new(GaimAccount *account)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
49 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
50 GaimRoomlist *list;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
51
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
52 g_return_val_if_fail(account != NULL, NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
53
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
54 list = g_new0(GaimRoomlist, 1);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
55 list->account = account;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
56 list->rooms = NULL;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
57 list->fields = NULL;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
58 list->ref = 1;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
59
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
60 if (ops && ops->new)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
61 ops->new(list);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
62
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
63 return list;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
64 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
65
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
66 void gaim_roomlist_ref(GaimRoomlist *list)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
67 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
68 g_return_if_fail(list != NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
69
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
70 list->ref++;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
71 gaim_debug_misc("roomlist", "reffing list, ref count now %d\n", list->ref);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
72 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
73
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
74 static void gaim_roomlist_room_destroy(GaimRoomlist *list, GaimRoomlistRoom *r)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
75 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
76 GList *l, *j;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
77
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
78 for (l = list->fields, j = r->fields; l && j; l = l->next, j = j->next) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
79 GaimRoomlistField *f = l->data;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
80 if (f->type == GAIM_ROOMLIST_FIELD_STRING)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
81 g_free(j->data);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
82 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
83
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
84 g_list_free(r->fields);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
85 g_free(r->name);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
86 g_free(r);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
87 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
88
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
89 static void gaim_roomlist_field_destroy(GaimRoomlistField *f)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
90 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
91 g_free(f->label);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
92 g_free(f->name);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
93 g_free(f);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
94 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
95
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
96 static void gaim_roomlist_destroy(GaimRoomlist *list)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
97 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
98 GList *l;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
99
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
100 gaim_debug_misc("roomlist", "destroying list %p\n", list);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
101
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
102 if (ops && ops->destroy)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
103 ops->destroy(list);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
104
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
105 if (list->rooms) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
106 for (l = list->rooms; l; l = l->next) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
107 GaimRoomlistRoom *r = l->data;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
108 gaim_roomlist_room_destroy(list, r);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
109 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
110 g_list_free(list->rooms);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
111 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
112
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
113 if (list->fields) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
114 for (l = list->fields; l; l = l->next) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
115 GaimRoomlistField *f = l->data;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
116 gaim_roomlist_field_destroy(f);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
117 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
118 g_list_free(list->fields);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
119 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
120
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
121 g_free(list);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
122 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
123
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
124 void gaim_roomlist_unref(GaimRoomlist *list)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
125 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
126 g_return_if_fail(list != NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
127
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
128 list->ref--;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
129
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
130 gaim_debug_misc("roomlist", "unreffing list, ref count now %d\n", list->ref);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
131 if (list->ref == 0)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
132 gaim_roomlist_destroy(list);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
133 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
134
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
135 void gaim_roomlist_set_fields(GaimRoomlist *list, GList *fields)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
136 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
137 g_return_if_fail(list != NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
138
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
139 list->fields = fields;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
140
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
141 if (ops && ops->set_fields)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
142 ops->set_fields(list, fields);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
143 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
144
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
145 void gaim_roomlist_set_in_progress(GaimRoomlist *list, gboolean in_progress)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
146 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
147 g_return_if_fail(list != NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
148
8199
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
149 list->in_progress = in_progress;
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
150
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
151 if (ops && ops->in_progress)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
152 ops->in_progress(list, in_progress);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
153 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
154
8199
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
155 gboolean gaim_roomlist_get_in_progress(GaimRoomlist *list)
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
156 {
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
157 g_return_val_if_fail(list != NULL, FALSE);
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
158
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
159 return list->in_progress;
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
160 }
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
161
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
162 void gaim_roomlist_room_add(GaimRoomlist *list, GaimRoomlistRoom *room)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
163 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
164 g_return_if_fail(list != NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
165 g_return_if_fail(room != NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
166
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
167 list->rooms = g_list_append(list->rooms, room);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
168
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
169 if (ops && ops->add_room)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
170 ops->add_room(list, room);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
171 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
172
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
173 gboolean gaim_roomlist_is_possible(GaimConnection *gc)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
174 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
175 GaimPluginProtocolInfo *prpl_info = NULL;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
176
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
177 g_return_val_if_fail(gc != NULL, FALSE);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
178
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
179 if (gc->prpl != NULL)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
180 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
181
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
182 if (prpl_info && prpl_info->roomlist_get_list)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
183 return TRUE;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
184 return FALSE;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
185 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
186
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
187 GaimRoomlist *gaim_roomlist_get_list(GaimConnection *gc)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
188 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
189 GaimPluginProtocolInfo *prpl_info = NULL;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
190
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
191 g_return_val_if_fail(gc != NULL, NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
192
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
193 if (gc->prpl != NULL)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
194 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
195
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
196 if (prpl_info && prpl_info->roomlist_get_list)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
197 return prpl_info->roomlist_get_list(gc);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
198 return NULL;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
199 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
200
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
201 void gaim_roomlist_cancel_get_list(GaimRoomlist *list)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
202 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
203 GaimPluginProtocolInfo *prpl_info = NULL;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
204 GaimConnection *gc;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
205
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
206 g_return_if_fail(list != NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
207
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
208 gc = gaim_account_get_connection(list->account);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
209
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
210 g_return_if_fail(gc != NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
211
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
212 if (gc != NULL && gc->prpl != NULL)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
213 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
214
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
215 if (prpl_info && prpl_info->roomlist_cancel)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
216 prpl_info->roomlist_cancel(list);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
217 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
218
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8352
diff changeset
219 void gaim_roomlist_expand_category(GaimRoomlist *list, GaimRoomlistRoom *category)
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
220 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
221 GaimPluginProtocolInfo *prpl_info = NULL;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
222 GaimConnection *gc;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
223
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
224 g_return_if_fail(list != NULL);
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8352
diff changeset
225 g_return_if_fail(category != NULL);
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8352
diff changeset
226 g_return_if_fail(category->type & GAIM_ROOMLIST_ROOMTYPE_CATEGORY);
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
227
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
228 gc = gaim_account_get_connection(list->account);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
229 g_return_if_fail(gc != NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
230
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
231 if (gc->prpl != NULL)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
232 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
233
8584
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8352
diff changeset
234 if (prpl_info && prpl_info->roomlist_expand_category)
871f67e4aa3c [gaim-migrate @ 9334]
Daniel Atallah <datallah@pidgin.im>
parents: 8352
diff changeset
235 prpl_info->roomlist_expand_category(list, category);
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
236 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
237
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
238 /*@}*/
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
239
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
240 /**************************************************************************/
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
241 /** @name Room API */
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
242 /**************************************************************************/
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
243 /*@{*/
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
244
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
245 GaimRoomlistRoom *gaim_roomlist_room_new(GaimRoomlistRoomType type, const gchar *name,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
246 GaimRoomlistRoom *parent)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
247 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
248 GaimRoomlistRoom *room;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
249
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
250 g_return_val_if_fail(name != NULL, NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
251
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
252 room = g_new0(GaimRoomlistRoom, 1);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
253 room->type = type;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
254 room->name = g_strdup(name);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
255 room->parent = parent;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
256
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
257 return room;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
258 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
259
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
260 void gaim_roomlist_room_add_field(GaimRoomlist *list, GaimRoomlistRoom *room, gconstpointer field)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
261 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
262 GaimRoomlistField *f;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
263
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
264 g_return_if_fail(list != NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
265 g_return_if_fail(room != NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
266 g_return_if_fail(list->fields != NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
267
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
268 if (!room->fields)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
269 f = list->fields->data;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
270 else
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
271 f = g_list_nth_data(list->fields, g_list_length(room->fields));
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
272
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
273 g_return_if_fail(f != NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
274
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
275 switch(f->type) {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
276 case GAIM_ROOMLIST_FIELD_STRING:
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
277 room->fields = g_list_append(room->fields, g_strdup(field));
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
278 break;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
279 case GAIM_ROOMLIST_FIELD_BOOL:
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
280 case GAIM_ROOMLIST_FIELD_INT:
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
281 room->fields = g_list_append(room->fields, GINT_TO_POINTER(field));
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
282 break;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
283 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
284 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
285
8199
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
286 void gaim_roomlist_room_join(GaimRoomlist *list, GaimRoomlistRoom *room)
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
287 {
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
288 GHashTable *components;
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
289 GList *l, *j;
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
290 GaimConnection *gc;
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
291
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
292 g_return_if_fail(list != NULL);
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
293 g_return_if_fail(room != NULL);
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
294
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
295 gc = gaim_account_get_connection(list->account);
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
296 if (!gc)
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
297 return;
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
298
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
299 components = g_hash_table_new(g_str_hash, g_str_equal);
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
300
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
301 g_hash_table_replace(components, "name", room->name);
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
302 for (l = list->fields, j = room->fields; l && j; l = l->next, j = j->next) {
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
303 GaimRoomlistField *f = l->data;
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
304
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
305 g_hash_table_replace(components, f->name, j->data);
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
306 }
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
307
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
308 serv_join_chat(gc, components);
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
309
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
310 g_hash_table_destroy(components);
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
311 }
43d585355720 [gaim-migrate @ 8922]
Tim Ringenbach <marv@pidgin.im>
parents: 8146
diff changeset
312
8113
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
313 /*@}*/
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
314
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
315 /**************************************************************************/
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
316 /** @name Room Field API */
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
317 /**************************************************************************/
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
318 /*@{*/
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
319
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
320 GaimRoomlistField *gaim_roomlist_field_new(GaimRoomlistFieldType type,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
321 const gchar *label, const gchar *name,
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
322 gboolean hidden)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
323 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
324 GaimRoomlistField *f;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
325
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
326 g_return_val_if_fail(label != NULL, NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
327 g_return_val_if_fail(name != NULL, NULL);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
328
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
329 f = g_new0(GaimRoomlistField, 1);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
330
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
331 f->type = type;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
332 f->label = g_strdup(label);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
333 f->name = g_strdup(name);
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
334 f->hidden = hidden;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
335
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
336 return f;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
337 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
338
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
339 /*@}*/
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
340
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
341 /**************************************************************************/
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
342 /** @name UI Registration Functions */
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
343 /**************************************************************************/
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
344 /*@{*/
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
345
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
346
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
347 void gaim_roomlist_set_ui_ops(GaimRoomlistUiOps *ui_ops)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
348 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
349 ops = ui_ops;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
350 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
351
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
352 GaimRoomlistUiOps *gaim_roomlist_get_ui_ops(void)
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
353 {
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
354 return ops;
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
355 }
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
356
6a2ffc66c022 [gaim-migrate @ 8817]
Tim Ringenbach <marv@pidgin.im>
parents:
diff changeset
357 /*@}*/

mercurial