plugins/gevolution/eds-utils.c

Sun, 23 Oct 2005 03:24:53 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Sun, 23 Oct 2005 03:24:53 +0000
changeset 11735
a1d2afa9b4e9
parent 11117
2278a06da7c4
child 12323
f52908fb23b0
permissions
-rw-r--r--

[gaim-migrate @ 14026]
Switch from using our old GaimGtkDisclosure widget to using the official
GtkExpander widget. It works better and should make us look more uniform
with other gtk apps.

To maintain compatability with gtk < 2.4, I grabbed the gtkexpander.c
and gtkexpander.h files from gtk+ CVS. I haven't tested compiling on
a computer with gtk < 2.4 yet, so it's possible we'll need to get more
stuff from gtk+ CVS.

For future reference, gtkexpander.h was not modified, and gtkexpander.c
was only modified to check if version is > 2.4 then do nothing. I also
changed the #includes to use <> instead of ""

10083
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1 /*
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2 * Evolution integration plugin for Gaim
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
3 *
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
4 * Copyright (C) 2004 Henry Jen.
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
5 *
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
7 * modify it under the terms of the GNU General Public License as
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
8 * published by the Free Software Foundation; either version 2 of the
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
9 * License, or (at your option) any later version.
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
10 *
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful, but
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
14 * General Public License for more details.
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15 *
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 * 02111-1307, USA.
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
20 */
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
21
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
22 #include "internal.h"
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
23 #include "gtkblist.h"
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
24 #include "gtkgaim.h"
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
25 #include "gtkutils.h"
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
26 #include "gtkimhtml.h"
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
27
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
28 #include "debug.h"
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
29 #include "gevolution.h"
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
30
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
31 GtkTreeModel *
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
32 gevo_addrbooks_model_new()
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
33 {
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
34 return GTK_TREE_MODEL(gtk_list_store_new(NUM_ADDRBOOK_COLUMNS,
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
35 G_TYPE_STRING, G_TYPE_STRING));
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
36 }
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
37
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
38 void
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
39 gevo_addrbooks_model_unref(GtkTreeModel *model)
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
40 {
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
41 GtkTreeIter iter;
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
42
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
43 g_return_if_fail(model != NULL);
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
44 g_return_if_fail(GTK_IS_LIST_STORE(model));
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
45
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
46 if (!gtk_tree_model_get_iter_first(model, &iter))
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
47 return;
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
48
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
49 g_object_unref(model);
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
50 }
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
51
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
52 void
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
53 gevo_addrbooks_model_populate(GtkTreeModel *model)
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
54 {
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
55 ESourceList *addressbooks;
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
56 GError *err;
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
57 GSList *groups, *g;
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
58 GtkTreeIter iter;
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
59 GtkListStore *list;
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
60
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
61 g_return_if_fail(model != NULL);
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
62 g_return_if_fail(GTK_IS_LIST_STORE(model));
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
63
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
64 list = GTK_LIST_STORE(model);
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
65
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
66 if (!e_book_get_addressbooks(&addressbooks, &err))
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
67 {
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
68 gaim_debug_error("evolution",
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
69 "Unable to fetch list of address books.\n");
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
70
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
71 gtk_list_store_append(list, &iter);
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
72 gtk_list_store_set(list, &iter,
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
73 ADDRBOOK_COLUMN_NAME, _("None"),
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
74 ADDRBOOK_COLUMN_URI, NULL,
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
75 -1);
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
76
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
77 return;
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
78 }
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
79
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
80 groups = e_source_list_peek_groups(addressbooks);
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
81
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
82 if (groups == NULL)
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
83 {
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
84 gtk_list_store_append(list, &iter);
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
85 gtk_list_store_set(list, &iter,
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
86 ADDRBOOK_COLUMN_NAME, _("None"),
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
87 ADDRBOOK_COLUMN_URI, NULL,
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
88 -1);
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
89
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
90 return;
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
91 }
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
92
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
93 for (g = groups; g != NULL; g = g->next)
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
94 {
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
95 GSList *sources, *s;
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
96
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
97 sources = e_source_group_peek_sources(g->data);
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
98
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
99 for (s = sources; s != NULL; s = s->next)
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
100 {
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
101 ESource *source = E_SOURCE(s->data);
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
102
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
103 g_object_ref(source);
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
104
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
105 gtk_list_store_append(list, &iter);
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
106 gtk_list_store_set(list, &iter,
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
107 ADDRBOOK_COLUMN_NAME, e_source_peek_name(source),
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
108 ADDRBOOK_COLUMN_URI, e_source_get_uri(source),
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
109 -1);
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
110 }
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
111 }
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
112
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
113 g_object_unref(addressbooks);
7e81faf97543 [gaim-migrate @ 11079]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
114 }
11117
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
115
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
116 EContact *
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
117 gevo_run_query_in_uri(const gchar *uri, EBookQuery *query)
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
118 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
119 EBook *book;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
120 gboolean status;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
121 GList *cards;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
122
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
123 if (!gevo_load_addressbook(uri, &book, NULL))
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
124 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
125 gaim_debug_error("evolution",
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
126 "Error retrieving addressbook\n");
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
127 return NULL;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
128 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
129
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
130 status = e_book_get_contacts(book, query, &cards, NULL);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
131 if (!status)
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
132 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
133 gaim_debug_error("evolution", "Error %d in getting card list\n",
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
134 status);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
135 g_object_unref(book);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
136 return NULL;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
137 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
138 g_object_unref(book);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
139
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
140 if (cards != NULL)
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
141 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
142 EContact *contact = E_CONTACT(cards->data);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
143 GList *cards2 = cards->next;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
144
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
145 if (cards2 != NULL)
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
146 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
147 /* Break off the first contact and free the rest. */
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
148 cards->next = NULL;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
149 cards2->prev = NULL;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
150 g_list_foreach(cards2, (GFunc)g_object_unref, NULL);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
151 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
152
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
153 /* Free the whole list. */
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
154 g_list_free(cards);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
155
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
156 return contact;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
157 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
158
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
159 return NULL;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
160 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
161
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
162 /*
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
163 * Search for a buddy in the Evolution contacts.
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
164 *
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
165 * @param buddy The buddy to search for.
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
166 * @param query An optional query. This function takes ownership of @a query,
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
167 * so callers must e_book_query_ref() it in advance (to obtain a
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
168 * second reference) if they want to reuse @a query.
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
169 */
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
170 EContact *
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
171 gevo_search_buddy_in_contacts(GaimBuddy *buddy, EBookQuery *query)
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
172 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
173 ESourceList *addressbooks;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
174 GError *err;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
175 EBookQuery *full_query;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
176 GSList *groups, *g;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
177 EContact *result;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
178 EContactField protocol_field = gevo_prpl_get_field(buddy->account, buddy);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
179
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
180 if (protocol_field == 0)
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
181 return NULL;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
182
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
183 if (query != NULL)
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
184 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
185 EBookQuery *queries[2];
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
186
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
187 queries[0] = query;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
188 queries[1] = e_book_query_field_test(protocol_field, E_BOOK_QUERY_IS, buddy->name);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
189 if (queries[1] == NULL)
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
190 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
191 gaim_debug_error("evolution", "Error in creating protocol query\n");
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
192 e_book_query_unref(query);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
193 return NULL;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
194 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
195
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
196 full_query = e_book_query_and(2, queries, TRUE);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
197 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
198 else
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
199 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
200 full_query = e_book_query_field_test(protocol_field, E_BOOK_QUERY_IS, buddy->name);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
201 if (full_query == NULL)
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
202 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
203 gaim_debug_error("evolution", "Error in creating protocol query\n");
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
204 return NULL;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
205 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
206 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
207
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
208 if (!e_book_get_addressbooks(&addressbooks, &err))
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
209 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
210 gaim_debug_error("evolution",
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
211 "Unable to fetch list of address books.\n");
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
212 e_book_query_unref(full_query);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
213 if (err != NULL)
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
214 g_error_free(err);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
215 return NULL;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
216 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
217
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
218 groups = e_source_list_peek_groups(addressbooks);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
219 if (groups == NULL)
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
220 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
221 g_object_unref(addressbooks);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
222 e_book_query_unref(full_query);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
223 return NULL;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
224 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
225
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
226 for (g = groups; g != NULL; g = g->next)
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
227 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
228 GSList *sources, *s;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
229 sources = e_source_group_peek_sources(g->data);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
230 for (s = sources; s != NULL; s = s->next)
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
231 {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
232 result = gevo_run_query_in_uri(e_source_get_uri(E_SOURCE(s->data)), full_query);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
233 if (result != NULL) {
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
234 g_object_unref(addressbooks);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
235 e_book_query_unref(full_query);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
236 return result;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
237 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
238 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
239 }
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
240
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
241 g_object_unref(addressbooks);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
242 e_book_query_unref(full_query);
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
243 return NULL;
2278a06da7c4 [gaim-migrate @ 13173]
Szilard Novaki
parents: 10313
diff changeset
244 }

mercurial