annotate plugins/gevolution/eds-utils.c @ 11735:8d7c99f20e4c

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