revolution 0.1 → 0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/extconf.rb +6 -2
- data/revolution.c +172 -37
- metadata +3 -3
data/extconf.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
require 'mkmf'
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
pkg_config('libebook-1.2') || pkg_config('libebook-1.0')
|
4
|
+
pkg_config('libecal-1.2') || pkg_config('libecal-1.0')
|
5
|
+
pkg_config('evolution-data-server-1.2') || pkg_config('evolution-data-server-1.0')
|
6
|
+
pkg_config('glib-2.0')
|
7
|
+
|
8
|
+
$CPPFLAGS += " -Wall "
|
5
9
|
|
6
10
|
create_makefile("revolution")
|
7
11
|
|
data/revolution.c
CHANGED
@@ -8,15 +8,6 @@
|
|
8
8
|
#include <libebook/e-book.h>
|
9
9
|
#include <libecal/e-cal.h>
|
10
10
|
|
11
|
-
#include <libical/pvl.h>
|
12
|
-
#include <libical/ical.h>
|
13
|
-
|
14
|
-
#include <libical/icalcomponent.h>
|
15
|
-
#include <libical/icalproperty.h>
|
16
|
-
#include <libical/icalvalue.h>
|
17
|
-
#include <libical/icaltime.h>
|
18
|
-
#include <libical/icalenums.h>
|
19
|
-
|
20
11
|
VALUE crRevolution;
|
21
12
|
VALUE module;
|
22
13
|
|
@@ -84,6 +75,8 @@ static VALUE evTask_init(VALUE self) {
|
|
84
75
|
rb_define_attr(crEvTask, "description", 1, 0);
|
85
76
|
rb_define_attr(crEvTask, "start", 1, 0);
|
86
77
|
rb_define_attr(crEvTask, "due", 1, 0);
|
78
|
+
rb_define_attr(crEvTask, "status", 1, 0);
|
79
|
+
rb_define_attr(crEvTask, "priority", 1, 0);
|
87
80
|
rb_define_attr(crEvTask, "last_modification", 1, 0);
|
88
81
|
return Qtrue;
|
89
82
|
}
|
@@ -111,6 +104,34 @@ void copy_into_task(const VALUE ruby_task, ECalComponent* ev_task) {
|
|
111
104
|
rb_iv_set(ruby_task, "@due", rb_funcall( rb_cTime, rb_intern( "at" ), 1, INT2NUM(icaltime_as_timet(*due_date.value))));
|
112
105
|
e_cal_component_free_datetime(&due_date);
|
113
106
|
}
|
107
|
+
|
108
|
+
// Does this need to be freed? There's no API call to free it...
|
109
|
+
icalproperty_status status;
|
110
|
+
e_cal_component_get_status(ev_task, &status);
|
111
|
+
if (status == ICAL_STATUS_NONE) {
|
112
|
+
rb_iv_set(ruby_task, "@status", rb_str_new2("Not started"));
|
113
|
+
} else if (status == ICAL_STATUS_INPROCESS) {
|
114
|
+
rb_iv_set(ruby_task, "@status", rb_str_new2("In progress"));
|
115
|
+
} else if (status == ICAL_STATUS_COMPLETED) {
|
116
|
+
rb_iv_set(ruby_task, "@status", rb_str_new2("Completed"));
|
117
|
+
} else if (status == ICAL_STATUS_CANCELLED) {
|
118
|
+
rb_iv_set(ruby_task, "@status", rb_str_new2("Cancelled"));
|
119
|
+
}
|
120
|
+
|
121
|
+
int* priority;
|
122
|
+
e_cal_component_get_priority(ev_task, &priority);
|
123
|
+
if (priority) {
|
124
|
+
if (*priority == 7) {
|
125
|
+
rb_iv_set(ruby_task, "@priority", rb_str_new2("Low"));
|
126
|
+
} else if (*priority == 5) {
|
127
|
+
rb_iv_set(ruby_task, "@priority", rb_str_new2("Normal"));
|
128
|
+
} else if (*priority == 3) {
|
129
|
+
rb_iv_set(ruby_task, "@priority", rb_str_new2("High"));
|
130
|
+
} /* seems like nil is as good as undefined - else {
|
131
|
+
rb_iv_set(ruby_task, "@priority", rb_str_new2("Undefined"));
|
132
|
+
}*/
|
133
|
+
e_cal_component_free_priority(priority);
|
134
|
+
}
|
114
135
|
}
|
115
136
|
|
116
137
|
/*
|
@@ -276,6 +297,8 @@ static VALUE revolution_get_all_appointments(VALUE self, VALUE start, VALUE end)
|
|
276
297
|
///////////////////////////////////////////////////////
|
277
298
|
// Address Book
|
278
299
|
VALUE crEvContact;
|
300
|
+
VALUE crEvContactAddress;
|
301
|
+
VALUE crEvContactIMAddress;
|
279
302
|
|
280
303
|
/*
|
281
304
|
* call-seq:
|
@@ -289,42 +312,150 @@ static VALUE evContact_init(VALUE self) {
|
|
289
312
|
rb_define_attr(crEvContact, "last_name", 1, 0);
|
290
313
|
rb_define_attr(crEvContact, "home_email", 1, 0);
|
291
314
|
rb_define_attr(crEvContact, "work_email", 1, 0);
|
315
|
+
rb_define_attr(crEvContact, "email_addresses", 1, 0);
|
316
|
+
rb_define_attr(crEvContact, "birthday", 1, 0);
|
317
|
+
rb_define_attr(crEvContact, "home_phone", 1, 0);
|
318
|
+
rb_define_attr(crEvContact, "work_phone", 1, 0);
|
319
|
+
rb_define_attr(crEvContact, "mobile_phone", 1, 0);
|
320
|
+
rb_define_attr(crEvContact, "home_address", 1, 0);
|
321
|
+
rb_define_attr(crEvContact, "work_address", 1, 0);
|
322
|
+
rb_define_attr(crEvContact, "other_address", 1, 0);
|
323
|
+
rb_define_attr(crEvContact, "organization", 1, 0);
|
324
|
+
rb_define_attr(crEvContact, "title", 1, 0);
|
325
|
+
rb_define_attr(crEvContact, "im_addresses", 1, 0);
|
326
|
+
return Qtrue;
|
327
|
+
}
|
328
|
+
|
329
|
+
/*
|
330
|
+
* call-seq:
|
331
|
+
* new() -> EvContactIMAddress
|
332
|
+
*
|
333
|
+
* Creates a new EvContactIMAddress object
|
334
|
+
*/
|
335
|
+
static VALUE evContactIMAddress_init(VALUE self) {
|
336
|
+
rb_define_attr(crEvContactIMAddress, "provider", 1, 0);
|
337
|
+
rb_define_attr(crEvContactIMAddress, "location", 1, 0);
|
338
|
+
rb_define_attr(crEvContactIMAddress, "address", 1, 0);
|
339
|
+
return Qtrue;
|
340
|
+
}
|
341
|
+
/*
|
342
|
+
* call-seq:
|
343
|
+
* new() -> EvContactAddress
|
344
|
+
*
|
345
|
+
* Creates a new EvContactAddress object
|
346
|
+
*/
|
347
|
+
static VALUE evContactAddress_init(VALUE self) {
|
348
|
+
rb_define_attr(crEvContactAddress, "address_format", 1, 0);
|
349
|
+
rb_define_attr(crEvContactAddress, "po", 1, 0);
|
350
|
+
rb_define_attr(crEvContactAddress, "ext", 1, 0);
|
351
|
+
rb_define_attr(crEvContactAddress, "street", 1, 0);
|
352
|
+
rb_define_attr(crEvContactAddress, "locality", 1, 0);
|
353
|
+
rb_define_attr(crEvContactAddress, "region", 1, 0);
|
354
|
+
rb_define_attr(crEvContactAddress, "code", 1, 0);
|
355
|
+
rb_define_attr(crEvContactAddress, "country", 1, 0);
|
292
356
|
return Qtrue;
|
293
357
|
}
|
294
358
|
|
295
|
-
|
296
|
-
|
297
|
-
|
359
|
+
void copy_in_address(EContactAddress* address, VALUE ruby_contact, char* field) {
|
360
|
+
if (address) {
|
361
|
+
VALUE rb_addr = rb_class_new_instance(0, 0, crEvContactAddress);
|
362
|
+
rb_iv_set(rb_addr, "@address_format", address->address_format ? rb_str_new2(address->address_format) : Qnil);
|
363
|
+
rb_iv_set(rb_addr, "@po", address->po ? rb_str_new2(address->po) : Qnil);
|
364
|
+
rb_iv_set(rb_addr, "@ext", address->ext ? rb_str_new2(address->ext) : Qnil);
|
365
|
+
rb_iv_set(rb_addr, "@street", address->street ? rb_str_new2(address->street) : Qnil);
|
366
|
+
rb_iv_set(rb_addr, "@locality", address->locality ? rb_str_new2(address->locality) : Qnil);
|
367
|
+
rb_iv_set(rb_addr, "@region", address->region ? rb_str_new2(address->region) : Qnil);
|
368
|
+
rb_iv_set(rb_addr, "@code", address->code ? rb_str_new2(address->code) : Qnil);
|
369
|
+
rb_iv_set(rb_addr, "@country", address->country ? rb_str_new2(address->country) : Qnil);
|
370
|
+
|
371
|
+
rb_iv_set(ruby_contact, field, rb_addr);
|
372
|
+
e_contact_address_free(address);
|
373
|
+
}
|
374
|
+
}
|
375
|
+
|
376
|
+
void copy_in_im_address(VALUE im_addresses, char* address, char* provider, char* location) {
|
377
|
+
if (!address) {
|
378
|
+
return;
|
379
|
+
}
|
380
|
+
VALUE rb_addr = rb_class_new_instance(0, 0, crEvContactIMAddress);
|
381
|
+
rb_iv_set(rb_addr, "@provider", rb_str_new2(provider));
|
382
|
+
rb_iv_set(rb_addr, "@location", rb_str_new2(location));
|
383
|
+
rb_iv_set(rb_addr, "@address", rb_str_new2(address));
|
384
|
+
rb_ary_push(im_addresses, rb_addr);
|
298
385
|
}
|
299
386
|
|
300
387
|
void copy_into_contact(const VALUE ruby_contact, EContact* ev_contact) {
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
388
|
+
// last mod time will work in v2.16+ : e_contact_get (ev_contact, E_CONTACT_REV));
|
389
|
+
// what's the best way to handle version differences? #ifdef them in?
|
390
|
+
|
391
|
+
rb_iv_set(ruby_contact, "@uid", rb_str_new2(e_contact_get(ev_contact, E_CONTACT_UID)));
|
392
|
+
|
393
|
+
char* value = e_contact_get(ev_contact, E_CONTACT_GIVEN_NAME);
|
394
|
+
rb_iv_set(ruby_contact, "@first_name", value ? rb_str_new2(value) : Qnil);
|
395
|
+
|
396
|
+
value = e_contact_get(ev_contact, E_CONTACT_FAMILY_NAME);
|
397
|
+
rb_iv_set(ruby_contact, "@last_name", value ? rb_str_new2(value) : Qnil);
|
398
|
+
|
399
|
+
value = e_contact_get(ev_contact, E_CONTACT_PHONE_HOME);
|
400
|
+
rb_iv_set(ruby_contact, "@home_phone", value ? rb_str_new2(value) : Qnil);
|
401
|
+
|
402
|
+
value = e_contact_get(ev_contact, E_CONTACT_PHONE_BUSINESS);
|
403
|
+
rb_iv_set(ruby_contact, "@work_phone", value ? rb_str_new2(value) : Qnil);
|
404
|
+
|
405
|
+
value = e_contact_get(ev_contact, E_CONTACT_PHONE_MOBILE);
|
406
|
+
rb_iv_set(ruby_contact, "@mobile_phone", value ? rb_str_new2(value) : Qnil);
|
407
|
+
|
408
|
+
value = e_contact_get(ev_contact, E_CONTACT_ORG);
|
409
|
+
rb_iv_set(ruby_contact, "@organization", value ? rb_str_new2(value) : Qnil);
|
410
|
+
|
411
|
+
value = e_contact_get(ev_contact, E_CONTACT_TITLE);
|
412
|
+
rb_iv_set(ruby_contact, "@title", value ? rb_str_new2(value) : Qnil);
|
413
|
+
|
414
|
+
EContactDate *birth_date = e_contact_get(ev_contact, E_CONTACT_BIRTH_DATE);
|
415
|
+
if (birth_date) {
|
416
|
+
rb_iv_set(ruby_contact, "@birthday", rb_funcall(rb_cTime, rb_intern("gm"), 6, INT2NUM(birth_date->year), INT2NUM(birth_date->month), INT2NUM(birth_date->day), INT2NUM(0), INT2NUM(0), INT2NUM(0)));
|
417
|
+
e_contact_date_free(birth_date);
|
418
|
+
}
|
419
|
+
|
420
|
+
rb_iv_set(ruby_contact, "@email_addresses", rb_hash_new());
|
421
|
+
if (e_contact_get(ev_contact, E_CONTACT_EMAIL)) {
|
422
|
+
GList* attrs, *attr;
|
423
|
+
attrs = e_contact_get_attributes(ev_contact, E_CONTACT_EMAIL);
|
424
|
+
for (attr = attrs; attr; attr = attr->next) {
|
425
|
+
EVCardAttribute* a = attr->data;
|
426
|
+
GList* l;
|
427
|
+
for (l = e_vcard_attribute_get_params(a); l; l = l->next) {
|
428
|
+
EVCardAttributeParam* p = l->data;
|
429
|
+
if (!g_ascii_strcasecmp((char*)e_vcard_attribute_param_get_name(p), "TYPE")) {
|
430
|
+
VALUE email_addresses = rb_iv_get(ruby_contact, "@email_addresses");
|
431
|
+
VALUE rb_type = rb_str_new2(e_vcard_attribute_param_get_values(p)->data);
|
432
|
+
if (rb_hash_aref(email_addresses, rb_type) == Qnil) {
|
433
|
+
rb_hash_aset(email_addresses, rb_type, rb_ary_new());
|
324
434
|
}
|
435
|
+
rb_ary_push(rb_hash_aref(email_addresses, rb_type), rb_str_new2(e_vcard_attribute_get_value(a)));
|
325
436
|
}
|
326
|
-
}
|
327
|
-
}
|
437
|
+
}
|
438
|
+
}
|
439
|
+
}
|
440
|
+
|
441
|
+
copy_in_address(e_contact_get(ev_contact, E_CONTACT_ADDRESS_HOME), ruby_contact, "@home_address");
|
442
|
+
copy_in_address(e_contact_get(ev_contact, E_CONTACT_ADDRESS_WORK), ruby_contact, "@work_address");
|
443
|
+
copy_in_address(e_contact_get(ev_contact, E_CONTACT_ADDRESS_OTHER), ruby_contact, "@other_address");
|
444
|
+
|
445
|
+
VALUE im_addresses = rb_ary_new();
|
446
|
+
copy_in_im_address(im_addresses, e_contact_get(ev_contact, E_CONTACT_IM_AIM_HOME_1), "AIM", "HOME");
|
447
|
+
copy_in_im_address(im_addresses, e_contact_get(ev_contact, E_CONTACT_IM_AIM_WORK_1), "AIM", "WORK");
|
448
|
+
copy_in_im_address(im_addresses, e_contact_get(ev_contact, E_CONTACT_IM_YAHOO_HOME_1), "Yahoo", "HOME");
|
449
|
+
copy_in_im_address(im_addresses, e_contact_get(ev_contact, E_CONTACT_IM_YAHOO_WORK_1), "Yahoo", "WORK");
|
450
|
+
copy_in_im_address(im_addresses, e_contact_get(ev_contact, E_CONTACT_IM_GROUPWISE_HOME_1), "Groupwise", "HOME");
|
451
|
+
copy_in_im_address(im_addresses, e_contact_get(ev_contact, E_CONTACT_IM_GROUPWISE_WORK_1), "Groupwise", "WORK");
|
452
|
+
copy_in_im_address(im_addresses, e_contact_get(ev_contact, E_CONTACT_IM_JABBER_HOME_1), "Jabber", "HOME");
|
453
|
+
copy_in_im_address(im_addresses, e_contact_get(ev_contact, E_CONTACT_IM_JABBER_WORK_1), "Jabber", "WORK");
|
454
|
+
copy_in_im_address(im_addresses, e_contact_get(ev_contact, E_CONTACT_IM_MSN_HOME_1), "MSN", "HOME");
|
455
|
+
copy_in_im_address(im_addresses, e_contact_get(ev_contact, E_CONTACT_IM_MSN_WORK_1), "MSN", "WORK");
|
456
|
+
copy_in_im_address(im_addresses, e_contact_get(ev_contact, E_CONTACT_IM_ICQ_HOME_1), "ICQ", "HOME");
|
457
|
+
copy_in_im_address(im_addresses, e_contact_get(ev_contact, E_CONTACT_IM_ICQ_WORK_1), "ICQ", "WORK");
|
458
|
+
rb_iv_set(ruby_contact, "@im_addresses", im_addresses);
|
328
459
|
}
|
329
460
|
|
330
461
|
/*
|
@@ -381,6 +512,10 @@ void Init_revolution() {
|
|
381
512
|
|
382
513
|
crEvContact = rb_define_class_under(module, "EvContact", rb_cObject);
|
383
514
|
rb_define_method(crEvContact, "initialize", evContact_init, 0);
|
515
|
+
crEvContactAddress = rb_define_class_under(module, "EvContactAddress", rb_cObject);
|
516
|
+
rb_define_method(crEvContactAddress, "initialize", evContactAddress_init, 0);
|
517
|
+
crEvContactIMAddress = rb_define_class_under(module, "EvContactIMAddress", rb_cObject);
|
518
|
+
rb_define_method(crEvContactIMAddress, "initialize", evContactIMAddress_init, 0);
|
384
519
|
|
385
520
|
crEvAppointment = rb_define_class_under(module, "EvAppointment", rb_cObject);
|
386
521
|
rb_define_method(crEvAppointment, "initialize", evAppointment_init, 0);
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.8.
|
2
|
+
rubygems_version: 0.8.4
|
3
3
|
specification_version: 1
|
4
4
|
name: revolution
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: "0.
|
7
|
-
date: 2005-03-
|
6
|
+
version: "0.2"
|
7
|
+
date: 2005-03-25
|
8
8
|
summary: Revolution is a binding for the Evolution email client
|
9
9
|
require_paths:
|
10
10
|
- ''
|