* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#ifdef HAVE_CONFIG_H
#include <config.h>
-#endif
-
+#include <stdlib.h>
#include <string.h>
+
+#include <libedataserver/e-data-server-util.h>
#include "e-book-backend-db-cache.h"
#include "e-book-backend.h"
#include "e-book-backend-sexp.h"
void
-string_to_dbt(const gchar *str, DBT *dbt)
+string_to_dbt (const gchar *str,
+ DBT *dbt)
{
- memset(dbt, 0, sizeof(dbt));
- dbt->data = (gpointer)str;
- dbt->size = strlen(str) + 1;
+ memset (dbt, 0, sizeof (DBT));
+ dbt->data = (gpointer) str;
+ dbt->size = strlen (str) + 1;
dbt->flags = DB_DBT_USERMEM;
}
static gchar *
get_filename_from_uri (const gchar *uri)
{
+ const gchar *user_cache_dir;
gchar *mangled_uri, *filename;
- gint i;
-
- /* mangle the URI to not contain invalid characters */
- mangled_uri = g_strdup (uri);
- for (i = 0; i < strlen (mangled_uri); i++) {
- switch (mangled_uri[i]) {
- case ':' :
- case '/' :
- mangled_uri[i] = '_';
- }
- }
- /* generate the file name */
- filename = g_build_filename (g_get_home_dir (), ".evolution/cache/addressbook",
- mangled_uri, "cache.db", NULL);
+ user_cache_dir = e_get_user_cache_dir ();
+
+ /* Mangle the URI to not contain invalid characters. */
+ mangled_uri = g_strdelimit (g_strdup (uri), ":/", '_');
+
+ filename = g_build_filename (
+ user_cache_dir, "addressbook",
+ mangled_uri, "cache.db", NULL);
- /* free memory */
g_free (mangled_uri);
return filename;
**/
void
-e_book_backend_db_cache_set_filename(DB *db, const gchar *filename)
+e_book_backend_db_cache_set_filename (DB *db,
+ const gchar *filename)
{
DBT uid_dbt, vcard_dbt;
gint db_error;
**/
gchar *
-e_book_backend_db_cache_get_filename(DB *db)
+e_book_backend_db_cache_get_filename (DB *db)
{
DBT uid_dbt, vcard_dbt;
gint db_error;
gchar *filename;
string_to_dbt ("filename", &uid_dbt);
- memset (&vcard_dbt, 0 , sizeof(vcard_dbt));
+ memset (&vcard_dbt, 0 , sizeof (vcard_dbt));
vcard_dbt.flags = DB_DBT_MALLOC;
db_error = db->get (db, NULL, &uid_dbt, &vcard_dbt, 0);
* Returns: A cached #EContact, or %NULL if @uid is not cached.
**/
EContact *
-e_book_backend_db_cache_get_contact (DB *db, const gchar *uid)
+e_book_backend_db_cache_get_contact (DB *db,
+ const gchar *uid)
{
DBT uid_dbt, vcard_dbt;
gint db_error;
g_return_val_if_fail (uid != NULL, NULL);
string_to_dbt (uid, &uid_dbt);
- memset (&vcard_dbt, 0 , sizeof(vcard_dbt));
+ memset (&vcard_dbt, 0 , sizeof (vcard_dbt));
vcard_dbt.flags = DB_DBT_MALLOC;
db_error = db->get (db, NULL, &uid_dbt, &vcard_dbt,0);
return NULL;
}
- contact = e_contact_new_from_vcard ((const gchar *)vcard_dbt.data);
+ contact = e_contact_new_from_vcard_with_uid ((const gchar *) vcard_dbt.data, uid);
g_free (vcard_dbt.data);
return contact;
}
**/
gboolean
e_book_backend_db_cache_add_contact (DB *db,
- EContact *contact)
+ EContact *contact)
{
DBT uid_dbt, vcard_dbt;
gint db_error;
if (!uid) {
printf ("no uid\n");
printf("name:%s, email:%s\n",
- (gchar *)e_contact_get (contact, E_CONTACT_GIVEN_NAME),
- (gchar *)e_contact_get (contact, E_CONTACT_EMAIL_1));
+ (gchar *) e_contact_get (contact, E_CONTACT_GIVEN_NAME),
+ (gchar *) e_contact_get (contact, E_CONTACT_EMAIL_1));
return FALSE;
}
string_to_dbt (uid, &uid_dbt);
- vcard_str = e_vcard_to_string (E_VCARD(contact), EVC_FORMAT_VCARD_30);
+ vcard_str = e_vcard_to_string (E_VCARD (contact), EVC_FORMAT_VCARD_30);
string_to_dbt (vcard_str, &vcard_dbt);
/* db_error = db->del (db, NULL, &uid_dbt, 0); */
**/
gboolean
e_book_backend_db_cache_remove_contact (DB *db,
- const gchar *uid)
+ const gchar *uid)
{
DBT uid_dbt;
* Returns: %TRUE if the cache contains the contact, %FALSE otherwise.
**/
gboolean
-e_book_backend_db_cache_check_contact (DB *db, const gchar *uid)
+e_book_backend_db_cache_check_contact (DB *db,
+ const gchar *uid)
{
DBT uid_dbt, vcard_dbt;
gint db_error;
g_return_val_if_fail (uid != NULL, FALSE);
string_to_dbt (uid, &uid_dbt);
- memset (&vcard_dbt, 0 , sizeof(vcard_dbt));
+ memset (&vcard_dbt, 0 , sizeof (vcard_dbt));
vcard_dbt.flags = DB_DBT_MALLOC;
db_error = db->get (db, NULL, &uid_dbt, &vcard_dbt,0);
* Returns: A #GList of pointers to #EContact.
**/
GList *
-e_book_backend_db_cache_get_contacts (DB *db, const gchar *query)
+e_book_backend_db_cache_get_contacts (DB *db,
+ const gchar *query)
{
DBC *dbc;
DBT uid_dbt, vcard_dbt;
return NULL;
}
- memset(&vcard_dbt, 0 , sizeof(vcard_dbt));
- memset(&uid_dbt, 0, sizeof(uid_dbt));
- db_error = dbc->c_get(dbc, &uid_dbt, &vcard_dbt, DB_FIRST);
+ memset (&vcard_dbt, 0 , sizeof (vcard_dbt));
+ memset (&uid_dbt, 0, sizeof (uid_dbt));
+ db_error = dbc->c_get (dbc, &uid_dbt, &vcard_dbt, DB_FIRST);
while (db_error == 0) {
if (vcard_dbt.data && !strncmp (vcard_dbt.data, "BEGIN:VCARD", 11)) {
contact = e_contact_new_from_vcard (vcard_dbt.data);
- if (e_book_backend_sexp_match_contact(sexp, contact))
+ if (!sexp || e_book_backend_sexp_match_contact (sexp, contact))
list = g_list_prepend (list, contact);
else
g_object_unref (contact);
/**
* e_book_backend_db_cache_search:
- * @backend: an #EBookBackend
+ * @db: DB handle
* @query: an s-expression
*
* Returns an array of pointers to unique contact ID strings for contacts
* Returns: A #GPtrArray of pointers to contact ID strings.
**/
GPtrArray *
-e_book_backend_db_cache_search (DB *db, const gchar *query)
+e_book_backend_db_cache_search (DB *db,
+ const gchar *query)
{
GList *matching_contacts, *temp;
GPtrArray *ptr_array;
/**
* e_book_backend_db_cache_set_populated:
- * @backend: an #EBookBackend
+ * @db: DB handle
*
* Flags @cache as being populated - that is, it is up-to-date on the
* contents of the book it's caching.
gint db_error;
string_to_dbt ("populated", &uid_dbt);
- memset(&vcard_dbt, 0, sizeof(vcard_dbt));
+ memset (&vcard_dbt, 0, sizeof (vcard_dbt));
vcard_dbt.flags = DB_DBT_MALLOC;
db_error = db->get (db, NULL, &uid_dbt, &vcard_dbt, 0);
return FALSE;
}
else {
- free(vcard_dbt.data);
+ free (vcard_dbt.data);
return TRUE;
}
}
* Since: 2.26
**/
void
-e_book_backend_db_cache_set_time(DB *db, const gchar *t)
+e_book_backend_db_cache_set_time (DB *db,
+ const gchar *t)
{
DBT uid_dbt, vcard_dbt;
gint db_error;
gchar *t = NULL;
string_to_dbt ("last_update_time", &uid_dbt);
- memset (&vcard_dbt, 0, sizeof(vcard_dbt));
+ memset (&vcard_dbt, 0, sizeof (vcard_dbt));
vcard_dbt.flags = DB_DBT_MALLOC;
db_error = db->get (db, NULL, &uid_dbt, &vcard_dbt, 0);