Would be better with the test program perhaps... Le dim, 02/05/2004 à 16:22 +0200, Damien Sandras a écrit : > Hi all, > > I think I found a few bugs regarding E-D-S, but as I'm not sure, I have > written a small test program so that somebody here can really confirm me > there is a bug. > > The test program is doing 3 things : > 1) it will return the list of contacts for which the VIDEO URL contains > the given string: the list is erroneously empty. It works with a search > on FULL NAME though. > > 2) it will return the list of contacts for which the CATEGORY contains > teh given string: the list is erroneously empty even for pre-made > categories like "Affaires" (Business in french). > > 3) it will try to add a new local address book, it gives a segfault in > E-D-S' code. I already reported a bug about that 2 weeks ago: > http://bugzilla.ximian.com/show_bug.cgi?id=57074 > > The usage of the test case is pretty simple : > ./test file:///home/damien/.evolution/addressbook/local/system Business > > To search for all users having Business in their video url or in their > category. Both are empty. The program will crash later when trying to > add an ESource to the ESourceGroup. > > Sorry to bother you all the time (I'm really ashamed), perhaps it was > too early to start porting GM to E-D-S now, and the amount of spare time > I have to do this is more and more limited :( > > > Thanks, > > Damien
#include <libebook/e-book.h>
struct GmAddressbook_ {
char *name;
char *uri;
};
typedef struct GmAddressbook_ GmAddressbook;
typedef struct GmContact_ GmContact;
/* Returns the ESourceGroup for local sources */
static ESourceGroup *
gnomemeeting_addressbook_get_local_source_group ()
{
EBook *ebook = NULL;
ESourceGroup *result = NULL;
ESourceList *source_list = NULL;
GSList *source_groups = NULL;
GSList *addressbooks = NULL;
GSList *l = NULL;
GSList *j = NULL;
gchar *uri = NULL;
e_book_get_default_addressbook (&ebook, NULL);
/* Get the list of possible sources */
if (e_book_get_addressbooks (&source_list, NULL)) {
source_groups = e_source_list_peek_groups (source_list);
l = source_groups;
while (l) {
addressbooks = e_source_group_peek_sources (E_SOURCE_GROUP (l->data));
j = addressbooks;
while (j) {
uri = e_source_get_uri (E_SOURCE (j->data));
if (g_str_has_prefix (uri, "file:"))
result = E_SOURCE_GROUP (l->data);
printf ("Found addressbook with URI: %s\n", uri);
g_free (uri);
j = g_slist_next (j);
}
g_slist_free (addressbooks);
l = g_slist_next (l);
}
g_slist_free (source_groups);
}
return result;
}
/* Add a new Source */
gboolean
gnomemeeting_addressbook_add (GmAddressbook *addressbook)
{
ESource *source = NULL;
ESourceGroup *source_group = NULL;
g_return_val_if_fail (addressbook != NULL, FALSE);
source_group = gnomemeeting_addressbook_get_local_source_group ();
printf ("Will add Address Book to Source Group: %s\n",
e_source_group_peek_name (source_group));
source = e_source_new ("", "");
e_source_set_name (source, addressbook->name);
e_source_set_relative_uri (source, e_source_peek_uid (source));
e_source_group_add_source (source_group, source, -1);
return FALSE;
}
void get_contacts (gchar *uri, gchar *search)
{
EBook *ebook = NULL;
EBookQuery *query = NULL;
GList *list = NULL;
ebook = e_book_new ();
if (e_book_load_uri (ebook, uri, FALSE, NULL)) {
query = e_book_query_field_test (E_CONTACT_VIDEO_URL,
E_BOOK_QUERY_CONTAINS,
search);
if (e_book_get_contacts (ebook, query, &list, NULL)) {
if (list == NULL)
printf ("No Elements found querying E_CONTACT_VIDEO_URL for %s\n",
search);
}
query = e_book_query_field_test (E_CONTACT_CATEGORIES,
E_BOOK_QUERY_CONTAINS,
search);
if (e_book_get_contacts (ebook, query, &list, NULL)) {
if (list == NULL)
printf ("No Elements found querying E_CONTACT_CATEGORIES for %s\n\n",
search);
}
}
}
int main (int argc, char **argv)
{
GmAddressbook a;
if (argc < 3) {
printf ("Usage test addressbook_uri search_value\n");
exit (-1);
}
g_type_init ();
get_contacts (argv [1], argv [2]);
a.name = g_strdup ("Foo");
gnomemeeting_addressbook_add (&a);
g_free (a.name);
return 0;
}
Attachment:
signature.asc
Description: Ceci est une partie de message =?ISO-8859-1?Q?num=E9riquement?= =?ISO-8859-1?Q?_sign=E9e?=