src/give_ebook.c

Go to the documentation of this file.
00001 /* Give - Statusbar plugin for easy drag & drop data sending via Bluetooth.
00002  * Copyright (C) 2008 Dénes Mátételki
00003  *
00004  * This library is free software; you can redistribute it and/or
00005  * modify it under the terms of the GNU Lesser General Public
00006  * License as published by the Free Software Foundation; either
00007  * version 2 of the License, or (at your option) any later version.
00008  *
00009  * This library is distributed in the hope that it will be useful,
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012  * Lesser General Public License for more details.
00013  *
00014  * You should have received a copy of the GNU Lesser General Public
00015  * License along with this library; if not, write to the Free
00016  * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00017  */
00018 
00024 #include "give_ebook.h"
00025 
00026 #include <string.h>
00027 
00028 #include <libebook/e-book.h>
00029 
00030 typedef struct _give_ebook_private give_ebook_private;
00031 
00032 #define GIVE_EBOOK_GET_PRIVATE(obj) \
00033                         (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
00034                         GIVE_EBOOK_TYPE, \
00035                         give_ebook_private));
00036 
00038 struct _give_ebook_private
00039 {
00040         EBook *ebook;
00042         gboolean ready;
00044 };
00045 
00046 
00047 // Private funcions
00052 GType give_ebook_get_type (void);
00053 static void give_ebook_class_init (give_ebookClass *klass);
00054 static void give_ebook_init (give_ebook *self);
00055 static void give_ebook_finalize (GObject* self);
00056 
00057 static void give_ebook_open_response (EBook *book, EBookStatus status,
00058                                         gpointer data);
00059 static void give_ebook_status_to_string (EBookStatus status,
00060                                         gchar *state_string);
00061 
00062 // Public functions
00068 give_ebook* give_ebook_new(void);
00069 gchar *give_ebook_get_contact_name(give_ebook *self, const gchar *id);
00070 gchar *give_ebook_get_contact_vcard(give_ebook *self, const gchar *id);
00071 
00082 GType
00083 give_ebook_get_type (void)
00084 {
00085         g_message(__PRETTY_FUNCTION__);
00086 
00087         static GType type = 0;
00088         type = g_type_from_name ("give_ebook");
00089 
00090         if (type == 0){
00091                 static const GTypeInfo info = {
00092                         sizeof (give_ebookClass),
00093                         (GBaseInitFunc) NULL,
00094                         (GBaseFinalizeFunc) NULL,
00095                         (GClassInitFunc) give_ebook_class_init,
00096                         NULL,
00097                         NULL,
00098                         sizeof (give_ebook),
00099                         0,
00100                         (GInstanceInitFunc) give_ebook_init
00101                 };
00102 
00103                 type = g_type_register_static ( G_TYPE_OBJECT,
00104                                                 "give_ebook",
00105                                                 &info,
00106                                                 0);
00107         }
00108 
00109         return type;
00110 }
00111 
00118 static void
00119 give_ebook_class_init (give_ebookClass *klass)
00120 {
00121         g_message(__PRETTY_FUNCTION__);
00122 
00123         GObjectClass *object_class;
00124         object_class = (GObjectClass*) klass;
00125 
00126         object_class->finalize  = give_ebook_finalize;
00127 
00128         g_type_class_add_private (klass, sizeof (give_ebook_private));
00129 }
00130 
00138 static void
00139 give_ebook_init (give_ebook *self)
00140 {
00141         g_message(__PRETTY_FUNCTION__);
00142 
00143         give_ebook_private *priv;
00144         GError *error = NULL;
00145 
00146         g_assert(self);
00147         g_assert(GIVE_EBOOK_IS_OBJECT(self));
00148 
00149         priv = GIVE_EBOOK_GET_PRIVATE (self);
00150         g_assert (priv);
00151 
00152         priv->ebook = e_book_new_system_addressbook (&error);
00153         if (!priv->ebook) {
00154                 g_critical ("%s - Error connecting to system address book: %s",
00155                                 __PRETTY_FUNCTION__, error->message);
00156                 g_error_free (error);
00157                 return;
00158         }
00159 
00160         e_book_async_open (     priv->ebook, TRUE,
00161                                 (EBookCallback)give_ebook_open_response,
00162                                 self);
00163 }
00164 
00170 static void
00171 give_ebook_finalize (GObject* self)
00172 {
00173         g_message(__PRETTY_FUNCTION__);
00174 
00175         give_ebook_private *priv;
00176 
00177         g_assert(self);
00178         g_assert(GIVE_EBOOK_IS_OBJECT(self));
00179 
00180         priv = GIVE_EBOOK_GET_PRIVATE (self);
00181         g_assert (priv);
00182 
00183         // free stuff
00185 }
00186 
00187 
00192 give_ebook *
00193 give_ebook_new(void)
00194 {
00195         g_message(__PRETTY_FUNCTION__);
00196 
00197         give_ebook *give_ebook_object;
00198 
00199         give_ebook_object = g_object_new(GIVE_EBOOK_TYPE,NULL);
00200         g_assert(give_ebook_object);
00201 
00202         return give_ebook_object;
00203 }
00204 
00205 
00217 static void
00218 give_ebook_open_response (EBook *book, EBookStatus status, gpointer data)
00219 {
00220         g_message(__PRETTY_FUNCTION__);
00221 
00222         gchar status_string[40];
00223         give_ebook *give_ebook_object;
00224         give_ebook_private *priv;
00225 
00226         give_ebook_object = (give_ebook *)data;
00227         g_assert(give_ebook_object);
00228 
00229         priv = GIVE_EBOOK_GET_PRIVATE(give_ebook_object);
00230         g_assert (priv);
00231 
00232         give_ebook_status_to_string(status,(gchar *)&status_string);
00233 
00234         if ( status == E_BOOK_ERROR_OK ) {
00235                 g_debug ("%s - ebook opened - %s",
00236                                 __PRETTY_FUNCTION__,status_string);
00237                 priv->ready = TRUE;
00238         } else {
00239                 g_critical ("%s - ebook cannot be opened - %s",
00240                                 __PRETTY_FUNCTION__,status_string);
00241                 priv->ready = FALSE;
00242         }
00243 }
00244 
00252 static void
00253 give_ebook_status_to_string (EBookStatus status, gchar *state_string)
00254 {
00255         g_message(__PRETTY_FUNCTION__);
00256 
00257         switch ( status ){
00258 
00259                 case E_BOOK_ERROR_OK:
00260                         strcpy(state_string,"E_BOOK_ERROR_OK");
00261                         break;
00262                 case E_BOOK_ERROR_INVALID_ARG :
00263                         strcpy(state_string,"E_BOOK_ERROR_INVALID_ARG");
00264                         break;
00265                 case E_BOOK_ERROR_BUSY :
00266                         strcpy(state_string,"E_BOOK_ERROR_BUSY");
00267                         break;
00268                 case E_BOOK_ERROR_REPOSITORY_OFFLINE :
00269                         strcpy(state_string,"E_BOOK_ERROR_REPOSITORY_OFFLINE");
00270                         break;
00271                 case E_BOOK_ERROR_NO_SUCH_BOOK :
00272                         strcpy(state_string,"E_BOOK_ERROR_NO_SUCH_BOOK");
00273                         break;
00274                 case E_BOOK_ERROR_NO_SELF_CONTACT :
00275                         strcpy(state_string,"E_BOOK_ERROR_NO_SELF_CONTACT");
00276                         break;
00277                 case E_BOOK_ERROR_SOURCE_NOT_LOADED:
00278                         strcpy(state_string,"E_BOOK_ERROR_SOURCE_NOT_LOADED");
00279                         break;
00280                 case E_BOOK_ERROR_SOURCE_ALREADY_LOADED :
00281                         strcpy(state_string,
00282                                 "E_BOOK_ERROR_SOURCE_ALREADY_LOADED");
00283                         break;
00284                 case E_BOOK_ERROR_PERMISSION_DENIED :
00285                         strcpy(state_string,"E_BOOK_ERROR_PERMISSION_DENIED");
00286                         break;
00287                 case E_BOOK_ERROR_CONTACT_NOT_FOUND :
00288                         strcpy(state_string,"E_BOOK_ERROR_CONTACT_NOT_FOUND");
00289                         break;
00290                 case E_BOOK_ERROR_CONTACT_ID_ALREADY_EXISTS :
00291                         strcpy(state_string,
00292                                 "E_BOOK_ERROR_CONTACT_ID_ALREADY_EXISTS");
00293                         break;
00294                 case E_BOOK_ERROR_PROTOCOL_NOT_SUPPORTED :
00295                         strcpy(state_string,
00296                                 "E_BOOK_ERROR_PROTOCOL_NOT_SUPPORTED");
00297                         break;
00298                 case E_BOOK_ERROR_CANCELLED :
00299                         strcpy(state_string,"E_BOOK_ERROR_CANCELLED");
00300                         break;
00301                 case E_BOOK_ERROR_COULD_NOT_CANCEL :
00302                         strcpy(state_string,"E_BOOK_ERROR_COULD_NOT_CANCEL");
00303                         break;
00304                 case E_BOOK_ERROR_AUTHENTICATION_FAILED :
00305                         strcpy(state_string,
00306                                 "E_BOOK_ERROR_AUTHENTICATION_FAILED");
00307                         break;
00308                 case E_BOOK_ERROR_AUTHENTICATION_REQUIRED :
00309                         strcpy(state_string,
00310                                 "E_BOOK_ERROR_AUTHENTICATION_REQUIRED");
00311                         break;
00312                 case E_BOOK_ERROR_TLS_NOT_AVAILABLE :
00313                         strcpy(state_string,"E_BOOK_ERROR_TLS_NOT_AVAILABLE");
00314                         break;
00315                 case E_BOOK_ERROR_CORBA_EXCEPTION :
00316                         strcpy(state_string,"E_BOOK_ERROR_CORBA_EXCEPTION");
00317                         break;
00318                 case E_BOOK_ERROR_NO_SUCH_SOURCE :
00319                         strcpy(state_string,"E_BOOK_ERROR_NO_SUCH_SOURCE");
00320                         break;
00321                 case E_BOOK_ERROR_OFFLINE_UNAVAILABLE :
00322                         strcpy(state_string,"E_BOOK_ERROR_OFFLINE_UNAVAILABLE");
00323                         break;
00324                 case E_BOOK_ERROR_OTHER_ERROR :
00325                         strcpy(state_string,"E_BOOK_ERROR_OTHER_ERROR");
00326                         break;
00327                 case E_BOOK_ERROR_INVALID_SERVER_VERSION :
00328                         strcpy(state_string,
00329                                 "E_BOOK_ERROR_INVALID_SERVER_VERSION");
00330                         break;
00331 
00332                 default:
00333                         g_assert(0);
00334         }
00335 }
00336 
00346 gchar *
00347 give_ebook_get_contact_name(give_ebook *self, const gchar *id)
00348 {
00349         g_message(__PRETTY_FUNCTION__);
00350 
00351         give_ebook_private *priv;
00352         GError *error = NULL;
00353         EContact *contact;
00354 
00355         g_assert(id);
00356 
00357         g_assert(self);
00358         g_assert(GIVE_EBOOK_IS_OBJECT(self));
00359 
00360         priv = GIVE_EBOOK_GET_PRIVATE (self);
00361         g_assert (priv);
00362 
00363         if ( !priv->ready ){
00364                 g_warning("%s - ebook is not opened jet", __PRETTY_FUNCTION__);
00365                 return NULL;
00366         }
00367 
00368         if ( !e_book_get_contact (priv->ebook,id,&contact,&error)){
00369 
00370                 g_warning("%s - couldn't get contact - %s",
00371                                 __PRETTY_FUNCTION__, error->message);
00372                 g_error_free (error);
00373                 return NULL;
00374         }
00375 
00376         return e_contact_get (contact, E_CONTACT_FULL_NAME);
00377 }
00378 
00390 gchar *
00391 give_ebook_get_contact_vcard(give_ebook *self, const gchar *id)
00392 {
00393         g_message(__PRETTY_FUNCTION__);
00394 
00395         give_ebook_private *priv;
00396         GError *error = NULL;
00397         EContact *contact;
00398 
00399         g_assert(id);
00400 
00401         g_assert(self);
00402         g_assert(GIVE_EBOOK_IS_OBJECT(self));
00403 
00404         priv = GIVE_EBOOK_GET_PRIVATE (self);
00405         g_assert (priv);
00406 
00407         if ( !priv->ready ){
00408                 g_warning("%s - ebook is not opened jet", __PRETTY_FUNCTION__);
00409                 return NULL;
00410         }
00411 
00412         if ( !e_book_get_contact (priv->ebook,id,&contact,&error)){
00413 
00414                 g_warning("%s - couldn't get contact - %s",
00415                                 __PRETTY_FUNCTION__, error->message);
00416                 g_error_free (error);
00417                 return NULL;
00418         }
00419 
00420         return e_vcard_to_string (E_VCARD(contact),EVC_FORMAT_VCARD_30);
00421 }

Generated on Sat May 17 16:27:32 2008 for Give by  doxygen 1.5.3