[balsa] Support Osmo address book



commit 3faba753f0f98c744b8b2c8220085c39f0cb7ef0
Author: Albrecht Dreß <albrecht dress arcor de>
Date:   Wed Nov 9 23:02:21 2016 -0500

    Support Osmo address book
    
        * libbalsa/address-book-osmo.c, libbalsa/address-book-osmo.h:
          new files; implement read-only Osmo address book core
        * libbalsa/rfc6350.c, libbalsa/rfc6350.h: new files;
          simple RFC 6350 to LibBalsaAddress parser
        * README: add note about new configure item
        * configure.ac: make Osmo address book configurable (default
          disabled)
        * libbalsa/Makefile.am: add new sources
        * libbalsa/libbalsa.c: initialise address book type
        * libbalsa/libbalsa.h: include header
        * src/address-book-config.c: implement configuration dialogue
        * src/pref-manager.c: add to pref manager
    
    Signed-off-by: Peter Bloomfield <PeterBloomfield bellsouth net>

 ChangeLog                 |   17 +++++++++
 README                    |    4 ++
 configure.ac              |   14 +++++++
 libbalsa/Makefile.am      |    4 ++
 libbalsa/libbalsa.c       |    3 ++
 libbalsa/libbalsa.h       |    3 ++
 src/address-book-config.c |   86 +++++++++++++++++++++++++++++++++++++++++++++
 src/pref-manager.c        |    4 ++
 8 files changed, 135 insertions(+), 0 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 2b0168a..87770c7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2016-11-09  Albrecht Dreß
+
+       Support for Osmo address book
+
+       * libbalsa/address-book-osmo.c, libbalsa/address-book-osmo.h:
+         new files; implement read-only Osmo address book core
+       * libbalsa/rfc6350.c, libbalsa/rfc6350.h: new files;
+         simple RFC 6350 to LibBalsaAddress parser
+       * README: add note about new configure item
+       * configure.ac: make Osmo address book configurable (default
+         disabled)
+       * libbalsa/Makefile.am: add new sources
+       * libbalsa/libbalsa.c: initialise address book type
+       * libbalsa/libbalsa.h: include header
+       * src/address-book-config.c: implement configuration dialogue
+       * src/pref-manager.c: add to pref manager
+
 2016-10-23  Peter Bloomfield  <pbloomfield bellsouth net>
 
        Improve pop-up menu positioning.
diff --git a/README b/README
index 3c25ee8..ec9630f 100644
--- a/README
+++ b/README
@@ -95,6 +95,10 @@ address book is in the works but needs some finishing touches.
 --with-rubrica
        Use libxml2 for Rubrica2 address book support.
 
+--with-osmo
+       Enable experimental support for read-only DBus access to the Osmo
+       contacts.  Note that Osmo svn rev. 1099 or later is required.
+
 --with-canberra
        Use libcanberra-gtk3 for filter sounds.
 
diff --git a/configure.ac b/configure.ac
index 7b74c11..0f45556 100644
--- a/configure.ac
+++ b/configure.ac
@@ -145,6 +145,11 @@ AC_ARG_WITH([rubrica],
                   [add Rubrica2 address book support (needs libxml2, default=no)]),
                  [with_rubrica=$withval],[with_rubrica=no])
 
+AC_ARG_WITH([osmo],
+   AC_HELP_STRING([--with-osmo],
+                  [add Osmo address book support (experimental, needs osmo > svn rev. 1099, default=no)]),
+                 [with_osmo=$withval],[with_osmo=no])
+
 AC_ARG_WITH([sqlite],
    AC_HELP_STRING([--with-sqlite=DIR],
                   [Use SQLite for GPE address books (default=no)]),
@@ -532,6 +537,15 @@ else
     AC_MSG_RESULT([no])
 fi
 
+# Osmo address book support
+AC_MSG_CHECKING(whether to include experimental Osmo support)
+if test x$with_osmo != xno ; then
+    AC_MSG_RESULT([yes])
+    AC_DEFINE(HAVE_OSMO,1,[If defined, enable Osmo address book support.])
+else
+    AC_MSG_RESULT([no])
+fi
+
 # LibESMTP configuration.
 #
 AC_MSG_CHECKING([whether to build ESMTP support])
diff --git a/libbalsa/Makefile.am b/libbalsa/Makefile.am
index 8be3815..d3f2c2a 100644
--- a/libbalsa/Makefile.am
+++ b/libbalsa/Makefile.am
@@ -54,6 +54,8 @@ libbalsa_a_SOURCES =          \
        address-book-ldap.h     \
        address-book-ldif.c     \
        address-book-ldif.h     \
+       address-book-osmo.c     \
+       address-book-osmo.h     \
        address-book-rubrica.c  \
        address-book-rubrica.h  \
        address-book-text.c     \
@@ -140,6 +142,8 @@ libbalsa_a_SOURCES =                \
        rfc2445.h               \
        rfc3156.c               \
        rfc3156.h               \
+       rfc6350.c               \
+       rfc6350.h               \
        send.c                  \
        send.h                  \
        server.c                \
diff --git a/libbalsa/libbalsa.c b/libbalsa/libbalsa.c
index 3fd6293..f24a5b1 100644
--- a/libbalsa/libbalsa.c
+++ b/libbalsa/libbalsa.c
@@ -124,6 +124,9 @@ libbalsa_init(LibBalsaInformationFunc information_callback)
 #if HAVE_RUBRICA
     LIBBALSA_TYPE_ADDRESS_BOOK_RUBRICA;
 #endif
+#if HAVE_OSMO
+    LIBBALSA_TYPE_ADDRESS_BOOK_OSMO;
+#endif
 }
 
 
diff --git a/libbalsa/libbalsa.h b/libbalsa/libbalsa.h
index 6458651..49b00c1 100644
--- a/libbalsa/libbalsa.h
+++ b/libbalsa/libbalsa.h
@@ -62,6 +62,9 @@ typedef struct _LibbalsaVfs LibbalsaVfs;
 #if HAVE_RUBRICA
 #include "address-book-rubrica.h"
 #endif
+#if HAVE_OSMO
+#include "address-book-osmo.h"
+#endif
 
 #include "mailbox.h"
 #include "mailbox_local.h"
diff --git a/src/address-book-config.c b/src/address-book-config.c
index f245524..ad71756 100644
--- a/src/address-book-config.c
+++ b/src/address-book-config.c
@@ -78,6 +78,9 @@ static GtkWidget *create_gpe_dialog(AddressBookConfig * abc);
 #ifdef HAVE_RUBRICA
 static GtkWidget *create_rubrica_dialog(AddressBookConfig * abc);
 #endif
+#ifdef HAVE_OSMO
+static GtkWidget *create_osmo_dialog(AddressBookConfig *abc);
+#endif
 
 static void help_button_cb(AddressBookConfig * abc);
 static gboolean handle_close(AddressBookConfig * abc);
@@ -303,6 +306,10 @@ create_dialog_from_type(AddressBookConfig * abc)
     } else if (abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_RUBRICA) {
         return create_rubrica_dialog(abc);
 #endif
+#ifdef HAVE_OSMO
+    } else if (abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_OSMO) {
+       return create_osmo_dialog(abc);
+#endif
     } else {
         g_assert_not_reached();
     }
@@ -348,6 +355,60 @@ create_generic_dialog(AddressBookConfig * abc, const gchar * type)
     return dialog;
 }
 
+#ifdef HAVE_OSMO
+static GtkWidget *
+create_osmo_dialog(AddressBookConfig *abc)
+{
+    GtkWidget *dialog;
+    GtkWidget *content_area;
+    gchar *title;
+    const gchar *action;
+    const gchar *name;
+    GtkWidget *grid;
+    GtkWidget *label;
+    LibBalsaAddressBook *ab;
+    GtkSizeGroup *size_group;
+
+    ab = abc->address_book;
+    if (ab) {
+        title = g_strdup_printf(_("Modify Osmo Address Book"));
+        action = _("_Apply");
+        name = ab->name;
+    } else {
+        title = g_strdup_printf(_("Add Osmo Address Book"));
+        action = _("_Add");
+        name = NULL;
+    }
+
+    dialog =
+        gtk_dialog_new_with_buttons(title, abc->parent,
+                                    libbalsa_dialog_flags(),
+                                    _("_Help"), GTK_RESPONSE_HELP,
+                                    action, GTK_RESPONSE_APPLY,
+                                    _("_Cancel"), GTK_RESPONSE_CANCEL,
+                                    NULL);
+    g_free(title);
+#if HAVE_MACOSX_DESKTOP
+    libbalsa_macosx_menu_for_parent(dialog, abc->parent);
+#endif
+    size_group = libbalsa_create_size_group(dialog);
+
+    grid = libbalsa_create_grid();
+    content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
+    gtk_container_add(GTK_CONTAINER(content_area), grid);
+    gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(dialog), grid);
+    label = libbalsa_create_grid_label(_("A_ddress Book Name:"), grid, 0);
+    gtk_size_group_add_widget(size_group, label);
+    abc->name_entry =
+        libbalsa_create_grid_entry(grid, NULL, NULL, 0, name, label);
+    add_radio_buttons(grid, 1, abc);
+    g_signal_connect(G_OBJECT(dialog), "response",
+                     G_CALLBACK(edit_book_response), abc);
+
+    return dialog;
+}
+#endif /* HAVE_OSMO */
+
 static GtkWidget *
 create_externq_dialog(AddressBookConfig * abc)
 {
@@ -679,6 +740,10 @@ create_book(AddressBookConfig * abc)
             address_book = libbalsa_address_book_rubrica_new(name, path);
         g_free(path);
 #endif
+#ifdef HAVE_OSMO
+    } else if (abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_OSMO) {
+       address_book = libbalsa_address_book_osmo_new(name);
+#endif
     } else
         g_assert_not_reached();
 
@@ -766,6 +831,10 @@ modify_book(AddressBookConfig * abc)
 #if HAVE_SQLITE
     } else if (abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_GPE) {
 #endif /* HAVE_SQLITE */
+#if HAVE_OSMO
+    } else if (abc->type == LIBBALSA_TYPE_ADDRESS_BOOK_OSMO) {
+       /* nothing to do here */
+#endif
     } else
         g_assert_not_reached();
 
@@ -833,6 +902,16 @@ add_rubrica_cb(GtkWidget * widget, AddressBookConfig * abc)
 }
 #endif /* HAVE_SQLITE */
 
+#ifdef HAVE_OSMO
+static void
+add_osmo_cb(GtkWidget * widget, AddressBookConfig * abc)
+{
+    abc->type = LIBBALSA_TYPE_ADDRESS_BOOK_OSMO;
+    abc->window = create_osmo_dialog(abc);
+    gtk_widget_show_all(abc->window);
+}
+#endif /* HAVE_OSMO */
+
 GtkWidget *
 balsa_address_book_add_menu(BalsaAddressBookCallback callback,
                             GtkWindow * parent)
@@ -885,5 +964,12 @@ balsa_address_book_add_menu(BalsaAddressBookCallback callback,
     gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
 #endif /* HAVE_RUBRICA */
 
+#ifdef HAVE_OSMO
+    menuitem = gtk_menu_item_new_with_label(_("Osmo Address Book"));
+    g_signal_connect(G_OBJECT(menuitem), "activate",
+                     G_CALLBACK(add_osmo_cb), abc);
+    gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
+#endif
+
     return menu;
 }
diff --git a/src/pref-manager.c b/src/pref-manager.c
index b4d5296..28875b5 100644
--- a/src/pref-manager.c
+++ b/src/pref-manager.c
@@ -1376,6 +1376,10 @@ update_address_books(void)
         else if (LIBBALSA_IS_ADDRESS_BOOK_RUBRICA(address_book))
             type = "Rubrica";
 #endif
+#if HAVE_OSMO
+        else if (LIBBALSA_IS_ADDRESS_BOOK_OSMO(address_book))
+               type = "Osmo";
+#endif
         else
             type = _("Unknown");
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]