<?xml version="1.0"?>
<!-- This file was automatically generated from C sources - DO NOT EDIT!
To affect the contents of this file, edit the original C definitions,
and/or use gtk-doc annotations.  -->
<repository version="1.2"
            xmlns="http://www.gtk.org/introspection/core/1.0"
            xmlns:c="http://www.gtk.org/introspection/c/1.0"
            xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
  <include name="Camel" version="1.2"/>
  <include name="EBackend" version="1.2"/>
  <include name="EBookContacts" version="1.2"/>
  <include name="EDataServer" version="1.2"/>
  <include name="GLib" version="2.0"/>
  <include name="GObject" version="2.0"/>
  <include name="Gio" version="2.0"/>
  <include name="libxml2" version="2.0"/>
  <package name="libedata-book-1.2"/>
  <c:include name="libedata-book/libedata-book.h"/>
  <namespace name="EDataBook"
             version="1.2"
             shared-library="libcamel-1.2.so.62,libebook-contacts-1.2.so.3,libedata-book-1.2.so.26,libedataserver-1.2.so.24"
             c:identifier-prefixes="E"
             c:symbol-prefixes="e">
    <function-macro name="BOOK_BACKEND"
                    c:identifier="E_BOOK_BACKEND"
                    introspectable="0">
      <source-position filename="e-book-backend.h" line="40"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_CACHE"
                    c:identifier="E_BOOK_BACKEND_CACHE"
                    introspectable="0">
      <source-position filename="e-book-backend-cache.h" line="36"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_CACHE_CLASS"
                    c:identifier="E_BOOK_BACKEND_CACHE_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-cache.h" line="39"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_CACHE_GET_CLASS"
                    c:identifier="E_BOOK_BACKEND_CACHE_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-cache.h" line="48"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_CLASS"
                    c:identifier="E_BOOK_BACKEND_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend.h" line="43"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_FACTORY"
                    c:identifier="E_BOOK_BACKEND_FACTORY"
                    introspectable="0">
      <source-position filename="e-book-backend-factory.h" line="32"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_FACTORY_CLASS"
                    c:identifier="E_BOOK_BACKEND_FACTORY_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-factory.h" line="35"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_FACTORY_GET_CLASS"
                    c:identifier="E_BOOK_BACKEND_FACTORY_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-factory.h" line="44"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_GET_CLASS"
                    c:identifier="E_BOOK_BACKEND_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend.h" line="52"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_SEXP"
                    c:identifier="E_BOOK_BACKEND_SEXP"
                    introspectable="0">
      <source-position filename="e-book-backend-sexp.h" line="33"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_SEXP_CLASS"
                    c:identifier="E_BOOK_BACKEND_SEXP_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-sexp.h" line="36"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_SEXP_GET_CLASS"
                    c:identifier="E_BOOK_BACKEND_SEXP_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-sexp.h" line="45"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_SQLITEDB"
                    c:identifier="E_BOOK_BACKEND_SQLITEDB"
                    introspectable="0">
      <source-position filename="e-book-backend-sqlitedb.h" line="36"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_SQLITEDB_CLASS"
                    c:identifier="E_BOOK_BACKEND_SQLITEDB_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-sqlitedb.h" line="39"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_SQLITEDB_GET_CLASS"
                    c:identifier="E_BOOK_BACKEND_SQLITEDB_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-sqlitedb.h" line="48"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_SUMMARY"
                    c:identifier="E_BOOK_BACKEND_SUMMARY"
                    introspectable="0">
      <source-position filename="e-book-backend-summary.h" line="33"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_SUMMARY_CLASS"
                    c:identifier="E_BOOK_BACKEND_SUMMARY_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-summary.h" line="36"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_SUMMARY_GET_CLASS"
                    c:identifier="E_BOOK_BACKEND_SUMMARY_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-summary.h" line="45"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_SYNC"
                    c:identifier="E_BOOK_BACKEND_SYNC"
                    introspectable="0">
      <source-position filename="e-book-backend-sync.h" line="39"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_SYNC_CLASS"
                    c:identifier="E_BOOK_BACKEND_SYNC_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-sync.h" line="42"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_BACKEND_SYNC_GET_CLASS"
                    c:identifier="E_BOOK_BACKEND_SYNC_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-sync.h" line="51"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_CACHE"
                    c:identifier="E_BOOK_CACHE"
                    introspectable="0">
      <source-position filename="e-book-cache.h" line="32"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_CACHE_CLASS"
                    c:identifier="E_BOOK_CACHE_CLASS"
                    introspectable="0">
      <source-position filename="e-book-cache.h" line="35"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_CACHE_GET_CLASS"
                    c:identifier="E_BOOK_CACHE_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-book-cache.h" line="44"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_META_BACKEND"
                    c:identifier="E_BOOK_META_BACKEND"
                    introspectable="0">
      <source-position filename="e-book-meta-backend.h" line="32"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_META_BACKEND_CLASS"
                    c:identifier="E_BOOK_META_BACKEND_CLASS"
                    introspectable="0">
      <source-position filename="e-book-meta-backend.h" line="35"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_META_BACKEND_GET_CLASS"
                    c:identifier="E_BOOK_META_BACKEND_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-book-meta-backend.h" line="44"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_SQLITE"
                    c:identifier="E_BOOK_SQLITE"
                    introspectable="0">
      <source-position filename="e-book-sqlite.h" line="32"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_SQLITE_CLASS"
                    c:identifier="E_BOOK_SQLITE_CLASS"
                    introspectable="0">
      <source-position filename="e-book-sqlite.h" line="35"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="BOOK_SQLITE_GET_CLASS"
                    c:identifier="E_BOOK_SQLITE_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-book-sqlite.h" line="44"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <constant name="BOOK_SQL_IS_POPULATED_KEY"
              value="eds-reserved-namespace-is-populated"
              c:type="E_BOOK_SQL_IS_POPULATED_KEY"
              version="3.12">
      <doc xml:space="preserve"
           filename="e-book-sqlite.h"
           line="58">This key can be used with e_book_sqlite_get_key_value().

In the case of a migration from an older SQLite, any value which
was previously stored with e_book_backend_sqlitedb_set_is_populated()
can be retrieved with this key.</doc>
      <source-position filename="e-book-sqlite.h" line="68"/>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="BOOK_SQL_SYNC_DATA_KEY"
              value="eds-reserved-namespace-sync-data"
              c:type="E_BOOK_SQL_SYNC_DATA_KEY"
              version="3.12">
      <doc xml:space="preserve"
           filename="e-book-sqlite.h"
           line="71">This key can be used with e_book_sqlite_get_key_value().

In the case of a migration from an older SQLite, any value which
was previously stored with e_book_backend_sqlitedb_set_sync_data()
can be retrieved with this key.</doc>
      <source-position filename="e-book-sqlite.h" line="81"/>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <class name="BookBackend"
           c:symbol-prefix="book_backend"
           c:type="EBookBackend"
           parent="EBackend.Backend"
           glib:type-name="EBookBackend"
           glib:get-type="e_book_backend_get_type"
           glib:type-struct="BookBackendClass">
      <doc xml:space="preserve"
           filename="e-book-backend.h"
           line="63">Contains only private data that should be read and manipulated using the
functions below.</doc>
      <source-position filename="e-book-backend.h" line="203"/>
      <virtual-method name="closed">
        <source-position filename="e-book-backend.h" line="197"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="sender" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_configure_direct">
        <source-position filename="e-book-backend.h" line="178"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="config" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_create_contacts">
        <source-position filename="e-book-backend.h" line="133"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="book" transfer-ownership="none">
            <type name="DataBook" c:type="EDataBook*"/>
          </parameter>
          <parameter name="opid" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="vcards" transfer-ownership="none">
            <type name="utf8" c:type="const gchar* const*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_create_cursor" introspectable="0" throws="1">
        <source-position filename="e-book-backend.h" line="187"/>
        <return-value>
          <type name="DataBookCursor" c:type="EDataBookCursor*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="sort_fields" transfer-ownership="none">
            <type name="EBookContacts.ContactField" c:type="EContactField*"/>
          </parameter>
          <parameter name="sort_types" transfer-ownership="none">
            <type name="EBookContacts.BookCursorSortType"
                  c:type="EBookCursorSortType*"/>
          </parameter>
          <parameter name="n_fields" transfer-ownership="none">
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_delete_cursor" throws="1">
        <source-position filename="e-book-backend.h" line="192"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="cursor" transfer-ownership="none">
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_dup_locale">
        <source-position filename="e-book-backend.h" line="185"/>
        <return-value transfer-ownership="full">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_get_backend_property">
        <source-position filename="e-book-backend.h" line="121"/>
        <return-value transfer-ownership="full">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="prop_name" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_get_contact">
        <source-position filename="e-book-backend.h" line="151"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="book" transfer-ownership="none">
            <type name="DataBook" c:type="EDataBook*"/>
          </parameter>
          <parameter name="opid" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="id" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_get_contact_list">
        <source-position filename="e-book-backend.h" line="156"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="book" transfer-ownership="none">
            <type name="DataBook" c:type="EDataBook*"/>
          </parameter>
          <parameter name="opid" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="query" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_get_contact_list_uids">
        <source-position filename="e-book-backend.h" line="161"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="book" transfer-ownership="none">
            <type name="DataBook" c:type="EDataBook*"/>
          </parameter>
          <parameter name="opid" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="query" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_get_direct_book" introspectable="0">
        <source-position filename="e-book-backend.h" line="177"/>
        <return-value>
          <type name="DataBookDirect" c:type="EDataBookDirect*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_modify_contacts">
        <source-position filename="e-book-backend.h" line="139"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="book" transfer-ownership="none">
            <type name="DataBook" c:type="EDataBook*"/>
          </parameter>
          <parameter name="opid" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="vcards" transfer-ownership="none">
            <type name="utf8" c:type="const gchar* const*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_notify_update">
        <source-position filename="e-book-backend.h" line="173"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="contact" transfer-ownership="none">
            <type name="EBookContacts.Contact" c:type="const EContact*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_open">
        <source-position filename="e-book-backend.h" line="125"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="book" transfer-ownership="none">
            <type name="DataBook" c:type="EDataBook*"/>
          </parameter>
          <parameter name="opid" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_refresh">
        <source-position filename="e-book-backend.h" line="129"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="book" transfer-ownership="none">
            <type name="DataBook" c:type="EDataBook*"/>
          </parameter>
          <parameter name="opid" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_remove_contacts">
        <source-position filename="e-book-backend.h" line="145"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="book" transfer-ownership="none">
            <type name="DataBook" c:type="EDataBook*"/>
          </parameter>
          <parameter name="opid" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="uids" transfer-ownership="none">
            <type name="utf8" c:type="const gchar* const*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_set_locale" throws="1">
        <source-position filename="e-book-backend.h" line="181"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="locale" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_start_view">
        <source-position filename="e-book-backend.h" line="168"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="view" transfer-ownership="none">
            <type name="DataBookView" c:type="EDataBookView*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="impl_stop_view">
        <source-position filename="e-book-backend.h" line="170"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="view" transfer-ownership="none">
            <type name="DataBookView" c:type="EDataBookView*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="shutdown">
        <source-position filename="e-book-backend.h" line="199"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <method name="add_view" c:identifier="e_book_backend_add_view">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2619">Adds @view to @backend for querying.</doc>
        <source-position filename="e-book-backend.h" line="350"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2621">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="view" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2622">an #EDataBookView</doc>
            <type name="DataBookView" c:type="EDataBookView*"/>
          </parameter>
        </parameters>
      </method>
      <method name="configure_direct"
              c:identifier="e_book_backend_configure_direct"
              version="3.8">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2909">This method is called on @backend in direct read access mode.
The @config argument is the same configuration string which
the same backend reported in the #EDataBookDirect returned
by e_book_backend_get_direct_book().

The configuration string is optional and is used to ensure
that direct access backends are properly configured to
interface with the same data as the running server side backend.</doc>
        <source-position filename="e-book-backend.h" line="384"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2911">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2912">The configuration string for the given backend</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_contacts"
              c:identifier="e_book_backend_create_contacts"
              version="3.10">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1470">Asynchronously creates one or more new contacts from @vcards.

When the operation is finished, @callback will be called.  You can then
call e_book_backend_create_contacts_finish() to get the result of the
operation.</doc>
        <source-position filename="e-book-backend.h" line="256"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1472">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="vcards" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1473">a %NULL-terminated array of vCard strings</doc>
            <type name="utf8" c:type="const gchar* const*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1474">bit-or of #EBookOperationFlags</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1475">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="4">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1476">a #GAsyncReadyCallback to call when the request is satisfied</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1477">data to pass to the callback function</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_contacts_finish"
              c:identifier="e_book_backend_create_contacts_finish"
              version="3.10"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1533">Finishes the operation started with e_book_backend_create_contacts().

An #EContact instance for each newly-created contact is deposited in
@out_contacts.  The returned #EContact instances are referenced for
thread-safety and must be unreferenced with g_object_unref() when
finished with them.

If an error occurred, the function will set @error and return %FALSE.</doc>
        <source-position filename="e-book-backend.h" line="262"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="1549">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1535">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="result" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1536">a #GAsyncResult</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
          <parameter name="out_contacts" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1537">a #GQueue in which to deposit results</doc>
            <type name="GLib.Queue" c:type="GQueue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_contacts_sync"
              c:identifier="e_book_backend_create_contacts_sync"
              version="3.10"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1379">Creates one or more new contacts from @vcards, and deposits an #EContact
instance for each newly-created contact in @out_contacts.

The returned #EContact instances are referenced for thread-safety and
must be unreferenced with g_object_unref() when finished with them.

If an error occurs, the function will set @error and return %FALSE.</doc>
        <source-position filename="e-book-backend.h" line="249"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="1396">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1381">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="vcards" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1382">a %NULL-terminated array of vCard strings</doc>
            <type name="utf8" c:type="const gchar* const*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1383">bit-or of #EBookOperationFlags</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="out_contacts" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1384">a #GQueue in which to deposit results</doc>
            <type name="GLib.Queue" c:type="GQueue*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1385">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="create_cursor"
              c:identifier="e_book_backend_create_cursor"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="3204">Creates a new #EDataBookCursor for the given backend if the backend
has cursor support. If the backend does not support cursors then
an %E_CLIENT_ERROR_NOT_SUPPORTED error will be set in @error.

Backends can also refuse to create cursors for some values of @sort_fields
and report more specific errors.

The returned cursor belongs to @backend and should be destroyed
with e_book_backend_delete_cursor() when no longer needed.</doc>
        <source-position filename="e-book-backend.h" line="396"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="3222">A newly created cursor, the cursor belongs
to the backend and should not be unreffed, or %NULL</doc>
          <type name="DataBookCursor" c:type="EDataBookCursor*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3206">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="sort_fields" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3207">the #EContactFields to sort by</doc>
            <type name="EBookContacts.ContactField" c:type="EContactField*"/>
          </parameter>
          <parameter name="sort_types" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3208">the #EBookCursorSortTypes for the sorted fields</doc>
            <type name="EBookContacts.BookCursorSortType"
                  c:type="EBookCursorSortType*"/>
          </parameter>
          <parameter name="n_fields" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3209">the number of fields in the @sort_fields and @sort_types</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="delete_cursor"
              c:identifier="e_book_backend_delete_cursor"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="3259">Requests @backend to release and destroy @cursor, this
will trigger an %E_CLIENT_ERROR_INVALID_ARG error if @cursor
is not owned by @backend.</doc>
        <source-position filename="e-book-backend.h" line="401"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="3269">Whether @cursor was successfully deleted.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3261">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3262">the #EDataBookCursor to destroy</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </parameter>
        </parameters>
      </method>
      <method name="dup_cache_dir"
              c:identifier="e_book_backend_dup_cache_dir"
              version="3.10">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="833">Thread-safe variation of e_book_backend_get_cache_dir().
Use this function when accessing @backend from multiple threads.

The returned string should be freed with g_free() when no longer needed.</doc>
        <source-position filename="e-book-backend.h" line="208"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="842">a newly-allocated copy of #EBookBackend:cache-dir</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="835">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="dup_locale"
              c:identifier="e_book_backend_dup_locale"
              version="3.12">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2984">Fetches a copy of the currently configured locale for the addressbook</doc>
        <source-position filename="e-book-backend.h" line="393"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="2990">A copy of the currently configured locale for the addressbook.
  Free with g_free() when done with it.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2986">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="foreach_view"
              c:identifier="e_book_backend_foreach_view"
              version="3.34">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2727">Calls @func for each existing view (as returned by e_book_backend_list_views()).
The @func can return %FALSE to stop early.</doc>
        <source-position filename="e-book-backend.h" line="360"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="2736">whether the call had been stopped by @func</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2729">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="func"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="call"
                     closure="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2730">an #EBookBackendForeachViewFunc function to call</doc>
            <type name="BookBackendForeachViewFunc"
                  c:type="EBookBackendForeachViewFunc"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     closure="0">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2731">user data to pass to @func</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="foreach_view_notify_progress"
              c:identifier="e_book_backend_foreach_view_notify_progress"
              version="3.34">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2784">Notifies each view of the @backend about progress. When @only_completed_views
is %TRUE, notifies only completed views.</doc>
        <source-position filename="e-book-backend.h" line="363"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2786">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="only_completed_views" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2787">whether notify in completed views only</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="percent" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2788">percent complete</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="message"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2789">message describing the operation in progress, or %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_backend_property"
              c:identifier="e_book_backend_get_backend_property"
              version="3.10">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2813">Obtains the value of the backend property named @prop_name.
Freed the returned string with g_free() when finished with it.</doc>
        <source-position filename="e-book-backend.h" line="226"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="2821">the value for @prop_name</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2815">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="prop_name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2816">a backend property name</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_cache_dir"
              c:identifier="e_book_backend_get_cache_dir"
              version="2.32">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="815">Returns the cache directory path used by @backend.</doc>
        <source-position filename="e-book-backend.h" line="207"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="821">the cache directory path</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="817">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_contact"
              c:identifier="e_book_backend_get_contact"
              version="3.10">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2061">Asynchronously obtains an #EContact for @uid.

When the operation is finished, @callback will be called.  You can
then call e_book_backend_get_contact_finish() to get the result of the
operation.</doc>
        <source-position filename="e-book-backend.h" line="303"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2063">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2064">a contact ID</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2065">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="3">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2066">a #GAsyncReadyCallback to call when the request is satisfied</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2067">data to pass to the callback function</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_contact_finish"
              c:identifier="e_book_backend_get_contact_finish"
              version="3.10"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2121">Finishes the operation started with e_book_backend_get_contact_finish().

The returned #EContact is referenced for thread-safety and must be
unreferenced with g_object_unref() when finished with it.

If an error occurred, the function will set @error and return %NULL.</doc>
        <source-position filename="e-book-backend.h" line="308"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="2134">an #EContact, or %NULL</doc>
          <type name="EBookContacts.Contact" c:type="EContact*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2123">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="result" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2124">a #GAsyncResult</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_contact_list"
              c:identifier="e_book_backend_get_contact_list"
              version="3.10">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2263">Asynchronously obtains a set of #EContact instances which satisfy the
criteria specified in @query.

When the operation is finished, @callback will be called.  You can then
call e_book_backend_get_contact_list_finish() to get the result of the
operation.</doc>
        <source-position filename="e-book-backend.h" line="318"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2265">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="query" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2266">a search query in S-expression format</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2267">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="3">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2268">a #GAsyncReadyCallback to call when the request is satisfied</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2269">data to pass to the callback function</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_contact_list_finish"
              c:identifier="e_book_backend_get_contact_list_finish"
              version="3.10"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2324">Finishes the operation started with e_book_backend_get_contact_list().

The matching #EContact instances are deposited in @out_contacts.  The
returned #EContact instances are referenced for thread-safety and must
be unreferenced with g_object_unref() when finished with them.

If an error occurred, the function will set @error and return %FALSE.
Note that an empty result set does not necessarily imply an error.</doc>
        <source-position filename="e-book-backend.h" line="323"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="2340">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2326">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="result" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2327">a #GAsyncResult</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
          <parameter name="out_contacts" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2328">a #GQueue in which to deposit results</doc>
            <type name="GLib.Queue" c:type="GQueue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_contact_list_sync"
              c:identifier="e_book_backend_get_contact_list_sync"
              version="3.10"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2172">Obtains a set of #EContact instances which satisfy the criteria specified
in @query, and deposits them in @out_contacts.

The returned #EContact instances are referenced for thread-safety and
must be unreferenced with g_object_unref() when finished with them.

If an error occurs, the function will set @error and return %FALSE.
Note that an empty result set does not necessarily imply an error.</doc>
        <source-position filename="e-book-backend.h" line="312"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="2189">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2174">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="query" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2175">a search query in S-expression format</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="out_contacts" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2176">a #GQueue in which to deposit results</doc>
            <type name="GLib.Queue" c:type="GQueue*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2177">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_contact_list_uids"
              c:identifier="e_book_backend_get_contact_list_uids"
              version="3.10">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2463">Asynchronously obtains a set of ID strings for contacts which satisfy
the criteria specified in @query.

When the operation is finished, @callback will be called.  You can then
call e_book_backend_get_contact_list_uids_finish() to get the result of
the operation.</doc>
        <source-position filename="e-book-backend.h" line="334"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2465">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="query" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2466">a search query in S-expression format</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2467">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="3">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2468">a #GAsyncReadyCallback to call when the request is satisfied</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2469">data to pass to the callback function</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_contact_list_uids_finish"
              c:identifier="e_book_backend_get_contact_list_uids_finish"
              version="3.10"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2524">Finishes the operation started with
e_book_backend_get_contact_list_uids_finish().

ID strings for the matching contacts are deposited in @out_uids, and
must be freed with g_free() when finished with them.

If an error occurs, the function will set @error and return %FALSE.
Note that an empty result set does not necessarily imply an error.</doc>
        <source-position filename="e-book-backend.h" line="340"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="2540">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2526">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="result" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2527">a #GAsyncResult</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
          <parameter name="out_uids" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2528">a #GQueue in which to deposit results</doc>
            <type name="GLib.Queue" c:type="GQueue*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_contact_list_uids_sync"
              c:identifier="e_book_backend_get_contact_list_uids_sync"
              version="3.10"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2372">Obtains a set of ID strings for contacts which satisfy the criteria
specified in @query, and deposits them in @out_uids.

The returned ID strings must be freed with g_free() with finished
with them.

If an error occurs, the function will set @error and return %FALSE.
Note that an empty result set does not necessarily imply an error.</doc>
        <source-position filename="e-book-backend.h" line="328"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="2389">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2374">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="query" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2375">a search query in S-expression format</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="out_uids" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2376">a #GQueue in which to deposit results</doc>
            <type name="GLib.Queue" c:type="GQueue*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2377">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_contact_sync"
              c:identifier="e_book_backend_get_contact_sync"
              version="3.10"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1975">Obtains an #EContact for @uid.

The returned #EContact is referenced for thread-safety and must be
unreferenced with g_object_unref() when finished with it.

If an error occurs, the function will set @error and return %NULL.</doc>
        <source-position filename="e-book-backend.h" line="299"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="1989">an #EContact, or %NULL</doc>
          <type name="EBookContacts.Contact" c:type="EContact*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1977">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1978">a contact ID</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1979">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_direct_book"
              c:identifier="e_book_backend_get_direct_book"
              version="3.8">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2880">Tries to create an #EDataBookDirect for @backend if
backend supports direct read access.</doc>
        <source-position filename="e-book-backend.h" line="383"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="2887">A new #EDataBookDirect object, or %NULL if
         @backend does not support direct access</doc>
          <type name="DataBookDirect" c:type="EDataBookDirect*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2882">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_registry"
              c:identifier="e_book_backend_get_registry"
              version="3.6">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="986">Returns the data source registry to which #EBackend:source belongs.</doc>
        <source-position filename="e-book-backend.h" line="218"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="992">an #ESourceRegistry</doc>
          <type name="EDataServer.SourceRegistry" c:type="ESourceRegistry*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="988">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_writable"
              c:identifier="e_book_backend_get_writable"
              version="3.8">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1004">Returns whether @backend will accept changes to its data content.</doc>
        <source-position filename="e-book-backend.h" line="219"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="1010">whether @backend is writable</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1006">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_opened"
              c:identifier="e_book_backend_is_opened"
              version="3.2">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2841">Checks if @backend's storage has been opened (and
authenticated, if necessary) and the backend itself
is ready for accessing. This property is changed automatically
after the @backend is successfully opened.</doc>
        <source-position filename="e-book-backend.h" line="223"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="2850">%TRUE if fully opened, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2843">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_readonly"
              c:identifier="e_book_backend_is_readonly"
              version="3.2">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2862">Checks if we can write to @backend.</doc>
        <source-position filename="e-book-backend.h" line="224"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="2868">%TRUE if read-only, %FALSE if not.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2864">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="list_views"
              c:identifier="e_book_backend_list_views"
              version="3.8">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2675">Returns a list of #EDataBookView instances added with
e_book_backend_add_view().

The views returned in the list are referenced for thread-safety.
They must each be unreferenced with g_object_unref() when finished
with them.  Free the returned list itself with g_list_free().

An easy way to free the list properly in one step is as follows:

|[
  g_list_free_full (list, g_object_unref);
]|</doc>
        <source-position filename="e-book-backend.h" line="354"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="2692">a list of book views</doc>
          <type name="GLib.List" c:type="GList*">
            <type name="DataBookView"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2677">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="modify_contacts"
              c:identifier="e_book_backend_modify_contacts"
              version="3.10">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1671">Asynchronously modifies one or more contacts according to @vcards.

When the operation is finished, @callback will be called.  You can then
call e_book_backend_modify_contacts_finish() to get the result of the
operation.</doc>
        <source-position filename="e-book-backend.h" line="273"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1673">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="vcards" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1674">a %NULL-terminated array of vCard strings</doc>
            <type name="utf8" c:type="const gchar* const*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1675">bit-or of #EBookOperationFlags</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1676">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="4">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1677">a #GAsyncReadyCallback to call when the request is satisfied</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1678">data to pass to the callback function</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="modify_contacts_finish"
              c:identifier="e_book_backend_modify_contacts_finish"
              version="3.10"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1734">Finishes the operation started with e_book_backend_modify_contacts().

If an error occurred, the function will set @error and return %FALSE.</doc>
        <source-position filename="e-book-backend.h" line="279"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="1744">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1736">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="result" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1737">a #GAsyncResult</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
        </parameters>
      </method>
      <method name="modify_contacts_sync"
              c:identifier="e_book_backend_modify_contacts_sync"
              version="3.10"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1590">Modifies one or more contacts according to @vcards.

If an error occurs, the function will set @error and return %FALSE.</doc>
        <source-position filename="e-book-backend.h" line="267"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="1602">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1592">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="vcards" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1593">a %NULL-terminated array of vCard strings</doc>
            <type name="utf8" c:type="const gchar* const*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1594">bit-or of #EBookOperationFlags</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1595">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="notify_complete"
              c:identifier="e_book_backend_notify_complete">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="3076">Notifies all of @backend's book views that the current set of
notifications is complete; use this after a series of
e_book_backend_notify_update() and e_book_backend_notify_remove() calls.</doc>
        <source-position filename="e-book-backend.h" line="373"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3078">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="notify_error"
              c:identifier="e_book_backend_notify_error"
              version="3.2">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="3101">Notifies each backend listener about an error. This is meant to be used
for cases where is no GError return possibility, to notify user about
an issue.</doc>
        <source-position filename="e-book-backend.h" line="375"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3103">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="message" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3104">an error message</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="notify_property_changed"
              c:identifier="e_book_backend_notify_property_changed"
              version="3.2">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="3129">Notifies clients about property value change.</doc>
        <source-position filename="e-book-backend.h" line="377"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3131">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="prop_name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3132">property name, which changed</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="prop_value"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3133">new property value</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="notify_remove" c:identifier="e_book_backend_notify_remove">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="3045">Notifies all of @backend's book views that the contact with UID
@id has been removed.

e_data_book_respond_remove_contacts() calls this function for you. You
only need to call this from your backend if contacts are removed by
another (non-PAS-using) client.</doc>
        <source-position filename="e-book-backend.h" line="371"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3047">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="id" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3048">a contact id</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="notify_update" c:identifier="e_book_backend_notify_update">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="3017">Notifies all of @backend's book views about the new or modified
contacts @contact.

e_data_book_respond_create_contacts() and e_data_book_respond_modify_contacts() call this
function for you. You only need to call this from your backend if
contacts are created or modified by another (non-PAS-using) client.</doc>
        <source-position filename="e-book-backend.h" line="369"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3019">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3020">a new or modified contact</doc>
            <type name="EBookContacts.Contact" c:type="const EContact*"/>
          </parameter>
        </parameters>
      </method>
      <method name="open" c:identifier="e_book_backend_open" version="3.10">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1123">Asynchronously "opens" the @backend.  Opening a backend is something of
an outdated concept, but the operation is hanging around for a little
while longer.  This usually involves some custom initialization logic,
and testing of remote authentication if applicable.

When the operation is finished, @callback will be called.  You can then
call e_book_backend_open_finish() to get the result of the operation.</doc>
        <source-position filename="e-book-backend.h" line="232"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1125">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1126">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="2">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1127">a #GAsyncReadyCallback to call when the request is satisfied</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1128">data to pass to the callback function</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="open_finish"
              c:identifier="e_book_backend_open_finish"
              version="3.10"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1174">Finishes the operation started with e_book_backend_open().

If an error occurred, the function will set @error and return %FALSE.</doc>
        <source-position filename="e-book-backend.h" line="236"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="1184">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1176">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="result" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1177">a #GAsyncResult</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
        </parameters>
      </method>
      <method name="open_sync"
              c:identifier="e_book_backend_open_sync"
              version="3.10"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1045">"Opens" the @backend.  Opening a backend is something of an outdated
concept, but the operation is hanging around for a little while longer.
This usually involves some custom initialization logic, and testing of
remote authentication if applicable.

If an error occurs, the function will set @error and return %FALSE.</doc>
        <source-position filename="e-book-backend.h" line="229"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="1058">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1047">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1048">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="prepare_for_completion"
              c:identifier="e_book_backend_prepare_for_completion"
              version="3.10">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="3157">Obtains the #GSimpleAsyncResult for @opid and sets @result_queue as a
place to deposit results prior to completing the #GSimpleAsyncResult.

&lt;note&gt;
  &lt;para&gt;
    This is a temporary function to serve #EDataBook's "respond"
    functions until they can be removed.  Nothing else should be
    calling this function.
  &lt;/para&gt;
&lt;/note&gt;</doc>
        <source-position filename="e-book-backend.h" line="406"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="3174">a #GSimpleAsyncResult</doc>
          <type name="Gio.SimpleAsyncResult" c:type="GSimpleAsyncResult*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3159">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="opid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3160">an operation ID given to #EDataBook</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="result_queue" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3161">return location for a #GQueue, or %NULL</doc>
            <type name="GLib.Queue" c:type="GQueue**"/>
          </parameter>
        </parameters>
      </method>
      <method name="ref_data_book"
              c:identifier="e_book_backend_ref_data_book"
              version="3.10">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="899">Returns the #EDataBook for @backend.  The #EDataBook is essentially
the glue between incoming D-Bus requests and @backend's native API.

An #EDataBook should be set only once after @backend is first created.
If an #EDataBook has not yet been set, the function returns %NULL.

The returned #EDataBook is referenced for thread-safety and must be
unreferenced with g_object_unref() when finished with it.</doc>
        <source-position filename="e-book-backend.h" line="211"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="912">an #EDataBook, or %NULL</doc>
          <type name="DataBook" c:type="EDataBook*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="901">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref_proxy_resolver"
              c:identifier="e_book_backend_ref_proxy_resolver"
              version="3.12">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="954">Returns the #GProxyResolver for @backend (if applicable), as indicated
by the #ESourceAuthentication:proxy-uid of @backend's #EBackend:source
or one of its ancestors.

The returned #GProxyResolver is referenced for thread-safety and must
be unreferenced with g_object_unref() when finished with it.</doc>
        <source-position filename="e-book-backend.h" line="215"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="965">a #GProxyResolver, or %NULL</doc>
          <type name="Gio.ProxyResolver" c:type="GProxyResolver*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="956">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="refresh"
              c:identifier="e_book_backend_refresh"
              version="3.10">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1291">Asynchronously initiates a refresh for @backend, if the @backend supports
refreshing.  The actual refresh operation completes on its own time.  This
function, along with e_book_backend_refresh_finish(), merely initiates the
operation.

Once the refresh is initiated, @callback will be called.  You can then
call e_book_backend_refresh_finish() to get the result of the initiation.</doc>
        <source-position filename="e-book-backend.h" line="242"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1293">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1294">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="2">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1295">a #GAsyncReadyCallback to call when the request is satisfied</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1296">data to pass to the callback function</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="refresh_finish"
              c:identifier="e_book_backend_refresh_finish"
              version="3.10"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1342">Finishes the refresh initiation started with e_book_backend_refresh().

If an error occurred while initiating the refresh, the function will set
@error and return %FALSE.  If the @backend does not support refreshing,
the function will set an %E_CLIENT_ERROR_NOT_SUPPORTED error and return
%FALSE.</doc>
        <source-position filename="e-book-backend.h" line="246"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="1355">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1344">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="result" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1345">a #GAsyncResult</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
        </parameters>
      </method>
      <method name="refresh_sync"
              c:identifier="e_book_backend_refresh_sync"
              version="3.10"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1212">Initiates a refresh for @backend, if the @backend supports refreshing.
The actual refresh operation completes on its own time.  This function
merely initiates the operation.

If an error occurs while initiating the refresh, the function will set
@error and return %FALSE.  If the @backend does not support refreshing,
the function will set an %E_CLIENT_ERROR_NOT_SUPPORTED error and return
%FALSE.</doc>
        <source-position filename="e-book-backend.h" line="239"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="1227">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1214">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1215">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_contacts"
              c:identifier="e_book_backend_remove_contacts"
              version="3.10">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1866">Asynchronously removes one or more contacts according to @uids.

When the operation is finished, @callback will be called.  You can then
call e_book_backend_remove_contacts_finish() to get the result of the
operation.</doc>
        <source-position filename="e-book-backend.h" line="289"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1868">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="uids" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1869">a %NULL-terminated array of contact ID strings</doc>
            <array c:type="const gchar* const*">
              <type name="utf8" c:type="gchar*"/>
            </array>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1870">bit-or of #EBookOperationFlags</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1871">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="4">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1872">a #GAsyncReadyCallback to call when the request is satisfied</doc>
            <type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1873">data to pass to the callback function</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_contacts_finish"
              c:identifier="e_book_backend_remove_contacts_finish"
              version="3.10"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1929">Finishes the operation started with e_book_backend_remove_contacts().

If an error occurred, the function will set @error and return %FALSE.</doc>
        <source-position filename="e-book-backend.h" line="295"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="1939">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1931">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="result" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1932">a #GAsyncResult</doc>
            <type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_contacts_sync"
              c:identifier="e_book_backend_remove_contacts_sync"
              version="3.10"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1782">Removes one or more contacts according to @uids.

If an error occurs, the function will set @error and return %FALSE.</doc>
        <source-position filename="e-book-backend.h" line="283"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="1794">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1784">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="uids" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1785">a %NULL-terminated array of contact ID strings</doc>
            <type name="utf8" c:type="const gchar* const*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1786">bit-or of #EBookOperationFlags</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1787">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_view" c:identifier="e_book_backend_remove_view">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2640">Removes @view from @backend.</doc>
        <source-position filename="e-book-backend.h" line="352"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2642">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="view" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2643">an #EDataBookView</doc>
            <type name="DataBookView" c:type="EDataBookView*"/>
          </parameter>
        </parameters>
      </method>
      <method name="schedule_custom_operation"
              c:identifier="e_book_backend_schedule_custom_operation"
              version="3.26">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="3298">Schedules user function @func to be run in a dedicated thread as
a blocking operation.

The function adds its own reference to @use_cancellable, if not %NULL.

The error returned from @func is propagated to client using
e_book_backend_notify_error() function. If it's not desired,
then left the error unchanged and notify about errors manually.</doc>
        <source-position filename="e-book-backend.h" line="427"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3300">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="use_cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3301">an optional #GCancellable to use for @func</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
          <parameter name="func"
                     transfer-ownership="none"
                     scope="notified"
                     closure="2"
                     destroy="3">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3302">a function to call in a dedicated thread</doc>
            <type name="BookBackendCustomOpFunc"
                  c:type="EBookBackendCustomOpFunc"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3303">user data being passed to @func</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="user_data_free"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="3304">optional destroy call back for @user_data</doc>
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_cache_dir"
              c:identifier="e_book_backend_set_cache_dir"
              version="2.32">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="864">Sets the cache directory path for use by @backend.

Note that #EBookBackend is initialized with a default cache directory
path which should suffice for most cases.  Backends should not override
the default path without good reason.</doc>
        <source-position filename="e-book-backend.h" line="209"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="866">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="cache_dir" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="867">a local cache directory path</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_data_book"
              c:identifier="e_book_backend_set_data_book"
              version="3.10">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="929">Sets the #EDataBook for @backend.  The #EDataBook is essentially the
glue between incoming D-Bus requests and @backend's native API.

An #EDataBook should be set only once after @backend is first created.</doc>
        <source-position filename="e-book-backend.h" line="212"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="931">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="data_book" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="932">an #EDataBook</doc>
            <type name="DataBook" c:type="EDataBook*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_locale"
              c:identifier="e_book_backend_set_locale"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2940">Notify the addressbook backend that the current locale has
changed, this is important for backends which support
ordered result lists which are locale sensitive.</doc>
        <source-position filename="e-book-backend.h" line="389"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="2951">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2942">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="locale" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2943">the new locale for the addressbook</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2944">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_writable"
              c:identifier="e_book_backend_set_writable"
              version="3.8">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="1022">Sets whether @backend will accept changes to its data content.</doc>
        <source-position filename="e-book-backend.h" line="220"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1024">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="writable" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="1025">whether @backend is writable</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="start_view" c:identifier="e_book_backend_start_view">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2572">Starts running the query specified by @view, emitting signals for
matching contacts.</doc>
        <source-position filename="e-book-backend.h" line="346"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2574">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="view" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2575">the #EDataBookView to start</doc>
            <type name="DataBookView" c:type="EDataBookView*"/>
          </parameter>
        </parameters>
      </method>
      <method name="stop_view" c:identifier="e_book_backend_stop_view">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2596">Stops running the query specified by @view, emitting no more signals.</doc>
        <source-position filename="e-book-backend.h" line="348"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2598">an #EBookBackend</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
          <parameter name="view" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="2599">the #EDataBookView to stop</doc>
            <type name="DataBookView" c:type="EDataBookView*"/>
          </parameter>
        </parameters>
      </method>
      <method name="sync" c:identifier="e_book_backend_sync">
        <source-position filename="e-book-backend.h" line="387"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackend" c:type="EBookBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="cache-dir" writable="1" transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="proxy-resolver" transfer-ownership="none">
        <type name="Gio.ProxyResolver"/>
      </property>
      <property name="registry"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="EDataServer.SourceRegistry"/>
      </property>
      <property name="writable" writable="1" transfer-ownership="none">
        <type name="gboolean" c:type="gboolean"/>
      </property>
      <field name="parent" readable="0" private="1">
        <type name="EBackend.Backend" c:type="EBackend"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="BookBackendPrivate" c:type="EBookBackendPrivate*"/>
      </field>
      <glib:signal name="closed" when="last" version="3.10">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="761">Emitted when a client destroys its #EBookClient for @backend.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="sender" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend.c"
                 line="764">the bus name that invoked the "close" method</doc>
            <type name="utf8" c:type="gchar*"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="shutdown" when="last" version="3.10">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="779">Emitted when the last client destroys its #EBookClient for
@backend.  This signals the @backend to begin final cleanup
tasks such as synchronizing data to permanent storage.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
    </class>
    <record name="BookBackendClass"
            c:type="EBookBackendClass"
            glib:is-gtype-struct-for="BookBackend">
      <doc xml:space="preserve"
           filename="e-book-backend.h"
           line="75">Class structure for the #EBookBackend class.

These virtual methods must be implemented when writing
an addressbook backend.</doc>
      <source-position filename="e-book-backend.h" line="203"/>
      <field name="parent_class" readable="0" private="1">
        <type name="EBackend.BackendClass" c:type="EBackendClass"/>
      </field>
      <field name="use_serial_dispatch_queue">
        <doc xml:space="preserve"
             filename="e-book-backend.h"
             line="77">Whether a serial dispatch queue should
                            be used for this backend or not. The default is %TRUE.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </field>
      <field name="impl_get_backend_property">
        <callback name="impl_get_backend_property">
          <source-position filename="e-book-backend.h" line="121"/>
          <return-value transfer-ownership="full">
            <type name="utf8" c:type="gchar*"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
            <parameter name="prop_name" transfer-ownership="none">
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="impl_open">
        <callback name="impl_open">
          <source-position filename="e-book-backend.h" line="125"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
            <parameter name="book" transfer-ownership="none">
              <type name="DataBook" c:type="EDataBook*"/>
            </parameter>
            <parameter name="opid" transfer-ownership="none">
              <type name="guint32" c:type="guint32"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="impl_refresh">
        <callback name="impl_refresh">
          <source-position filename="e-book-backend.h" line="129"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
            <parameter name="book" transfer-ownership="none">
              <type name="DataBook" c:type="EDataBook*"/>
            </parameter>
            <parameter name="opid" transfer-ownership="none">
              <type name="guint32" c:type="guint32"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="impl_create_contacts">
        <callback name="impl_create_contacts">
          <source-position filename="e-book-backend.h" line="133"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
            <parameter name="book" transfer-ownership="none">
              <type name="DataBook" c:type="EDataBook*"/>
            </parameter>
            <parameter name="opid" transfer-ownership="none">
              <type name="guint32" c:type="guint32"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
            <parameter name="vcards" transfer-ownership="none">
              <type name="utf8" c:type="const gchar* const*"/>
            </parameter>
            <parameter name="opflags" transfer-ownership="none">
              <type name="guint32" c:type="guint32"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="impl_modify_contacts">
        <callback name="impl_modify_contacts">
          <source-position filename="e-book-backend.h" line="139"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
            <parameter name="book" transfer-ownership="none">
              <type name="DataBook" c:type="EDataBook*"/>
            </parameter>
            <parameter name="opid" transfer-ownership="none">
              <type name="guint32" c:type="guint32"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
            <parameter name="vcards" transfer-ownership="none">
              <type name="utf8" c:type="const gchar* const*"/>
            </parameter>
            <parameter name="opflags" transfer-ownership="none">
              <type name="guint32" c:type="guint32"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="impl_remove_contacts">
        <callback name="impl_remove_contacts">
          <source-position filename="e-book-backend.h" line="145"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
            <parameter name="book" transfer-ownership="none">
              <type name="DataBook" c:type="EDataBook*"/>
            </parameter>
            <parameter name="opid" transfer-ownership="none">
              <type name="guint32" c:type="guint32"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
            <parameter name="uids" transfer-ownership="none">
              <type name="utf8" c:type="const gchar* const*"/>
            </parameter>
            <parameter name="opflags" transfer-ownership="none">
              <type name="guint32" c:type="guint32"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="impl_get_contact">
        <callback name="impl_get_contact">
          <source-position filename="e-book-backend.h" line="151"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
            <parameter name="book" transfer-ownership="none">
              <type name="DataBook" c:type="EDataBook*"/>
            </parameter>
            <parameter name="opid" transfer-ownership="none">
              <type name="guint32" c:type="guint32"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
            <parameter name="id" transfer-ownership="none">
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="impl_get_contact_list">
        <callback name="impl_get_contact_list">
          <source-position filename="e-book-backend.h" line="156"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
            <parameter name="book" transfer-ownership="none">
              <type name="DataBook" c:type="EDataBook*"/>
            </parameter>
            <parameter name="opid" transfer-ownership="none">
              <type name="guint32" c:type="guint32"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
            <parameter name="query" transfer-ownership="none">
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="impl_get_contact_list_uids">
        <callback name="impl_get_contact_list_uids">
          <source-position filename="e-book-backend.h" line="161"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
            <parameter name="book" transfer-ownership="none">
              <type name="DataBook" c:type="EDataBook*"/>
            </parameter>
            <parameter name="opid" transfer-ownership="none">
              <type name="guint32" c:type="guint32"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
            <parameter name="query" transfer-ownership="none">
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="impl_start_view">
        <callback name="impl_start_view">
          <source-position filename="e-book-backend.h" line="168"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
            <parameter name="view" transfer-ownership="none">
              <type name="DataBookView" c:type="EDataBookView*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="impl_stop_view">
        <callback name="impl_stop_view">
          <source-position filename="e-book-backend.h" line="170"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
            <parameter name="view" transfer-ownership="none">
              <type name="DataBookView" c:type="EDataBookView*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="impl_notify_update">
        <callback name="impl_notify_update">
          <source-position filename="e-book-backend.h" line="173"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
            <parameter name="contact" transfer-ownership="none">
              <type name="EBookContacts.Contact" c:type="const EContact*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="impl_get_direct_book" introspectable="0">
        <callback name="impl_get_direct_book" introspectable="0">
          <source-position filename="e-book-backend.h" line="177"/>
          <return-value>
            <type name="DataBookDirect" c:type="EDataBookDirect*"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="impl_configure_direct">
        <callback name="impl_configure_direct">
          <source-position filename="e-book-backend.h" line="178"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
            <parameter name="config" transfer-ownership="none">
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="impl_set_locale">
        <callback name="impl_set_locale" throws="1">
          <source-position filename="e-book-backend.h" line="181"/>
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
            <parameter name="locale" transfer-ownership="none">
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="impl_dup_locale">
        <callback name="impl_dup_locale">
          <source-position filename="e-book-backend.h" line="185"/>
          <return-value transfer-ownership="full">
            <type name="utf8" c:type="gchar*"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="impl_create_cursor" introspectable="0">
        <callback name="impl_create_cursor" introspectable="0" throws="1">
          <source-position filename="e-book-backend.h" line="187"/>
          <return-value>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
            <parameter name="sort_fields" transfer-ownership="none">
              <type name="EBookContacts.ContactField" c:type="EContactField*"/>
            </parameter>
            <parameter name="sort_types" transfer-ownership="none">
              <type name="EBookContacts.BookCursorSortType"
                    c:type="EBookCursorSortType*"/>
            </parameter>
            <parameter name="n_fields" transfer-ownership="none">
              <type name="guint" c:type="guint"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="impl_delete_cursor">
        <callback name="impl_delete_cursor" throws="1">
          <source-position filename="e-book-backend.h" line="192"/>
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
            <parameter name="cursor" transfer-ownership="none">
              <type name="DataBookCursor" c:type="EDataBookCursor*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="closed">
        <callback name="closed">
          <source-position filename="e-book-backend.h" line="197"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
            <parameter name="sender" transfer-ownership="none">
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="shutdown">
        <callback name="shutdown">
          <source-position filename="e-book-backend.h" line="199"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackend" c:type="EBookBackend*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reserved_padding">
        <array zero-terminated="0" fixed-size="20">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <callback name="BookBackendCustomOpFunc"
              c:type="EBookBackendCustomOpFunc"
              version="3.26"
              throws="1">
      <doc xml:space="preserve"
           filename="e-book-backend.h"
           line="410">A callback prototype being called in a dedicated thread, scheduled
by e_book_backend_schedule_custom_operation().</doc>
      <source-position filename="e-book-backend.h" line="422"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="book_backend" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.h"
               line="412">an #EBookBackend</doc>
          <type name="BookBackend" c:type="EBookBackend*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="1">
          <doc xml:space="preserve"
               filename="e-book-backend.h"
               line="413">a function user data, as provided to e_book_backend_schedule_custom_operation()</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
        <parameter name="cancellable"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="e-book-backend.h"
               line="414">an optional #GCancellable, as provided to e_book_backend_schedule_custom_operation()</doc>
          <type name="Gio.Cancellable" c:type="GCancellable*"/>
        </parameter>
      </parameters>
    </callback>
    <class name="BookBackendFactory"
           c:symbol-prefix="book_backend_factory"
           c:type="EBookBackendFactory"
           parent="EBackend.BackendFactory"
           abstract="1"
           glib:type-name="EBookBackendFactory"
           glib:get-type="e_book_backend_factory_get_type"
           glib:type-struct="BookBackendFactoryClass">
      <doc xml:space="preserve"
           filename="e-book-backend-factory.h"
           line="55">Contains only private data that should be read and manipulated using the
functions below.</doc>
      <source-position filename="e-book-backend-factory.h" line="87"/>
      <field name="parent" readable="0" private="1">
        <type name="EBackend.BackendFactory" c:type="EBackendFactory"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="BookBackendFactoryPrivate"
              c:type="EBookBackendFactoryPrivate*"/>
      </field>
    </class>
    <record name="BookBackendFactoryClass"
            c:type="EBookBackendFactoryClass"
            glib:is-gtype-struct-for="BookBackendFactory">
      <doc xml:space="preserve"
           filename="e-book-backend-factory.h"
           line="67">Class structure for the #EBookBackendFactory class.

Subclasses need to set the factory name and backend type
at initialization, the base class will take care of creating
backends of the specified type on demand.</doc>
      <source-position filename="e-book-backend-factory.h" line="87"/>
      <field name="parent_class" readable="0" private="1">
        <type name="EBackend.BackendFactoryClass"
              c:type="EBackendFactoryClass"/>
      </field>
      <field name="factory_name">
        <doc xml:space="preserve"
             filename="e-book-backend-factory.h"
             line="69">The string identifier for this book backend type</doc>
        <type name="utf8" c:type="const gchar*"/>
      </field>
      <field name="backend_type">
        <doc xml:space="preserve"
             filename="e-book-backend-factory.h"
             line="70">The #GType to use to build #EBookBackends for this factory</doc>
        <type name="GType" c:type="GType"/>
      </field>
    </record>
    <record name="BookBackendFactoryPrivate"
            c:type="EBookBackendFactoryPrivate"
            disguised="1">
      <source-position filename="e-book-backend-factory.h" line="53"/>
    </record>
    <callback name="BookBackendForeachViewFunc"
              c:type="EBookBackendForeachViewFunc"
              version="3.34">
      <doc xml:space="preserve"
           filename="e-book-backend.c"
           line="2714">Callback function used by e_book_backend_foreach_view().</doc>
      <source-position filename="e-book-backend.h" line="356"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="e-book-backend.c"
             line="2722">%TRUE, to continue, %FALSE to stop further processing.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="backend" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="2716">an #EBookBackend</doc>
          <type name="BookBackend" c:type="EBookBackend*"/>
        </parameter>
        <parameter name="view" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="2717">an #EDataBookView</doc>
          <type name="DataBookView" c:type="EDataBookView*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <doc xml:space="preserve"
               filename="e-book-backend.c"
               line="2718">user data for the function</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <record name="BookBackendPrivate"
            c:type="EBookBackendPrivate"
            disguised="1">
      <source-position filename="e-book-backend.h" line="61"/>
    </record>
    <class name="BookBackendSExp"
           c:symbol-prefix="book_backend_sexp"
           c:type="EBookBackendSExp"
           parent="GObject.Object"
           glib:type-name="EBookBackendSExp"
           glib:get-type="e_book_backend_sexp_get_type"
           glib:type-struct="BookBackendSExpClass">
      <source-position filename="e-book-backend-sexp.h" line="76"/>
      <constructor name="new" c:identifier="e_book_backend_sexp_new">
        <doc xml:space="preserve"
             filename="e-book-backend-sexp.c"
             line="1131">Creates a new #EBookBackendSExp from @text.</doc>
        <source-position filename="e-book-backend-sexp.h" line="80"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-backend-sexp.c"
               line="1137">a new #EBookBackendSExp</doc>
          <type name="BookBackendSExp" c:type="EBookBackendSExp*"/>
        </return-value>
        <parameters>
          <parameter name="text" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sexp.c"
                 line="1133">an s-expression to parse</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="lock"
              c:identifier="e_book_backend_sexp_lock"
              version="3.34">
        <doc xml:space="preserve"
             filename="e-book-backend-sexp.c"
             line="1262">Locks the @sexp. Other threads cannot use it until
it's unlocked with e_book_backend_sexp_unlock().</doc>
        <source-position filename="e-book-backend-sexp.h" line="87"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="sexp" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sexp.c"
                 line="1264">an #EBookBackendSExp</doc>
            <type name="BookBackendSExp" c:type="EBookBackendSExp*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="match_contact"
              c:identifier="e_book_backend_sexp_match_contact">
        <doc xml:space="preserve"
             filename="e-book-backend-sexp.c"
             line="1198">Checks if @contact matches @sexp.</doc>
        <source-position filename="e-book-backend-sexp.h" line="84"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend-sexp.c"
               line="1205">%TRUE if the contact matches, %FALSE otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="sexp" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sexp.c"
                 line="1200">an #EBookBackendSExp</doc>
            <type name="BookBackendSExp" c:type="EBookBackendSExp*"/>
          </instance-parameter>
          <parameter name="contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sexp.c"
                 line="1201">an #EContact</doc>
            <type name="EBookContacts.Contact" c:type="EContact*"/>
          </parameter>
        </parameters>
      </method>
      <method name="match_vcard"
              c:identifier="e_book_backend_sexp_match_vcard">
        <doc xml:space="preserve"
             filename="e-book-backend-sexp.c"
             line="1234">Checks if @vcard matches @sexp.</doc>
        <source-position filename="e-book-backend-sexp.h" line="82"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend-sexp.c"
               line="1241">%TRUE if the vCard matches, %FALSE otherwise</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="sexp" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sexp.c"
                 line="1236">an #EBookBackendSExp</doc>
            <type name="BookBackendSExp" c:type="EBookBackendSExp*"/>
          </instance-parameter>
          <parameter name="vcard" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sexp.c"
                 line="1237">a vCard string</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="text"
              c:identifier="e_book_backend_sexp_text"
              version="3.8">
        <doc xml:space="preserve"
             filename="e-book-backend-sexp.c"
             line="1180">Retrieve the text expression for the given #EBookBackendSExp object.</doc>
        <source-position filename="e-book-backend-sexp.h" line="81"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend-sexp.c"
               line="1186">the text expression</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="sexp" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sexp.c"
                 line="1182">an #EBookBackendSExp</doc>
            <type name="BookBackendSExp" c:type="EBookBackendSExp*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="unlock"
              c:identifier="e_book_backend_sexp_unlock"
              version="3.34">
        <doc xml:space="preserve"
             filename="e-book-backend-sexp.c"
             line="1279">Unlocks the @sexp, previously locked by e_book_backend_sexp_lock().</doc>
        <source-position filename="e-book-backend-sexp.h" line="88"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="sexp" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sexp.c"
                 line="1281">an #EBookBackendSExp</doc>
            <type name="BookBackendSExp" c:type="EBookBackendSExp*"/>
          </instance-parameter>
        </parameters>
      </method>
      <field name="parent" readable="0" private="1">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="BookBackendSExpPrivate" c:type="EBookBackendSExpPrivate*"/>
      </field>
    </class>
    <record name="BookBackendSExpClass"
            c:type="EBookBackendSExpClass"
            glib:is-gtype-struct-for="BookBackendSExp">
      <source-position filename="e-book-backend-sexp.h" line="76"/>
      <field name="parent_class" readable="0" private="1">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <record name="BookBackendSExpPrivate"
            c:type="EBookBackendSExpPrivate"
            disguised="1">
      <source-position filename="e-book-backend-sexp.h" line="54"/>
    </record>
    <class name="BookBackendSync"
           c:symbol-prefix="book_backend_sync"
           c:type="EBookBackendSync"
           parent="BookBackend"
           glib:type-name="EBookBackendSync"
           glib:get-type="e_book_backend_sync_get_type"
           glib:type-struct="BookBackendSyncClass">
      <doc xml:space="preserve"
           filename="e-book-backend-sync.h"
           line="62">Contains only private data that should be read and manipulated using the
functions below.</doc>
      <source-position filename="e-book-backend-sync.h" line="144"/>
      <virtual-method name="create_contacts_sync"
                      introspectable="0"
                      throws="1">
        <source-position filename="e-book-backend-sync.h" line="102"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackendSync" c:type="EBookBackendSync*"/>
          </instance-parameter>
          <parameter name="vcards" transfer-ownership="none">
            <type name="utf8" c:type="const gchar* const*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="out_contacts" transfer-ownership="none">
            <type name="GLib.SList" c:type="GSList**">
              <type name="gpointer" c:type="gpointer"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_contact_list_sync"
                      introspectable="0"
                      throws="1">
        <source-position filename="e-book-backend-sync.h" line="124"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackendSync" c:type="EBookBackendSync*"/>
          </instance-parameter>
          <parameter name="query" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="out_contacts" transfer-ownership="none">
            <type name="GLib.SList" c:type="GSList**">
              <type name="gpointer" c:type="gpointer"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_contact_list_uids_sync"
                      introspectable="0"
                      throws="1">
        <source-position filename="e-book-backend-sync.h" line="135"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackendSync" c:type="EBookBackendSync*"/>
          </instance-parameter>
          <parameter name="query" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="out_uids" transfer-ownership="none">
            <type name="GLib.SList" c:type="GSList**">
              <type name="gpointer" c:type="gpointer"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_contact_sync" introspectable="0" throws="1">
        <source-position filename="e-book-backend-sync.h" line="120"/>
        <return-value>
          <type name="EBookContacts.Contact" c:type="EContact*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackendSync" c:type="EBookBackendSync*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="modify_contacts_sync"
                      introspectable="0"
                      throws="1">
        <source-position filename="e-book-backend-sync.h" line="108"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackendSync" c:type="EBookBackendSync*"/>
          </instance-parameter>
          <parameter name="vcards" transfer-ownership="none">
            <type name="utf8" c:type="const gchar* const*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="out_contacts" transfer-ownership="none">
            <type name="GLib.SList" c:type="GSList**">
              <type name="gpointer" c:type="gpointer"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="open_sync" throws="1">
        <source-position filename="e-book-backend-sync.h" line="96"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackendSync" c:type="EBookBackendSync*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="refresh_sync" throws="1">
        <source-position filename="e-book-backend-sync.h" line="99"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackendSync" c:type="EBookBackendSync*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="remove_contacts_sync"
                      introspectable="0"
                      throws="1">
        <source-position filename="e-book-backend-sync.h" line="114"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <type name="BookBackendSync" c:type="EBookBackendSync*"/>
          </instance-parameter>
          <parameter name="uids" transfer-ownership="none">
            <type name="utf8" c:type="const gchar* const*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="out_removed_uids" transfer-ownership="none">
            <type name="GLib.SList" c:type="GSList**">
              <type name="gpointer" c:type="gpointer"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="create_contacts"
              c:identifier="e_book_backend_sync_create_contacts"
              version="3.34"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend-sync.c"
             line="336">Creates one or more new contacts from @vcards, and deposits an #EContact
instance for each newly-created contact in @out_contacts.

The returned #EContact instances are referenced for thread-safety and
must be unreferenced with g_object_unref() when finished with them.

If an error occurs, the function will set @error and return %FALSE.</doc>
        <source-position filename="e-book-backend-sync.h" line="154"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend-sync.c"
               line="353">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="338">an #EBookBackendSync</doc>
            <type name="BookBackendSync" c:type="EBookBackendSync*"/>
          </instance-parameter>
          <parameter name="vcards" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="339">a %NULL-terminated array of vCard strings</doc>
            <type name="utf8" c:type="const gchar* const*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="340">bit-or of #EBookOperationFlags</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="out_contacts"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="341">a #GSList in which to deposit results</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="EBookContacts.Contact"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="342">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_contact"
              c:identifier="e_book_backend_sync_get_contact"
              version="3.34"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend-sync.c"
             line="460">Obtains an #EContact for @uid.

The returned #EContact is referenced for thread-safety and must be
unreferenced with g_object_unref() when finished with it.

If an error occurs, the function will set @error and return %NULL.</doc>
        <source-position filename="e-book-backend-sync.h" line="175"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-backend-sync.c"
               line="474">an #EContact, or %NULL</doc>
          <type name="EBookContacts.Contact" c:type="EContact*"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="462">an #EBookBackendSync</doc>
            <type name="BookBackendSync" c:type="EBookBackendSync*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="463">a contact ID</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="464">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_contact_list"
              c:identifier="e_book_backend_sync_get_contact_list"
              version="3.34"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend-sync.c"
             line="499">Obtains a set of #EContact instances which satisfy the criteria specified
in @query, and deposits them in @out_contacts.

The returned #EContact instances are referenced for thread-safety and
must be unreferenced with g_object_unref() when finished with them.

If an error occurs, the function will set @error and return %FALSE.
Note that an empty result set does not necessarily imply an error.</doc>
        <source-position filename="e-book-backend-sync.h" line="179"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend-sync.c"
               line="516">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="501">an #EBookBackendSync</doc>
            <type name="BookBackendSync" c:type="EBookBackendSync*"/>
          </instance-parameter>
          <parameter name="query" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="502">a search query in S-expression format</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="out_contacts"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="503">a #GSList in which to deposit results</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="EBookContacts.Contact"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="504">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_contact_list_uids"
              c:identifier="e_book_backend_sync_get_contact_list_uids"
              version="3.34"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend-sync.c"
             line="542">Obtains a set of ID strings for contacts which satisfy the criteria
specified in @query, and deposits them in @out_uids.

The returned ID strings must be freed with g_free() with finished
with them.

If an error occurs, the function will set @error and return %FALSE.
Note that an empty result set does not necessarily imply an error.</doc>
        <source-position filename="e-book-backend-sync.h" line="185"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend-sync.c"
               line="559">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="544">an #EBookBackendSync</doc>
            <type name="BookBackendSync" c:type="EBookBackendSync*"/>
          </instance-parameter>
          <parameter name="query" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="545">a search query in S-expression format</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="out_uids"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="546">a #GSList in which to deposit results</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="utf8"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="547">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="modify_contacts"
              c:identifier="e_book_backend_sync_modify_contacts"
              version="3.34"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend-sync.c"
             line="380">Modifies one or more contacts according to @vcards.

If an error occurs, the function will set @error and return %FALSE.</doc>
        <source-position filename="e-book-backend-sync.h" line="161"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend-sync.c"
               line="393">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="382">an #EBookBackendSync</doc>
            <type name="BookBackendSync" c:type="EBookBackendSync*"/>
          </instance-parameter>
          <parameter name="vcards" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="383">a %NULL-terminated array of vCard strings</doc>
            <type name="utf8" c:type="const gchar* const*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="384">bit-or of #EBookOperationFlags</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="out_contacts"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="385">a #GSList to deposit the modified contacts to</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="EBookContacts.Contact"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="386">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="open"
              c:identifier="e_book_backend_sync_open"
              version="3.34"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend-sync.c"
             line="260">"Opens" the @backend.  Opening a backend is something of an outdated
concept, but the operation is hanging around for a little while longer.
This usually involves some custom initialization logic, and testing of
remote authentication if applicable.

If an error occurs, the function will set @error and return %FALSE.</doc>
        <source-position filename="e-book-backend-sync.h" line="148"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend-sync.c"
               line="273">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="262">an #EBookBackendSync</doc>
            <type name="BookBackendSync" c:type="EBookBackendSync*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="263">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="refresh"
              c:identifier="e_book_backend_sync_refresh"
              version="3.34"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend-sync.c"
             line="297">Initiates a refresh for @backend, if the @backend supports refreshing.
The actual refresh operation completes on its own time.  This function
merely initiates the operation.

If an error occurs while initiating the refresh, the function will set
@error and return %FALSE.  If the @backend does not support refreshing,
the function will set an %E_CLIENT_ERROR_NOT_SUPPORTED error and return
%FALSE.</doc>
        <source-position filename="e-book-backend-sync.h" line="151"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend-sync.c"
               line="312">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="299">an #EBookBackendSync</doc>
            <type name="BookBackendSync" c:type="EBookBackendSync*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="300">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_contacts"
              c:identifier="e_book_backend_sync_remove_contacts"
              version="3.34"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-backend-sync.c"
             line="420">Removes one or more contacts according to @uids.

If an error occurs, the function will set @error and return %FALSE.</doc>
        <source-position filename="e-book-backend-sync.h" line="168"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-backend-sync.c"
               line="433">%TRUE on success, %FALSE on failure</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="422">an #EBookBackendSync</doc>
            <type name="BookBackendSync" c:type="EBookBackendSync*"/>
          </instance-parameter>
          <parameter name="uids" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="423">a %NULL-terminated array of contact ID strings</doc>
            <type name="utf8" c:type="const gchar* const*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="424">bit-or of #EBookOperationFlags</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="out_removed_uids"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="425">a #GSList of removed UIDs</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="utf8"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-backend-sync.c"
                 line="426">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent" readable="0" private="1">
        <type name="BookBackend" c:type="EBookBackend"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="BookBackendSyncPrivate" c:type="EBookBackendSyncPrivate*"/>
      </field>
    </class>
    <record name="BookBackendSyncClass"
            c:type="EBookBackendSyncClass"
            glib:is-gtype-struct-for="BookBackendSync">
      <doc xml:space="preserve"
           filename="e-book-backend-sync.h"
           line="74">Class structure for the #EBookBackendSync class.

These virtual methods must be implemented when writing
an addressbook backend.</doc>
      <source-position filename="e-book-backend-sync.h" line="144"/>
      <field name="parent_class" readable="0" private="1">
        <type name="BookBackendClass" c:type="EBookBackendClass"/>
      </field>
      <field name="open_sync">
        <callback name="open_sync" throws="1">
          <source-position filename="e-book-backend-sync.h" line="96"/>
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackendSync" c:type="EBookBackendSync*"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="refresh_sync">
        <callback name="refresh_sync" throws="1">
          <source-position filename="e-book-backend-sync.h" line="99"/>
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackendSync" c:type="EBookBackendSync*"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="create_contacts_sync" introspectable="0">
        <callback name="create_contacts_sync" introspectable="0" throws="1">
          <source-position filename="e-book-backend-sync.h" line="102"/>
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackendSync" c:type="EBookBackendSync*"/>
            </parameter>
            <parameter name="vcards" transfer-ownership="none">
              <type name="utf8" c:type="const gchar* const*"/>
            </parameter>
            <parameter name="opflags" transfer-ownership="none">
              <type name="guint32" c:type="guint32"/>
            </parameter>
            <parameter name="out_contacts" transfer-ownership="none">
              <type name="GLib.SList" c:type="GSList**">
                <type name="gpointer" c:type="gpointer"/>
              </type>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="modify_contacts_sync" introspectable="0">
        <callback name="modify_contacts_sync" introspectable="0" throws="1">
          <source-position filename="e-book-backend-sync.h" line="108"/>
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackendSync" c:type="EBookBackendSync*"/>
            </parameter>
            <parameter name="vcards" transfer-ownership="none">
              <type name="utf8" c:type="const gchar* const*"/>
            </parameter>
            <parameter name="opflags" transfer-ownership="none">
              <type name="guint32" c:type="guint32"/>
            </parameter>
            <parameter name="out_contacts" transfer-ownership="none">
              <type name="GLib.SList" c:type="GSList**">
                <type name="gpointer" c:type="gpointer"/>
              </type>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="remove_contacts_sync" introspectable="0">
        <callback name="remove_contacts_sync" introspectable="0" throws="1">
          <source-position filename="e-book-backend-sync.h" line="114"/>
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackendSync" c:type="EBookBackendSync*"/>
            </parameter>
            <parameter name="uids" transfer-ownership="none">
              <type name="utf8" c:type="const gchar* const*"/>
            </parameter>
            <parameter name="opflags" transfer-ownership="none">
              <type name="guint32" c:type="guint32"/>
            </parameter>
            <parameter name="out_removed_uids" transfer-ownership="none">
              <type name="GLib.SList" c:type="GSList**">
                <type name="gpointer" c:type="gpointer"/>
              </type>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_contact_sync" introspectable="0">
        <callback name="get_contact_sync" introspectable="0" throws="1">
          <source-position filename="e-book-backend-sync.h" line="120"/>
          <return-value>
            <type name="EBookContacts.Contact" c:type="EContact*"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackendSync" c:type="EBookBackendSync*"/>
            </parameter>
            <parameter name="uid" transfer-ownership="none">
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_contact_list_sync" introspectable="0">
        <callback name="get_contact_list_sync" introspectable="0" throws="1">
          <source-position filename="e-book-backend-sync.h" line="124"/>
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackendSync" c:type="EBookBackendSync*"/>
            </parameter>
            <parameter name="query" transfer-ownership="none">
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="out_contacts" transfer-ownership="none">
              <type name="GLib.SList" c:type="GSList**">
                <type name="gpointer" c:type="gpointer"/>
              </type>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_contact_list_uids_sync" introspectable="0">
        <callback name="get_contact_list_uids_sync"
                  introspectable="0"
                  throws="1">
          <source-position filename="e-book-backend-sync.h" line="135"/>
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="backend" transfer-ownership="none">
              <type name="BookBackendSync" c:type="EBookBackendSync*"/>
            </parameter>
            <parameter name="query" transfer-ownership="none">
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="out_uids" transfer-ownership="none">
              <type name="GLib.SList" c:type="GSList**">
                <type name="gpointer" c:type="gpointer"/>
              </type>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reserved_padding">
        <array zero-terminated="0" fixed-size="20">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <record name="BookBackendSyncPrivate"
            c:type="EBookBackendSyncPrivate"
            disguised="1">
      <source-position filename="e-book-backend-sync.h" line="60"/>
    </record>
    <class name="BookCache"
           c:symbol-prefix="book_cache"
           c:type="EBookCache"
           version="3.26"
           parent="EBackend.Cache"
           glib:type-name="EBookCache"
           glib:get-type="e_book_cache_get_type"
           glib:type-struct="BookCacheClass">
      <doc xml:space="preserve"
           filename="e-book-cache.h"
           line="118">Contains only private data that should be read and manipulated using
the functions below.</doc>
      <source-position filename="e-book-cache.h" line="154"/>
      <implements name="EDataServer.Extensible"/>
      <constructor name="new"
                   c:identifier="e_book_cache_new"
                   version="3.26"
                   throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="4617">Creates a new #EBookCache with the default summary configuration.

Aside from the mandatory fields %E_CONTACT_UID, %E_CONTACT_REV,
the default configuration stores the following fields for quick
performance of searches: %E_CONTACT_FILE_AS, %E_CONTACT_NICKNAME,
%E_CONTACT_FULL_NAME, %E_CONTACT_GIVEN_NAME, %E_CONTACT_FAMILY_NAME,
%E_CONTACT_EMAIL, %E_CONTACT_TEL, %E_CONTACT_IS_LIST, %E_CONTACT_LIST_SHOW_ADDRESSES,
and %E_CONTACT_WANTS_HTML.

The fields %E_CONTACT_FULL_NAME and %E_CONTACT_EMAIL are configured
to respond extra quickly with the %E_BOOK_INDEX_PREFIX index flag.

The fields %E_CONTACT_FILE_AS, %E_CONTACT_FAMILY_NAME and
%E_CONTACT_GIVEN_NAME are configured to perform well with
the #EBookCacheCursor, using the %E_BOOK_INDEX_SORT_KEY
index flag.</doc>
        <source-position filename="e-book-cache.h" line="201"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="4641">A new #EBookCache or %NULL on error</doc>
          <type name="BookCache" c:type="EBookCache*"/>
        </return-value>
        <parameters>
          <parameter name="filename" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4619">file name to load or create the new cache</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="source"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4620">an optional #ESource, associated with the #EBookCache, or %NULL</doc>
            <type name="EDataServer.Source" c:type="ESource*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4621">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_full"
                   c:identifier="e_book_cache_new_full"
                   version="3.26"
                   throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="4656">Creates a new #EBookCache with the given or the default summary configuration.

Like e_book_sqlite_new(), but allows configuration of which contact fields
will be stored for quick reference in the summary. The configuration indicated by
@setup will only be taken into account when initially creating the underlying table,
further configurations will be ignored.

The fields %E_CONTACT_UID and %E_CONTACT_REV are not optional,
they will be stored in the summary regardless of this function's parameters.
Only #EContactFields with the type %G_TYPE_STRING, %G_TYPE_BOOLEAN or
%E_TYPE_CONTACT_ATTR_LIST are currently supported.</doc>
        <source-position filename="e-book-cache.h" line="205"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="4676">A new #EBookCache or %NULL on error</doc>
          <type name="BookCache" c:type="EBookCache*"/>
        </return-value>
        <parameters>
          <parameter name="filename" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4658">file name to load or create the new cache</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="source"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4659">an optional #ESource, associated with the #EBookCache, or %NULL</doc>
            <type name="EDataServer.Source" c:type="ESource*"/>
          </parameter>
          <parameter name="setup"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4660">an #ESourceBackendSummarySetup describing how the summary should be setup, or %NULL to use the default</doc>
            <type name="EBookContacts.SourceBackendSummarySetup"
                  c:type="ESourceBackendSummarySetup*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4661">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </constructor>
      <virtual-method name="dup_contact_revision"
                      invoker="dup_contact_revision"
                      version="3.26">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="4725">Returns the @contact revision, used to detect changes.
The returned string should be freed with g_free(), when
no longer needed.</doc>
        <source-position filename="e-book-cache.h" line="148"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="4734">A newly allocated string containing
   revision of the @contact.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4727">an #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4728">an #EContact</doc>
            <type name="EBookContacts.Contact" c:type="EContact*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="e164_changed">
        <source-position filename="e-book-cache.h" line="144"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="contact" transfer-ownership="none">
            <type name="EBookContacts.Contact" c:type="EContact*"/>
          </parameter>
          <parameter name="is_replace" transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="cursor_calculate"
              c:identifier="e_book_cache_cursor_calculate"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="6040">Calculates the @out_total amount of results for the @cursor's query expression,
as well as the current @out_position of @cursor in the results. The @out_position is
represented as the amount of results which lead up to the current value
of @cursor, if @cursor currently points to an exact contact, the position
also includes the cursor contact.</doc>
        <source-position filename="e-book-cache.h" line="335"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="6055">Whether @out_total and @out_position were successfully calculated.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="6042">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="6043">The #EBookCacheCursor</doc>
            <type name="BookCacheCursor" c:type="EBookCacheCursor*"/>
          </parameter>
          <parameter name="out_total"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     nullable="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="6044">A return location to store the total result set for this cursor</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
          <parameter name="out_position"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     nullable="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="6045">A return location to store the cursor position</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="6046">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="cursor_compare_contact"
              c:identifier="e_book_cache_cursor_compare_contact"
              version="3.26">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="6117">Compares @contact with @cursor and returns whether @contact is less than, equal to, or greater
than @cursor.</doc>
        <source-position filename="e-book-cache.h" line="341"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="6127">A value that is less than, equal to, or greater than zero if @contact is found,
   respectively, to be less than, to match, or be greater than the current value of @cursor.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="6119">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="6120">The #EBookCacheCursor</doc>
            <type name="BookCacheCursor" c:type="EBookCacheCursor*"/>
          </parameter>
          <parameter name="contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="6121">The #EContact to compare</doc>
            <type name="EBookContacts.Contact" c:type="EContact*"/>
          </parameter>
          <parameter name="out_matches_sexp"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     nullable="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="6122">Whether the contact matches the cursor's search expression</doc>
            <type name="gboolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </method>
      <method name="cursor_free"
              c:identifier="e_book_cache_cursor_free"
              version="3.26">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="5616">Frees the @cursor, previously allocated with e_book_cache_cursor_new().</doc>
        <source-position filename="e-book-cache.h" line="317"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5618">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5619">The #EBookCacheCursor to free</doc>
            <type name="BookCacheCursor" c:type="EBookCacheCursor*"/>
          </parameter>
        </parameters>
      </method>
      <method name="cursor_set_sexp"
              c:identifier="e_book_cache_cursor_set_sexp"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="6001">Modifies the current query expression for @cursor. This will not
modify @cursor's state, but will change the outcome of any further
calls to e_book_cache_cursor_step() or e_book_cache_cursor_calculate().</doc>
        <source-position filename="e-book-cache.h" line="331"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="6012">%TRUE if the expression was valid and accepted by @cursor</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="6003">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="6004">The #EBookCacheCursor to modify</doc>
            <type name="BookCacheCursor" c:type="EBookCacheCursor*"/>
          </parameter>
          <parameter name="sexp" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="6005">The new query expression for @cursor</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="cursor_set_target_alphabetic_index"
              c:identifier="e_book_cache_cursor_set_target_alphabetic_index"
              version="3.26">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="5947">Sets the @cursor position to an
&lt;link linkend="cursor-alphabet"&gt;Alphabetic Index&lt;/link&gt;
into the alphabet active in @book_cache's locale.

After setting the target to an alphabetic index, for example the
index for letter 'E', then further calls to e_book_cache_cursor_step()
will return results starting with the letter 'E' (or results starting
with the last result in 'D', if moving in a negative direction).

The passed index must be a valid index in the active locale, knowledge
on the currently active alphabet index must be obtained using #ECollator
APIs.

Use e_book_cache_ref_collator() to obtain the active collator for @book_cache.</doc>
        <source-position filename="e-book-cache.h" line="327"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5949">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5950">The #EBookCacheCursor to modify</doc>
            <type name="BookCacheCursor" c:type="EBookCacheCursor*"/>
          </parameter>
          <parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5951">The alphabetic index</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="cursor_step"
              c:identifier="e_book_cache_cursor_step"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="5722">Steps @cursor through its sorted query by a maximum of @count contacts
starting from @origin.

If @count is negative, then the cursor will move through the list in reverse.

If @cursor reaches the beginning or end of the query results, then the
returned list might not contain the amount of desired contacts, or might
return no results if the cursor currently points to the last contact.
Reaching the end of the list is not considered an error condition. Attempts
to step beyond the end of the list after having reached the end of the list
will however trigger an %E_CACHE_ERROR_END_OF_LIST error.

If %E_BOOK_CACHE_CURSOR_STEP_FETCH is specified in @flags, a pointer to
a %NULL #GSList pointer should be provided for the @out_results parameter.

The result list will be stored to @out_results and should be freed
with g_slist_free_full (results, e_book_cache_search_data_free);
when no longer needed.</doc>
        <source-position filename="e-book-cache.h" line="319"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="5753">The number of contacts traversed if successful, otherwise -1 is
   returned and the @error is set.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5724">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5725">The #EBookCacheCursor to use</doc>
            <type name="BookCacheCursor" c:type="EBookCacheCursor*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5726">The #EBookCacheCursorStepFlags for this step</doc>
            <type name="BookCacheCursorStepFlags"
                  c:type="EBookCacheCursorStepFlags"/>
          </parameter>
          <parameter name="origin" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5727">The #EBookCacheCursorOrigin from whence to step</doc>
            <type name="BookCacheCursorOrigin"
                  c:type="EBookCacheCursorOrigin"/>
          </parameter>
          <parameter name="count" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5728">A positive or negative amount of contacts to try and fetch</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="out_results"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     nullable="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5729">
  A return location to store the results, or %NULL if %E_BOOK_CACHE_CURSOR_STEP_FETCH is not specified in @flags.</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="BookCacheSearchData"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5731">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="dup_contact_revision"
              c:identifier="e_book_cache_dup_contact_revision"
              version="3.26">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="4725">Returns the @contact revision, used to detect changes.
The returned string should be freed with g_free(), when
no longer needed.</doc>
        <source-position filename="e-book-cache.h" line="211"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="4734">A newly allocated string containing
   revision of the @contact.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4727">an #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4728">an #EContact</doc>
            <type name="EBookContacts.Contact" c:type="EContact*"/>
          </parameter>
        </parameters>
      </method>
      <method name="dup_locale"
              c:identifier="e_book_cache_dup_locale"
              version="3.26">
        <source-position filename="e-book-cache.h" line="218"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="4819">A new string containing the current local
   being used by the @book_cache. Free it with g_free(), when no
   longer needed.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4817">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_contact"
              c:identifier="e_book_cache_get_contact"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="5086">Fetch the #EContact specified by @uid in @book_cache.

If @meta_contact is specified, then a shallow #EContact will be created
holding only the %E_CONTACT_UID and %E_CONTACT_REV fields.</doc>
        <source-position filename="e-book-cache.h" line="249"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="5100">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5088">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5089">The uid of the contact to fetch</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="meta_contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5090">Whether an entire contact is desired, or only the metadata</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="out_contact"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5091">Return location to store the fetched contact</doc>
            <type name="EBookContacts.Contact" c:type="EContact**"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5092">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_contact_custom_flags"
              c:identifier="e_book_cache_get_contact_custom_flags"
              version="3.34"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="5240">Gets the custom flags previously set for the @uid, either with
e_book_cache_set_contact_custom_flags(), when adding contacts or
when removing contacts in offline.</doc>
        <source-position filename="e-book-cache.h" line="267"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="5252">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5242">an #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5243">The uid of the contact to set the extra data for</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="out_custom_flags"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5244">return location to store the custom flags</doc>
            <type name="guint32" c:type="guint32*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5245">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_contact_extra"
              c:identifier="e_book_cache_get_contact_extra"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="5341">Fetches the extra data previously set for @uid, either with
e_book_cache_set_contact_extra() or when adding contacts.</doc>
        <source-position filename="e-book-cache.h" line="278"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="5352">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5343">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5344">The uid of the contact to fetch the extra data for</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="out_extra"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5345">Return location to store the extra data</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5346">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_uids_with_extra"
              c:identifier="e_book_cache_get_uids_with_extra"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="5386">Gets all the UID-s the @extra data is set for.

The @out_uids should be freed with
g_slist_free_full (uids, g_free);
when no longer needed.</doc>
        <source-position filename="e-book-cache.h" line="283"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="5400">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5388">an #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="extra" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5389">an extra column value to search for</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="out_uids"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5390">return location to store the UIDs to</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="utf8"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5391">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_vcard"
              c:identifier="e_book_cache_get_vcard"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="5132">Fetch a vCard string for @uid in @book_cache.

If @meta_contact is specified, then a shallow vCard representation will be
created holding only the %E_CONTACT_UID and %E_CONTACT_REV fields.</doc>
        <source-position filename="e-book-cache.h" line="255"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="5146">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5134">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5135">The uid of the contact to fetch</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="meta_contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5136">Whether an entire contact is desired, or only the metadata</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="out_vcard"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5137">Return location to store the fetched vCard string</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5138">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="put_contact"
              c:identifier="e_book_cache_put_contact"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="4854">This is a convenience wrapper for e_book_cache_put_contacts(),
which is the preferred way to add or modify multiple contacts when possible.</doc>
        <source-position filename="e-book-cache.h" line="223"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="4867">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4856">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4857">an #EContact to be added</doc>
            <type name="EBookContacts.Contact" c:type="EContact*"/>
          </parameter>
          <parameter name="extra"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4858">extra data to store in association with this @contact</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="custom_flags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4859">custom flags for the @contact, not interpreted by the @book_cache</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="offline_flag" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4860">one of #ECacheOfflineFlag, whether putting this contact in offline</doc>
            <type name="EBackend.CacheOfflineFlag" c:type="ECacheOfflineFlag"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4861">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="put_contacts"
              c:identifier="e_book_cache_put_contacts"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="4899">Adds or replaces contacts in @book_cache.

If @extras is specified, it must have an equal length as the @contacts list.
Similarly the non-NULL @custom_flags length should be the same as the length of the @contacts.
Each element from the @extras list and @custom_flags list will be stored in association
with its corresponding contact in the @contacts list.</doc>
        <source-position filename="e-book-cache.h" line="230"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="4916">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4901">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="contacts" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4902">A list of contacts to add to @book_cache</doc>
            <type name="GLib.SList" c:type="const GSList*">
              <type name="EBookContacts.Contact"/>
            </type>
          </parameter>
          <parameter name="extras"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4903">A list of extra data to store in association with the @contacts</doc>
            <type name="GLib.SList" c:type="const GSList*">
              <type name="utf8"/>
            </type>
          </parameter>
          <parameter name="custom_flags"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4904">optional custom flags to use for the @contacts</doc>
            <type name="GLib.SList" c:type="const GSList*">
              <type name="guint32"/>
            </type>
          </parameter>
          <parameter name="offline_flag" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4905">one of #ECacheOfflineFlag, whether putting these contacts in offline</doc>
            <type name="EBackend.CacheOfflineFlag" c:type="ECacheOfflineFlag"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4906">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="ref_collator"
              c:identifier="e_book_cache_ref_collator"
              version="3.26">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="4833">References the currently active #ECollator for @book_cache,
use e_collator_unref() when finished using the returned collator.

Note that the active collator will change with the active locale setting.</doc>
        <source-position filename="e-book-cache.h" line="220"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="4842">A reference to the active collator.</doc>
          <type name="EDataServer.Collator" c:type="ECollator*"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4835">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref_source"
              c:identifier="e_book_cache_ref_source"
              version="3.26">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="4701">References the #ESource to which @book_cache is paired,
use g_object_unref() when no longer needed.
It can be %NULL in some cases, like when running tests.</doc>
        <source-position filename="e-book-cache.h" line="210"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="4709">A reference to the #ESource to which @book_cache
   is paired, or %NULL.</doc>
          <type name="EDataServer.Source" c:type="ESource*"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4703">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="remove_contact"
              c:identifier="e_book_cache_remove_contact"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="4987">Removes the contact identified by @uid from @book_cache.</doc>
        <source-position filename="e-book-cache.h" line="237"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="4998">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4989">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4990">the uid of the contact to remove</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="custom_flags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4991">custom flags for the contact with the given @uid, not interpreted by the @book_cache</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="offline_flag" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4992">one of #ECacheOfflineFlag, whether removing this contact in offline</doc>
            <type name="EBackend.CacheOfflineFlag" c:type="ECacheOfflineFlag"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4993">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_contacts"
              c:identifier="e_book_cache_remove_contacts"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="5027">Removes the contacts indicated by @uids from @book_cache.
The @custom_flags is used, if not %NULL, only if the @offline_flag
is %E_CACHE_IS_OFFLINE. Otherwise it's ignored. The length of
the @custom_flags should match the length of @uids, when not %NULL.</doc>
        <source-position filename="e-book-cache.h" line="243"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="5041">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5029">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="uids" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5030">a #GSList of uids indicating which contacts to remove</doc>
            <type name="GLib.SList" c:type="const GSList*">
              <type name="utf8"/>
            </type>
          </parameter>
          <parameter name="custom_flags"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5031">an optional #GSList of custom flags for the @ids</doc>
            <type name="GLib.SList" c:type="const GSList*">
              <type name="guint32"/>
            </type>
          </parameter>
          <parameter name="offline_flag" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5032">one of #ECacheOfflineFlag, whether removing these contacts in offline</doc>
            <type name="EBackend.CacheOfflineFlag" c:type="ECacheOfflineFlag"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5033">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="search"
              c:identifier="e_book_cache_search"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="5439">Searches @book_cache for contacts matching the search expression @sexp.

When @sexp refers only to #EContactFields configured in the summary of @book_cache,
the search should always be quick, when searching for other #EContactFields
a fallback will be used.

The returned @out_list list should be freed with g_slist_free_full (list, e_book_cache_search_data_free)
when no longer needed.

If @meta_contact is specified, then shallow vCard representations will be
created holding only the %E_CONTACT_UID and %E_CONTACT_REV fields.</doc>
        <source-position filename="e-book-cache.h" line="289"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="5461">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5441">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="sexp"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5442">search expression; use %NULL or an empty string to list all stored contacts</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="meta_contacts" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5443">Whether entire contacts are desired, or only the metadata</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="out_list"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5444">Return location
   to store a #GSList of #EBookCacheSearchData structures</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="BookCacheSearchData"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5446">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="search_uids"
              c:identifier="e_book_cache_search_uids"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="5483">Similar to e_book_cache_search(), but fetches only a list of contact UIDs.

The returned @out_list list should be freed with g_slist_free_full(list, g_free)
when no longer needed.</doc>
        <source-position filename="e-book-cache.h" line="295"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="5496">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5485">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="sexp"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5486">search expression; use %NULL or an empty string to get all stored contacts</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="out_list"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5487">Return location to store a #GSList of contact uids</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="utf8"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5488">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="search_with_callback"
              c:identifier="e_book_cache_search_with_callback"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="5515">Similar to e_book_cache_search(), but calls the @func for each found contact.</doc>
        <source-position filename="e-book-cache.h" line="300"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="5526">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5517">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="sexp"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5518">search expression; use %NULL or an empty string to get all stored contacts</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="func"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="call"
                     closure="2">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5519">an #EBookCacheSearchFunc callback to call for each found row</doc>
            <type name="BookCacheSearchFunc" c:type="EBookCacheSearchFunc"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     closure="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5520">user data for @func</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5521">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_contact_custom_flags"
              c:identifier="e_book_cache_set_contact_custom_flags"
              version="3.34"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="5195">Sets or replaces the custom flags associated with a contact
identified by the @uid.</doc>
        <source-position filename="e-book-cache.h" line="261"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="5206">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5197">an #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5198">The uid of the contact to set the extra data for</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="custom_flags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5199">the custom flags to set for the contact</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5200">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_contact_extra"
              c:identifier="e_book_cache_set_contact_extra"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="5290">Sets or replaces the extra data associated with @uid.</doc>
        <source-position filename="e-book-cache.h" line="273"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="5300">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5292">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5293">The uid of the contact to set the extra data for</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="extra"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5294">The extra data to set</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5295">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_locale"
              c:identifier="e_book_cache_set_locale"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="4753">Relocalizes any locale specific data in the specified
new @lc_collate locale.

The @lc_collate locale setting is stored and remembered on
subsequent accesses of the cache, changing the locale will
store the new locale and will modify sort keys and any
locale specific data in the cache.

As a side effect, it's possible that changing the locale
will cause stored vCard-s to change.</doc>
        <source-position filename="e-book-cache.h" line="214"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="4771">Whether the new locale was successfully set.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4755">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </instance-parameter>
          <parameter name="lc_collate" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4756">The new locale for the cache</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4757">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <property name="locale" transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <field name="parent" readable="0" private="1">
        <type name="EBackend.Cache" c:type="ECache"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="BookCachePrivate" c:type="EBookCachePrivate*"/>
      </field>
      <glib:signal name="dup-contact-revision" when="last" action="1">
        <return-value transfer-ownership="full">
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="EBookContacts.Contact"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="e164-changed" when="last">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="object" transfer-ownership="none">
            <type name="EBookContacts.Contact"/>
          </parameter>
          <parameter name="p0" transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="BookCacheClass"
            c:type="EBookCacheClass"
            glib:is-gtype-struct-for="BookCache"
            version="3.26">
      <doc xml:space="preserve"
           filename="e-book-cache.h"
           line="132">Class structure for the #EBookCache class.</doc>
      <source-position filename="e-book-cache.h" line="154"/>
      <field name="parent_class" readable="0" private="1">
        <type name="EBackend.CacheClass" c:type="ECacheClass"/>
      </field>
      <field name="e164_changed">
        <callback name="e164_changed">
          <source-position filename="e-book-cache.h" line="144"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="book_cache" transfer-ownership="none">
              <type name="BookCache" c:type="EBookCache*"/>
            </parameter>
            <parameter name="contact" transfer-ownership="none">
              <type name="EBookContacts.Contact" c:type="EContact*"/>
            </parameter>
            <parameter name="is_replace" transfer-ownership="none">
              <type name="gboolean" c:type="gboolean"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="dup_contact_revision">
        <callback name="dup_contact_revision">
          <source-position filename="e-book-cache.h" line="148"/>
          <return-value transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="4734">A newly allocated string containing
   revision of the @contact.</doc>
            <type name="utf8" c:type="gchar*"/>
          </return-value>
          <parameters>
            <parameter name="book_cache" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-cache.c"
                   line="4727">an #EBookCache</doc>
              <type name="BookCache" c:type="EBookCache*"/>
            </parameter>
            <parameter name="contact" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-cache.c"
                   line="4728">an #EContact</doc>
              <type name="EBookContacts.Contact" c:type="EContact*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reserved" readable="0" private="1">
        <array zero-terminated="0" fixed-size="10">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <record name="BookCacheCursor"
            c:type="EBookCacheCursor"
            version="3.26"
            glib:type-name="EBookCacheCursor"
            glib:get-type="e_book_cache_cursor_get_type"
            c:symbol-prefix="book_cache_cursor">
      <doc xml:space="preserve"
           filename="e-book-cache.h"
           line="156">An opaque cursor pointer</doc>
      <source-position filename="e-book-cache.h" line="163"/>
      <constructor name="new"
                   c:identifier="e_book_cache_cursor_new"
                   version="3.26"
                   throws="1">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="5544">Creates a new #EBookCacheCursor.

The cursor should be freed with e_book_cache_cursor_free() when
no longer needed.</doc>
        <source-position filename="e-book-cache.h" line="311"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="5558">A newly created #EBookCacheCursor</doc>
          <type name="BookCacheCursor" c:type="EBookCacheCursor*"/>
        </return-value>
        <parameters>
          <parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5546">An #EBookCache</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </parameter>
          <parameter name="sexp" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5547">search expression; use %NULL or an empty string to get all stored contacts</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="sort_fields" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5548">An array of #EContactField(s) as sort keys in order of priority</doc>
            <array length="4"
                   zero-terminated="0"
                   c:type="const EContactField*">
              <type name="EBookContacts.ContactField" c:type="EContactField"/>
            </array>
          </parameter>
          <parameter name="sort_types" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5549">An array of #EBookCursorSortTypes, one for each field in @sort_fields</doc>
            <array length="4"
                   zero-terminated="0"
                   c:type="const EBookCursorSortType*">
              <type name="EBookContacts.BookCursorSortType"
                    c:type="EBookCursorSortType"/>
            </array>
          </parameter>
          <parameter name="n_sort_fields" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="5550">The number of fields to sort results by</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </constructor>
    </record>
    <enumeration name="BookCacheCursorOrigin"
                 version="3.26"
                 c:type="EBookCacheCursorOrigin">
      <doc xml:space="preserve"
           filename="e-book-cache.h"
           line="165">Specifies the start position to in the list of traversed contacts
in calls to e_book_cache_cursor_step().

When an #EBookCacheCursor is created, the current position implied by %E_BOOK_CACHE_CURSOR_ORIGIN_CURRENT
is the same as %E_BOOK_CACHE_CURSOR_ORIGIN_BEGIN.</doc>
      <source-position filename="e-book-cache.h" line="183"/>
      <member name="current"
              value="0"
              c:identifier="E_BOOK_CACHE_CURSOR_ORIGIN_CURRENT">
        <doc xml:space="preserve"
             filename="e-book-cache.h"
             line="167">The current cursor position.</doc>
      </member>
      <member name="begin"
              value="1"
              c:identifier="E_BOOK_CACHE_CURSOR_ORIGIN_BEGIN">
        <doc xml:space="preserve"
             filename="e-book-cache.h"
             line="168">The beginning of the cursor results.</doc>
      </member>
      <member name="end"
              value="2"
              c:identifier="E_BOOK_CACHE_CURSOR_ORIGIN_END">
        <doc xml:space="preserve"
             filename="e-book-cache.h"
             line="169">The end of the cursor results.</doc>
      </member>
    </enumeration>
    <bitfield name="BookCacheCursorStepFlags"
              version="3.26"
              c:type="EBookCacheCursorStepFlags">
      <doc xml:space="preserve"
           filename="e-book-cache.h"
           line="185">Defines the behaviour of e_book_cache_cursor_step().</doc>
      <source-position filename="e-book-cache.h" line="197"/>
      <member name="move"
              value="1"
              c:identifier="E_BOOK_CACHE_CURSOR_STEP_MOVE">
        <doc xml:space="preserve"
             filename="e-book-cache.h"
             line="187">The cursor position should be modified while stepping.</doc>
      </member>
      <member name="fetch"
              value="2"
              c:identifier="E_BOOK_CACHE_CURSOR_STEP_FETCH">
        <doc xml:space="preserve"
             filename="e-book-cache.h"
             line="188">Traversed contacts should be listed and returned while stepping.</doc>
      </member>
    </bitfield>
    <record name="BookCachePrivate" c:type="EBookCachePrivate" disguised="1">
      <source-position filename="e-book-cache.h" line="53"/>
    </record>
    <record name="BookCacheSearchData"
            c:type="EBookCacheSearchData"
            version="3.26"
            glib:type-name="EBookCacheSearchData"
            glib:get-type="e_book_cache_search_data_get_type"
            c:symbol-prefix="book_cache_search_data">
      <doc xml:space="preserve"
           filename="e-book-cache.h"
           line="55">This structure is used to represent contacts returned
by the #EBookCache from various functions
such as e_book_cache_search().

The @extra parameter will contain any data which was
previously passed for this contact in e_book_cache_put_contact()
or set with e_book_cache_set_contact_extra().

These should be freed with e_book_cache_search_data_free().</doc>
      <source-position filename="e-book-cache.h" line="77"/>
      <field name="uid" writable="1">
        <doc xml:space="preserve"
             filename="e-book-cache.h"
             line="57">The %E_CONTACT_UID field of this contact</doc>
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="vcard" writable="1">
        <doc xml:space="preserve"
             filename="e-book-cache.h"
             line="58">The vcard string</doc>
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="extra" writable="1">
        <doc xml:space="preserve"
             filename="e-book-cache.h"
             line="59">Any extra data associated with the vcard</doc>
        <type name="utf8" c:type="gchar*"/>
      </field>
      <constructor name="new"
                   c:identifier="e_book_cache_search_data_new"
                   version="3.26">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="151">Creates a new EBookCacheSearchData prefilled with the given values.</doc>
        <source-position filename="e-book-cache.h" line="84"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="159">A new #EBookCacheSearchData. Free it with
   e_book_cache_search_data_free() when no longer needed.</doc>
          <type name="BookCacheSearchData" c:type="EBookCacheSearchData*"/>
        </return-value>
        <parameters>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="153">a contact UID; cannot be %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="vcard" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="154">the contact as a vCard string; cannot be %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="extra"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="155">any extra data stored with the contact, or %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="copy"
              c:identifier="e_book_cache_search_data_copy"
              version="3.26">
        <source-position filename="e-book-cache.h" line="88"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="186">Copy of the given @data. Free it with
   e_book_cache_search_data_free() when no longer needed.
   If the @data is %NULL, then returns %NULL as well.</doc>
          <type name="BookCacheSearchData" c:type="EBookCacheSearchData*"/>
        </return-value>
        <parameters>
          <instance-parameter name="data"
                              transfer-ownership="none"
                              nullable="1"
                              allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="184">a source #EBookCacheSearchData to copy, or %NULL</doc>
            <type name="BookCacheSearchData"
                  c:type="const EBookCacheSearchData*"/>
          </instance-parameter>
        </parameters>
      </method>
      <function name="free"
                c:identifier="e_book_cache_search_data_free"
                version="3.26">
        <doc xml:space="preserve"
             filename="e-book-cache.c"
             line="201">Frees the @data structure, previously allocated with e_book_cache_search_data_new()
or e_book_cache_search_data_copy().</doc>
        <source-position filename="e-book-cache.h" line="89"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-cache.c"
                 line="203">an #EBookCacheSearchData</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </function>
    </record>
    <callback name="BookCacheSearchFunc"
              c:type="EBookCacheSearchFunc"
              version="3.26">
      <doc xml:space="preserve"
           filename="e-book-cache.h"
           line="91">A callback called for each object row when using
e_book_cache_search_with_callback() function.</doc>
      <source-position filename="e-book-cache.h" line="109"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="e-book-cache.h"
             line="105">%TRUE to continue, %FALSE to stop walk through.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="book_cache" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.h"
               line="93">an #EBookCache</doc>
          <type name="BookCache" c:type="EBookCache*"/>
        </parameter>
        <parameter name="uid" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.h"
               line="94">a unique object identifier</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="revision" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.h"
               line="95">the object revision</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="object" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.h"
               line="96">the object itself</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="extra" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.h"
               line="97">extra data stored with the object</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="custom_flags" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.h"
               line="98">object's custom flags</doc>
          <type name="guint32" c:type="guint32"/>
        </parameter>
        <parameter name="offline_state" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-cache.h"
               line="99">object's offline state, one of #EOfflineState</doc>
          <type name="EBackend.OfflineState" c:type="EOfflineState"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="7">
          <doc xml:space="preserve"
               filename="e-book-cache.h"
               line="100">user data, as used in e_book_cache_search_with_callback()</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <class name="BookMetaBackend"
           c:symbol-prefix="book_meta_backend"
           c:type="EBookMetaBackend"
           version="3.26"
           parent="BookBackendSync"
           abstract="1"
           glib:type-name="EBookMetaBackend"
           glib:get-type="e_book_meta_backend_get_type"
           glib:type-struct="BookMetaBackendClass">
      <doc xml:space="preserve"
           filename="e-book-meta-backend.h"
           line="75">Contains only private data that should be read and manipulated using
the functions below.</doc>
      <source-position filename="e-book-meta-backend.h" line="179"/>
      <virtual-method name="connect_sync"
                      invoker="connect_sync"
                      version="3.26"
                      throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3630">This is called always before any operation which requires a connection
to the remote side. It can fail with an #E_CLIENT_ERROR_REPOSITORY_OFFLINE
error to indicate that the remote side cannot be currently reached. Other
errors are propagated to the caller/client side. This method is not called
when the backend is offline.

The descendant should also call e_book_backend_set_writable() after successful
connect to the remote side. This value is stored for later use, when being
opened offline.

The @credentials parameter consists of the previously used credentials.
It's always %NULL with the first connection attempt. To get the credentials,
just set the @out_auth_result to %E_SOURCE_AUTHENTICATION_REQUIRED for
the first time and the function will be called again once the credentials
are available. See the documentation of #ESourceAuthenticationResult for
other available results.

The out parameters are passed to e_backend_schedule_credentials_required()
and are ignored when the descendant returns %TRUE, aka they are used
only if the connection fails. The @out_certificate_pem and @out_certificate_errors
should be used together and they can be left untouched if the failure reason was
not related to certificate. Use @out_auth_result %E_SOURCE_AUTHENTICATION_UNKNOWN
to indicate other error than @credentials error, otherwise the @error is used
according to @out_auth_result value.

It is mandatory to implement this virtual method by the descendant.</doc>
        <source-position filename="e-book-meta-backend.h" line="105"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="3667">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3632">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="credentials"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3633">an #ENamedParameters with previously used credentials, or %NULL</doc>
            <type name="EDataServer.NamedParameters"
                  c:type="const ENamedParameters*"/>
          </parameter>
          <parameter name="out_auth_result"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3634">an #ESourceAuthenticationResult with an authentication result</doc>
            <type name="EDataServer.SourceAuthenticationResult"
                  c:type="ESourceAuthenticationResult*"/>
          </parameter>
          <parameter name="out_certificate_pem"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3635">a PEM encoded certificate on failure, or %NULL</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="out_certificate_errors"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3636">a #GTlsCertificateFlags on failure, or 0</doc>
            <type name="Gio.TlsCertificateFlags"
                  c:type="GTlsCertificateFlags*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3637">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="disconnect_sync"
                      invoker="disconnect_sync"
                      version="3.26"
                      throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3691">This is called when the backend goes into offline mode or
when the disconnect is required. The implementation should
not report any error when it is called and the @meta_backend
is not connected.

It is mandatory to implement this virtual method by the descendant.</doc>
        <source-position filename="e-book-meta-backend.h" line="112"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="3704">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3693">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3694">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_changes_sync"
                      invoker="get_changes_sync"
                      version="3.26"
                      throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3724">Gathers the changes since the last check which had been done
on the remote side.

The @last_sync_tag can be used as a tag of the last check. This can be %NULL,
when there was no previous call or when the descendant doesn't store any
such tags. The @out_new_sync_tag can be populated with a value to be stored
and used the next time.

The @out_repeat can be set to %TRUE when the descendant didn't finish
read of all the changes. In that case the @meta_backend calls this
function again with the @out_new_sync_tag as the @last_sync_tag, but also
notifies about the found changes immediately. The @is_repeat is set
to %TRUE as well in this case, otherwise it's %FALSE.

The descendant can populate also EBookMetaBackendInfo::object of
the @out_created_objects and @out_modified_objects, if known, in which
case this will be used instead of loading it with e_book_meta_backend_load_contact_sync().

It is optional to implement this virtual method by the descendant.
The default implementation calls e_book_meta_backend_list_existing_sync()
and then compares the list with the current content of the local cache
and populates the respective lists appropriately.

Each output #GSList should be freed with
g_slist_free_full (objects, e_book_meta_backend_info_free);
when no longer needed.</doc>
        <source-position filename="e-book-meta-backend.h" line="116"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="3770">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3726">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="last_sync_tag"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3727">optional sync tag from the last check</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="is_repeat" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3728">set to %TRUE when this is the repeated call</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="out_new_sync_tag"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3729">new sync tag to store on success</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="out_repeat"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3730">whether to repeat this call again; default is %FALSE</doc>
            <type name="gboolean" c:type="gboolean*"/>
          </parameter>
          <parameter name="out_created_objects"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3731">
   a #GSList of #EBookMetaBackendInfo object infos which had been created since
   the last check</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="BookMetaBackendInfo"/>
            </type>
          </parameter>
          <parameter name="out_modified_objects"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3734">
   a #GSList of #EBookMetaBackendInfo object infos which had been modified since
   the last check</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="BookMetaBackendInfo"/>
            </type>
          </parameter>
          <parameter name="out_removed_objects"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3737">
   a #GSList of #EBookMetaBackendInfo object infos which had been removed since
   the last check</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="BookMetaBackendInfo"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3740">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_ssl_error_details"
                      invoker="get_ssl_error_details"
                      version="3.28">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="4264">It is optional to implement this virtual method by the descendants.
It is used to receive SSL error details when any online operation
returns E_CLIENT_ERROR, E_CLIENT_ERROR_TLS_NOT_AVAILABLE error.</doc>
        <source-position filename="e-book-meta-backend.h" line="172"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="4274">%TRUE, when the SSL error details had been available and
   the out parameters populated, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4266">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="out_certificate_pem"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4267">SSL certificate encoded in PEM format</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="out_certificate_errors"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4268">bit-or of #GTlsCertificateFlags claiming the certificate errors</doc>
            <type name="Gio.TlsCertificateFlags"
                  c:type="GTlsCertificateFlags*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="list_existing_sync"
                      invoker="list_existing_sync"
                      version="3.26"
                      throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3834">Used to get list of all existing objects on the remote side. The descendant
can optionally provide @out_new_sync_tag, which will be stored on success, if
not %NULL. The descendant can populate also EBookMetaBackendInfo::object of
the @out_existing_objects, if known, in which case this will be used instead
of loading it with e_book_meta_backend_load_contact_sync().

It is mandatory to implement this virtual method by the descendant, unless
it implements its own #EBookMetaBackendClass.get_changes_sync().

The @out_existing_objects #GSList should be freed with
g_slist_free_full (objects, e_book_meta_backend_info_free);
when no longer needed.</doc>
        <source-position filename="e-book-meta-backend.h" line="126"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="3856">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3836">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="out_new_sync_tag"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3837">optional return location for a new sync tag</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="out_existing_objects"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3838">
   a #GSList of #EBookMetaBackendInfo object infos which are stored on the remote side</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="BookMetaBackendInfo"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3840">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="load_contact_sync"
                      invoker="load_contact_sync"
                      version="3.26"
                      throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3902">Loads a contact from the remote side.

It is mandatory to implement this virtual method by the descendant.

The returned @out_contact should be freed with g_object_unref(),
when no longer needed.

The returned @out_extra should be freed with g_free(), when no longer
needed.</doc>
        <source-position filename="e-book-meta-backend.h" line="131"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="3922">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3904">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3905">a contact UID</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="extra"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3906">optional extra data stored with the contact, or %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="out_contact"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3907">a loaded contact, as an #EContact</doc>
            <type name="EBookContacts.Contact" c:type="EContact**"/>
          </parameter>
          <parameter name="out_extra"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3908">an extra data to store to #EBookCache with this contact</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3909">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="remove_contact_sync"
                      invoker="remove_contact_sync"
                      version="3.26"
                      throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="4075">Removes a contact from the remote side. The @object is not %NULL when
it's removing locally deleted object in offline mode. Being it %NULL,
the descendant can obtain the object from the #EBookCache.

It is mandatory to implement this virtual method by the writable descendant.</doc>
        <source-position filename="e-book-meta-backend.h" line="148"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="4092">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4077">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="conflict_resolution" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4078">an #EConflictResolution to use</doc>
            <type name="EDataServer.ConflictResolution"
                  c:type="EConflictResolution"/>
          </parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4079">a contact UID</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="extra"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4080">extra data being saved with the contact in the local cache, or %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="object"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4081">corresponding vCard object, as stored in the local cache, or %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4082">bit-or of #EBookOperationFlags</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4083">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="requires_reconnect"
                      invoker="requires_reconnect"
                      version="3.26">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="4233">Determines, whether current source content requires reconnect of the backend.

It is optional to implement this virtual method by the descendant. The default
implementation compares %E_SOURCE_EXTENSION_AUTHENTICATION and
%E_SOURCE_EXTENSION_WEBDAV_BACKEND, if existing in the source,
with the values after the last successful connect and returns
%TRUE when they changed. It always return %TRUE when there was
no successful connect done yet.</doc>
        <source-position filename="e-book-meta-backend.h" line="167"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="4246">%TRUE, when reconnect is required, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4235">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="save_contact_sync"
                      invoker="save_contact_sync"
                      version="3.26"
                      throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3972">Saves one contact into the remote side.  When the @overwrite_existing is %TRUE, then
the descendant can overwrite an object with the same UID on the remote side
(usually used for modify). The @conflict_resolution defines what to do when
the remote side had made any changes to the object since the last update.

The @contact has already converted locally stored photos and logos
into inline variants, thus it's not needed to call
e_book_meta_backend_inline_local_photos_sync() by the descendant.

The @out_new_uid can be populated with a UID of the saved contact as the server
assigned it to it. This UID, if set, is loaded from the remote side afterwards,
also to see whether any changes had been made to the contact by the remote side.

The @out_new_extra can be populated with a new extra data to save with the contact.
Left it %NULL, to keep the same value as the @extra.

The descendant can use an #E_CLIENT_ERROR_OUT_OF_SYNC error to indicate that
the save failed due to made changes on the remote side, and let the @meta_backend
resolve this conflict based on the @conflict_resolution on its own.
The #E_CLIENT_ERROR_OUT_OF_SYNC error should not be used when the descendant
is able to resolve the conflicts itself.

It is mandatory to implement this virtual method by the writable descendant.</doc>
        <source-position filename="e-book-meta-backend.h" line="138"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="4009">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3974">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="overwrite_existing" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3975">%TRUE when can overwrite existing contacts, %FALSE otherwise</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="conflict_resolution" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3976">one of #EConflictResolution, what to do on conflicts</doc>
            <type name="EDataServer.ConflictResolution"
                  c:type="EConflictResolution"/>
          </parameter>
          <parameter name="contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3977">an #EContact to save</doc>
            <type name="EBookContacts.Contact" c:type="EContact*"/>
          </parameter>
          <parameter name="extra"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3978">extra data saved with the contacts in an #EBookCache</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3979">bit-or of EBookOperationFlags</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="out_new_uid"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3980">return location for the UID of the saved contact</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="out_new_extra"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3981">return location for the extra data to store with the contact</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3982">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="search_sync"
                      invoker="search_sync"
                      version="3.26"
                      throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="4145">Searches @meta_backend with given expression @expr and returns
found contacts as a #GSList of #EContact @out_contacts.
Free the returned @out_contacts with g_slist_free_full (contacts, g_object_unref);
when no longer needed.
When the @expr is %NULL, all objects are returned. To get
UID-s instead, call e_book_meta_backend_search_uids_sync().

It is optional to implement this virtual method by the descendant.
The default implementation searches @meta_backend's cache. It's also
not required to be online for searching, thus @meta_backend doesn't
ensure it.</doc>
        <source-position filename="e-book-meta-backend.h" line="156"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="4166">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4147">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="expr"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4148">a search expression, or %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="meta_contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4149">%TRUE, when return #EContact filled with UID and REV only, %FALSE to return full contacts</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="out_contacts"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4150">return location for the found contacts as #EContact</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="EBookContacts.Contact"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4151">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="search_uids_sync"
                      invoker="search_uids_sync"
                      version="3.26"
                      throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="4190">Searches @meta_backend with given expression @expr and returns
found contact UID-s as a #GSList @out_contacts.
Free the returned @out_uids with g_slist_free_full (uids, g_free);
when no longer needed.
When the @expr is %NULL, all UID-s are returned. To get #EContact(s)
instead, call e_book_meta_backend_search_sync().

It is optional to implement this virtual method by the descendant.
The default implementation searches @meta_backend's cache. It's also
not required to be online for searching, thus @meta_backend doesn't
ensure it.</doc>
        <source-position filename="e-book-meta-backend.h" line="162"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="4210">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4192">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="expr"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4193">a search expression, or %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="out_uids"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4194">return location for the found contact UID-s</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="utf8"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4195">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="source_changed">
        <source-position filename="e-book-meta-backend.h" line="170"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
        </parameters>
      </virtual-method>
      <method name="connect_sync"
              c:identifier="e_book_meta_backend_connect_sync"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3630">This is called always before any operation which requires a connection
to the remote side. It can fail with an #E_CLIENT_ERROR_REPOSITORY_OFFLINE
error to indicate that the remote side cannot be currently reached. Other
errors are propagated to the caller/client side. This method is not called
when the backend is offline.

The descendant should also call e_book_backend_set_writable() after successful
connect to the remote side. This value is stored for later use, when being
opened offline.

The @credentials parameter consists of the previously used credentials.
It's always %NULL with the first connection attempt. To get the credentials,
just set the @out_auth_result to %E_SOURCE_AUTHENTICATION_REQUIRED for
the first time and the function will be called again once the credentials
are available. See the documentation of #ESourceAuthenticationResult for
other available results.

The out parameters are passed to e_backend_schedule_credentials_required()
and are ignored when the descendant returns %TRUE, aka they are used
only if the connection fails. The @out_certificate_pem and @out_certificate_errors
should be used together and they can be left untouched if the failure reason was
not related to certificate. Use @out_auth_result %E_SOURCE_AUTHENTICATION_UNKNOWN
to indicate other error than @credentials error, otherwise the @error is used
according to @out_auth_result value.

It is mandatory to implement this virtual method by the descendant.</doc>
        <source-position filename="e-book-meta-backend.h" line="238"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="3667">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3632">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="credentials"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3633">an #ENamedParameters with previously used credentials, or %NULL</doc>
            <type name="EDataServer.NamedParameters"
                  c:type="const ENamedParameters*"/>
          </parameter>
          <parameter name="out_auth_result"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3634">an #ESourceAuthenticationResult with an authentication result</doc>
            <type name="EDataServer.SourceAuthenticationResult"
                  c:type="ESourceAuthenticationResult*"/>
          </parameter>
          <parameter name="out_certificate_pem"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3635">a PEM encoded certificate on failure, or %NULL</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="out_certificate_errors"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3636">a #GTlsCertificateFlags on failure, or 0</doc>
            <type name="Gio.TlsCertificateFlags"
                  c:type="GTlsCertificateFlags*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3637">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="disconnect_sync"
              c:identifier="e_book_meta_backend_disconnect_sync"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3691">This is called when the backend goes into offline mode or
when the disconnect is required. The implementation should
not report any error when it is called and the @meta_backend
is not connected.

It is mandatory to implement this virtual method by the descendant.</doc>
        <source-position filename="e-book-meta-backend.h" line="245"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="3704">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3693">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3694">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="dup_sync_tag"
              c:identifier="e_book_meta_backend_dup_sync_tag"
              version="3.28">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="2726">Returns the last known synchronization tag, the same as used to
call e_book_meta_backend_get_changes_sync().

Free the returned string with g_free(), when no longer needed.</doc>
        <source-position filename="e-book-meta-backend.h" line="195"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="2735">The last known synchronization tag,
   or %NULL, when none is stored.</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="2728">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="empty_cache_sync"
              c:identifier="e_book_meta_backend_empty_cache_sync"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3128">Empties the local cache by removing all known contacts from it
and notifies about such removal any opened views.</doc>
        <source-position filename="e-book-meta-backend.h" line="209"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="3137">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3130">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3131">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="ensure_connected_sync"
              c:identifier="e_book_meta_backend_ensure_connected_sync"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3281">Ensures that the @meta_backend is connected to its destination.</doc>
        <source-position filename="e-book-meta-backend.h" line="219"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="3289">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3283">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3284">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_capabilities"
              c:identifier="e_book_meta_backend_get_capabilities"
              version="3.26">
        <source-position filename="e-book-meta-backend.h" line="183"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="2582">an #EBookBackend::capabilities property to be used by
   the descendant in conjunction to the descendant's capabilities
   in the result of e_book_backend_get_backend_property() with
   #CLIENT_BACKEND_PROPERTY_CAPABILITIES.</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="2580">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_changes_sync"
              c:identifier="e_book_meta_backend_get_changes_sync"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3724">Gathers the changes since the last check which had been done
on the remote side.

The @last_sync_tag can be used as a tag of the last check. This can be %NULL,
when there was no previous call or when the descendant doesn't store any
such tags. The @out_new_sync_tag can be populated with a value to be stored
and used the next time.

The @out_repeat can be set to %TRUE when the descendant didn't finish
read of all the changes. In that case the @meta_backend calls this
function again with the @out_new_sync_tag as the @last_sync_tag, but also
notifies about the found changes immediately. The @is_repeat is set
to %TRUE as well in this case, otherwise it's %FALSE.

The descendant can populate also EBookMetaBackendInfo::object of
the @out_created_objects and @out_modified_objects, if known, in which
case this will be used instead of loading it with e_book_meta_backend_load_contact_sync().

It is optional to implement this virtual method by the descendant.
The default implementation calls e_book_meta_backend_list_existing_sync()
and then compares the list with the current content of the local cache
and populates the respective lists appropriately.

Each output #GSList should be freed with
g_slist_free_full (objects, e_book_meta_backend_info_free);
when no longer needed.</doc>
        <source-position filename="e-book-meta-backend.h" line="249"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="3770">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3726">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="last_sync_tag"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3727">optional sync tag from the last check</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="is_repeat" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3728">set to %TRUE when this is the repeated call</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="out_new_sync_tag"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3729">new sync tag to store on success</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="out_repeat"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3730">whether to repeat this call again; default is %FALSE</doc>
            <type name="gboolean" c:type="gboolean*"/>
          </parameter>
          <parameter name="out_created_objects"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3731">
   a #GSList of #EBookMetaBackendInfo object infos which had been created since
   the last check</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="BookMetaBackendInfo"/>
            </type>
          </parameter>
          <parameter name="out_modified_objects"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3734">
   a #GSList of #EBookMetaBackendInfo object infos which had been modified since
   the last check</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="BookMetaBackendInfo"/>
            </type>
          </parameter>
          <parameter name="out_removed_objects"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3737">
   a #GSList of #EBookMetaBackendInfo object infos which had been removed since
   the last check</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="BookMetaBackendInfo"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3740">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_connected_writable"
              c:identifier="e_book_meta_backend_get_connected_writable"
              version="3.26">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="2693">This value has meaning only if e_book_meta_backend_get_ever_connected()
is %TRUE.</doc>
        <source-position filename="e-book-meta-backend.h" line="193"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="2700">Whether the @meta_backend connected to a writable destination.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="2695">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_ever_connected"
              c:identifier="e_book_meta_backend_get_ever_connected"
              version="3.26">
        <source-position filename="e-book-meta-backend.h" line="188"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="2635">Whether the @meta_backend ever made a successful connection
   to its destination.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="2633">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_ssl_error_details"
              c:identifier="e_book_meta_backend_get_ssl_error_details"
              version="3.28">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="4264">It is optional to implement this virtual method by the descendants.
It is used to receive SSL error details when any online operation
returns E_CLIENT_ERROR, E_CLIENT_ERROR_TLS_NOT_AVAILABLE error.</doc>
        <source-position filename="e-book-meta-backend.h" line="308"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="4274">%TRUE, when the SSL error details had been available and
   the out parameters populated, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4266">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="out_certificate_pem"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4267">SSL certificate encoded in PEM format</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="out_certificate_errors"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4268">bit-or of #GTlsCertificateFlags claiming the certificate errors</doc>
            <type name="Gio.TlsCertificateFlags"
                  c:type="GTlsCertificateFlags*"/>
          </parameter>
        </parameters>
      </method>
      <method name="inline_local_photos_sync"
              c:identifier="e_book_meta_backend_inline_local_photos_sync"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="2910">Changes all URL photos and logos which point to a local file in @contact
to inline type, aka adds the file content into the @contact.
This is called automatically before e_book_meta_backend_save_contact_sync().

The reverse operation is e_book_meta_backend_store_inline_photos_sync().</doc>
        <source-position filename="e-book-meta-backend.h" line="199"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="2923">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="2912">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="2913">an #EContact to work with</doc>
            <type name="EBookContacts.Contact" c:type="EContact*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="2914">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="list_existing_sync"
              c:identifier="e_book_meta_backend_list_existing_sync"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3834">Used to get list of all existing objects on the remote side. The descendant
can optionally provide @out_new_sync_tag, which will be stored on success, if
not %NULL. The descendant can populate also EBookMetaBackendInfo::object of
the @out_existing_objects, if known, in which case this will be used instead
of loading it with e_book_meta_backend_load_contact_sync().

It is mandatory to implement this virtual method by the descendant, unless
it implements its own #EBookMetaBackendClass.get_changes_sync().

The @out_existing_objects #GSList should be freed with
g_slist_free_full (objects, e_book_meta_backend_info_free);
when no longer needed.</doc>
        <source-position filename="e-book-meta-backend.h" line="260"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="3856">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3836">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="out_new_sync_tag"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3837">optional return location for a new sync tag</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="out_existing_objects"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3838">
   a #GSList of #EBookMetaBackendInfo object infos which are stored on the remote side</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="BookMetaBackendInfo"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3840">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="load_contact_sync"
              c:identifier="e_book_meta_backend_load_contact_sync"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3902">Loads a contact from the remote side.

It is mandatory to implement this virtual method by the descendant.

The returned @out_contact should be freed with g_object_unref(),
when no longer needed.

The returned @out_extra should be freed with g_free(), when no longer
needed.</doc>
        <source-position filename="e-book-meta-backend.h" line="266"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="3922">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3904">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3905">a contact UID</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="extra"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3906">optional extra data stored with the contact, or %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="out_contact"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3907">a loaded contact, as an #EContact</doc>
            <type name="EBookContacts.Contact" c:type="EContact**"/>
          </parameter>
          <parameter name="out_extra"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3908">an extra data to store to #EBookCache with this contact</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3909">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="process_changes_sync"
              c:identifier="e_book_meta_backend_process_changes_sync"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3509">Processes given changes by updating local cache content accordingly.
The @meta_backend processes the changes like being online and particularly
requires to be online to load created and modified objects when needed.</doc>
        <source-position filename="e-book-meta-backend.h" line="231"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="3525">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3511">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="created_objects"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3512">
   a #GSList of #EBookMetaBackendInfo object infos which had been created</doc>
            <type name="GLib.SList" c:type="const GSList*">
              <type name="BookMetaBackendInfo"/>
            </type>
          </parameter>
          <parameter name="modified_objects"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3514">
   a #GSList of #EBookMetaBackendInfo object infos which had been modified</doc>
            <type name="GLib.SList" c:type="const GSList*">
              <type name="BookMetaBackendInfo"/>
            </type>
          </parameter>
          <parameter name="removed_objects"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3516">
   a #GSList of #EBookMetaBackendInfo object infos which had been removed</doc>
            <type name="GLib.SList" c:type="const GSList*">
              <type name="BookMetaBackendInfo"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3518">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="ref_cache"
              c:identifier="e_book_meta_backend_ref_cache"
              version="3.26">
        <source-position filename="e-book-meta-backend.h" line="198"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="2831">Referenced #EBookCache, which is used by @meta_backend.
   Unref it with g_object_unref(), when no longer needed.</doc>
          <type name="BookCache" c:type="EBookCache*"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="2829">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="refresh_sync"
              c:identifier="e_book_meta_backend_refresh_sync"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3258">Refreshes the @meta_backend immediately. To just schedule refresh
operation call e_book_meta_backend_schedule_refresh().</doc>
        <source-position filename="e-book-meta-backend.h" line="215"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="3267">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3260">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3261">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_contact_sync"
              c:identifier="e_book_meta_backend_remove_contact_sync"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="4075">Removes a contact from the remote side. The @object is not %NULL when
it's removing locally deleted object in offline mode. Being it %NULL,
the descendant can obtain the object from the #EBookCache.

It is mandatory to implement this virtual method by the writable descendant.</doc>
        <source-position filename="e-book-meta-backend.h" line="285"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="4092">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4077">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="conflict_resolution" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4078">an #EConflictResolution to use</doc>
            <type name="EDataServer.ConflictResolution"
                  c:type="EConflictResolution"/>
          </parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4079">a contact UID</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="extra"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4080">extra data being saved with the contact in the local cache, or %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="object"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4081">corresponding vCard object, as stored in the local cache, or %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4082">bit-or of #EBookOperationFlags</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4083">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="requires_reconnect"
              c:identifier="e_book_meta_backend_requires_reconnect"
              version="3.26">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="4233">Determines, whether current source content requires reconnect of the backend.

It is optional to implement this virtual method by the descendant. The default
implementation compares %E_SOURCE_EXTENSION_AUTHENTICATION and
%E_SOURCE_EXTENSION_WEBDAV_BACKEND, if existing in the source,
with the values after the last successful connect and returns
%TRUE when they changed. It always return %TRUE when there was
no successful connect done yet.</doc>
        <source-position filename="e-book-meta-backend.h" line="306"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="4246">%TRUE, when reconnect is required, %FALSE otherwise.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4235">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="save_contact_sync"
              c:identifier="e_book_meta_backend_save_contact_sync"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3972">Saves one contact into the remote side.  When the @overwrite_existing is %TRUE, then
the descendant can overwrite an object with the same UID on the remote side
(usually used for modify). The @conflict_resolution defines what to do when
the remote side had made any changes to the object since the last update.

The @contact has already converted locally stored photos and logos
into inline variants, thus it's not needed to call
e_book_meta_backend_inline_local_photos_sync() by the descendant.

The @out_new_uid can be populated with a UID of the saved contact as the server
assigned it to it. This UID, if set, is loaded from the remote side afterwards,
also to see whether any changes had been made to the contact by the remote side.

The @out_new_extra can be populated with a new extra data to save with the contact.
Left it %NULL, to keep the same value as the @extra.

The descendant can use an #E_CLIENT_ERROR_OUT_OF_SYNC error to indicate that
the save failed due to made changes on the remote side, and let the @meta_backend
resolve this conflict based on the @conflict_resolution on its own.
The #E_CLIENT_ERROR_OUT_OF_SYNC error should not be used when the descendant
is able to resolve the conflicts itself.

It is mandatory to implement this virtual method by the writable descendant.</doc>
        <source-position filename="e-book-meta-backend.h" line="274"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="4009">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3974">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="overwrite_existing" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3975">%TRUE when can overwrite existing contacts, %FALSE otherwise</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="conflict_resolution" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3976">one of #EConflictResolution, what to do on conflicts</doc>
            <type name="EDataServer.ConflictResolution"
                  c:type="EConflictResolution"/>
          </parameter>
          <parameter name="contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3977">an #EContact to save</doc>
            <type name="EBookContacts.Contact" c:type="EContact*"/>
          </parameter>
          <parameter name="extra"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3978">extra data saved with the contacts in an #EBookCache</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="opflags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3979">bit-or of EBookOperationFlags</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="out_new_uid"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3980">return location for the UID of the saved contact</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="out_new_extra"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3981">return location for the extra data to store with the contact</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3982">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="schedule_refresh"
              c:identifier="e_book_meta_backend_schedule_refresh"
              version="3.26">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3220">Schedules refresh of the content of the @meta_backend. If there's any
already scheduled, then the function does nothing.

Use e_book_meta_backend_refresh_sync() to refresh the @meta_backend
immediately.</doc>
        <source-position filename="e-book-meta-backend.h" line="213"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3222">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="search_sync"
              c:identifier="e_book_meta_backend_search_sync"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="4145">Searches @meta_backend with given expression @expr and returns
found contacts as a #GSList of #EContact @out_contacts.
Free the returned @out_contacts with g_slist_free_full (contacts, g_object_unref);
when no longer needed.
When the @expr is %NULL, all objects are returned. To get
UID-s instead, call e_book_meta_backend_search_uids_sync().

It is optional to implement this virtual method by the descendant.
The default implementation searches @meta_backend's cache. It's also
not required to be online for searching, thus @meta_backend doesn't
ensure it.</doc>
        <source-position filename="e-book-meta-backend.h" line="294"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="4166">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4147">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="expr"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4148">a search expression, or %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="meta_contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4149">%TRUE, when return #EContact filled with UID and REV only, %FALSE to return full contacts</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="out_contacts"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4150">return location for the found contacts as #EContact</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="EBookContacts.Contact"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4151">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="search_uids_sync"
              c:identifier="e_book_meta_backend_search_uids_sync"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="4190">Searches @meta_backend with given expression @expr and returns
found contact UID-s as a #GSList @out_contacts.
Free the returned @out_uids with g_slist_free_full (uids, g_free);
when no longer needed.
When the @expr is %NULL, all UID-s are returned. To get #EContact(s)
instead, call e_book_meta_backend_search_sync().

It is optional to implement this virtual method by the descendant.
The default implementation searches @meta_backend's cache. It's also
not required to be online for searching, thus @meta_backend doesn't
ensure it.</doc>
        <source-position filename="e-book-meta-backend.h" line="300"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="4210">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4192">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="expr"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4193">a search expression, or %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="out_uids"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4194">return location for the found contact UID-s</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="utf8"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4195">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_cache"
              c:identifier="e_book_meta_backend_set_cache"
              version="3.26">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="2781">Sets the @cache as the cache to be used by the @meta_backend.
By default, a cache.db in EBookBackend::cache-dir is created
in the constructed method. This function can be used to override
the default.

Note the @meta_backend adds its own reference to the @cache.</doc>
        <source-position filename="e-book-meta-backend.h" line="196"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="2783">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="2784">an #EBookCache to use</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_connected_writable"
              c:identifier="e_book_meta_backend_set_connected_writable"
              version="3.26">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="2662">Sets whether the @meta_backend connected to a writable destination.
This value has meaning only if e_book_meta_backend_get_ever_connected()
is %TRUE.

This is used by the @meta_backend itself, during the opening phase,
to set the backend writable or not also in the offline mode.</doc>
        <source-position filename="e-book-meta-backend.h" line="190"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="2664">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="2665">value to set</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_ever_connected"
              c:identifier="e_book_meta_backend_set_ever_connected"
              version="3.26">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="2600">Sets whether the @meta_backend ever made a successful connection
to its destination.

This is used by the @meta_backend itself, during the opening phase,
when it had not been connected yet, then it does so immediately, to
eventually report settings error easily.</doc>
        <source-position filename="e-book-meta-backend.h" line="185"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="2602">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="2603">value to set</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
        </parameters>
      </method>
      <method name="split_changes_sync"
              c:identifier="e_book_meta_backend_split_changes_sync"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3390">Splits @objects into created/modified/removed lists according to current local
cache content. Only the @out_removed_objects can be %NULL, others cannot.
The function modifies @objects by moving its 'data' to corresponding out
lists and sets the @objects 'data' to %NULL.

Each output #GSList should be freed with
g_slist_free_full (objects, e_book_meta_backend_info_free);
when no longer needed.

The caller is still responsible to free @objects as well.</doc>
        <source-position filename="e-book-meta-backend.h" line="223"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="3416">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3392">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="objects"
                     direction="inout"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3393">
   a #GSList of #EBookMetaBackendInfo object infos to split</doc>
            <type name="GLib.SList" c:type="GSList*">
              <type name="BookMetaBackendInfo"/>
            </type>
          </parameter>
          <parameter name="out_created_objects"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3395">
   a #GSList of #EBookMetaBackendInfo object infos which had been created</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="BookMetaBackendInfo"/>
            </type>
          </parameter>
          <parameter name="out_modified_objects"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3397">
   a #GSList of #EBookMetaBackendInfo object infos which had been modified</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="BookMetaBackendInfo"/>
            </type>
          </parameter>
          <parameter name="out_removed_objects"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     nullable="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3399">
   a #GSList of #EBookMetaBackendInfo object infos which had been removed;
   it can be %NULL, to not gather list of removed object infos</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="BookMetaBackendInfo"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3402">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="store_inline_photos_sync"
              c:identifier="e_book_meta_backend_store_inline_photos_sync"
              version="3.26"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="3043">Changes all inline photos and logos to URL type in @contact, which
will point to a local file instead, beside the cache file.
This is called automatically after e_book_meta_backend_load_contact_sync().

The reverse operation is e_book_meta_backend_inline_local_photos_sync().</doc>
        <source-position filename="e-book-meta-backend.h" line="204"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="3056">Whether succeeded.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="meta_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3045">an #EBookMetaBackend</doc>
            <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
          </instance-parameter>
          <parameter name="contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3046">an #EContact to work with</doc>
            <type name="EBookContacts.Contact" c:type="EContact*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3047">optional #GCancellable object, or %NULL</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <property name="cache" writable="1" transfer-ownership="none">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="2516">The #EBookCache being used for this meta backend.</doc>
        <type name="BookCache"/>
      </property>
      <field name="parent" readable="0" private="1">
        <type name="BookBackendSync" c:type="EBookBackendSync"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="BookMetaBackendPrivate" c:type="EBookMetaBackendPrivate*"/>
      </field>
      <glib:signal name="refresh-completed" when="last">
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
      <glib:signal name="source-changed" when="last" version="3.26">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="2542">This signal is emitted whenever the underlying backend #ESource
changes. Unlike the #ESource's 'changed' signal this one is
tight to the #EBookMetaBackend itself and is emitted from
a dedicated thread, thus it doesn't block the main thread.</doc>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
      </glib:signal>
    </class>
    <record name="BookMetaBackendClass"
            c:type="EBookMetaBackendClass"
            glib:is-gtype-struct-for="BookMetaBackend"
            version="3.26">
      <doc xml:space="preserve"
           filename="e-book-meta-backend.h"
           line="89">Class structure for the #EBookMetaBackend class.</doc>
      <source-position filename="e-book-meta-backend.h" line="179"/>
      <field name="parent_class" readable="0" private="1">
        <type name="BookBackendSyncClass" c:type="EBookBackendSyncClass"/>
      </field>
      <field name="backend_module_filename" readable="0" private="1">
        <type name="utf8" c:type="const gchar*"/>
      </field>
      <field name="backend_factory_type_name" readable="0" private="1">
        <type name="utf8" c:type="const gchar*"/>
      </field>
      <field name="connect_sync">
        <callback name="connect_sync" throws="1">
          <source-position filename="e-book-meta-backend.h" line="105"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3667">Whether succeeded.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="meta_backend" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3632">an #EBookMetaBackend</doc>
              <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
            </parameter>
            <parameter name="credentials"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3633">an #ENamedParameters with previously used credentials, or %NULL</doc>
              <type name="EDataServer.NamedParameters"
                    c:type="const ENamedParameters*"/>
            </parameter>
            <parameter name="out_auth_result"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3634">an #ESourceAuthenticationResult with an authentication result</doc>
              <type name="EDataServer.SourceAuthenticationResult"
                    c:type="ESourceAuthenticationResult*"/>
            </parameter>
            <parameter name="out_certificate_pem"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3635">a PEM encoded certificate on failure, or %NULL</doc>
              <type name="utf8" c:type="gchar**"/>
            </parameter>
            <parameter name="out_certificate_errors"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3636">a #GTlsCertificateFlags on failure, or 0</doc>
              <type name="Gio.TlsCertificateFlags"
                    c:type="GTlsCertificateFlags*"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3637">optional #GCancellable object, or %NULL</doc>
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="disconnect_sync">
        <callback name="disconnect_sync" throws="1">
          <source-position filename="e-book-meta-backend.h" line="112"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3704">Whether succeeded.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="meta_backend" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3693">an #EBookMetaBackend</doc>
              <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3694">optional #GCancellable object, or %NULL</doc>
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_changes_sync">
        <callback name="get_changes_sync" throws="1">
          <source-position filename="e-book-meta-backend.h" line="116"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3770">Whether succeeded.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="meta_backend" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3726">an #EBookMetaBackend</doc>
              <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
            </parameter>
            <parameter name="last_sync_tag"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3727">optional sync tag from the last check</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="is_repeat" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3728">set to %TRUE when this is the repeated call</doc>
              <type name="gboolean" c:type="gboolean"/>
            </parameter>
            <parameter name="out_new_sync_tag"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3729">new sync tag to store on success</doc>
              <type name="utf8" c:type="gchar**"/>
            </parameter>
            <parameter name="out_repeat"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3730">whether to repeat this call again; default is %FALSE</doc>
              <type name="gboolean" c:type="gboolean*"/>
            </parameter>
            <parameter name="out_created_objects"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3731">
   a #GSList of #EBookMetaBackendInfo object infos which had been created since
   the last check</doc>
              <type name="GLib.SList" c:type="GSList**">
                <type name="BookMetaBackendInfo"/>
              </type>
            </parameter>
            <parameter name="out_modified_objects"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3734">
   a #GSList of #EBookMetaBackendInfo object infos which had been modified since
   the last check</doc>
              <type name="GLib.SList" c:type="GSList**">
                <type name="BookMetaBackendInfo"/>
              </type>
            </parameter>
            <parameter name="out_removed_objects"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3737">
   a #GSList of #EBookMetaBackendInfo object infos which had been removed since
   the last check</doc>
              <type name="GLib.SList" c:type="GSList**">
                <type name="BookMetaBackendInfo"/>
              </type>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3740">optional #GCancellable object, or %NULL</doc>
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="list_existing_sync">
        <callback name="list_existing_sync" throws="1">
          <source-position filename="e-book-meta-backend.h" line="126"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3856">Whether succeeded.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="meta_backend" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3836">an #EBookMetaBackend</doc>
              <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
            </parameter>
            <parameter name="out_new_sync_tag"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3837">optional return location for a new sync tag</doc>
              <type name="utf8" c:type="gchar**"/>
            </parameter>
            <parameter name="out_existing_objects"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3838">
   a #GSList of #EBookMetaBackendInfo object infos which are stored on the remote side</doc>
              <type name="GLib.SList" c:type="GSList**">
                <type name="BookMetaBackendInfo"/>
              </type>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3840">optional #GCancellable object, or %NULL</doc>
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="load_contact_sync">
        <callback name="load_contact_sync" throws="1">
          <source-position filename="e-book-meta-backend.h" line="131"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="3922">Whether succeeded.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="meta_backend" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3904">an #EBookMetaBackend</doc>
              <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
            </parameter>
            <parameter name="uid" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3905">a contact UID</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="extra"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3906">optional extra data stored with the contact, or %NULL</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="out_contact"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3907">a loaded contact, as an #EContact</doc>
              <type name="EBookContacts.Contact" c:type="EContact**"/>
            </parameter>
            <parameter name="out_extra"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3908">an extra data to store to #EBookCache with this contact</doc>
              <type name="utf8" c:type="gchar**"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3909">optional #GCancellable object, or %NULL</doc>
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="save_contact_sync">
        <callback name="save_contact_sync" throws="1">
          <source-position filename="e-book-meta-backend.h" line="138"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4009">Whether succeeded.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="meta_backend" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3974">an #EBookMetaBackend</doc>
              <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
            </parameter>
            <parameter name="overwrite_existing" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3975">%TRUE when can overwrite existing contacts, %FALSE otherwise</doc>
              <type name="gboolean" c:type="gboolean"/>
            </parameter>
            <parameter name="conflict_resolution" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3976">one of #EConflictResolution, what to do on conflicts</doc>
              <type name="EDataServer.ConflictResolution"
                    c:type="EConflictResolution"/>
            </parameter>
            <parameter name="contact" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3977">an #EContact to save</doc>
              <type name="EBookContacts.Contact" c:type="EContact*"/>
            </parameter>
            <parameter name="extra"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3978">extra data saved with the contacts in an #EBookCache</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="opflags" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3979">bit-or of EBookOperationFlags</doc>
              <type name="guint32" c:type="guint32"/>
            </parameter>
            <parameter name="out_new_uid"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3980">return location for the UID of the saved contact</doc>
              <type name="utf8" c:type="gchar**"/>
            </parameter>
            <parameter name="out_new_extra"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3981">return location for the extra data to store with the contact</doc>
              <type name="utf8" c:type="gchar**"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="3982">optional #GCancellable object, or %NULL</doc>
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="remove_contact_sync">
        <callback name="remove_contact_sync" throws="1">
          <source-position filename="e-book-meta-backend.h" line="148"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4092">Whether succeeded.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="meta_backend" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4077">an #EBookMetaBackend</doc>
              <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
            </parameter>
            <parameter name="conflict_resolution" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4078">an #EConflictResolution to use</doc>
              <type name="EDataServer.ConflictResolution"
                    c:type="EConflictResolution"/>
            </parameter>
            <parameter name="uid" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4079">a contact UID</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="extra"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4080">extra data being saved with the contact in the local cache, or %NULL</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="object"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4081">corresponding vCard object, as stored in the local cache, or %NULL</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="opflags" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4082">bit-or of #EBookOperationFlags</doc>
              <type name="guint32" c:type="guint32"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4083">optional #GCancellable object, or %NULL</doc>
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="search_sync">
        <callback name="search_sync" throws="1">
          <source-position filename="e-book-meta-backend.h" line="156"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4166">Whether succeeded.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="meta_backend" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4147">an #EBookMetaBackend</doc>
              <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
            </parameter>
            <parameter name="expr"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4148">a search expression, or %NULL</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="meta_contact" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4149">%TRUE, when return #EContact filled with UID and REV only, %FALSE to return full contacts</doc>
              <type name="gboolean" c:type="gboolean"/>
            </parameter>
            <parameter name="out_contacts"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4150">return location for the found contacts as #EContact</doc>
              <type name="GLib.SList" c:type="GSList**">
                <type name="EBookContacts.Contact"/>
              </type>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4151">optional #GCancellable object, or %NULL</doc>
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="search_uids_sync">
        <callback name="search_uids_sync" throws="1">
          <source-position filename="e-book-meta-backend.h" line="162"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4210">Whether succeeded.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="meta_backend" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4192">an #EBookMetaBackend</doc>
              <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
            </parameter>
            <parameter name="expr"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4193">a search expression, or %NULL</doc>
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="out_uids"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4194">return location for the found contact UID-s</doc>
              <type name="GLib.SList" c:type="GSList**">
                <type name="utf8"/>
              </type>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4195">optional #GCancellable object, or %NULL</doc>
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="requires_reconnect">
        <callback name="requires_reconnect">
          <source-position filename="e-book-meta-backend.h" line="167"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4246">%TRUE, when reconnect is required, %FALSE otherwise.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="meta_backend" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4235">an #EBookMetaBackend</doc>
              <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="source_changed">
        <callback name="source_changed">
          <source-position filename="e-book-meta-backend.h" line="170"/>
          <return-value transfer-ownership="none">
            <type name="none" c:type="void"/>
          </return-value>
          <parameters>
            <parameter name="meta_backend" transfer-ownership="none">
              <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="get_ssl_error_details">
        <callback name="get_ssl_error_details">
          <source-position filename="e-book-meta-backend.h" line="172"/>
          <return-value transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="4274">%TRUE, when the SSL error details had been available and
   the out parameters populated, %FALSE otherwise.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="meta_backend" transfer-ownership="none">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4266">an #EBookMetaBackend</doc>
              <type name="BookMetaBackend" c:type="EBookMetaBackend*"/>
            </parameter>
            <parameter name="out_certificate_pem"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4267">SSL certificate encoded in PEM format</doc>
              <type name="utf8" c:type="gchar**"/>
            </parameter>
            <parameter name="out_certificate_errors"
                       direction="out"
                       caller-allocates="0"
                       transfer-ownership="full">
              <doc xml:space="preserve"
                   filename="e-book-meta-backend.c"
                   line="4268">bit-or of #GTlsCertificateFlags claiming the certificate errors</doc>
              <type name="Gio.TlsCertificateFlags"
                    c:type="GTlsCertificateFlags*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="reserved" readable="0" private="1">
        <array zero-terminated="0" fixed-size="9">
          <type name="gpointer" c:type="gpointer"/>
        </array>
      </field>
    </record>
    <record name="BookMetaBackendInfo"
            c:type="EBookMetaBackendInfo"
            glib:type-name="EBookMetaBackendInfo"
            glib:get-type="e_book_meta_backend_info_get_type"
            c:symbol-prefix="book_meta_backend_info">
      <source-position filename="e-book-meta-backend.h" line="56"/>
      <field name="uid" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="revision" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="object" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="extra" writable="1">
        <type name="utf8" c:type="gchar*"/>
      </field>
      <constructor name="new"
                   c:identifier="e_book_meta_backend_info_new"
                   version="3.26">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="131">Creates a new #EBookMetaBackendInfo prefilled with the given values.</doc>
        <source-position filename="e-book-meta-backend.h" line="63"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="140">A new #EBookMetaBackendInfo. Free it with
   e_book_meta_backend_info_free(), when no longer needed.</doc>
          <type name="BookMetaBackendInfo" c:type="EBookMetaBackendInfo*"/>
        </return-value>
        <parameters>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="133">a contact UID; cannot be %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="revision"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="134">the contact revision; can be %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="object"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="135">the contact object as a vCard string; can be %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="extra"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="136">extra backend-specific data; can be %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="copy"
              c:identifier="e_book_meta_backend_info_copy"
              version="3.26">
        <source-position filename="e-book-meta-backend.h" line="68"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="168">Copy of the given @src. Free it with
   e_book_meta_backend_info_free() when no longer needed.
   If the @src is %NULL, then returns %NULL as well.</doc>
          <type name="BookMetaBackendInfo" c:type="EBookMetaBackendInfo*"/>
        </return-value>
        <parameters>
          <instance-parameter name="src"
                              transfer-ownership="none"
                              nullable="1"
                              allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="166">a source EBookMetaBackendInfo to copy, or %NULL</doc>
            <type name="BookMetaBackendInfo"
                  c:type="const EBookMetaBackendInfo*"/>
          </instance-parameter>
        </parameters>
      </method>
      <function name="free"
                c:identifier="e_book_meta_backend_info_free"
                version="3.26">
        <doc xml:space="preserve"
             filename="e-book-meta-backend.c"
             line="183">Frees the @ptr structure, previously allocated with e_book_meta_backend_info_new()
or e_book_meta_backend_info_copy().</doc>
        <source-position filename="e-book-meta-backend.h" line="69"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="ptr"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-meta-backend.c"
                 line="185">an #EBookMetaBackendInfo</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </function>
    </record>
    <record name="BookMetaBackendPrivate"
            c:type="EBookMetaBackendPrivate"
            disguised="1">
      <source-position filename="e-book-meta-backend.h" line="73"/>
    </record>
    <class name="BookSqlite"
           c:symbol-prefix="book_sqlite"
           c:type="EBookSqlite"
           version="3.12"
           parent="GObject.Object"
           glib:type-name="EBookSqlite"
           glib:get-type="e_book_sqlite_get_type"
           glib:type-struct="BookSqliteClass">
      <doc xml:space="preserve"
           filename="e-book-sqlite.h"
           line="235">Contains only private data that should be read and manipulated using the
functions below.</doc>
      <source-position filename="e-book-sqlite.h" line="273"/>
      <implements name="EDataServer.Extensible"/>
      <constructor name="new"
                   c:identifier="e_book_sqlite_new"
                   version="3.12"
                   throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="6577">Creates a new #EBookSqlite with the default summary configuration.

Aside from the manditory fields %E_CONTACT_UID, %E_CONTACT_REV,
the default configuration stores the following fields for quick
performance of searches: %E_CONTACT_FILE_AS, %E_CONTACT_NICKNAME,
%E_CONTACT_FULL_NAME, %E_CONTACT_GIVEN_NAME, %E_CONTACT_FAMILY_NAME,
%E_CONTACT_EMAIL, %E_CONTACT_TEL, %E_CONTACT_IS_LIST, %E_CONTACT_LIST_SHOW_ADDRESSES,
and %E_CONTACT_WANTS_HTML.

The fields %E_CONTACT_FULL_NAME and %E_CONTACT_EMAIL are configured
to respond extra quickly with the %E_BOOK_INDEX_PREFIX index flag.

The fields %E_CONTACT_FILE_AS, %E_CONTACT_FAMILY_NAME and
%E_CONTACT_GIVEN_NAME are configured to perform well with
the #EbSqlCursor interface, using the %E_BOOK_INDEX_SORT_KEY
index flag.</doc>
        <source-position filename="e-book-sqlite.h" line="322"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="6601">A reference to a #EBookSqlite</doc>
          <type name="BookSqlite" c:type="EBookSqlite*"/>
        </return-value>
        <parameters>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6579">location to load or create the new database</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6580">an optional #ESource, associated with the #EBookSqlite, or %NULL</doc>
            <type name="EDataServer.Source" c:type="ESource*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6581">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </constructor>
      <constructor name="new_full"
                   c:identifier="e_book_sqlite_new_full"
                   version="3.12"
                   throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="6616">Opens or creates a new addressbook at @path.

Like e_book_sqlite_new(), but allows configuration of which contact fields
will be stored for quick reference in the summary. The configuration indicated by
@setup will only be taken into account when initially creating the underlying table,
further configurations will be ignored.

The fields %E_CONTACT_UID and %E_CONTACT_REV are not optional,
they will be stored in the summary regardless of this function's parameters.
Only #EContactFields with the type #G_TYPE_STRING, #G_TYPE_BOOLEAN or
#E_TYPE_CONTACT_ATTR_LIST are currently supported.

If @vcard_callback is specified, then vcards will not be stored by functions
such as e_book_sqlitedb_add_contact(). Instead @vcard_callback will be invoked
at any time the created #EBookSqlite requires a vcard, either as a fallback
for querying search expressions which cannot be satisfied with the summary
fields, or when reporting results from searches.

If any error occurs and %NULL is returned, then the passed @user_data will
be automatically freed using the @user_data_destroy function, if specified.

It is recommended to store all contact vcards in the #EBookSqlite addressbook
if at all possible, however in some cases the vcards must be stored in some
other storage.</doc>
        <source-position filename="e-book-sqlite.h" line="326"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="6653">The newly created #EBookSqlite, or %NULL if opening or creating the addressbook failed.</doc>
          <type name="BookSqlite" c:type="EBookSqlite*"/>
        </return-value>
        <parameters>
          <parameter name="path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6618">location to load or create the new database</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="source" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6619">an optional #ESource, associated with the #EBookSqlite, or %NULL</doc>
            <type name="EDataServer.Source" c:type="ESource*"/>
          </parameter>
          <parameter name="setup"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6620">an #ESourceBackendSummarySetup describing how the summary should be setup, or %NULL to use the default</doc>
            <type name="EBookContacts.SourceBackendSummarySetup"
                  c:type="ESourceBackendSummarySetup*"/>
          </parameter>
          <parameter name="vcard_callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async"
                     closure="5">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6621">A function to resolve vcards</doc>
            <type name="bSqlVCardCallback" c:type="EbSqlVCardCallback"/>
          </parameter>
          <parameter name="change_callback"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="notified"
                     closure="5"
                     destroy="6">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6622">A function to catch notifications of vcard changes</doc>
            <type name="bSqlChangeCallback" c:type="EbSqlChangeCallback"/>
          </parameter>
          <parameter name="user_data"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6623">callback user data</doc>
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="user_data_destroy"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1"
                     scope="async">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6624">A function to free @user_data automatically when the created #EBookSqlite is destroyed.</doc>
            <type name="GLib.DestroyNotify" c:type="GDestroyNotify"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6625">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </constructor>
      <function name="error_quark" c:identifier="e_book_sqlite_error_quark">
        <return-value transfer-ownership="none">
          <type name="GLib.Quark" c:type="GQuark"/>
        </return-value>
      </function>
      <function name="search_data_free"
                c:identifier="e_book_sqlite_search_data_free"
                version="3.12">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7785">Frees an #EbSqlSearchData</doc>
        <source-position filename="e-book-sqlite.h" line="320"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <parameter name="data" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7787">An #EbSqlSearchData</doc>
            <type name="bSqlSearchData" c:type="EbSqlSearchData*"/>
          </parameter>
        </parameters>
      </function>
      <virtual-method name="before_insert_contact" throws="1">
        <source-position filename="e-book-sqlite.h" line="261"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="db"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="contact" transfer-ownership="none">
            <type name="EBookContacts.Contact" c:type="EContact*"/>
          </parameter>
          <parameter name="extra" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="replace" transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="before_remove_contact" throws="1">
        <source-position filename="e-book-sqlite.h" line="268"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="db"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="contact_uid" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="add_contact"
              c:identifier="e_book_sqlite_add_contact"
              throws="1">
        <source-position filename="e-book-sqlite.h" line="355"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="contact" transfer-ownership="none">
            <type name="EBookContacts.Contact" c:type="EContact*"/>
          </parameter>
          <parameter name="extra" transfer-ownership="none">
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="replace" transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="add_contacts"
              c:identifier="e_book_sqlite_add_contacts"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="6964">Adds or replaces contacts in @ebsql. If @replace_existing is specified then existing
contacts with the same UID will be replaced, otherwise adding an existing contact
will return an error.

If @extra is specified, it must have an equal length as the @contacts list. Each element
from the @extra list will be stored in association with it's corresponding contact
in the @contacts list.</doc>
        <source-position filename="e-book-sqlite.h" line="361"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="6981">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6966">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="contacts" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6967">A list of contacts to add to @ebsql</doc>
            <type name="GLib.SList" c:type="GSList*">
              <type name="EBookContacts.Contact"/>
            </type>
          </parameter>
          <parameter name="extra"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6968">A list of extra data to store in association with this contact</doc>
            <type name="GLib.SList" c:type="GSList*">
              <type name="utf8"/>
            </type>
          </parameter>
          <parameter name="replace" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6969">Whether this contact should replace another contact with the same UID.</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6970">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="cursor_calculate"
              c:identifier="e_book_sqlite_cursor_calculate"
              version="3.12"
              introspectable="0"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="8397">Calculates the @total amount of results for the @cursor's query expression,
as well as the current @position of @cursor in the results. @position is
represented as the amount of results which lead up to the current value
of @cursor, if @cursor currently points to an exact contact, the position
also includes the cursor contact.</doc>
        <source-position filename="e-book-sqlite.h" line="467"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="8412">Whether @total and @position were successfully calculated.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8399">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8400">The #EbSqlCursor</doc>
            <type name="bSqlCursor" c:type="EbSqlCursor*"/>
          </parameter>
          <parameter name="total"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8401">A return location to store the total result set for this cursor</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
          <parameter name="position"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8402">A return location to store the total results before the cursor value</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8403">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="cursor_compare_contact"
              c:identifier="e_book_sqlite_cursor_compare_contact"
              version="3.12"
              introspectable="0">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="8483">Compares @contact with @cursor and returns whether @contact is less than, equal to, or greater
than @cursor.</doc>
        <source-position filename="e-book-sqlite.h" line="473"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="8493">A value that is less than, equal to, or greater than zero if @contact is found,
respectively, to be less than, to match, or be greater than the current value of @cursor.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8485">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8486">The #EbSqlCursor</doc>
            <type name="bSqlCursor" c:type="EbSqlCursor*"/>
          </parameter>
          <parameter name="contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8487">The #EContact to compare</doc>
            <type name="EBookContacts.Contact" c:type="EContact*"/>
          </parameter>
          <parameter name="matches_sexp"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8488">Whether the contact matches the cursor's search expression</doc>
            <type name="gboolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </method>
      <method name="cursor_free"
              c:identifier="e_book_sqlite_cursor_free"
              version="3.12"
              introspectable="0">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="8013">Frees @cursor.</doc>
        <source-position filename="e-book-sqlite.h" line="449"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8015">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8016">The #EbSqlCursor to free</doc>
            <type name="bSqlCursor" c:type="EbSqlCursor*"/>
          </parameter>
        </parameters>
      </method>
      <method name="cursor_new"
              c:identifier="e_book_sqlite_cursor_new"
              version="3.12"
              introspectable="0"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7926">Creates a new #EbSqlCursor.

The cursor should be freed with e_book_sqlite_cursor_free().</doc>
        <source-position filename="e-book-sqlite.h" line="443"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7939">A newly created #EbSqlCursor</doc>
          <type name="bSqlCursor" c:type="EbSqlCursor*"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7928">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="sexp" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7929">search expression; use NULL or an empty string to get all stored contacts.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="sort_fields" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7930">An array of #EContactFields as sort keys in order of priority</doc>
            <array length="3"
                   zero-terminated="0"
                   c:type="const EContactField*">
              <type name="EBookContacts.ContactField" c:type="EContactField"/>
            </array>
          </parameter>
          <parameter name="sort_types" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7931">An array of #EBookCursorSortTypes, one for each field in @sort_fields</doc>
            <array length="3"
                   zero-terminated="0"
                   c:type="const EBookCursorSortType*">
              <type name="EBookContacts.BookCursorSortType"
                    c:type="EBookCursorSortType"/>
            </array>
          </parameter>
          <parameter name="n_sort_fields" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7932">The number of fields to sort results by.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </method>
      <method name="cursor_set_sexp"
              c:identifier="e_book_sqlite_cursor_set_sexp"
              version="3.12"
              introspectable="0"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="8359">Modifies the current query expression for @cursor. This will not
modify @cursor's state, but will change the outcome of any further
calls to e_book_sqlite_cursor_calculate() or
e_book_sqlite_cursor_step().</doc>
        <source-position filename="e-book-sqlite.h" line="463"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="8371">%TRUE if the expression was valid and accepted by @ebsql</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8361">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8362">The #EbSqlCursor</doc>
            <type name="bSqlCursor" c:type="EbSqlCursor*"/>
          </parameter>
          <parameter name="sexp" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8363">The new query expression for @cursor</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="cursor_set_target_alphabetic_index"
              c:identifier="e_book_sqlite_cursor_set_target_alphabetic_index"
              version="3.12"
              introspectable="0">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="8302">Sets the @cursor position to an
&lt;link linkend="cursor-alphabet"&gt;Alphabetic Index&lt;/link&gt;
into the alphabet active in @ebsql's locale.

After setting the target to an alphabetic index, for example the
index for letter 'E', then further calls to e_book_sqlite_cursor_step()
will return results starting with the letter 'E' (or results starting
with the last result in 'D', if moving in a negative direction).

The passed index must be a valid index in the active locale, knowledge
on the currently active alphabet index must be obtained using #ECollator
APIs.

Use e_book_sqlite_ref_collator() to obtain the active collator for @ebsql.</doc>
        <source-position filename="e-book-sqlite.h" line="459"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8304">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8305">The #EbSqlCursor to modify</doc>
            <type name="bSqlCursor" c:type="EbSqlCursor*"/>
          </parameter>
          <parameter name="idx" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8306">The alphabetic index</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="cursor_step"
              c:identifier="e_book_sqlite_cursor_step"
              version="3.12"
              introspectable="0"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="8068">Steps @cursor through it's sorted query by a maximum of @count contacts
starting from @origin.

If @count is negative, then the cursor will move through the list in reverse.

If @cursor reaches the beginning or end of the query results, then the
returned list might not contain the amount of desired contacts, or might
return no results if the cursor currently points to the last contact.
Reaching the end of the list is not considered an error condition. Attempts
to step beyond the end of the list after having reached the end of the list
will however trigger an %E_BOOK_SQLITE_ERROR_END_OF_LIST error.

If %EBSQL_CURSOR_STEP_FETCH is specified in @flags, a pointer to
a %NULL #GSList pointer should be provided for the @results parameter.

The result list will be stored to @results and should be freed with g_slist_free()
and all elements freed with e_book_sqlite_search_data_free().</doc>
        <source-position filename="e-book-sqlite.h" line="451"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="8098">The number of contacts traversed if successful, otherwise -1 is
returned and @error is set.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8070">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8071">The #EbSqlCursor to use</doc>
            <type name="bSqlCursor" c:type="EbSqlCursor*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8072">The #EbSqlCursorStepFlags for this step</doc>
            <type name="bSqlCursorStepFlags" c:type="EbSqlCursorStepFlags"/>
          </parameter>
          <parameter name="origin" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8073">The #EbSqlCursorOrigin from whence to step</doc>
            <type name="bSqlCursorOrigin" c:type="EbSqlCursorOrigin"/>
          </parameter>
          <parameter name="count" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8074">A positive or negative amount of contacts to try and fetch</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="results"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8075">
  A return location to store the results, or %NULL if %EBSQL_CURSOR_STEP_FETCH is not specified in @flags.</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="bSqlSearchData"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="8077">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_contact"
              c:identifier="e_book_sqlite_get_contact"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7216">Fetch the #EContact specified by @uid in @ebsql.

If @meta_contact is specified, then a shallow #EContact will be created
holding only the %E_CONTACT_UID and %E_CONTACT_REV fields.</doc>
        <source-position filename="e-book-sqlite.h" line="379"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7229">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7218">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7219">The uid of the contact to fetch</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="meta_contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7220">Whether an entire contact is desired, or only the metadata</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="ret_contact"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7221">Return location to store the fetched contact</doc>
            <type name="EBookContacts.Contact" c:type="EContact**"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_contact_extra"
              c:identifier="e_book_sqlite_get_contact_extra"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7480">Fetches the extra data previously set for @uid, either with
e_book_sqlite_set_contact_extra() or when adding contacts.</doc>
        <source-position filename="e-book-sqlite.h" line="403"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7490">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7482">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7483">The uid of the contact to fetch the extra data for</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="ret_extra"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7484">Return location to store the extra data</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_key_value"
              c:identifier="e_book_sqlite_get_key_value"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7640">Fetches the value for @key and stores it in @value</doc>
        <source-position filename="e-book-sqlite.h" line="425"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7649">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7642">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7643">The key to fetch a value for</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7644">A return location to store the value for @key</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_key_value_int"
              c:identifier="e_book_sqlite_get_key_value_int"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7711">A convenience function to fetch the value of @key as an integer.</doc>
        <source-position filename="e-book-sqlite.h" line="433"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7720">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7713">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7714">The key to fetch a value for</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="value"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7715">A return location to store the value for @key</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_locale"
              c:identifier="e_book_sqlite_get_locale"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7874">Fetches the current locale setting for the address-book.

Upon success, @lc_collate_out will hold the returned locale setting,
otherwise %FALSE will be returned and @error will be updated accordingly.</doc>
        <source-position filename="e-book-sqlite.h" line="346"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7885">Whether the locale was successfully fetched.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7876">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="locale_out"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7877">The location to return the current locale</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_vcard"
              c:identifier="e_book_sqlite_get_vcard"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7303">Fetch a vcard string for @uid in @ebsql.

If @meta_contact is specified, then a shallow vcard representation will be
created holding only the %E_CONTACT_UID and %E_CONTACT_REV fields.</doc>
        <source-position filename="e-book-sqlite.h" line="389"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7316">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7305">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7306">The uid of the contact to fetch</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="meta_contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7307">Whether an entire contact is desired, or only the metadata</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="ret_vcard"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7308">Return location to store the fetched vcard string</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
        </parameters>
      </method>
      <method name="has_contact"
              c:identifier="e_book_sqlite_has_contact"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7177">Checks if a contact bearing the UID indicated by @uid is stored in @ebsql.</doc>
        <source-position filename="e-book-sqlite.h" line="375"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7186">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7179">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7180">The uid of the contact to check for</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="exists"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7181">Return location to store whether the contact exists.</doc>
            <type name="gboolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </method>
      <method name="lock"
              c:identifier="e_book_sqlite_lock"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="6767">Obtains an exclusive lock on @ebsql and starts a transaction.

This should be called if you need to access @ebsql multiple times while
ensuring an atomic transaction. End this transaction with e_book_sqlite_unlock().

If @cancellable is specified, then @ebsql will retain a reference to it until
e_book_sqlite_unlock() is called. Any accesses to @ebsql with the lock held
are expected to have the same @cancellable specified, or %NULL.

&lt;note&gt;&lt;para&gt;Aside from ensuring atomicity of transactions, this function will hold a mutex
which will cause further calls to e_book_sqlite_lock() to block. If you are accessing
@ebsql from multiple threads, then any interactions with @ebsql should be nested in calls
to e_book_sqlite_lock() and e_book_sqlite_unlock().&lt;/para&gt;&lt;/note&gt;</doc>
        <source-position filename="e-book-sqlite.h" line="335"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="6788">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6769">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="lock_type" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6770">The #EbSqlLockType to acquire</doc>
            <type name="bSqlLockType" c:type="EbSqlLockType"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6771">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="ref_collator"
              c:identifier="e_book_sqlite_ref_collator"
              version="3.12">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="6880">References the currently active #ECollator for @ebsql,
use e_collator_unref() when finished using the returned collator.

Note that the active collator will change with the active locale setting.</doc>
        <source-position filename="e-book-sqlite.h" line="350"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="6889">A reference to the active collator.</doc>
          <type name="EDataServer.Collator" c:type="ECollator*"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6882">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref_source"
              c:identifier="e_book_sqlite_ref_source"
              version="3.16">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="6901">References the #ESource to which @ebsql is paired,
use g_object_unref() when finished using the source.
It can be %NULL in some cases, like when running tests.</doc>
        <source-position filename="e-book-sqlite.h" line="352"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="6909">A reference to the #ESource to which @ebsql
is paired, or %NULL.</doc>
          <type name="EDataServer.Source" c:type="ESource*"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6903">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="remove_contact"
              c:identifier="e_book_sqlite_remove_contact"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7046">Removes the contact indicated by @uid from @ebsql.</doc>
        <source-position filename="e-book-sqlite.h" line="367"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7055">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7048">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7049">the uid of the contact to remove</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7050">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="remove_contacts"
              c:identifier="e_book_sqlite_remove_contacts"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7101">Removes the contacts indicated by @uids from @ebsql.</doc>
        <source-position filename="e-book-sqlite.h" line="371"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7110">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7103">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="uids" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7104">a #GSList of uids indicating which contacts to remove</doc>
            <type name="GLib.SList" c:type="GSList*">
              <type name="utf8"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7105">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="search"
              c:identifier="e_book_sqlite_search"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7551">Searches @ebsql for contacts matching the search expression indicated by @sexp.

When @sexp refers only to #EContactFields configured in the summary of @ebsql,
the search should always be quick, when searching for other #EContactFields
a fallback will be used, possibly invoking any #EbSqlVCardCallback which
may have been passed to e_book_sqlite_new_full().

The returned @ret_list list should be freed with g_slist_free()
and all elements freed with e_book_sqlite_search_data_free().

If @meta_contact is specified, then shallow vcard representations will be
created holding only the %E_CONTACT_UID and %E_CONTACT_REV fields.</doc>
        <source-position filename="e-book-sqlite.h" line="412"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7574">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7553">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="sexp"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7554">search expression; use %NULL or an empty string to list all stored contacts.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="meta_contacts" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7555">Whether entire contacts are desired, or only the metadata</doc>
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="ret_list"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7556">Return location
to store a #GSList of #EbSqlSearchData structures</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="bSqlSearchData"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7558">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="search_uids"
              c:identifier="e_book_sqlite_search_uids"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7604">Similar to e_book_sqlitedb_search(), but fetches only a list of contact UIDs.

The returned @ret_list list should be freed with g_slist_free() and all
elements freed with g_free().</doc>
        <source-position filename="e-book-sqlite.h" line="418"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7617">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7606">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="sexp"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7607">search expression; use %NULL or an empty string to get all stored contacts.</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="ret_list"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7608">Return location to store a #GSList of contact uids</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="utf8"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7609">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_contact_extra"
              c:identifier="e_book_sqlite_set_contact_extra"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7446">Sets or replaces the extra data associated with @uid.</doc>
        <source-position filename="e-book-sqlite.h" line="399"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7455">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7448">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="uid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7449">The uid of the contact to set the extra data for</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="extra"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7450">The extra data to set</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_key_value"
              c:identifier="e_book_sqlite_set_key_value"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7676">Sets the value for @key to be @value</doc>
        <source-position filename="e-book-sqlite.h" line="429"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7685">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7678">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7679">The key to fetch a value for</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7680">The new value for @key</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_key_value_int"
              c:identifier="e_book_sqlite_set_key_value_int"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7752">A convenience function to set the value of @key as an integer.</doc>
        <source-position filename="e-book-sqlite.h" line="437"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7761">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7754">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="key" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7755">The key to fetch a value for</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="value" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7756">The new value for @key</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_locale"
              c:identifier="e_book_sqlite_set_locale"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7804">Relocalizes any locale specific data in the specified
new @lc_collate locale.

The @lc_collate locale setting is stored and remembered on
subsequent accesses of the addressbook, changing the locale
will store the new locale and will modify sort keys and any
locale specific data in the addressbook.

As a side effect, it's possible that changing the locale
will cause stored vcards to change. Notifications for
these changes can be caught with the #EbSqlVCardCallback
provided to e_book_sqlite_new_full().</doc>
        <source-position filename="e-book-sqlite.h" line="342"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7824">Whether the new locale was successfully set.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7806">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="lc_collate" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7807">The new locale for the addressbook</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="7808">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="unlock"
              c:identifier="e_book_sqlite_unlock"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="6836">Releases an exclusive on @ebsql and finishes a transaction previously
started with e_book_sqlite_lock_updates().

&lt;note&gt;&lt;para&gt;If this fails, the lock on @ebsql is still released and @error will
be set to indicate why the transaction or rollback failed.&lt;/para&gt;&lt;/note&gt;</doc>
        <source-position filename="e-book-sqlite.h" line="339"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="6848">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6838">An #EBookSqlite</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </instance-parameter>
          <parameter name="action" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-book-sqlite.c"
                 line="6839">Which #EbSqlUnlockAction to take while unlocking</doc>
            <type name="bSqlUnlockAction" c:type="EbSqlUnlockAction"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent" readable="0" private="1">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="BookSqlitePrivate" c:type="EBookSqlitePrivate*"/>
      </field>
      <glib:signal name="before-insert-contact" when="last">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="object"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="p0" transfer-ownership="none">
            <type name="EBookContacts.Contact"/>
          </parameter>
          <parameter name="p1" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="p2" transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </parameter>
          <parameter name="p3" transfer-ownership="none">
            <type name="GObject.Object"/>
          </parameter>
          <parameter name="p4"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </glib:signal>
      <glib:signal name="before-remove-contact" when="last">
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <parameter name="object"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
          <parameter name="p0" transfer-ownership="none">
            <type name="utf8" c:type="gchar*"/>
          </parameter>
          <parameter name="p1"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable"/>
          </parameter>
          <parameter name="p2"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="gpointer" c:type="gpointer"/>
          </parameter>
        </parameters>
      </glib:signal>
    </class>
    <record name="BookSqliteClass"
            c:type="EBookSqliteClass"
            glib:is-gtype-struct-for="BookSqlite"
            version="3.12">
      <doc xml:space="preserve"
           filename="e-book-sqlite.h"
           line="249">Class structure for the #EBookSqlite class.</doc>
      <source-position filename="e-book-sqlite.h" line="273"/>
      <field name="parent_class" readable="0" private="1">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="before_insert_contact">
        <callback name="before_insert_contact" throws="1">
          <source-position filename="e-book-sqlite.h" line="261"/>
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="ebsql" transfer-ownership="none">
              <type name="BookSqlite" c:type="EBookSqlite*"/>
            </parameter>
            <parameter name="db"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="gpointer" c:type="gpointer"/>
            </parameter>
            <parameter name="contact" transfer-ownership="none">
              <type name="EBookContacts.Contact" c:type="EContact*"/>
            </parameter>
            <parameter name="extra" transfer-ownership="none">
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="replace" transfer-ownership="none">
              <type name="gboolean" c:type="gboolean"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
      <field name="before_remove_contact">
        <callback name="before_remove_contact" throws="1">
          <source-position filename="e-book-sqlite.h" line="268"/>
          <return-value transfer-ownership="none">
            <type name="gboolean" c:type="gboolean"/>
          </return-value>
          <parameters>
            <parameter name="ebsql" transfer-ownership="none">
              <type name="BookSqlite" c:type="EBookSqlite*"/>
            </parameter>
            <parameter name="db"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="gpointer" c:type="gpointer"/>
            </parameter>
            <parameter name="contact_uid" transfer-ownership="none">
              <type name="utf8" c:type="const gchar*"/>
            </parameter>
            <parameter name="cancellable"
                       transfer-ownership="none"
                       nullable="1"
                       allow-none="1">
              <type name="Gio.Cancellable" c:type="GCancellable*"/>
            </parameter>
          </parameters>
        </callback>
      </field>
    </record>
    <enumeration name="BookSqliteError" c:type="EBookSqliteError">
      <doc xml:space="preserve"
           filename="e-book-sqlite.h"
           line="156">Defines the types of possible errors reported by the #EBookSqlite</doc>
      <source-position filename="e-book-sqlite.h" line="181"/>
      <member name="engine"
              value="0"
              c:identifier="E_BOOK_SQLITE_ERROR_ENGINE">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="158">An error was reported from the SQLite engine</doc>
      </member>
      <member name="constraint"
              value="1"
              c:identifier="E_BOOK_SQLITE_ERROR_CONSTRAINT">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="159">The error occurred due to an explicit constraint, this will
happen when attempting to add two contacts with the same UID.</doc>
      </member>
      <member name="contact_not_found"
              value="2"
              c:identifier="E_BOOK_SQLITE_ERROR_CONTACT_NOT_FOUND">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="161">A contact was not found by UID (this is
different from a query that returns no results, which is not an error).</doc>
      </member>
      <member name="invalid_query"
              value="3"
              c:identifier="E_BOOK_SQLITE_ERROR_INVALID_QUERY">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="163">A query was invalid. This can happen if the
search expression could not be parsed or if a phone number query contained non-phonenumber input.</doc>
      </member>
      <member name="unsupported_query"
              value="4"
              c:identifier="E_BOOK_SQLITE_ERROR_UNSUPPORTED_QUERY">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="165">A query was not supported</doc>
      </member>
      <member name="unsupported_field"
              value="5"
              c:identifier="E_BOOK_SQLITE_ERROR_UNSUPPORTED_FIELD">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="166">An unsupported #EContactField was specified in the summary</doc>
      </member>
      <member name="end_of_list"
              value="6"
              c:identifier="E_BOOK_SQLITE_ERROR_END_OF_LIST">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="167">An attempt was made to fetch results past the end of a contact list</doc>
      </member>
      <member name="load" value="7" c:identifier="E_BOOK_SQLITE_ERROR_LOAD">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="168">An error occured while loading or creating the database</doc>
      </member>
    </enumeration>
    <record name="BookSqlitePrivate" c:type="EBookSqlitePrivate" disguised="1">
      <source-position filename="e-book-sqlite.h" line="88"/>
    </record>
    <function-macro name="DATA_BOOK"
                    c:identifier="E_DATA_BOOK"
                    introspectable="0">
      <source-position filename="e-data-book.h" line="29"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_CLASS"
                    c:identifier="E_DATA_BOOK_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book.h" line="32"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_CURSOR"
                    c:identifier="E_DATA_BOOK_CURSOR"
                    introspectable="0">
      <source-position filename="e-data-book-cursor.h" line="31"/>
      <parameters>
        <parameter name="o">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_CURSOR_CACHE"
                    c:identifier="E_DATA_BOOK_CURSOR_CACHE"
                    introspectable="0">
      <source-position filename="e-data-book-cursor-cache.h" line="33"/>
      <parameters>
        <parameter name="o">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_CURSOR_CACHE_CLASS"
                    c:identifier="E_DATA_BOOK_CURSOR_CACHE_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-cursor-cache.h" line="34"/>
      <parameters>
        <parameter name="k">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_CURSOR_CACHE_GET_CLASS"
                    c:identifier="E_DATA_BOOK_CURSOR_CACHE_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-cursor-cache.h" line="37"/>
      <parameters>
        <parameter name="o">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_CURSOR_CLASS"
                    c:identifier="E_DATA_BOOK_CURSOR_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-cursor.h" line="32"/>
      <parameters>
        <parameter name="k">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_CURSOR_GET_CLASS"
                    c:identifier="E_DATA_BOOK_CURSOR_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-cursor.h" line="35"/>
      <parameters>
        <parameter name="o">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_CURSOR_SQLITE"
                    c:identifier="E_DATA_BOOK_CURSOR_SQLITE"
                    introspectable="0">
      <source-position filename="e-data-book-cursor-sqlite.h" line="32"/>
      <parameters>
        <parameter name="o">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_CURSOR_SQLITE_CLASS"
                    c:identifier="E_DATA_BOOK_CURSOR_SQLITE_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-cursor-sqlite.h" line="33"/>
      <parameters>
        <parameter name="k">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_CURSOR_SQLITE_GET_CLASS"
                    c:identifier="E_DATA_BOOK_CURSOR_SQLITE_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-cursor-sqlite.h" line="36"/>
      <parameters>
        <parameter name="o">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_DIRECT"
                    c:identifier="E_DATA_BOOK_DIRECT"
                    introspectable="0">
      <source-position filename="e-data-book-direct.h" line="32"/>
      <parameters>
        <parameter name="o">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_DIRECT_CLASS"
                    c:identifier="E_DATA_BOOK_DIRECT_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-direct.h" line="33"/>
      <parameters>
        <parameter name="k">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_DIRECT_GET_CLASS"
                    c:identifier="E_DATA_BOOK_DIRECT_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-direct.h" line="36"/>
      <parameters>
        <parameter name="k">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_FACTORY"
                    c:identifier="E_DATA_BOOK_FACTORY"
                    introspectable="0">
      <source-position filename="e-data-book-factory.h" line="31"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_FACTORY_CLASS"
                    c:identifier="E_DATA_BOOK_FACTORY_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-factory.h" line="34"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_FACTORY_GET_CLASS"
                    c:identifier="E_DATA_BOOK_FACTORY_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-factory.h" line="43"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_GET_CLASS"
                    c:identifier="E_DATA_BOOK_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book.h" line="41"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_VIEW"
                    c:identifier="E_DATA_BOOK_VIEW"
                    introspectable="0">
      <source-position filename="e-data-book-view.h" line="36"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_VIEW_CLASS"
                    c:identifier="E_DATA_BOOK_VIEW_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-view.h" line="39"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="DATA_BOOK_VIEW_GET_CLASS"
                    c:identifier="E_DATA_BOOK_VIEW_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-view.h" line="48"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <class name="DataBook"
           c:symbol-prefix="data_book"
           c:type="EDataBook"
           parent="GObject.Object"
           glib:type-name="EDataBook"
           glib:get-type="e_data_book_get_type"
           glib:type-struct="DataBookClass">
      <source-position filename="e-data-book.h" line="63"/>
      <implements name="Gio.Initable"/>
      <constructor name="new" c:identifier="e_data_book_new" throws="1">
        <doc xml:space="preserve"
             filename="e-data-book.c"
             line="1967">Creates a new #EDataBook and exports the AddressBook D-Bus interface
on @connection at @object_path.  The #EDataBook handles incoming remote
method invocations and forwards them to the @backend.  If the AddressBook
interface fails to export, the function sets @error and returns %NULL.</doc>
        <source-position filename="e-data-book.h" line="66"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-data-book.c"
               line="1979">an #EDataBook, or %NULL on error</doc>
          <type name="DataBook" c:type="EDataBook*"/>
        </return-value>
        <parameters>
          <parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1969">an #EBookBackend</doc>
            <type name="BookBackend" c:type="_EBookBackend*"/>
          </parameter>
          <parameter name="connection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1970">a #GDBusConnection</doc>
            <type name="Gio.DBusConnection" c:type="GDBusConnection*"/>
          </parameter>
          <parameter name="object_path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1971">object path for the D-Bus interface</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <function name="string_slist_to_comma_string"
                c:identifier="e_data_book_string_slist_to_comma_string"
                version="3.2">
        <doc xml:space="preserve"
             filename="e-data-book.c"
             line="240">Takes a list of strings and converts it to a comma-separated string of
values; free returned pointer with g_free()</doc>
        <source-position filename="e-data-book.h" line="123"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-data-book.c"
               line="247">comma-separated newly allocated text of @strings</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <parameter name="strings" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="242">a list of gchar *</doc>
            <type name="GLib.SList" c:type="const GSList*">
              <type name="utf8"/>
            </type>
          </parameter>
        </parameters>
      </function>
      <method name="get_connection"
              c:identifier="e_data_book_get_connection"
              version="3.8">
        <doc xml:space="preserve"
             filename="e-data-book.c"
             line="2021">Returns the #GDBusConnection on which the AddressBook D-Bus interface
is exported.</doc>
        <source-position filename="e-data-book.h" line="73"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book.c"
               line="2028">the #GDBusConnection</doc>
          <type name="Gio.DBusConnection" c:type="GDBusConnection*"/>
        </return-value>
        <parameters>
          <instance-parameter name="book" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="2023">an #EDataBook</doc>
            <type name="DataBook" c:type="EDataBook*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_object_path"
              c:identifier="e_data_book_get_object_path"
              version="3.8">
        <doc xml:space="preserve"
             filename="e-data-book.c"
             line="2040">Returns the object path at which the AddressBook D-Bus interface is
exported.</doc>
        <source-position filename="e-data-book.h" line="74"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book.c"
               line="2047">the object path</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="book" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="2042">an #EDataBook</doc>
            <type name="DataBook" c:type="EDataBook*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="ref_backend"
              c:identifier="e_data_book_ref_backend"
              version="3.10">
        <doc xml:space="preserve"
             filename="e-data-book.c"
             line="1999">Returns the #EBookBackend to which incoming remote method invocations
are being forwarded.

The returned #EBookBackend is referenced for thread-safety and should
be unreferenced with g_object_unref() when finished with it.</doc>
        <source-position filename="e-data-book.h" line="71"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-data-book.c"
               line="2009">an #EBookBackend</doc>
          <type name="BookBackend" c:type="_EBookBackend*"/>
        </return-value>
        <parameters>
          <instance-parameter name="book" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="2001">an #EDataBook</doc>
            <type name="DataBook" c:type="EDataBook*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="report_backend_property_changed"
              c:identifier="e_data_book_report_backend_property_changed"
              version="3.2">
        <doc xml:space="preserve"
             filename="e-data-book.c"
             line="1515">Notifies the clients about a property change.</doc>
        <source-position filename="e-data-book.h" line="118"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="book" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1517">An #EDataBook</doc>
            <type name="DataBook" c:type="EDataBook*"/>
          </instance-parameter>
          <parameter name="prop_name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1518">Property name which changed</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="prop_value" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1519">The new property value</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="report_error"
              c:identifier="e_data_book_report_error"
              version="3.2">
        <doc xml:space="preserve"
             filename="e-data-book.c"
             line="1490">Notifies the clients about an error, which happened out of any client-initiate operation.</doc>
        <source-position filename="e-data-book.h" line="116"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="book" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1492">An #EDataBook</doc>
            <type name="DataBook" c:type="EDataBook*"/>
          </instance-parameter>
          <parameter name="message" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1493">An error message</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="respond_create_contacts"
              c:identifier="e_data_book_respond_create_contacts"
              version="3.4">
        <doc xml:space="preserve"
             filename="e-data-book.c"
             line="1338">Finishes a call to create a list contacts.</doc>
        <source-position filename="e-data-book.h" line="86"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="book" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1340">An #EDataBook</doc>
            <type name="DataBook" c:type="EDataBook*"/>
          </instance-parameter>
          <parameter name="opid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1341">An operation ID</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1342">Operation error, if any, automatically freed if passed it</doc>
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
          <parameter name="contacts"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1343">A list of created #EContact(s), or %NULL on error</doc>
            <type name="GLib.SList" c:type="const GSList*">
              <type name="EBookContacts.Contact"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="respond_get_contact"
              c:identifier="e_data_book_respond_get_contact">
        <doc xml:space="preserve"
             filename="e-data-book.c"
             line="1191">Notifies listeners of the completion of the get_contact method call.
Only one of @error and @contact can be set.</doc>
        <source-position filename="e-data-book.h" line="101"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="book" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1193">An #EDataBook</doc>
            <type name="DataBook" c:type="EDataBook*"/>
          </instance-parameter>
          <parameter name="opid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1194">An operation ID</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="error"
                     transfer-ownership="full"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1195">Operation error, if any, automatically freed if passed it</doc>
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
          <parameter name="contact"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1196">the found #EContact, or %NULL, if it could not be found</doc>
            <type name="EBookContacts.Contact" c:type="const EContact*"/>
          </parameter>
        </parameters>
      </method>
      <method name="respond_get_contact_list"
              c:identifier="e_data_book_respond_get_contact_list"
              version="3.2">
        <doc xml:space="preserve"
             filename="e-data-book.c"
             line="1235">Finishes a call to get list of #EContact, which satisfy certain criteria.</doc>
        <source-position filename="e-data-book.h" line="105"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="book" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1237">An #EDataBook</doc>
            <type name="DataBook" c:type="EDataBook*"/>
          </instance-parameter>
          <parameter name="opid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1238">An operation ID</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1239">Operation error, if any, automatically freed if passed it</doc>
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
          <parameter name="contacts"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1240">A list of #EContact, or %NULL on error</doc>
            <type name="GLib.SList" c:type="const GSList*">
              <type name="EBookContacts.Contact"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="respond_get_contact_list_uids"
              c:identifier="e_data_book_respond_get_contact_list_uids"
              version="3.2">
        <doc xml:space="preserve"
             filename="e-data-book.c"
             line="1287">Finishes a call to get list of UIDs which satisfy certain criteria.</doc>
        <source-position filename="e-data-book.h" line="110"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="book" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1289">An #EDataBook</doc>
            <type name="DataBook" c:type="EDataBook*"/>
          </instance-parameter>
          <parameter name="opid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1290">An operation ID</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1291">Operation error, if any, automatically freed if passed it</doc>
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
          <parameter name="uids"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1292">A list of picked UIDs, or %NULL on error</doc>
            <type name="GLib.SList" c:type="const GSList*">
              <type name="utf8"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="respond_modify_contacts"
              c:identifier="e_data_book_respond_modify_contacts"
              version="3.4">
        <doc xml:space="preserve"
             filename="e-data-book.c"
             line="1389">Finishes a call to modify a list of contacts.</doc>
        <source-position filename="e-data-book.h" line="91"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="book" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1391">An #EDataBook</doc>
            <type name="DataBook" c:type="EDataBook*"/>
          </instance-parameter>
          <parameter name="opid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1392">An operation ID</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1393">Operation error, if any, automatically freed if passed it</doc>
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
          <parameter name="contacts"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1394">A list of modified #EContact(s), or %NULL on error</doc>
            <type name="GLib.SList" c:type="const GSList*">
              <type name="EBookContacts.Contact"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="respond_open" c:identifier="e_data_book_respond_open">
        <doc xml:space="preserve"
             filename="e-data-book.c"
             line="1117">Notifies listeners of the completion of the open method call.</doc>
        <source-position filename="e-data-book.h" line="80"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="book" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1119">An #EDataBook</doc>
            <type name="DataBook" c:type="EDataBook*"/>
          </instance-parameter>
          <parameter name="opid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1120">An operation ID</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1121">Operation error, if any, automatically freed if passed it</doc>
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
        </parameters>
      </method>
      <method name="respond_refresh"
              c:identifier="e_data_book_respond_refresh"
              version="3.2">
        <doc xml:space="preserve"
             filename="e-data-book.c"
             line="1153">Notifies listeners of the completion of the refresh method call.</doc>
        <source-position filename="e-data-book.h" line="83"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="book" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1155">An #EDataBook</doc>
            <type name="DataBook" c:type="EDataBook*"/>
          </instance-parameter>
          <parameter name="opid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1156">An operation ID</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1157">Operation error, if any, automatically freed if passed it</doc>
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
        </parameters>
      </method>
      <method name="respond_remove_contacts"
              c:identifier="e_data_book_respond_remove_contacts"
              version="3.4">
        <doc xml:space="preserve"
             filename="e-data-book.c"
             line="1441">Finishes a call to remove a list of contacts.</doc>
        <source-position filename="e-data-book.h" line="96"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="book" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1443">An #EDataBook</doc>
            <type name="DataBook" c:type="EDataBook*"/>
          </instance-parameter>
          <parameter name="opid" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1444">An operation ID</doc>
            <type name="guint32" c:type="guint32"/>
          </parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1445">Operation error, if any, automatically freed if passed it</doc>
            <type name="GLib.Error" c:type="GError*"/>
          </parameter>
          <parameter name="ids"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="1446">A list of removed contact UID-s, or %NULL on error</doc>
            <type name="GLib.SList" c:type="const GSList*">
              <type name="utf8"/>
            </type>
          </parameter>
        </parameters>
      </method>
      <method name="set_locale"
              c:identifier="e_data_book_set_locale"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-data-book.c"
             line="2059">Set's the locale for this addressbook, this can result in renormalization of
locale sensitive data.</doc>
        <source-position filename="e-data-book.h" line="76"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book.c"
               line="2069">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="book" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="2061">an #EDataBook</doc>
            <type name="DataBook" c:type="EDataBook*"/>
          </instance-parameter>
          <parameter name="locale" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="2062">the new locale to set for this book</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book.c"
                 line="2063">a #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <property name="backend"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="BookBackend"/>
      </property>
      <property name="connection"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="Gio.DBusConnection"/>
      </property>
      <property name="object-path"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <field name="parent" readable="0" private="1">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="DataBookPrivate" c:type="EDataBookPrivate*"/>
      </field>
    </class>
    <record name="DataBookClass"
            c:type="EDataBookClass"
            glib:is-gtype-struct-for="DataBook">
      <source-position filename="e-data-book.h" line="63"/>
      <field name="parent_class" readable="0" private="1">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <class name="DataBookCursor"
           c:symbol-prefix="data_book_cursor"
           c:type="EDataBookCursor"
           version="3.12"
           parent="GObject.Object"
           abstract="1"
           glib:type-name="EDataBookCursor"
           glib:get-type="e_data_book_cursor_get_type"
           glib:type-struct="DataBookCursorClass">
      <doc xml:space="preserve"
           filename="e-data-book-cursor.h"
           line="239">An opaque handle for an addressbook cursor</doc>
      <source-position filename="e-data-book-cursor.h" line="276"/>
      <virtual-method name="compare_contact">
        <source-position filename="e-data-book-cursor.h" line="208"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="203">A value that is less than, equal to, or greater than zero if @contact is found,
respectively, to be less than, to match, or be greater than the current value of @cursor.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.h"
                 line="190">an #EDataBookCursor</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </instance-parameter>
          <parameter name="contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.h"
                 line="191">the #EContact to compare with @cursor</doc>
            <type name="EBookContacts.Contact" c:type="EContact*"/>
          </parameter>
          <parameter name="matches_sexp"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.h"
                 line="192">return location to set whether @contact matched @cursor's search expression</doc>
            <type name="gboolean" c:type="gboolean*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="get_position" throws="1">
        <source-position filename="e-data-book-cursor.h" line="182"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="177">%TRUE on Success, otherwise %FALSE is returned if any error occurred
and @error is set to reflect the error which occurred.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.h"
                 line="148">an #EDataBookCursor</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </instance-parameter>
          <parameter name="total"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.h"
                 line="149">The total number of contacts matching @cursor's query expression</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
          <parameter name="position"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.h"
                 line="150">The current position of @cursor in it's result list</doc>
            <type name="gint" c:type="gint*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.h"
                 line="151">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="load_locale" throws="1">
        <source-position filename="e-data-book-cursor.h" line="235"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="230">%TRUE on Success, otherwise %FALSE is returned if any error occurred
and @error is set to reflect the error which occurred.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.h"
                 line="214">an #EDataBookCursor</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </instance-parameter>
          <parameter name="locale"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.h"
                 line="215">return location to store the newly loaded locale</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="set_alphabetic_index" throws="1">
        <source-position filename="e-data-book-cursor.h" line="141"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="136">%TRUE on Success, otherwise %FALSE is returned if any error occurred
and @error is set to reflect the error which occurred.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.h"
                 line="122">an #EDataBookCursor</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.h"
                 line="123">the alphabetic index</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="locale" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.h"
                 line="124">the locale in which @index is expected to be a valid alphabetic index</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="set_sexp" throws="1">
        <source-position filename="e-data-book-cursor.h" line="71"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="66">%TRUE on Success, otherwise %FALSE is returned if any error occurred
and @error is set to reflect the error which occurred.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.h"
                 line="52">an #EDataBookCursor</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </instance-parameter>
          <parameter name="sexp"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.h"
                 line="53">the search expression to set, or %NULL for unfiltered results</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <virtual-method name="step" invoker="step" version="3.12" throws="1">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.c"
             line="791">Steps @cursor through it's sorted query by a maximum of @count contacts
starting from @origin.

If @count is negative, then the cursor will move through the list in reverse.

If @cursor reaches the beginning or end of the query results, then the
returned list might not contain the amount of desired contacts, or might
return no results if the cursor currently points to the last contact.
Reaching the end of the list is not considered an error condition. Attempts
to step beyond the end of the list after having reached the end of the list
will however trigger an %E_CLIENT_ERROR_QUERY_REFUSED error.

If %E_BOOK_CURSOR_STEP_FETCH is specified in @flags, a pointer to
a %NULL #GSList pointer should be provided for the @results parameter.

The result list will be stored to @results and should be freed with g_slist_free()
and all elements freed with g_free().

If a @revision_guard is specified, the cursor implementation will issue an
%E_CLIENT_ERROR_OUT_OF_SYNC error if the @revision_guard does not match
the current addressbook revision.

An explanation of how stepping is expected to behave can be found
in the &lt;link linkend="cursor-iteration"&gt;user facing reference documentation&lt;/link&gt;.</doc>
        <source-position filename="e-data-book-cursor.h" line="111"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.c"
               line="828">The number of contacts traversed if successful, otherwise -1 is
returned and @error is set.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="793">an #EDataBookCursor</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </instance-parameter>
          <parameter name="revision_guard"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="794">The expected current addressbook revision, or %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="795">The #EBookCursorStepFlags for this step</doc>
            <type name="EBookContacts.BookCursorStepFlags"
                  c:type="EBookCursorStepFlags"/>
          </parameter>
          <parameter name="origin" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="796">The #EBookCursorOrigin from whence to step</doc>
            <type name="EBookContacts.BookCursorOrigin"
                  c:type="EBookCursorOrigin"/>
          </parameter>
          <parameter name="count" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="797">a positive or negative amount of contacts to try and fetch</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="results"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="798">
  A return location to store the results, or %NULL if %E_BOOK_CURSOR_STEP_FETCH is not specified in @flags</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="utf8"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="800">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </virtual-method>
      <method name="contact_added"
              c:identifier="e_data_book_cursor_contact_added"
              version="3.12">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.c"
             line="1071">Should be called by addressbook backends whenever a contact
is added.</doc>
        <source-position filename="e-data-book-cursor.h" line="307"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="1073">an #EDataBookCursor</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </instance-parameter>
          <parameter name="contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="1074">the #EContact which was added to the addressbook</doc>
            <type name="EBookContacts.Contact" c:type="EContact*"/>
          </parameter>
        </parameters>
      </method>
      <method name="contact_removed"
              c:identifier="e_data_book_cursor_contact_removed"
              version="3.12">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.c"
             line="1117">Should be called by addressbook backends whenever a contact
is removed.</doc>
        <source-position filename="e-data-book-cursor.h" line="309"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="1119">an #EDataBookCursor</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </instance-parameter>
          <parameter name="contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="1120">the #EContact which was removed from the addressbook</doc>
            <type name="EBookContacts.Contact" c:type="EContact*"/>
          </parameter>
        </parameters>
      </method>
      <method name="get_backend"
              c:identifier="e_data_book_cursor_get_backend"
              version="3.12">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.c"
             line="680">Gets the backend which created and owns @cursor.</doc>
        <source-position filename="e-data-book-cursor.h" line="280"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.c"
               line="686">The #EBookBackend owning @cursor.</doc>
          <type name="BookBackend" c:type="_EBookBackend*"/>
        </return-value>
        <parameters>
          <instance-parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="682">an #EDataBookCursor</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_position"
              c:identifier="e_data_book_cursor_get_position"
              version="3.12">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.c"
             line="716">Fetch the current position of @cursor in its result list.</doc>
        <source-position filename="e-data-book-cursor.h" line="282"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.c"
               line="722">the current position of @cursor</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="718">an #EDataBookCursor</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_total"
              c:identifier="e_data_book_cursor_get_total"
              version="3.12">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.c"
             line="698">Fetch the total number of contacts which match @cursor's query expression.</doc>
        <source-position filename="e-data-book-cursor.h" line="281"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.c"
               line="704">the total contacts for @cursor</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="700">an #EDataBookCursor</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="load_locale"
              c:identifier="e_data_book_cursor_load_locale"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.c"
             line="992">Load the current locale setting from the cursor's underlying database.

Addressbook backends implementing cursors should call this function on all active
cursor when the locale setting changes.

This will implicitly reset @cursor's state and position.</doc>
        <source-position filename="e-data-book-cursor.h" line="303"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.c"
               line="1006">%TRUE on success, otherwise %FALSE is returned and @error is set.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="994">an #EDataBookCursor</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </instance-parameter>
          <parameter name="locale"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="995">return location for the locale</doc>
            <type name="utf8" c:type="gchar**"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="996">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="recalculate"
              c:identifier="e_data_book_cursor_recalculate"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.c"
             line="943">Recalculates the cursor's total and position, this is meant
for cursor created in Direct Read Access mode to synchronously
recalculate the position and total values when the addressbook
revision has changed.</doc>
        <source-position filename="e-data-book-cursor.h" line="300"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.c"
               line="954">%TRUE on success, otherwise %FALSE is returned and @error is set.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="945">an #EDataBookCursor</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </instance-parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="946">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="register_gdbus_object"
              c:identifier="e_data_book_cursor_register_gdbus_object"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.c"
             line="1163">Places @cursor on the @connection at @object_path</doc>
        <source-position filename="e-data-book-cursor.h" line="311"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.c"
               line="1172">%TRUE on success, otherwise %FALSE is returned and @error is set.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="1165">an #EDataBookCursor</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </instance-parameter>
          <parameter name="connection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="1166">the #GDBusConnection to register with</doc>
            <type name="Gio.DBusConnection" c:type="GDBusConnection*"/>
          </parameter>
          <parameter name="object_path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="1167">the object path to place the direct access configuration data</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_alphabetic_index"
              c:identifier="e_data_book_cursor_set_alphabetic_index"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.c"
             line="873">Sets the @cursor position to an
&lt;link linkend="cursor-alphabet"&gt;Alphabetic Index&lt;/link&gt;
into the alphabet active in the @locale of the addressbook.

After setting the target to an alphabetic index, for example the
index for letter 'E', then further calls to e_data_book_cursor_step()
will return results starting with the letter 'E' (or results starting
with the last result in 'D', if moving in a negative direction).

The passed index must be a valid index in @locale, if by some chance
the addressbook backend has changed into a new locale after this
call has been issued, an %E_CLIENT_ERROR_OUT_OF_SYNC error will be
issued indicating that there was a locale mismatch.</doc>
        <source-position filename="e-data-book-cursor.h" line="295"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.c"
               line="895">%TRUE on success, otherwise %FALSE is returned and @error is set.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="875">an #EDataBookCursor</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </instance-parameter>
          <parameter name="index" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="876">the alphabetic index</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="locale" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="877">the locale in which @index is expected to be a valid alphabetic index</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="878">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="set_sexp"
              c:identifier="e_data_book_cursor_set_sexp"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.c"
             line="734">Sets the search expression for the cursor</doc>
        <source-position filename="e-data-book-cursor.h" line="283"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.c"
               line="743">%TRUE on success, otherwise %FALSE is returned and @error is set.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="736">an #EDataBookCursor</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </instance-parameter>
          <parameter name="sexp"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="737">the search expression to set</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="738">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <method name="step"
              c:identifier="e_data_book_cursor_step"
              version="3.12"
              throws="1">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.c"
             line="791">Steps @cursor through it's sorted query by a maximum of @count contacts
starting from @origin.

If @count is negative, then the cursor will move through the list in reverse.

If @cursor reaches the beginning or end of the query results, then the
returned list might not contain the amount of desired contacts, or might
return no results if the cursor currently points to the last contact.
Reaching the end of the list is not considered an error condition. Attempts
to step beyond the end of the list after having reached the end of the list
will however trigger an %E_CLIENT_ERROR_QUERY_REFUSED error.

If %E_BOOK_CURSOR_STEP_FETCH is specified in @flags, a pointer to
a %NULL #GSList pointer should be provided for the @results parameter.

The result list will be stored to @results and should be freed with g_slist_free()
and all elements freed with g_free().

If a @revision_guard is specified, the cursor implementation will issue an
%E_CLIENT_ERROR_OUT_OF_SYNC error if the @revision_guard does not match
the current addressbook revision.

An explanation of how stepping is expected to behave can be found
in the &lt;link linkend="cursor-iteration"&gt;user facing reference documentation&lt;/link&gt;.</doc>
        <source-position filename="e-data-book-cursor.h" line="287"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.c"
               line="828">The number of contacts traversed if successful, otherwise -1 is
returned and @error is set.</doc>
          <type name="gint" c:type="gint"/>
        </return-value>
        <parameters>
          <instance-parameter name="cursor" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="793">an #EDataBookCursor</doc>
            <type name="DataBookCursor" c:type="EDataBookCursor*"/>
          </instance-parameter>
          <parameter name="revision_guard" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="794">The expected current addressbook revision, or %NULL</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="flags" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="795">The #EBookCursorStepFlags for this step</doc>
            <type name="EBookContacts.BookCursorStepFlags"
                  c:type="EBookCursorStepFlags"/>
          </parameter>
          <parameter name="origin" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="796">The #EBookCursorOrigin from whence to step</doc>
            <type name="EBookContacts.BookCursorOrigin"
                  c:type="EBookCursorOrigin"/>
          </parameter>
          <parameter name="count" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="797">a positive or negative amount of contacts to try and fetch</doc>
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="results"
                     direction="out"
                     caller-allocates="0"
                     transfer-ownership="full"
                     optional="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="798">
  A return location to store the results, or %NULL if %E_BOOK_CURSOR_STEP_FETCH is not specified in @flags</doc>
            <type name="GLib.SList" c:type="GSList**">
              <type name="utf8"/>
            </type>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor.c"
                 line="800">A #GCancellable</doc>
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </method>
      <property name="backend"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="BookBackend"/>
      </property>
      <property name="position" transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </property>
      <property name="total" transfer-ownership="none">
        <type name="gint" c:type="gint"/>
      </property>
      <field name="parent" readable="0" private="1">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="DataBookCursorPrivate" c:type="EDataBookCursorPrivate*"/>
      </field>
    </class>
    <class name="DataBookCursorCache"
           c:symbol-prefix="data_book_cursor_cache"
           c:type="EDataBookCursorCache"
           version="3.26"
           parent="DataBookCursor"
           glib:type-name="EDataBookCursorCache"
           glib:get-type="e_data_book_cursor_cache_get_type"
           glib:type-struct="DataBookCursorCacheClass">
      <doc xml:space="preserve"
           filename="e-data-book-cursor-cache.h"
           line="45">An opaque handle for the #EBookCache cursor instance.</doc>
      <source-position filename="e-data-book-cursor-cache.h" line="68"/>
      <constructor name="new"
                   c:identifier="e_data_book_cursor_cache_new"
                   version="3.26"
                   throws="1">
        <doc xml:space="preserve"
             filename="e-data-book-cursor-cache.c"
             line="377">Creates an #EDataBookCursor and implements all of the cursor methods
using the delegate @book_cache object.

This is suitable cursor type for any backend which stores its contacts
using the #EBookCache object. The #EBookMetaBackend does that transparently.</doc>
        <source-position filename="e-data-book-cursor-cache.h" line="72"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-data-book-cursor-cache.c"
               line="392">A newly created #EDataBookCursor, or %NULL if cursor creation failed.</doc>
          <type name="DataBookCursor" c:type="EDataBookCursor*"/>
        </return-value>
        <parameters>
          <parameter name="book_backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor-cache.c"
                 line="379">the #EBookBackend creating this cursor</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </parameter>
          <parameter name="book_cache" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor-cache.c"
                 line="380">the #EBookCache object to base this cursor on</doc>
            <type name="BookCache" c:type="EBookCache*"/>
          </parameter>
          <parameter name="sort_fields" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor-cache.c"
                 line="381">an array of #EContactFields as sort keys in order of priority</doc>
            <array length="4"
                   zero-terminated="0"
                   c:type="const EContactField*">
              <type name="EBookContacts.ContactField" c:type="EContactField"/>
            </array>
          </parameter>
          <parameter name="sort_types" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor-cache.c"
                 line="382">an array of #EBookCursorSortTypes, one for each field in @sort_fields</doc>
            <array length="4"
                   zero-terminated="0"
                   c:type="const EBookCursorSortType*">
              <type name="EBookContacts.BookCursorSortType"
                    c:type="EBookCursorSortType"/>
            </array>
          </parameter>
          <parameter name="n_fields" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor-cache.c"
                 line="383">the number of fields to sort results by.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </constructor>
      <property name="book-cache"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="BookCache"/>
      </property>
      <property name="cursor"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="gpointer" c:type="gpointer"/>
      </property>
      <field name="parent" readable="0" private="1">
        <type name="DataBookCursor" c:type="EDataBookCursor"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="DataBookCursorCachePrivate"
              c:type="EDataBookCursorCachePrivate*"/>
      </field>
    </class>
    <record name="DataBookCursorCacheClass"
            c:type="EDataBookCursorCacheClass"
            glib:is-gtype-struct-for="DataBookCursorCache"
            version="3.26">
      <doc xml:space="preserve"
           filename="e-data-book-cursor-cache.h"
           line="58">The #EBookCache cursor class structure.</doc>
      <source-position filename="e-data-book-cursor-cache.h" line="68"/>
      <field name="parent" readable="0" private="1">
        <type name="DataBookCursorClass" c:type="EDataBookCursorClass"/>
      </field>
    </record>
    <record name="DataBookCursorCachePrivate"
            c:type="EDataBookCursorCachePrivate"
            disguised="1">
      <source-position filename="e-data-book-cursor-cache.h" line="43"/>
    </record>
    <record name="DataBookCursorClass"
            c:type="EDataBookCursorClass"
            glib:is-gtype-struct-for="DataBookCursor"
            version="3.12">
      <doc xml:space="preserve"
           filename="e-data-book-cursor.h"
           line="252">Methods to implement on an #EDataBookCursor concrete class.</doc>
      <source-position filename="e-data-book-cursor.h" line="276"/>
      <field name="parent" readable="0" private="1">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
      <field name="set_sexp">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.h"
             line="254">The #EDataBookCursorSetSexpFunc delegate to set the search expression</doc>
        <type name="DataBookCursorSetSexpFunc"
              c:type="EDataBookCursorSetSexpFunc"/>
      </field>
      <field name="step">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.h"
             line="255">The #EDataBookCursorStepFunc delegate to navigate the cursor</doc>
        <type name="DataBookCursorStepFunc" c:type="EDataBookCursorStepFunc"/>
      </field>
      <field name="set_alphabetic_index">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.h"
             line="256">The #EDataBookCursorSetAlphabetIndexFunc delegate to set the alphabetic position</doc>
        <type name="DataBookCursorSetAlphabetIndexFunc"
              c:type="EDataBookCursorSetAlphabetIndexFunc"/>
      </field>
      <field name="get_position">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.h"
             line="257">The #EDataBookCursorGetPositionFunc delegate to calculate the current total and position values</doc>
        <type name="DataBookCursorGetPositionFunc"
              c:type="EDataBookCursorGetPositionFunc"/>
      </field>
      <field name="compare_contact">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.h"
             line="258">The #EDataBookCursorCompareContactFunc delegate to compare an #EContact with the the cursor position</doc>
        <type name="DataBookCursorCompareContactFunc"
              c:type="EDataBookCursorCompareContactFunc"/>
      </field>
      <field name="load_locale">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.h"
             line="259">The #EDataBookCursorLoadLocaleFunc delegate used to reload the locale setting</doc>
        <type name="DataBookCursorLoadLocaleFunc"
              c:type="EDataBookCursorLoadLocaleFunc"/>
      </field>
    </record>
    <callback name="DataBookCursorCompareContactFunc"
              c:type="EDataBookCursorCompareContactFunc"
              version="3.12">
      <doc xml:space="preserve"
           filename="e-data-book-cursor.h"
           line="188">Method type for #EDataBookCursorClass.compare_contact()

Cursor implementations must implement this in order to compare a
contact with the current cursor state.

This is called when the addressbook backends notify active cursors
that the addressbook has been modified with e_data_book_cursor_contact_added() and
e_data_book_cursor_contact_removed().</doc>
      <source-position filename="e-data-book-cursor.h" line="208"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.h"
             line="203">A value that is less than, equal to, or greater than zero if @contact is found,
respectively, to be less than, to match, or be greater than the current value of @cursor.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="cursor" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="190">an #EDataBookCursor</doc>
          <type name="DataBookCursor" c:type="EDataBookCursor*"/>
        </parameter>
        <parameter name="contact" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="191">the #EContact to compare with @cursor</doc>
          <type name="EBookContacts.Contact" c:type="EContact*"/>
        </parameter>
        <parameter name="matches_sexp"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   optional="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="192">return location to set whether @contact matched @cursor's search expression</doc>
          <type name="gboolean" c:type="gboolean*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="DataBookCursorGetPositionFunc"
              c:type="EDataBookCursorGetPositionFunc"
              version="3.12"
              throws="1">
      <doc xml:space="preserve"
           filename="e-data-book-cursor.h"
           line="146">Method type for #EDataBookCursorClass.get_position()

Cursor implementations must implement this to count the total results
matching @cursor's query expression and to calculate the amount of contacts
leading up to the current cursor state (cursor inclusive).

A cursor position is defined as an integer which is inclusive of the
current contact to which it points (if the cursor points to an exact
contact). A position of 0 indicates that the cursor is situated in
a position that is before and after the entire result set. The cursor
position should be 0 at creation time, and should start again from
the symbolic 0 position whenever %E_BOOK_CURSOR_ORIGIN_BEGIN is
specified in the #EDataBookCursorClass.step() method (or whenever
moving the cursor beyond the end of the result set).

If the cursor is positioned beyond the end of the list, then
the position should be the total amount of contacts available
in the list (as returned through the @total argument) plus one.

This method is called by e_data_book_cursor_recalculate() and in some
other cases where @cursor's current position and total must be
recalculated from scratch.</doc>
      <source-position filename="e-data-book-cursor.h" line="182"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.h"
             line="177">%TRUE on Success, otherwise %FALSE is returned if any error occurred
and @error is set to reflect the error which occurred.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="cursor" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="148">an #EDataBookCursor</doc>
          <type name="DataBookCursor" c:type="EDataBookCursor*"/>
        </parameter>
        <parameter name="total"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="149">The total number of contacts matching @cursor's query expression</doc>
          <type name="gint" c:type="gint*"/>
        </parameter>
        <parameter name="position"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="150">The current position of @cursor in it's result list</doc>
          <type name="gint" c:type="gint*"/>
        </parameter>
        <parameter name="cancellable"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="151">A #GCancellable</doc>
          <type name="Gio.Cancellable" c:type="GCancellable*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="DataBookCursorLoadLocaleFunc"
              c:type="EDataBookCursorLoadLocaleFunc"
              version="3.12"
              throws="1">
      <doc xml:space="preserve"
           filename="e-data-book-cursor.h"
           line="212">Method type for #EDataBookCursorClass.load_locale()

Fetches the locale setting from @cursor's addressbook

If the locale setting has changed, the cursor must reload any
internal locale specific data and ensure that comparisons of
sort keys will function properly in the new locale.

Upon locale changes, the implementation need not worry about
updating it's current cursor state, the cursor state will be
reset automatically for you.</doc>
      <source-position filename="e-data-book-cursor.h" line="235"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.h"
             line="230">%TRUE on Success, otherwise %FALSE is returned if any error occurred
and @error is set to reflect the error which occurred.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="cursor" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="214">an #EDataBookCursor</doc>
          <type name="DataBookCursor" c:type="EDataBookCursor*"/>
        </parameter>
        <parameter name="locale"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="215">return location to store the newly loaded locale</doc>
          <type name="utf8" c:type="gchar**"/>
        </parameter>
      </parameters>
    </callback>
    <record name="DataBookCursorPrivate"
            c:type="EDataBookCursorPrivate"
            disguised="1">
      <source-position filename="e-data-book-cursor.h" line="43"/>
    </record>
    <callback name="DataBookCursorSetAlphabetIndexFunc"
              c:type="EDataBookCursorSetAlphabetIndexFunc"
              version="3.12"
              throws="1">
      <doc xml:space="preserve"
           filename="e-data-book-cursor.h"
           line="120">Method type for #EDataBookCursorClass.set_alphabetic_index()

Sets the cursor state to point to an
&lt;link linkend="cursor-alphabet"&gt;index into the active alphabet&lt;/link&gt;.

The implementing class must check that @locale matches the current
locale setting of the underlying database and report an %E_CLIENT_ERROR_OUT_OF_SYNC
error in the case that the locales do not match.</doc>
      <source-position filename="e-data-book-cursor.h" line="141"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.h"
             line="136">%TRUE on Success, otherwise %FALSE is returned if any error occurred
and @error is set to reflect the error which occurred.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="cursor" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="122">an #EDataBookCursor</doc>
          <type name="DataBookCursor" c:type="EDataBookCursor*"/>
        </parameter>
        <parameter name="index" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="123">the alphabetic index</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="locale" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="124">the locale in which @index is expected to be a valid alphabetic index</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
      </parameters>
    </callback>
    <callback name="DataBookCursorSetSexpFunc"
              c:type="EDataBookCursorSetSexpFunc"
              version="3.12"
              throws="1">
      <doc xml:space="preserve"
           filename="e-data-book-cursor.h"
           line="50">Method type for #EDataBookCursorClass.set_sexp()

A cursor implementation must implement this in order to modify the search
expression for @cursor. After this is called, the position and total will
be recalculated.

If the cursor implementation is unable to deal with the #EContactFields
referred to in @sexp, then an %E_CLIENT_ERROR_INVALID_QUERY error should
be set to indicate this.</doc>
      <source-position filename="e-data-book-cursor.h" line="71"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.h"
             line="66">%TRUE on Success, otherwise %FALSE is returned if any error occurred
and @error is set to reflect the error which occurred.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="cursor" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="52">an #EDataBookCursor</doc>
          <type name="DataBookCursor" c:type="EDataBookCursor*"/>
        </parameter>
        <parameter name="sexp"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.h"
               line="53">the search expression to set, or %NULL for unfiltered results</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
      </parameters>
    </callback>
    <class name="DataBookCursorSqlite"
           c:symbol-prefix="data_book_cursor_sqlite"
           c:type="EDataBookCursorSqlite"
           version="3.12"
           parent="DataBookCursor"
           glib:type-name="EDataBookCursorSqlite"
           glib:get-type="e_data_book_cursor_sqlite_get_type"
           glib:type-struct="DataBookCursorSqliteClass">
      <doc xml:space="preserve"
           filename="e-data-book-cursor-sqlite.h"
           line="44">An opaque handle for the SQLite cursor instance.</doc>
      <source-position filename="e-data-book-cursor-sqlite.h" line="67"/>
      <constructor name="new"
                   c:identifier="e_data_book_cursor_sqlite_new"
                   version="3.12"
                   throws="1">
        <doc xml:space="preserve"
             filename="e-data-book-cursor-sqlite.c"
             line="491">Creates an #EDataBookCursor and implements all of the cursor methods
using the delegate @ebsql object.

This is a suitable cursor type for any backend which stores its contacts
using the #EBookSqlite object.</doc>
        <source-position filename="e-data-book-cursor-sqlite.h" line="70"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-data-book-cursor-sqlite.c"
               line="507">A newly created #EDataBookCursor, or %NULL if cursor creation failed.</doc>
          <type name="DataBookCursor" c:type="EDataBookCursor*"/>
        </return-value>
        <parameters>
          <parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor-sqlite.c"
                 line="493">the #EBookBackend creating this cursor</doc>
            <type name="BookBackend" c:type="EBookBackend*"/>
          </parameter>
          <parameter name="ebsql" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor-sqlite.c"
                 line="494">the #EBookSqlite object to base this cursor on</doc>
            <type name="BookSqlite" c:type="EBookSqlite*"/>
          </parameter>
          <parameter name="revision_key" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor-sqlite.c"
                 line="495">The key name to consult for the current overall contacts database revision</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="sort_fields" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor-sqlite.c"
                 line="496">an array of #EContactFields as sort keys in order of priority</doc>
            <array length="5"
                   zero-terminated="0"
                   c:type="const EContactField*">
              <type name="EBookContacts.ContactField" c:type="EContactField"/>
            </array>
          </parameter>
          <parameter name="sort_types" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor-sqlite.c"
                 line="497">an array of #EBookCursorSortTypes, one for each field in @sort_fields</doc>
            <array length="5"
                   zero-terminated="0"
                   c:type="const EBookCursorSortType*">
              <type name="EBookContacts.BookCursorSortType"
                    c:type="EBookCursorSortType"/>
            </array>
          </parameter>
          <parameter name="n_fields" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-cursor-sqlite.c"
                 line="498">the number of fields to sort results by.</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
        </parameters>
      </constructor>
      <property name="cursor"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="gpointer" c:type="gpointer"/>
      </property>
      <property name="ebsql"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="BookSqlite"/>
      </property>
      <property name="revision-key"
                readable="0"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <field name="parent" readable="0" private="1">
        <type name="DataBookCursor" c:type="EDataBookCursor"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="DataBookCursorSqlitePrivate"
              c:type="EDataBookCursorSqlitePrivate*"/>
      </field>
    </class>
    <record name="DataBookCursorSqliteClass"
            c:type="EDataBookCursorSqliteClass"
            glib:is-gtype-struct-for="DataBookCursorSqlite"
            version="3.12">
      <doc xml:space="preserve"
           filename="e-data-book-cursor-sqlite.h"
           line="57">The SQLite cursor class structure.</doc>
      <source-position filename="e-data-book-cursor-sqlite.h" line="67"/>
      <field name="parent" readable="0" private="1">
        <type name="DataBookCursorClass" c:type="EDataBookCursorClass"/>
      </field>
    </record>
    <record name="DataBookCursorSqlitePrivate"
            c:type="EDataBookCursorSqlitePrivate"
            disguised="1">
      <source-position filename="e-data-book-cursor-sqlite.h" line="42"/>
    </record>
    <callback name="DataBookCursorStepFunc"
              c:type="EDataBookCursorStepFunc"
              version="3.12"
              throws="1">
      <doc xml:space="preserve"
           filename="e-data-book-cursor.h"
           line="75">Method type for #EDataBookCursorClass.step()

As all cursor methods may be called either by the addressbook service or
directly by a client in Direct Read Access mode, it is important that the
operation be an atomic transaction with the underlying database.

The @revision_guard, if specified, will be set to the %CLIENT_BACKEND_PROPERTY_REVISION
value at the time which the given client issued the call to move the cursor.
If the @revision_guard provided by the client does not match the stored addressbook
revision, then an %E_CLIENT_ERROR_OUT_OF_SYNC error should be set to indicate
that the revision was out of sync while attempting to move the cursor.

&lt;note&gt;&lt;para&gt;If the addressbook backend supports direct read access, then the
revision comparison and reading of the data store must be coupled into a
single atomic operation (the data read back from the store must be the correct
data for the given addressbook revision).&lt;/para&gt;&lt;/note&gt;

See e_data_book_cursor_step() for more details on the expected behaviour of this method.</doc>
      <source-position filename="e-data-book-cursor.h" line="111"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="e-data-book-cursor.c"
             line="828">The number of contacts traversed if successful, otherwise -1 is
returned and @error is set.</doc>
        <type name="gint" c:type="gint"/>
      </return-value>
      <parameters>
        <parameter name="cursor" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.c"
               line="793">an #EDataBookCursor</doc>
          <type name="DataBookCursor" c:type="EDataBookCursor*"/>
        </parameter>
        <parameter name="revision_guard"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.c"
               line="794">The expected current addressbook revision, or %NULL</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="flags" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.c"
               line="795">The #EBookCursorStepFlags for this step</doc>
          <type name="EBookContacts.BookCursorStepFlags"
                c:type="EBookCursorStepFlags"/>
        </parameter>
        <parameter name="origin" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.c"
               line="796">The #EBookCursorOrigin from whence to step</doc>
          <type name="EBookContacts.BookCursorOrigin"
                c:type="EBookCursorOrigin"/>
        </parameter>
        <parameter name="count" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.c"
               line="797">a positive or negative amount of contacts to try and fetch</doc>
          <type name="gint" c:type="gint"/>
        </parameter>
        <parameter name="results"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full"
                   optional="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.c"
               line="798">
  A return location to store the results, or %NULL if %E_BOOK_CURSOR_STEP_FETCH is not specified in @flags</doc>
          <type name="GLib.SList" c:type="GSList**">
            <type name="utf8"/>
          </type>
        </parameter>
        <parameter name="cancellable"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="e-data-book-cursor.c"
               line="800">A #GCancellable</doc>
          <type name="Gio.Cancellable" c:type="GCancellable*"/>
        </parameter>
      </parameters>
    </callback>
    <class name="DataBookDirect"
           c:symbol-prefix="data_book_direct"
           c:type="EDataBookDirect"
           parent="GObject.Object"
           glib:type-name="EDataBookDirect"
           glib:get-type="e_data_book_direct_get_type"
           glib:type-struct="DataBookDirectClass">
      <source-position filename="e-data-book-direct.h" line="49"/>
      <constructor name="new"
                   c:identifier="e_data_book_direct_new"
                   version="3.8">
        <doc xml:space="preserve"
             filename="e-data-book-direct.c"
             line="80">Creates a #EDataBookDirect to report configuration data needed for direct
read access.

This is returned by e_book_backend_get_direct_book() for backends
which support direct read access mode.</doc>
        <source-position filename="e-data-book-direct.h" line="52"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-data-book-direct.c"
               line="92">A newly created #EDataBookDirect</doc>
          <type name="DataBookDirect" c:type="EDataBookDirect*"/>
        </return-value>
        <parameters>
          <parameter name="backend_path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-direct.c"
                 line="82">Full path to the installed backend shared library</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="backend_factory_name" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-direct.c"
                 line="83">Type name of the EBookBackendFactory implemented by the library</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="config" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-direct.c"
                 line="84">A backend specific configuration string</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="register_gdbus_object"
              c:identifier="e_data_book_direct_register_gdbus_object"
              version="3.8"
              throws="1">
        <doc xml:space="preserve"
             filename="e-data-book-direct.c"
             line="115">Places @direct on the @connection at @object_path</doc>
        <source-position filename="e-data-book-direct.h" line="56"/>
        <return-value transfer-ownership="none">
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="direct" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-direct.c"
                 line="117">An #EDataBookDirect</doc>
            <type name="DataBookDirect" c:type="EDataBookDirect*"/>
          </instance-parameter>
          <parameter name="connection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-direct.c"
                 line="118">The #GDBusConnection to register with</doc>
            <type name="Gio.DBusConnection" c:type="GDBusConnection*"/>
          </parameter>
          <parameter name="object_path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-direct.c"
                 line="119">The object path to place the direct access configuration data</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="DataBookDirectPrivate" c:type="EDataBookDirectPrivate*"/>
      </field>
    </class>
    <record name="DataBookDirectClass"
            c:type="EDataBookDirectClass"
            glib:is-gtype-struct-for="DataBookDirect">
      <source-position filename="e-data-book-direct.h" line="49"/>
      <field name="parent">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <record name="DataBookDirectPrivate"
            c:type="EDataBookDirectPrivate"
            disguised="1">
      <source-position filename="e-data-book-direct.h" line="40"/>
    </record>
    <class name="DataBookFactory"
           c:symbol-prefix="data_book_factory"
           c:type="EDataBookFactory"
           parent="EBackend.DataFactory"
           glib:type-name="EDataBookFactory"
           glib:get-type="e_data_book_factory_get_type"
           glib:type-struct="DataBookFactoryClass">
      <source-position filename="e-data-book-factory.h" line="77"/>
      <implements name="EDataServer.Extensible"/>
      <implements name="Gio.Initable"/>
      <constructor name="new"
                   c:identifier="e_data_book_factory_new"
                   throws="1">
        <source-position filename="e-data-book-factory.h" line="80"/>
        <return-value transfer-ownership="full">
          <type name="EBackend.DBusServer" c:type="EDBusServer*"/>
        </return-value>
        <parameters>
          <parameter name="backend_per_process" transfer-ownership="none">
            <type name="gint" c:type="gint"/>
          </parameter>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </constructor>
      <field name="parent">
        <type name="EBackend.DataFactory" c:type="EDataFactory"/>
      </field>
      <field name="priv">
        <type name="DataBookFactoryPrivate" c:type="EDataBookFactoryPrivate*"/>
      </field>
    </class>
    <record name="DataBookFactoryClass"
            c:type="EDataBookFactoryClass"
            glib:is-gtype-struct-for="DataBookFactory">
      <source-position filename="e-data-book-factory.h" line="77"/>
      <field name="parent_class">
        <type name="EBackend.DataFactoryClass" c:type="EDataFactoryClass"/>
      </field>
    </record>
    <record name="DataBookFactoryPrivate"
            c:type="EDataBookFactoryPrivate"
            disguised="1">
      <source-position filename="e-data-book-factory.h" line="68"/>
    </record>
    <record name="DataBookPrivate" c:type="EDataBookPrivate" disguised="1">
      <source-position filename="e-data-book.h" line="52"/>
    </record>
    <class name="DataBookView"
           c:symbol-prefix="data_book_view"
           c:type="EDataBookView"
           parent="GObject.Object"
           glib:type-name="EDataBookView"
           glib:get-type="e_data_book_view_get_type"
           glib:type-struct="DataBookViewClass">
      <source-position filename="e-data-book-view.h" line="68"/>
      <implements name="Gio.Initable"/>
      <constructor name="new" c:identifier="e_data_book_view_new" throws="1">
        <doc xml:space="preserve"
             filename="e-data-book-view.c"
             line="682">Creates a new #EDataBookView and exports its D-Bus interface on
@connection at @object_path.  If an error occurs while exporting,
the function sets @error and returns %NULL.</doc>
        <source-position filename="e-data-book-view.h" line="71"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-data-book-view.c"
               line="694">an #EDataBookView</doc>
          <type name="DataBookView" c:type="EDataBookView*"/>
        </return-value>
        <parameters>
          <parameter name="backend" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="684">an #EBookBackend</doc>
            <type name="BookBackend" c:type="_EBookBackend*"/>
          </parameter>
          <parameter name="sexp" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="685">an #EBookBackendSExp</doc>
            <type name="BookBackendSExp" c:type="EBookBackendSExp*"/>
          </parameter>
          <parameter name="connection" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="686">a #GDBusConnection</doc>
            <type name="Gio.DBusConnection" c:type="GDBusConnection*"/>
          </parameter>
          <parameter name="object_path" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="687">an object path for the view</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </constructor>
      <method name="get_connection"
              c:identifier="e_data_book_view_get_connection"
              version="3.8">
        <doc xml:space="preserve"
             filename="e-data-book-view.c"
             line="777">Returns the #GDBusConnection on which the AddressBookView D-Bus
interface is exported.</doc>
        <source-position filename="e-data-book-view.h" line="83"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-view.c"
               line="784">the #GDBusConnection</doc>
          <type name="Gio.DBusConnection" c:type="GDBusConnection*"/>
        </return-value>
        <parameters>
          <instance-parameter name="view" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="779">an #EDataBookView</doc>
            <type name="DataBookView" c:type="EDataBookView*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_fields_of_interest"
              c:identifier="e_data_book_view_get_fields_of_interest">
        <source-position filename="e-data-book-view.h" line="113"/>
        <return-value transfer-ownership="none" nullable="1">
          <doc xml:space="preserve"
               filename="e-data-book-view.c"
               line="1222">Hash table of field names which
the listener is interested in. Backends can return fully populated objects, but the listener
advertised that it will use only these. Returns %NULL for all available fields.

Note: The data pointer in the hash table has no special meaning, it's
only GINT_TO_POINTER(1) for easier checking. Also, field names are
compared case insensitively.</doc>
          <type name="GLib.HashTable" c:type="GHashTable*">
            <type name="utf8"/>
            <type name="gint"/>
          </type>
        </return-value>
        <parameters>
          <instance-parameter name="view" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="1220">an #EDataBookView</doc>
            <type name="DataBookView" c:type="EDataBookView*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_flags"
              c:identifier="e_data_book_view_get_flags"
              version="3.4">
        <doc xml:space="preserve"
             filename="e-data-book-view.c"
             line="815">Gets the #EBookClientViewFlags that control the behaviour of @view.</doc>
        <source-position filename="e-data-book-view.h" line="89"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-view.c"
               line="821">the flags for @view.</doc>
          <type name="EBookContacts.BookClientViewFlags"
                c:type="EBookClientViewFlags"/>
        </return-value>
        <parameters>
          <instance-parameter name="view" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="817">an #EDataBookView</doc>
            <type name="DataBookView" c:type="EDataBookView*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_object_path"
              c:identifier="e_data_book_view_get_object_path"
              version="3.8">
        <doc xml:space="preserve"
             filename="e-data-book-view.c"
             line="796">Returns the object path at which the AddressBookView D-Bus interface
is exported.</doc>
        <source-position filename="e-data-book-view.h" line="84"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-view.c"
               line="803">the object path</doc>
          <type name="utf8" c:type="const gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="view" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="798">an #EDataBookView</doc>
            <type name="DataBookView" c:type="EDataBookView*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="get_sexp"
              c:identifier="e_data_book_view_get_sexp"
              version="3.8">
        <doc xml:space="preserve"
             filename="e-data-book-view.c"
             line="759">Gets the s-expression used for matching contacts to @view.</doc>
        <source-position filename="e-data-book-view.h" line="87"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-view.c"
               line="765">The #EBookBackendSExp used.</doc>
          <type name="BookBackendSExp" c:type="EBookBackendSExp*"/>
        </return-value>
        <parameters>
          <instance-parameter name="view" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="761">an #EDataBookView</doc>
            <type name="DataBookView" c:type="EDataBookView*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="is_completed"
              c:identifier="e_data_book_view_is_completed"
              version="3.34">
        <source-position filename="e-data-book-view.h" line="90"/>
        <return-value transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-data-book-view.c"
               line="837">whether the @view had been completed; that is,
   whether e_data_book_view_notify_complete() had been called
   since the @view had been started.</doc>
          <type name="gboolean" c:type="gboolean"/>
        </return-value>
        <parameters>
          <instance-parameter name="view" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="835">an #EDataBookView</doc>
            <type name="DataBookView" c:type="EDataBookView*"/>
          </instance-parameter>
        </parameters>
      </method>
      <method name="notify_complete"
              c:identifier="e_data_book_view_notify_complete">
        <doc xml:space="preserve"
             filename="e-data-book-view.c"
             line="1135">Notifies listeners that all pending updates on @view
have been sent. The listener's information should now be
in sync with the backend's.</doc>
        <source-position filename="e-data-book-view.h" line="105"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="view" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="1137">an #EDataBookView</doc>
            <type name="DataBookView" c:type="EDataBookView*"/>
          </instance-parameter>
          <parameter name="error" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="1138">the error of the query, if any</doc>
            <type name="GLib.Error" c:type="const GError*"/>
          </parameter>
        </parameters>
      </method>
      <method name="notify_progress"
              c:identifier="e_data_book_view_notify_progress"
              version="3.2">
        <doc xml:space="preserve"
             filename="e-data-book-view.c"
             line="1187">Provides listeners with a human-readable text describing the
current backend operation. This can be used for progress
reporting.</doc>
        <source-position filename="e-data-book-view.h" line="108"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="view" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="1189">an #EDataBookView</doc>
            <type name="DataBookView" c:type="EDataBookView*"/>
          </instance-parameter>
          <parameter name="percent" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="1190">percent done; use -1 when not available</doc>
            <type name="guint" c:type="guint"/>
          </parameter>
          <parameter name="message" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="1191">a text message</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="notify_remove"
              c:identifier="e_data_book_view_notify_remove">
        <doc xml:space="preserve"
             filename="e-data-book-view.c"
             line="1109">Notify listeners that a contact specified by @id
was removed from @view.</doc>
        <source-position filename="e-data-book-view.h" line="103"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="view" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="1111">an #EDataBookView</doc>
            <type name="DataBookView" c:type="EDataBookView*"/>
          </instance-parameter>
          <parameter name="id" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="1112">a unique contact ID</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="notify_update"
              c:identifier="e_data_book_view_notify_update">
        <doc xml:space="preserve"
             filename="e-data-book-view.c"
             line="957">Notify listeners that @contact has changed. This can
trigger an add, change or removal event depending on
whether the change causes the contact to start matching,
no longer match, or stay matching the query specified
by @view.</doc>
        <source-position filename="e-data-book-view.h" line="91"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="view" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="959">an #EDataBookView</doc>
            <type name="DataBookView" c:type="EDataBookView*"/>
          </instance-parameter>
          <parameter name="contact" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="960">an #EContact</doc>
            <type name="EBookContacts.Contact" c:type="const EContact*"/>
          </parameter>
        </parameters>
      </method>
      <method name="notify_update_prefiltered_vcard"
              c:identifier="e_data_book_view_notify_update_prefiltered_vcard">
        <doc xml:space="preserve"
             filename="e-data-book-view.c"
             line="1062">Notify listeners that @vcard has changed. This can
trigger an add, change or removal event depending on
whether the change causes the contact to start matching,
no longer match, or stay matching the query specified
by @view.  This method should be preferred over
e_data_book_view_notify_update() when the native
representation of a contact is a vCard.

The important difference between this method and
e_data_book_view_notify_update() and
e_data_book_view_notify_update_vcard() is
that it doesn't match the contact against the book view query to see if it
should be included, it assumes that this has been done and the contact is
known to exist in the view.</doc>
        <source-position filename="e-data-book-view.h" line="98"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="view" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="1064">an #EDataBookView</doc>
            <type name="DataBookView" c:type="EDataBookView*"/>
          </instance-parameter>
          <parameter name="id" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="1065">the UID of this contact</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="vcard" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="1066">a plain vCard</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="notify_update_vcard"
              c:identifier="e_data_book_view_notify_update_vcard">
        <doc xml:space="preserve"
             filename="e-data-book-view.c"
             line="1010">Notify listeners that @vcard has changed. This can
trigger an add, change or removal event depending on
whether the change causes the contact to start matching,
no longer match, or stay matching the query specified
by @view.  This method should be preferred over
e_data_book_view_notify_update() when the native
representation of a contact is a vCard.</doc>
        <source-position filename="e-data-book-view.h" line="94"/>
        <return-value transfer-ownership="none">
          <type name="none" c:type="void"/>
        </return-value>
        <parameters>
          <instance-parameter name="view" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="1012">an #EDataBookView</doc>
            <type name="DataBookView" c:type="EDataBookView*"/>
          </instance-parameter>
          <parameter name="id" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="1013">a unique id of the @vcard</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
          <parameter name="vcard" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="1014">a plain vCard</doc>
            <type name="utf8" c:type="const gchar*"/>
          </parameter>
        </parameters>
      </method>
      <method name="ref_backend"
              c:identifier="e_data_book_view_ref_backend"
              version="3.34">
        <doc xml:space="preserve"
             filename="e-data-book-view.c"
             line="716">Refs the backend that @view is querying. Unref the returned backend,
if not %NULL, with g_object_unref(), when no longer needed.</doc>
        <source-position filename="e-data-book-view.h" line="77"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="e-data-book-view.c"
               line="723">The associated #EBookBackend.</doc>
          <type name="BookBackend" c:type="_EBookBackend*"/>
        </return-value>
        <parameters>
          <instance-parameter name="view" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-data-book-view.c"
                 line="718">an #EDataBookView</doc>
            <type name="DataBookView" c:type="EDataBookView*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="backend"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="BookBackend"/>
      </property>
      <property name="connection"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="Gio.DBusConnection"/>
      </property>
      <property name="object-path"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="utf8" c:type="gchar*"/>
      </property>
      <property name="sexp"
                writable="1"
                construct-only="1"
                transfer-ownership="none">
        <type name="BookBackendSExp"/>
      </property>
      <field name="parent">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv">
        <type name="DataBookViewPrivate" c:type="EDataBookViewPrivate*"/>
      </field>
    </class>
    <record name="DataBookViewClass"
            c:type="EDataBookViewClass"
            glib:is-gtype-struct-for="DataBookView">
      <source-position filename="e-data-book-view.h" line="68"/>
      <field name="parent">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <record name="DataBookViewPrivate"
            c:type="EDataBookViewPrivate"
            disguised="1">
      <source-position filename="e-data-book-view.h" line="59"/>
    </record>
    <constant name="EDS_ADDRESS_BOOK_MODULES"
              value="EDS_ADDRESS_BOOK_MODULES"
              c:type="EDS_ADDRESS_BOOK_MODULES">
      <doc xml:space="preserve"
           filename="e-data-book-factory.h"
           line="48">This environment variable configures where the address book
factory loads it's backend modules from.</doc>
      <source-position filename="e-data-book-factory.h" line="53"/>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <constant name="EDS_SUBPROCESS_BOOK_PATH"
              value="EDS_SUBPROCESS_BOOK_PATH"
              c:type="EDS_SUBPROCESS_BOOK_PATH">
      <doc xml:space="preserve"
           filename="e-data-book-factory.h"
           line="56">This environment variable configures where the address book
factory subprocess is located in.</doc>
      <source-position filename="e-data-book-factory.h" line="61"/>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <function-macro name="IS_BOOK_BACKEND"
                    c:identifier="E_IS_BOOK_BACKEND"
                    introspectable="0">
      <source-position filename="e-book-backend.h" line="46"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_BACKEND_CACHE"
                    c:identifier="E_IS_BOOK_BACKEND_CACHE"
                    introspectable="0">
      <source-position filename="e-book-backend-cache.h" line="42"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_BACKEND_CACHE_CLASS"
                    c:identifier="E_IS_BOOK_BACKEND_CACHE_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-cache.h" line="45"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_BACKEND_CLASS"
                    c:identifier="E_IS_BOOK_BACKEND_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend.h" line="49"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_BACKEND_FACTORY"
                    c:identifier="E_IS_BOOK_BACKEND_FACTORY"
                    introspectable="0">
      <source-position filename="e-book-backend-factory.h" line="38"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_BACKEND_FACTORY_CLASS"
                    c:identifier="E_IS_BOOK_BACKEND_FACTORY_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-factory.h" line="41"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_BACKEND_SEXP"
                    c:identifier="E_IS_BOOK_BACKEND_SEXP"
                    introspectable="0">
      <source-position filename="e-book-backend-sexp.h" line="39"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_BACKEND_SEXP_CLASS"
                    c:identifier="E_IS_BOOK_BACKEND_SEXP_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-sexp.h" line="42"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_BACKEND_SQLITEDB"
                    c:identifier="E_IS_BOOK_BACKEND_SQLITEDB"
                    introspectable="0">
      <source-position filename="e-book-backend-sqlitedb.h" line="42"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_BACKEND_SQLITEDB_CLASS"
                    c:identifier="E_IS_BOOK_BACKEND_SQLITEDB_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-sqlitedb.h" line="45"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_BACKEND_SUMMARY"
                    c:identifier="E_IS_BOOK_BACKEND_SUMMARY"
                    introspectable="0">
      <source-position filename="e-book-backend-summary.h" line="39"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_BACKEND_SUMMARY_CLASS"
                    c:identifier="E_IS_BOOK_BACKEND_SUMMARY_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-summary.h" line="42"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_BACKEND_SYNC"
                    c:identifier="E_IS_BOOK_BACKEND_SYNC"
                    introspectable="0">
      <source-position filename="e-book-backend-sync.h" line="45"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_BACKEND_SYNC_CLASS"
                    c:identifier="E_IS_BOOK_BACKEND_SYNC_CLASS"
                    introspectable="0">
      <source-position filename="e-book-backend-sync.h" line="48"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_CACHE"
                    c:identifier="E_IS_BOOK_CACHE"
                    introspectable="0">
      <source-position filename="e-book-cache.h" line="38"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_CACHE_CLASS"
                    c:identifier="E_IS_BOOK_CACHE_CLASS"
                    introspectable="0">
      <source-position filename="e-book-cache.h" line="41"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_META_BACKEND"
                    c:identifier="E_IS_BOOK_META_BACKEND"
                    introspectable="0">
      <source-position filename="e-book-meta-backend.h" line="38"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_META_BACKEND_CLASS"
                    c:identifier="E_IS_BOOK_META_BACKEND_CLASS"
                    introspectable="0">
      <source-position filename="e-book-meta-backend.h" line="41"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_SQLITE"
                    c:identifier="E_IS_BOOK_SQLITE"
                    introspectable="0">
      <source-position filename="e-book-sqlite.h" line="38"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_BOOK_SQLITE_CLASS"
                    c:identifier="E_IS_BOOK_SQLITE_CLASS"
                    introspectable="0">
      <source-position filename="e-book-sqlite.h" line="41"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_DATA_BOOK"
                    c:identifier="E_IS_DATA_BOOK"
                    introspectable="0">
      <source-position filename="e-data-book.h" line="35"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_DATA_BOOK_CLASS"
                    c:identifier="E_IS_DATA_BOOK_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book.h" line="38"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_DATA_BOOK_CURSOR"
                    c:identifier="E_IS_DATA_BOOK_CURSOR"
                    introspectable="0">
      <source-position filename="e-data-book-cursor.h" line="33"/>
      <parameters>
        <parameter name="o">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_DATA_BOOK_CURSOR_CACHE"
                    c:identifier="E_IS_DATA_BOOK_CURSOR_CACHE"
                    introspectable="0">
      <source-position filename="e-data-book-cursor-cache.h" line="35"/>
      <parameters>
        <parameter name="o">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_DATA_BOOK_CURSOR_CACHE_CLASS"
                    c:identifier="E_IS_DATA_BOOK_CURSOR_CACHE_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-cursor-cache.h" line="36"/>
      <parameters>
        <parameter name="k">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_DATA_BOOK_CURSOR_CLASS"
                    c:identifier="E_IS_DATA_BOOK_CURSOR_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-cursor.h" line="34"/>
      <parameters>
        <parameter name="k">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_DATA_BOOK_CURSOR_SQLITE"
                    c:identifier="E_IS_DATA_BOOK_CURSOR_SQLITE"
                    introspectable="0">
      <source-position filename="e-data-book-cursor-sqlite.h" line="34"/>
      <parameters>
        <parameter name="o">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_DATA_BOOK_CURSOR_SQLITE_CLASS"
                    c:identifier="E_IS_DATA_BOOK_CURSOR_SQLITE_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-cursor-sqlite.h" line="35"/>
      <parameters>
        <parameter name="k">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_DATA_BOOK_DIRECT"
                    c:identifier="E_IS_DATA_BOOK_DIRECT"
                    introspectable="0">
      <source-position filename="e-data-book-direct.h" line="34"/>
      <parameters>
        <parameter name="o">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_DATA_BOOK_DIRECT_CLASS"
                    c:identifier="E_IS_DATA_BOOK_DIRECT_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-direct.h" line="35"/>
      <parameters>
        <parameter name="k">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_DATA_BOOK_FACTORY"
                    c:identifier="E_IS_DATA_BOOK_FACTORY"
                    introspectable="0">
      <source-position filename="e-data-book-factory.h" line="37"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_DATA_BOOK_FACTORY_CLASS"
                    c:identifier="E_IS_DATA_BOOK_FACTORY_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-factory.h" line="40"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_DATA_BOOK_VIEW"
                    c:identifier="E_IS_DATA_BOOK_VIEW"
                    introspectable="0">
      <source-position filename="e-data-book-view.h" line="42"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_DATA_BOOK_VIEW_CLASS"
                    c:identifier="E_IS_DATA_BOOK_VIEW_CLASS"
                    introspectable="0">
      <source-position filename="e-data-book-view.h" line="45"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_SUBPROCESS_BOOK_FACTORY"
                    c:identifier="E_IS_SUBPROCESS_BOOK_FACTORY"
                    introspectable="0">
      <source-position filename="e-subprocess-book-factory.h" line="35"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_SUBPROCESS_BOOK_FACTORY_CLASS"
                    c:identifier="E_IS_SUBPROCESS_BOOK_FACTORY_CLASS"
                    introspectable="0">
      <source-position filename="e-subprocess-book-factory.h" line="38"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_SYSTEM_LOCALE_WATCHER"
                    c:identifier="E_IS_SYSTEM_LOCALE_WATCHER"
                    introspectable="0">
      <source-position filename="e-system-locale-watcher.h" line="35"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="IS_SYSTEM_LOCALE_WATCHER_CLASS"
                    c:identifier="E_IS_SYSTEM_LOCALE_WATCHER_CLASS"
                    introspectable="0">
      <source-position filename="e-system-locale-watcher.h" line="38"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="SUBPROCESS_BOOK_FACTORY"
                    c:identifier="E_SUBPROCESS_BOOK_FACTORY"
                    introspectable="0">
      <source-position filename="e-subprocess-book-factory.h" line="29"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="SUBPROCESS_BOOK_FACTORY_CLASS"
                    c:identifier="E_SUBPROCESS_BOOK_FACTORY_CLASS"
                    introspectable="0">
      <source-position filename="e-subprocess-book-factory.h" line="32"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="SUBPROCESS_BOOK_FACTORY_GET_CLASS"
                    c:identifier="E_SUBPROCESS_BOOK_FACTORY_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-subprocess-book-factory.h" line="41"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="SYSTEM_LOCALE_WATCHER"
                    c:identifier="E_SYSTEM_LOCALE_WATCHER"
                    introspectable="0">
      <source-position filename="e-system-locale-watcher.h" line="29"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="SYSTEM_LOCALE_WATCHER_CLASS"
                    c:identifier="E_SYSTEM_LOCALE_WATCHER_CLASS"
                    introspectable="0">
      <source-position filename="e-system-locale-watcher.h" line="32"/>
      <parameters>
        <parameter name="cls">
        </parameter>
      </parameters>
    </function-macro>
    <function-macro name="SYSTEM_LOCALE_WATCHER_GET_CLASS"
                    c:identifier="E_SYSTEM_LOCALE_WATCHER_GET_CLASS"
                    introspectable="0">
      <source-position filename="e-system-locale-watcher.h" line="41"/>
      <parameters>
        <parameter name="obj">
        </parameter>
      </parameters>
    </function-macro>
    <class name="SubprocessBookFactory"
           c:symbol-prefix="subprocess_book_factory"
           c:type="ESubprocessBookFactory"
           parent="EBackend.SubprocessFactory"
           glib:type-name="ESubprocessBookFactory"
           glib:get-type="e_subprocess_book_factory_get_type"
           glib:type-struct="SubprocessBookFactoryClass">
      <source-position filename="e-subprocess-book-factory.h" line="59"/>
      <implements name="Gio.Initable"/>
      <constructor name="new"
                   c:identifier="e_subprocess_book_factory_new"
                   throws="1">
        <source-position filename="e-subprocess-book-factory.h" line="63"/>
        <return-value transfer-ownership="full">
          <type name="SubprocessBookFactory" c:type="ESubprocessBookFactory*"/>
        </return-value>
        <parameters>
          <parameter name="cancellable"
                     transfer-ownership="none"
                     nullable="1"
                     allow-none="1">
            <type name="Gio.Cancellable" c:type="GCancellable*"/>
          </parameter>
        </parameters>
      </constructor>
      <field name="parent">
        <type name="EBackend.SubprocessFactory" c:type="ESubprocessFactory"/>
      </field>
      <field name="priv">
        <type name="SubprocessBookFactoryPrivate"
              c:type="ESubprocessBookFactoryPrivate*"/>
      </field>
    </class>
    <record name="SubprocessBookFactoryClass"
            c:type="ESubprocessBookFactoryClass"
            glib:is-gtype-struct-for="SubprocessBookFactory">
      <source-position filename="e-subprocess-book-factory.h" line="59"/>
      <field name="parent_class">
        <type name="EBackend.SubprocessFactoryClass"
              c:type="ESubprocessFactoryClass"/>
      </field>
    </record>
    <record name="SubprocessBookFactoryPrivate"
            c:type="ESubprocessBookFactoryPrivate"
            disguised="1">
      <source-position filename="e-subprocess-book-factory.h" line="50"/>
    </record>
    <class name="SystemLocaleWatcher"
           c:symbol-prefix="system_locale_watcher"
           c:type="ESystemLocaleWatcher"
           parent="GObject.Object"
           glib:type-name="ESystemLocaleWatcher"
           glib:get-type="e_system_locale_watcher_get_type"
           glib:type-struct="SystemLocaleWatcherClass">
      <doc xml:space="preserve"
           filename="e-system-locale-watcher.h"
           line="52">Contains only private data that should be read and manipulated using the
functions below.</doc>
      <source-position filename="e-system-locale-watcher.h" line="66"/>
      <constructor name="new"
                   c:identifier="e_system_locale_watcher_new"
                   version="3.30">
        <doc xml:space="preserve"
             filename="e-system-locale-watcher.c"
             line="319">Creates a new #ESystemLocaleWatcher instance, which listens for D-Bus
notification on locale changes. It uses system bus, unless an environment
variable "EDS_TESTING" is defined, in which case it uses the session bus
instead.</doc>
        <source-position filename="e-system-locale-watcher.h" line="70"/>
        <return-value transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-system-locale-watcher.c"
               line="327">a new #ESystemLocaleWatcher</doc>
          <type name="SystemLocaleWatcher" c:type="ESystemLocaleWatcher*"/>
        </return-value>
      </constructor>
      <method name="dup_locale"
              c:identifier="e_system_locale_watcher_dup_locale"
              version="3.30">
        <doc xml:space="preserve"
             filename="e-system-locale-watcher.c"
             line="337">Returns the current locale, as detected by the @watcher. The string
is duplicated for thread safety. It can be %NULL, when the locale
was not detected yet.

Free it with g_free(), when no longer needed.</doc>
        <source-position filename="e-system-locale-watcher.h" line="71"/>
        <return-value transfer-ownership="full" nullable="1">
          <doc xml:space="preserve"
               filename="e-system-locale-watcher.c"
               line="347">the system locale, as detected by the @watcher</doc>
          <type name="utf8" c:type="gchar*"/>
        </return-value>
        <parameters>
          <instance-parameter name="watcher" transfer-ownership="none">
            <doc xml:space="preserve"
                 filename="e-system-locale-watcher.c"
                 line="339">an #ESystemLocaleWatcher</doc>
            <type name="SystemLocaleWatcher" c:type="ESystemLocaleWatcher*"/>
          </instance-parameter>
        </parameters>
      </method>
      <property name="locale" version="3.30" transfer-ownership="none">
        <doc xml:space="preserve"
             filename="e-system-locale-watcher.c"
             line="289">Current locale, as detected. It can be %NULL, when the locale
was not detected yet.</doc>
        <type name="utf8" c:type="gchar*"/>
      </property>
      <field name="parent" readable="0" private="1">
        <type name="GObject.Object" c:type="GObject"/>
      </field>
      <field name="priv" readable="0" private="1">
        <type name="SystemLocaleWatcherPrivate"
              c:type="ESystemLocaleWatcherPrivate*"/>
      </field>
    </class>
    <record name="SystemLocaleWatcherClass"
            c:type="ESystemLocaleWatcherClass"
            glib:is-gtype-struct-for="SystemLocaleWatcher">
      <source-position filename="e-system-locale-watcher.h" line="66"/>
      <field name="parent_class">
        <type name="GObject.ObjectClass" c:type="GObjectClass"/>
      </field>
    </record>
    <record name="SystemLocaleWatcherPrivate"
            c:type="ESystemLocaleWatcherPrivate"
            disguised="1">
      <source-position filename="e-system-locale-watcher.h" line="50"/>
    </record>
    <constant name="XIMIAN_VCARD"
              value="BEGIN:VCARD&#10;X-EVOLUTION-FILE-AS:Novell Ximian Group&#10;ADR;TYPE=WORK:;Suite 500;8 Cambridge Center;Cambridge;MA;02142;USA&#10;LABEL;TYPE=WORK:8 Cambridge Center, Suite 500\nCambridge\, MA\n02142\nUSA&#10;TEL;WORK;VOICE:(617) 613-2000&#10;TEL;WORK;FAX:(617) 613-2001&#10;EMAIL;INTERNET:hello@ximian.com&#10;URL:http://www.ximian.com/&#10;ORG:Novell;Ximian Group&#10;PHOTO;ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQEARwBHAAD//gAXQ3JlYXRlZCB3aXRo&#10; IFRoZSBHSU1Q/9sAQwAIBgYHBgUIBwcHCQkICgwUDQwLCwwZEhMPFB0aHx4dGhwcICQuJyAiLCM&#10; cHCg3KSwwMTQ0NB8nOT04MjwuMzQy/9sAQwEJCQkMCwwYDQ0YMiEcITIyMjIyMjIyMjIyMjIyMj&#10; IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy/8AAEQgAbgBkAwEiAAIRAQMRAf/EA&#10; BwAAAIDAQEBAQAAAAAAAAAAAAAHBQYIBAMBAv/EAEYQAAEDAwEFBgMEBgQPAAAAAAECAwQABREG&#10; BxIhMWETIkFRcYEUkaEIMkLBFSNSsbLRFmJydRgkMzY3Q0RGgpKTosLh8P/EABsBAQACAwEBAAA&#10; AAAAAAAAAAAAEBQIDBgEH/8QALREAAQMCAwYGAgMAAAAAAAAAAQACAwQREiFRBRMiMUFhMnGBkb&#10; HRBsEUofD/2gAMAwEAAhEDEQA/AH/RRRREVwXe9W2wwFzbpNZixkc1uqwPQeZ6CoHXevLfom1ds&#10; 9h6a6D8PGCsFZHMk+CR4n86yzdbrqfaZqYBSnp0hRPZMoG62ynoOSR1Pua8Lg0XPJegX5Jv6k+0&#10; bBjrWxp22LlkcBIlHs0HqEjiR64peT9umupqyWrhHhpP4WI6eHureNW7Tmw+DGaTI1FJVJdxksM&#10; qKG09CrmfbFMCHpCw2xATDs8JrH4gykq+Z4mqifbMUZsxpd/QUllK53M2SCb2xa+bXvf0gcV0Uw&#10; 0R/DVktH2hdUwlpFxjQrg1490tLPuOH0pvv2qE4jdchx1p8lNAj91Va87OtM3RCt+2Nx3Dyci/q&#10; yPYcD7g1EZ+RR4rSMI9b/S2mhdbhKsmkdtWmNTuNxnXVW2cvgGZRASo+SV8j74PSmOlQUMpORWP&#10; NU7MrjY0rlQFmdDTxOE4cQOo8R1Hyqe2Z7ZJ2m32bXfHnJVpJCUuqO8uP7+Kenh4eVXkFRFUMxx&#10; G4UOSN0Zs4LU1FeEOWxOityYzqHWXEhSFoOQoHkQa963rBFFFFERUdfr1E09Y5d1mr3Y8ZsrV5n&#10; yA6k4A6mpGkL9ojUym0W/TrLmAsGU+AeYBwgfPJ/4RREqrrcb1tJ1oUpBXLmObqUZ7rSByT0SkZ&#10; J8zk1pHQmiLXo+zpbabC3SAp55Q7zyvM9PIUudiGmURbS7fpCMvzFFton8LSTxx6qH0FM7VV9VY&#10; 9MzZ7aQt5tASw3+26ohKB/zEVSVFVvZzGMw02tqe/kpbI8LMR6/C/Xxq9QagfbbP+IW1QQ4Rycf&#10; xncHRAIJ/rEfsmu2a9Fgsl2XIZjtj8bqwgfM1+9L2VFksESAV9o6hG886ebjqjvLWepUSarutdn&#10; MXV+obRcZks/CwCQ5DKMpeBOTxzwzgA9KwfTtfxPOSB5GQUXc9pOjoC+zXe2HV5xiOC6PmkEfWp&#10; xe6tAWghSVDIIOQRXxekNOx4b0WPZYLLTram19mwlJKSMHjjNUzQd2dZM7SNxczcLOsttqVzdYz&#10; 3FewI9iKpK2mjMZdFe7ed9NfT9qZDI4OAd1Vkko50ndoui22kuXq2NBOO9JZSOH9sD9/z86c8gc&#10; DUJNQlaFJUkKSoYII4EVGoKp9PIHt9e6lyRNlZhcqlsJ2guQpydL3F4mO7kw1KP3Fcyj0PEjrnz&#10; rSAIIyOVYfvsJ3TGqlCKpTfYuJfjLHMDOR8jw9q2Foy+o1FpWBckY/XMpUoeRxxHsciu/jeJGB7&#10; eRXPvaWuLT0U/RRRWaxQeVY82x3BVw2oXbJyhgoZR0AQM/UmthK+6fSsWbRQW9pV73x/tZPtwNE&#10; Wj9Nw0WuwwIKQAGI6G/cAZ+tRW0lx5nTEW4Ntqdat9xjy5CEjJLSFZP5H2qaYdCkpUk5BGQa7Ap&#10; DrSm3EpWhYKVJUMgg8wRXz+kqyyTG7VXUsV22Clrfc48+CzMiPIejvIC23EHIUDXNe79b7HbXbh&#10; c5SI8ZvmtZ5nyA5k9BS7d0nfdMPuSdD3JtEZaitdom5Uznx3DzT6cPWkvq/V1611fGW5nZtBCgy&#10; zFbXhtCycE5JxknxPhXR07RUeB3D11H+9lAfwcxmrrqLbxcHpikWGAw1FScByUkqWvrgEBPpxqi&#10; ztdXWdqmNqIIjx7gykJUphJCXAM/eBJ5g4PQCmBZNiDKWEu364uF0jJYh4AT6qUDn2FVu6bPIkT&#10; aTB08xKeMOU2H99eCtKRvZGQMZ7hwceNZxVGzsbmMzIBv5dfNeOjnsCdUwbTtKsV8nJgIccZkqw&#10; lJcThDqvJJz8s4zUtLVzpc2vZZKt+qBIkyUKt0V0ONKSe+7g5SCPDr9Kv0tznXP1cNMyQfxnXBC&#10; tqUyuB3gslftPjJLkGWB3u82o/Ij86bf2e7iqRoxyIpWfhpC0JHQ4V/5GlVtJcBt0RPiXif+00w&#10; Ps5BQtNxP4TJP8Ka6rZZJpW37/Kq68ATlPeiiirBQ0HlWR9t9qVbtpEp/dwiY0h5J8Mgbp/h+ta&#10; 4pM7fdKLumn2rxGbKn4BKl4HEtn73ywD7GiL7o28JuulLbKCsqLKUL/tJ7p+oqyIe4c6RGyzU4g&#10; THLNJc3WpCt9gk8A54j3GPcdaZuoosy82V23QpaYpkEIdeIJKUeIAHieXPkTXA11DuassJsCefY&#10; /SvYZN5FiGZU9edRwLDAXJny2mRukoStQBWQOQHjSjg7PYE7ZmzcZb7cG6KK5CZD6txOCcJQvPg&#10; QAQfAn2q6RNOWi1D9J3R5dwlR2xmZPVv9mlI8ByTj59ar09Lm0jUIQl5Y0zAUMrQSPiXfHHpyz4&#10; D1qTRvMQIieQAQXOtllfIDre/X2WqVmI8Qz6D9q0bP9SO37SrSpW8ZUVXw7q+YcKeSgeRyMZ65q&#10; qammvWTalEv1yjOJtaWfh25CBvBOUkHPlxUeHlyq/MiPCitxorSGWG07qG0DASK45xZlx3GJDaH&#10; WljCkLGQR6VGinY2ofIG8Lri2gOi37hxYG3zC+uT2HY6ZDbyFMrAUlwK7pB5HNRcp7nxqpzdN3G&#10; CFQ7NObTa3nApcaSN/suOe4SDw6VK3O4swojsp9WGmxk9fIDrW4UzWkbt2K/v691vjec8YtZUTa&#10; BL+IuMaIjiWWytXQn/wBD608tgtrVC0W2+tOFSFqd9icD6AVnmFFl6n1AhoAmRPdwcfgR4n2H7q&#10; 2Ppi1N2exRojaQlKEBIHkAK7Gmi3MTWaLn6iTeSF+qmaKKK3rSiuedEanQ3I7qQpC0kEEZzXRRR&#10; FjnaRoSVoq/KcYQv9HOr3mHB/qzz3SenhVi0ftAbnNNwLo6G5iQEodUcJd9fJX760ZqLTkHUdsd&#10; hTWEOtuJwQoVl/XGyS7aakOPwGnJcDORujK0DqPH2qJV0cdUzC/0Oi3QTuhddqY84IuFukwnFFK&#10; JDSmlEcwFDGR86ISI1tgtQ4jYaYaTuoSP/udJS1azvFoAZLnbsp4dm/klPQHmKs0faVEWkfEw32&#10; 1f1CFj8q56XZNSwYG5t7fSt46yB5ucimM5L4c643pXWqU5tCteMpRKUfIIH86ipmvnnAUwoQSf2&#10; 3lZ+g/nWEey5yfCtrquBo8Su0+4sQ46pEp1LTSeZUfoPOlnfr67fZKQlK0QkK/VtficV5nrXOkX&#10; XUk9KQHp0gnghI7qPyAp1bOdkCmH2rneQHHxxQjHdb9OvWr2j2c2Didm74VZVVplGFuQXRsc2fO&#10; Qgb1cmsSXQN1JH+TT4D+dPEAAADkK848duMylppISkDGBXrVkoCKKKKIiiqrrbX9m0JARIua1re&#10; dJDMdoArcI58+AA8zVLsO26RqiS9Gsukpct5lHaKbTLaSrd8wFEZ9s0RN6vGRGZktlDqAoHzFKq&#10; JtomzrPOuzGjZvwEBRTJfckttpbUOae9jJ5cBk8R514Wrbo7e489+3aTlvtQGTIkqElsdm2Mkq4&#10; 4zyPKiKf1Hsj09flKdXEQh4/jR3VfMUvJ/2et1ZMOe8keSgFfyqz2LbfJ1M9IZs2kJsx2O0XnEN&#10; yEAhA4ZwcZ58hxr7ZdtkvUS5SbTo2fJMRsuPkPoSG0jzKsDPPhz4HyoipDewC47+FXFWOjYH51Y&#10; bTsAgtrSqc88/jwWrA+QxUlYtujupZ6oNo0nLlSUtqdKEyW04SMZOVYHiKjP8ACUt5/wB3pX/XT&#10; /KiJnWLQ1nsTSURorad39lIFWZKUoThIAHSlNqDbLP0siKu96MnQ0ygSyVyGzvYxnlnB4jga87F&#10; ttlamXJbs2j50xcZvtXUtyEZCfPB5+gyaIm9RSetm3J68RbhJgaSmPM25vtZaviW09knjxIOM8j&#10; y8q7LHtzstwv/AOhrlBftkkudkFOLS43v5xgqSeHHx5daImrRX5QtK0hSTkGiiLMP2ho8wa1iSn&#10; QoxVRQ20fAKClFQ9eIqq7LLJe7vreG7ZZCoZhqD8iZjustjnnwORkY8c+Wa1ZqbStt1PBMa4MId&#10; Rz7wzg+dL8bEbA1vpa7RtK+CkpdWAfXjRFB7UpCNe6Kdm6NnJft1qluKuUJlvdKznPbYH3hzPXJ&#10; PMGqZsk/zc2gf3G5/Cumc3sRsTO92Rcb3uB3XVjP1r4jYfYGwoN76QsYUEurGR5HjREudhUt2BP&#10; 1TMYID0eyuuoJGRvJII+oq96I2iwtVz7rb7ZZWbalyzyJ9wKUjLsrKEkjH4cE8+Jz049bew+wNb&#10; 3Z76N4YO66sZHlzob2H2Bkktb6CRglLqxkeXOiJZbAv9IMj+7X/wB6ag9lGnEaj17CRJA+BhZmy&#10; lK+6EI44PQq3R6E06W9h9gZVvNb6FYxlLqwcfOhvYhYWt7s99G8MK3XVjI68aIo7UxgbR9IajhQ&#10; 7/Du9yiSF3S3tMNrStlkAAt94DPDI4eJFUvYfNetqNYz4xAfjWZx5skZAUnJHD1FMVrYhYWVbzW&#10; +2ojGUOrBx86EbD7A0FBvfRvDCt11YyPI8aIo23zdP6i2e621TaUJiXCfa1IucFPJt5KVnfHRWS&#10; euPPNZ2YadfkNsspUp1aglCU8yTyrTSNh9gbCgjfSFjCgl1YyPI8al9PbItP2WamUywkuJ5KOVE&#10; emeVEVw02ZH9H4YkEqdDYCifE4oqXbaS02lCRhIGBRRF//Z&#10;END:VCARD"
              c:type="XIMIAN_VCARD">
      <source-position filename="ximian-vcard.h" line="1"/>
      <type name="utf8" c:type="gchar*"/>
    </constant>
    <callback name="bSqlChangeCallback"
              c:type="EbSqlChangeCallback"
              version="3.12">
      <doc xml:space="preserve"
           filename="e-book-sqlite.h"
           line="106">A function which may be called in response to a change
in contact data.

&lt;note&gt;&lt;para&gt;This user callback is called inside a lock,
you must not call the #EBookSqlite API from
this callback.&lt;/para&gt;&lt;/note&gt;</doc>
      <source-position filename="e-book-sqlite.h" line="123"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="change_type" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.h"
               line="108">The #EbSqlChangeType which occurred</doc>
          <type name="bSqlChangeType" c:type="EbSqlChangeType"/>
        </parameter>
        <parameter name="uid" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.h"
               line="109">A contact UID</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="extra" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.h"
               line="110">The extra data associated to the contact</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="vcard" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.h"
               line="111">The vcard string for this UID</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="4">
          <doc xml:space="preserve"
               filename="e-book-sqlite.h"
               line="112">Pointer to user provided data</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <enumeration name="bSqlChangeType" version="3.12" c:type="EbSqlChangeType">
      <doc xml:space="preserve"
           filename="e-book-sqlite.h"
           line="90">Indicates the type of change which occurred in a #EbSqlChangeCallback</doc>
      <source-position filename="e-book-sqlite.h" line="104"/>
      <member name="contact_added"
              value="0"
              c:identifier="EBSQL_CHANGE_CONTACT_ADDED">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="92">Contact was modified as a result of it's addition to the addressbook</doc>
      </member>
      <member name="locale_changed"
              value="1"
              c:identifier="EBSQL_CHANGE_LOCALE_CHANGED">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="93">Contact was modified as a result of a locale change</doc>
      </member>
      <member name="last" value="2" c:identifier="EBSQL_CHANGE_LAST">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="94">A symbolic end marker for this enumeration, will not be passed in callbacks.</doc>
      </member>
    </enumeration>
    <record name="bSqlCursor"
            c:type="EbSqlCursor"
            disguised="1"
            version="3.12">
      <doc xml:space="preserve"
           filename="e-book-sqlite.h"
           line="275">An opaque cursor pointer</doc>
      <source-position filename="e-book-sqlite.h" line="282"/>
    </record>
    <enumeration name="bSqlCursorOrigin"
                 version="3.12"
                 c:type="EbSqlCursorOrigin">
      <doc xml:space="preserve"
           filename="e-book-sqlite.h"
           line="284">Specifies the start position to in the list of traversed contacts
in calls to e_book_sqlite_cursor_step().

When an #EbSqlCursor is created, the current position implied by %EBSQL_CURSOR_ORIGIN_CURRENT
is the same as %EBSQL_CURSOR_ORIGIN_BEGIN.</doc>
      <source-position filename="e-book-sqlite.h" line="302"/>
      <member name="current"
              value="0"
              c:identifier="EBSQL_CURSOR_ORIGIN_CURRENT">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="286">The current cursor position</doc>
      </member>
      <member name="begin" value="1" c:identifier="EBSQL_CURSOR_ORIGIN_BEGIN">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="287">The beginning of the cursor results.</doc>
      </member>
      <member name="end" value="2" c:identifier="EBSQL_CURSOR_ORIGIN_END">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="288">The ending of the cursor results.</doc>
      </member>
    </enumeration>
    <bitfield name="bSqlCursorStepFlags"
              version="3.12"
              c:type="EbSqlCursorStepFlags">
      <doc xml:space="preserve"
           filename="e-book-sqlite.h"
           line="304">Defines the behaviour of e_book_sqlite_cursor_step().</doc>
      <source-position filename="e-book-sqlite.h" line="316"/>
      <member name="move" value="1" c:identifier="EBSQL_CURSOR_STEP_MOVE">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="306">The cursor position should be modified while stepping</doc>
      </member>
      <member name="fetch" value="2" c:identifier="EBSQL_CURSOR_STEP_FETCH">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="307">Traversed contacts should be listed and returned while stepping.</doc>
      </member>
    </bitfield>
    <enumeration name="bSqlLockType" c:type="EbSqlLockType">
      <doc xml:space="preserve"
           filename="e-book-sqlite.h"
           line="183">Indicates the type of lock requested in e_book_sqlite_lock()</doc>
      <source-position filename="e-book-sqlite.h" line="193"/>
      <member name="read" value="0" c:identifier="EBSQL_LOCK_READ">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="185">Obtain a lock for reading</doc>
      </member>
      <member name="write" value="1" c:identifier="EBSQL_LOCK_WRITE">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="186">Obtain a lock for writing</doc>
      </member>
    </enumeration>
    <record name="bSqlSearchData" c:type="EbSqlSearchData" version="3.12">
      <doc xml:space="preserve"
           filename="e-book-sqlite.h"
           line="212">This structure is used to represent contacts returned
by the #EBookSqlite from various functions
such as e_book_sqlitedb_search().

The @extra parameter will contain any data which was
previously passed for this contact in e_book_sqlite_add_contact().

These should be freed with e_book_sqlite_search_data_free().</doc>
      <source-position filename="e-book-sqlite.h" line="233"/>
      <field name="uid" writable="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="214">The %E_CONTACT_UID field of this contact</doc>
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="vcard" writable="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="215">The the vcard string</doc>
        <type name="utf8" c:type="gchar*"/>
      </field>
      <field name="extra" writable="1">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="216">Any extra data associated to the vcard</doc>
        <type name="utf8" c:type="gchar*"/>
      </field>
    </record>
    <enumeration name="bSqlUnlockAction" c:type="EbSqlUnlockAction">
      <doc xml:space="preserve"
           filename="e-book-sqlite.h"
           line="195">Indicates what type of action to take while unlocking the sqlite with e_book_sqlite_unlock()

In the case that some addressbook modification failed while holding an %EBSQL_LOCK_WRITE lock,
then the #EBookSqlite must be unlocked with %EBSQL_UNLOCK_ROLLBACK.</doc>
      <source-position filename="e-book-sqlite.h" line="210"/>
      <member name="none" value="0" c:identifier="EBSQL_UNLOCK_NONE">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="197">Just unlock, this is appropriate for locks which were obtained with %EBSQL_LOCK_READ</doc>
      </member>
      <member name="commit" value="1" c:identifier="EBSQL_UNLOCK_COMMIT">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="198">Commit any modifications which were made while the lock was held</doc>
      </member>
      <member name="rollback" value="2" c:identifier="EBSQL_UNLOCK_ROLLBACK">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="199">Rollback any modifications which were made while the lock was held</doc>
      </member>
    </enumeration>
    <callback name="bSqlVCardCallback"
              c:type="EbSqlVCardCallback"
              version="3.12">
      <doc xml:space="preserve"
           filename="e-book-sqlite.h"
           line="129">If this callback is passed to e_book_sqlite_new(), then
vcards are not stored in the SQLite and instead this callback
is invoked to fetch the vcard.

This callback will be called to fetch results for fully indexed
and optimized queries, and it will also be called while performing
fallback queries against #EContactFields which are not configured
in the #ESourceBackendSummarySetup or default summary fields.

&lt;note&gt;&lt;para&gt;This user callback is called inside a lock,
you must not call the #EBookSqlite API from
this callback.&lt;/para&gt;&lt;/note&gt;</doc>
      <source-position filename="e-book-sqlite.h" line="152"/>
      <return-value transfer-ownership="full">
        <doc xml:space="preserve"
             filename="e-book-sqlite.h"
             line="148">The appropriate vcard indicated by @uid</doc>
        <type name="utf8" c:type="gchar*"/>
      </return-value>
      <parameters>
        <parameter name="uid" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.h"
               line="131">A contact UID</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="extra" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.h"
               line="132">The extra data associated to the contact</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="user_data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1"
                   closure="2">
          <doc xml:space="preserve"
               filename="e-book-sqlite.h"
               line="133">User data previously passed to e_book_sqlite_new()</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </callback>
    <function name="book_cache_search_data_free"
              c:identifier="e_book_cache_search_data_free"
              moved-to="BookCacheSearchData.free"
              version="3.26">
      <doc xml:space="preserve"
           filename="e-book-cache.c"
           line="201">Frees the @data structure, previously allocated with e_book_cache_search_data_new()
or e_book_cache_search_data_copy().</doc>
      <source-position filename="e-book-cache.h" line="89"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="data"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="e-book-cache.c"
               line="203">an #EBookCacheSearchData</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </function>
    <function name="book_meta_backend_info_free"
              c:identifier="e_book_meta_backend_info_free"
              moved-to="BookMetaBackendInfo.free"
              version="3.26">
      <doc xml:space="preserve"
           filename="e-book-meta-backend.c"
           line="183">Frees the @ptr structure, previously allocated with e_book_meta_backend_info_new()
or e_book_meta_backend_info_copy().</doc>
      <source-position filename="e-book-meta-backend.h" line="69"/>
      <return-value transfer-ownership="none">
        <type name="none" c:type="void"/>
      </return-value>
      <parameters>
        <parameter name="ptr"
                   transfer-ownership="none"
                   nullable="1"
                   allow-none="1">
          <doc xml:space="preserve"
               filename="e-book-meta-backend.c"
               line="185">an #EBookMetaBackendInfo</doc>
          <type name="gpointer" c:type="gpointer"/>
        </parameter>
      </parameters>
    </function>
    <function name="ebsql_get_contact_extra_unlocked"
              c:identifier="ebsql_get_contact_extra_unlocked"
              version="3.16"
              throws="1">
      <doc xml:space="preserve"
           filename="e-book-sqlite.c"
           line="7516">Fetches the extra data previously set for @uid, either with
e_book_sqlite_set_contact_extra() or when adding contacts,
without locking internal mutex.</doc>
      <source-position filename="e-book-sqlite.h" line="407"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7527">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="ebsql" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7518">An #EBookSqlite</doc>
          <type name="BookSqlite" c:type="EBookSqlite*"/>
        </parameter>
        <parameter name="uid" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7519">The uid of the contact to fetch the extra data for</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="ret_extra"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7520">Return location to store the extra data</doc>
          <type name="utf8" c:type="gchar**"/>
        </parameter>
      </parameters>
    </function>
    <function name="ebsql_get_contact_unlocked"
              c:identifier="ebsql_get_contact_unlocked"
              version="3.16"
              throws="1">
      <doc xml:space="preserve"
           filename="e-book-sqlite.c"
           line="7258">Fetch the #EContact specified by @uid in @ebsql without locking internal mutex.

If @meta_contact is specified, then a shallow #EContact will be created
holding only the %E_CONTACT_UID and %E_CONTACT_REV fields.</doc>
      <source-position filename="e-book-sqlite.h" line="384"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7271">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="ebsql" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7260">An #EBookSqlite</doc>
          <type name="BookSqlite" c:type="EBookSqlite*"/>
        </parameter>
        <parameter name="uid" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7261">The uid of the contact to fetch</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="meta_contact" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7262">Whether an entire contact is desired, or only the metadata</doc>
          <type name="gboolean" c:type="gboolean"/>
        </parameter>
        <parameter name="contact"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7263">Return location to store the fetched contact</doc>
          <type name="EBookContacts.Contact" c:type="EContact**"/>
        </parameter>
      </parameters>
    </function>
    <function name="ebsql_get_vcard_unlocked"
              c:identifier="ebsql_get_vcard_unlocked"
              version="3.16"
              throws="1">
      <doc xml:space="preserve"
           filename="e-book-sqlite.c"
           line="7377">Fetch a vcard string for @uid in @ebsql without locking internal mutex.

If @meta_contact is specified, then a shallow vcard representation will be
created holding only the %E_CONTACT_UID and %E_CONTACT_REV fields.</doc>
      <source-position filename="e-book-sqlite.h" line="394"/>
      <return-value transfer-ownership="none">
        <doc xml:space="preserve"
             filename="e-book-sqlite.c"
             line="7390">%TRUE on success, otherwise %FALSE is returned and @error is set appropriately.</doc>
        <type name="gboolean" c:type="gboolean"/>
      </return-value>
      <parameters>
        <parameter name="ebsql" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7379">An #EBookSqlite</doc>
          <type name="BookSqlite" c:type="EBookSqlite*"/>
        </parameter>
        <parameter name="uid" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7380">The uid of the contact to fetch</doc>
          <type name="utf8" c:type="const gchar*"/>
        </parameter>
        <parameter name="meta_contact" transfer-ownership="none">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7381">Whether an entire contact is desired, or only the metadata</doc>
          <type name="gboolean" c:type="gboolean"/>
        </parameter>
        <parameter name="ret_vcard"
                   direction="out"
                   caller-allocates="0"
                   transfer-ownership="full">
          <doc xml:space="preserve"
               filename="e-book-sqlite.c"
               line="7382">Return location to store the fetched vcard string</doc>
          <type name="utf8" c:type="gchar**"/>
        </parameter>
      </parameters>
    </function>
  </namespace>
</repository>
