EDS + PIM: create phone number summary in contacts DB (part of FDO #59571)

A quick-and-dirty solution for enabling phone number summaries when
creating contact databases in the PIM Manager: let the EDS backend
recognize the special UIDs used by the PIM Manager and then hard-code
the minimal set of summary fields and indexed fields which allow
executing the E_CONTACT_TEL, E_BOOK_QUERY_EQUALS_NATIONAL_PHONE_NUMBER
query quickly.

A proper solution would use a new EDS function for parsing ESource
defaults from a string and then providing these defaults to the
backend from the PIM Manager.

Also note that configuring the EDS system address book must be covered
elsewhere, because it wouldn't be correct for SyncEvolution as only
one of many clients to change the configuration of that.

To enable the special support, add the following section to
share/evolution-data-server-3.6/rw-sources/system-address-book.source:

[Backend Summary Setup]
SummaryFields=phone
IndexedFields=phone,phone

This patch adds new function calls to code shared by syncecal and syncebook,
so we have to add libebook-contacts to both to avoid link errors.
This commit is contained in:
Patrick Ohly 2013-02-28 16:39:24 +01:00
parent e2647f4962
commit d8ca8b64cf
3 changed files with 24 additions and 3 deletions

View file

@ -136,6 +136,22 @@ SyncSource::Database EvolutionSyncSource::createDatabase(const Database &databas
ESourceBackend *backend = static_cast<ESourceBackend *>(e_source_get_extension(source, sourceExtension()));
e_source_backend_set_backend_name(backend, "local");
// hack: detect databases requested by the PIM Manager and create
// them with a special summary. Long-term we need a better way of
// selecting extensions, for example with a new
// e_source_new_from_string().
if (boost::starts_with(database.m_uri, "pim-manager-")) {
g_type_ensure (E_TYPE_SOURCE_BACKEND_SUMMARY_SETUP);
ESourceBackendSummarySetup *setup =
static_cast<ESourceBackendSummarySetup *>(e_source_get_extension(source, E_SOURCE_EXTENSION_BACKEND_SUMMARY_SETUP));
e_source_backend_summary_setup_set_summary_fields(setup,
E_CONTACT_TEL,
0);
e_source_backend_summary_setup_set_indexed_fields(setup,
E_CONTACT_TEL, E_BOOK_INDEX_PHONE,
0);
}
ESourceRegistryCXX registry = EDSRegistryLoader::getESourceRegistry();
ESourceListCXX sources;
sources.push_back(source.ref()); // ESourceListCXX unrefs sources it points to

View file

@ -68,6 +68,9 @@ if test "$enable_evo" = "yes"; then
# Only the EClient code supports the API in EDS 3.5.x.
PKG_CHECK_MODULES(EDS_VERSION, [libedataserver-1.2 >= 3.5],
[AC_DEFINE(USE_EDS_CLIENT, 1, [use e_book/cal_client_* calls])
# When using it, then we also need libebook-contacts-1.2
# for the ESourceBackendSummary extension.
PKG_CHECK_MODULES(EBOOKCONTACTS, libebook-contacts-1.2)
AC_CHECK_LIB(ebook-1.2, e_book_client_new_direct,
[AC_DEFINE(HAVE_E_BOOK_CLIENT_NEW_DIRECT, 1, [use e_book_client_new_direct])],
[true],
@ -86,4 +89,4 @@ else
EPACKAGE_LIBS=
fi
BACKEND_CPPFLAGS="$BACKEND_CPPFLAGS $EPACKAGE_CFLAGS $ECAL_CFLAGS $EBOOK_CFLAGS"
BACKEND_CPPFLAGS="$BACKEND_CPPFLAGS $EPACKAGE_CFLAGS $ECAL_CFLAGS $EBOOK_CFLAGS $EBOOKCONTACTS_CFLAGS"

View file

@ -36,7 +36,9 @@ src_backends_evolution_cppflags = \
-I$(top_srcdir)/src/backends/evolution
src_backends_evolution_syncecal_la_SOURCES = $(src_backends_evolution_syncecal_src)
src_backends_evolution_syncecal_la_LIBADD = $(ECAL_LIBS) $(SYNCEVOLUTION_LIBS) $(GLIB_LIBS) $(GOBJECT_LIBS)
# $(EBOOKCONTACTS_LIBS) is needed for ESourceBackendSummary, which we
# use in EvolutionSyncSource and thus in syncecal.
src_backends_evolution_syncecal_la_LIBADD = $(ECAL_LIBS) $(EBOOKCONTACTS_LIBS) $(SYNCEVOLUTION_LIBS) $(GLIB_LIBS) $(GOBJECT_LIBS)
# _GNU_SOURCE and -ldl for libical.c + dlsym():
src_backends_evolution_syncecal_la_CPPFLAGS = -D_GNU_SOURCE \
-De_cal_check_timezones=syncevolution_check_timezones \
@ -49,7 +51,7 @@ src_backends_evolution_syncecal_la_CXXFLAGS = $(SYNCEVOLUTION_CXXFLAGS) $(SYNCEV
src_backends_evolution_syncecal_la_DEPENDENCIES = src/syncevo/libsyncevolution.la
src_backends_evolution_syncebook_la_SOURCES = $(src_backends_evolution_syncebook_src)
src_backends_evolution_syncebook_la_LIBADD = $(EBOOK_LIBS) $(SYNCEVOLUTION_LIBS) $(GLIB_LIBS) $(GOBJECT_LIBS)
src_backends_evolution_syncebook_la_LIBADD = $(EBOOK_LIBS) $(EBOOKCONTACTS_LIBS) $(SYNCEVOLUTION_LIBS) $(GLIB_LIBS) $(GOBJECT_LIBS)
src_backends_evolution_syncebook_la_LDFLAGS = -module -avoid-version
src_backends_evolution_syncebook_la_CXXFLAGS = $(SYNCEVOLUTION_CXXFLAGS) $(SYNCEVO_WFLAGS) $(GLIB_CFLAGS) $(GOBJECT_CFLAGS)
src_backends_evolution_syncebook_la_CPPFLAGS = $(src_backends_evolution_cppflags)