I've been pondering this for the last couple days and should have
brought it up sooner, I'm looking at the bug regarding fetching
UID+REVISION only from the addressbook:
   (there is a similar bug open for libecal)

Currently the proposed solution is to extend the EBookQuery
language to allow filtering of returned vCards from
e_book_get_contacts() and contacts reported from an
open view.

But currently we already have a patch proposed on this bug:
which (for master) adds the 'e_book_client_view_set_flags()' api 
that allows configuration of the view and allows the view to 
report UIDs only (basically doing with an EBookView what one 
can already do with an EBook directly using e_book_get_contact_uids())

So what should we end up with at the end of the day ?

A few reasonable paths present themselves, the first one
being we do augment the EBookQuery language:

The future with EBookQuery:

  o Augment the query language to add 'flags' to queries for
    EBookQuery (and the other query code in libecal
    which I'm not yet familiar with).. 

  o Add EBookQuery flags for both 'uid-only' and 'uid-and-revision'

  o Remove the redundant api from my previous patch which adds
    pointless flags on the EBookClientView (the EBookClientView
    is created based on a query anyway, so it can absorb the
    flags of the query and share that api).

  o Deprecate all forms of e_book[_client]_get_contact_uids()
    (no reason to maintain a dedicated gdbus code path to return
    a list of UIDs if the EBookQuery can be flagged to just
    return a list of uids).

That could leave us with a single "flags" api to filter and
control both what comes out of EBook apis and EBookView notifications
(or we could implement the query language only for calls to
e_book_get_contacts() and use our separate flags api to control
the behaviour of an EBookView, that would certainly be an
undesirable api though).

Or... we don't extend the query language, extending the query language
with lots of flags means that backends get trickier to support and 
maintain, rather than adding all of this machinery perhaps we would
rather just:

  o Deprecate the e_book_get_contact_uids() dedicated codepath
    in favour of something that returns a list of shallow vCards
    containing only UID and REVISION strings (it could return
    2 arrays of strings instead of shallow vcards, whichever).

  o Implement the new e_book_view_get_revisioned_uids() in the backend
    side by having a fallback which just fetches all the vCards and
    filters them down to the UID + REVISION.

    This way a backend that does not implement the new
    get_revisioned_uids() vfunc do not return an error, they
    just (possibly) operate a little slower than backends
    which implement it in a custom way.

  o We do the same for EBookView, instead of having a flag
    that says "only the UID", let it be a flag that says
    "the UID and the REV"... it would be a "TOC" (table of contents)

In this second case we generalize a little and say that
  "if you only want a bookmark and not a full contact, you
   get the UID + REV but not the autobiography in the contact

So one question is, are we being tedious by trying to make
separate code paths to handle UID-only and UID+REV filtering
or can we say that "returning the UID+REV is fast compared
to loading the whole vCard" and just offer one code path
to return the UID+REV ?

Well, those are my thoughts so far, I'm hesitating between
trying to write the whole thing up by augmenting the EBookQuery
language or adding a new e_book_get_revisioned_contact_uids()
api... I think the latter will take me less time as well as
have the benefit of 'just working' on all backends.


evolution-hackers mailing list
To change your list options or unsubscribe, visit ...

Reply via email to