gphoto4ruby 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.2.6
2
+
3
+ * Can use config(:no_cache)
4
+
1
5
  == 0.2.5
2
6
 
3
7
  * Another bug with memory allocation fixed
data/ext/gphoto2camera.c CHANGED
@@ -421,8 +421,10 @@ VALUE camera_delete(int argc, VALUE *argv, VALUE self) {
421
421
  /*
422
422
  * call-seq:
423
423
  * config => hash
424
+ * config :no_cache => hash
424
425
  *
425
426
  * Returns cached hash of adjustable camera configuration with their values.
427
+ * Can be run with directive <b>:no_cache</b>
426
428
  *
427
429
  * Examples:
428
430
  *
@@ -440,8 +442,54 @@ VALUE camera_delete(int argc, VALUE *argv, VALUE self) {
440
442
  * "channel", "encryption"]
441
443
  *
442
444
  */
443
- VALUE camera_get_config(VALUE self) {
444
- return rb_iv_get(self, "@configuration");
445
+ VALUE camera_get_config(int argc, VALUE *argv, VALUE self) {
446
+ int i;
447
+ const char *key;
448
+ GPhoto2Camera *c;
449
+ CameraWidgetType widgettype;
450
+ VALUE arr, cfg;
451
+
452
+ cfg = rb_iv_get(self, "@configuration");
453
+
454
+ switch (argc) {
455
+ case 1:
456
+ Check_Type(argv[0], T_SYMBOL);
457
+ Data_Get_Struct(self, GPhoto2Camera, c);
458
+
459
+ if (strcmp(rb_id2name(rb_to_id(argv[0])), "no_cache") == 0) {
460
+ gp_result_check(gp_camera_get_config(c->camera, &(c->config), c->context));
461
+ arr = rb_funcall(cfg, rb_intern("keys"), 0);
462
+ for (i = 0; i < RARRAY(arr)->len; i++) {
463
+ key = RSTRING(RARRAY(arr)->ptr[i])->ptr;
464
+ gp_result_check(gp_widget_get_child_by_name(c->config, key, &(c->childConfig)));
465
+ gp_result_check(gp_widget_get_type(c->childConfig, &widgettype));
466
+ switch (widgettype) {
467
+ case GP_WIDGET_RADIO:
468
+ rb_hash_aset(cfg, RARRAY(arr)->ptr[i], getRadio(c->childConfig));
469
+ break;
470
+ case GP_WIDGET_TEXT:
471
+ rb_hash_aset(cfg, RARRAY(arr)->ptr[i], getText(c->childConfig));
472
+ break;
473
+ case GP_WIDGET_RANGE:
474
+ rb_hash_aset(cfg, RARRAY(arr)->ptr[i], getRange(c->childConfig));
475
+ break;
476
+ case GP_WIDGET_TOGGLE:
477
+ rb_hash_aset(cfg, RARRAY(arr)->ptr[i], getToggle(c->childConfig));
478
+ break;
479
+ default:
480
+ break;
481
+ }
482
+ }
483
+ } else {
484
+ rb_raise(rb_cGPhoto2ConfigurationError, "Unknown directive '%s'", rb_id2name(rb_to_id(argv[0])));
485
+ return Qnil;
486
+ }
487
+ case 0:
488
+ return cfg;
489
+ default:
490
+ rb_raise(rb_eArgError, "Wrong number of arguments (%d for 0 or 1)", argc);
491
+ return Qnil;
492
+ }
445
493
  }
446
494
 
447
495
  /*
data/ext/gphoto2camera.h CHANGED
@@ -49,7 +49,7 @@ VALUE camera_capture(int argc, VALUE *argv, VALUE self);
49
49
  VALUE camera_save(int argc, VALUE *argv, VALUE self);
50
50
  VALUE camera_delete(int argc, VALUE *argv, VALUE self);
51
51
 
52
- VALUE camera_get_config(VALUE self);
52
+ VALUE camera_get_config(int argc, VALUE *argv, VALUE self);
53
53
  VALUE camera_config_merge(VALUE self, VALUE hash);
54
54
 
55
55
  VALUE camera_get_value(int argc, VALUE *argv, VALUE self);
data/ext/gphoto4ruby.c CHANGED
@@ -70,7 +70,7 @@ void Init_gphoto4ruby() {
70
70
  rb_define_alloc_func(rb_cGPhoto2Camera, camera_allocate);
71
71
  rb_define_module_function(rb_cGPhoto2Camera, "ports", camera_class_ports, 0); /* in gphoto2camera.c */
72
72
  rb_define_method(rb_cGPhoto2Camera, "initialize", camera_initialize, -1); /* in gphoto2camera.c */
73
- rb_define_method(rb_cGPhoto2Camera, "config", camera_get_config, 0); /* in gphoto2camera.c */
73
+ rb_define_method(rb_cGPhoto2Camera, "config", camera_get_config, -1); /* in gphoto2camera.c */
74
74
  rb_define_method(rb_cGPhoto2Camera, "config_merge", camera_config_merge, 1); /* in gphoto2camera.c */
75
75
  rb_define_method(rb_cGPhoto2Camera, "[]", camera_get_value, -1); /* in gphoto2camera.c */
76
76
  rb_define_method(rb_cGPhoto2Camera, "[]=", camera_set_value, 2); /* in gphoto2camera.c */
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gphoto4ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.5
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - heq4 company
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2008-10-06 00:00:00 +04:00
13
+ date: 2008-10-10 00:00:00 +04:00
14
14
  default_executable:
15
15
  dependencies: []
16
16