00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
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
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
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
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 }