gphoto4ruby 0.2.2 → 0.2.4

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/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,12 @@
1
+ == 0.2.4
2
+
3
+ * fixed memory allocation bug with CameraFilePath pointer
4
+
5
+ == 0.2.3
6
+
7
+ * fixed bug where :no_cache directive had no effect on config caching
8
+ * added create_folder function
9
+
1
10
  == 0.2.2
2
11
 
3
12
  * fixed bug where event "file added" was not changing file path
data/ext/gphoto2camera.c CHANGED
@@ -31,6 +31,7 @@ void camera_free(GPhoto2Camera *c) {
31
31
  gp_result_check(gp_list_free(c->list));
32
32
  gp_result_check(gp_file_free(c->file));
33
33
  gp_result_check(gp_camera_free(c->camera));
34
+ free(c->path);
34
35
  free(c->virtFolder);
35
36
  free(c->context);
36
37
  free(c);
@@ -39,7 +40,8 @@ void camera_free(GPhoto2Camera *c) {
39
40
  VALUE camera_allocate(VALUE klass) {
40
41
  GPhoto2Camera *c;
41
42
  c = (GPhoto2Camera*) malloc(sizeof(GPhoto2Camera));
42
- c->virtFolder = (char*) malloc(sizeof(char)*100);
43
+ c->virtFolder = (char*) malloc(sizeof(char)*1024);
44
+ c->path = (CameraFilePath*) malloc(sizeof(CameraFilePath));
43
45
  strcpy(c->virtFolder, "/");
44
46
  c->context = gp_context_new();
45
47
  gp_result_check(gp_camera_new(&(c->camera)));
@@ -198,8 +200,8 @@ VALUE camera_capture(int argc, VALUE *argv, VALUE self) {
198
200
  }
199
201
 
200
202
  gp_result_check(gp_camera_capture(c->camera, GP_CAPTURE_IMAGE, c->path, c->context));
203
+ printf("captured: %s/%s\n", c->path->folder, c->path->name);
201
204
  strcpy(c->virtFolder, c->path->folder);
202
- // printf("captured: %s/%s\n", c->path.folder, c->path.name);
203
205
  return self;
204
206
  }
205
207
 
@@ -548,20 +550,9 @@ VALUE camera_get_value(int argc, VALUE *argv, VALUE self) {
548
550
  GPhoto2Camera *c;
549
551
  CameraWidgetType widgettype;
550
552
  VALUE str, dir;
551
-
552
- switch (argc) {
553
- case 1:
554
- str = argv[0];
555
- break;
556
- case 2:
557
- str = argv[0];
558
- dir = argv[1];
559
- Check_Type(dir, T_SYMBOL);
560
- break;
561
- default:
562
- rb_raise(rb_eArgError, "Wrong number of arguments (%d for 1 or 2)", argc);
563
- return Qnil;
564
- }
553
+ VALUE val;
554
+
555
+ str = argv[0];
565
556
 
566
557
  switch (TYPE(str)) {
567
558
  case T_STRING:
@@ -574,70 +565,90 @@ VALUE camera_get_value(int argc, VALUE *argv, VALUE self) {
574
565
  rb_raise(rb_eTypeError, "Not valid parameter type");
575
566
  return Qnil;
576
567
  }
577
-
578
- if (argc == 1) {
579
- return rb_hash_aref(rb_iv_get(self, "@configuration"), rb_str_new2(name));
580
- } else {
581
- Data_Get_Struct(self, GPhoto2Camera, c);
582
-
583
- gp_result_check(gp_widget_get_child_by_name(c->config, name, &(c->childConfig)));
584
- gp_result_check(gp_widget_get_type(c->childConfig, &widgettype));
585
- switch (widgettype) {
586
- case GP_WIDGET_RADIO:
587
- if (strcmp(rb_id2name(rb_to_id(dir)), "no_cache") == 0) {
588
- return getRadio(c->childConfig);
589
- } else if (strcmp(rb_id2name(rb_to_id(dir)), "all") == 0) {
590
- return listRadio(c->childConfig);
591
- } else if (strcmp(rb_id2name(rb_to_id(dir)), "type") == 0) {
592
- return INT2FIX(GP_WIDGET_RADIO);
593
- } else {
594
- rb_raise(rb_cGPhoto2ConfigurationError, "Unknown directive '%s'", rb_id2name(rb_to_id(dir)));
595
- return Qnil;
596
- }
597
- break;
598
- case GP_WIDGET_TEXT:
599
- if (strcmp(rb_id2name(rb_to_id(dir)), "no_cache") == 0) {
600
- return getText(c->childConfig);
601
- } else if (strcmp(rb_id2name(rb_to_id(dir)), "all") == 0) {
602
- return rb_ary_new();
603
- } else if (strcmp(rb_id2name(rb_to_id(dir)), "type") == 0) {
604
- return INT2FIX(GP_WIDGET_TEXT);
605
- } else {
606
- rb_raise(rb_cGPhoto2ConfigurationError, "Unknown directive '%s'", rb_id2name(rb_to_id(dir)));
607
- return Qnil;
608
- }
609
- break;
610
- case GP_WIDGET_RANGE:
611
- if (strcmp(rb_id2name(rb_to_id(dir)), "no_cache") == 0) {
612
- return getRange(c->childConfig);
613
- } else if (strcmp(rb_id2name(rb_to_id(dir)), "all") == 0) {
614
- return listRange(c->childConfig);
615
- } else if (strcmp(rb_id2name(rb_to_id(dir)), "type") == 0) {
616
- return INT2FIX(GP_WIDGET_RANGE);
617
- } else {
618
- rb_raise(rb_cGPhoto2ConfigurationError, "Unknown directive '%s'", rb_id2name(rb_to_id(dir)));
619
- return Qnil;
620
- }
621
- break;
622
- case GP_WIDGET_TOGGLE:
623
- if (strcmp(rb_id2name(rb_to_id(dir)), "no_cache") == 0) {
624
- return getToggle(c->childConfig);
625
- } else if (strcmp(rb_id2name(rb_to_id(dir)), "all") == 0) {
626
- VALUE arr = rb_ary_new();
627
- rb_ary_push(arr, Qtrue);
628
- rb_ary_push(arr, Qfalse);
629
- return arr;
630
- } else if (strcmp(rb_id2name(rb_to_id(dir)), "type") == 0) {
631
- return INT2FIX(GP_WIDGET_TOGGLE);
632
- } else {
633
- rb_raise(rb_cGPhoto2ConfigurationError, "Unknown directive '%s'", rb_id2name(rb_to_id(dir)));
568
+
569
+ switch (argc) {
570
+ case 1:
571
+ return rb_hash_aref(rb_iv_get(self, "@configuration"), rb_str_new2(name));
572
+ break;
573
+ case 2:
574
+ dir = argv[1];
575
+ Check_Type(dir, T_SYMBOL);
576
+ Data_Get_Struct(self, GPhoto2Camera, c);
577
+
578
+ if (strcmp(rb_id2name(rb_to_id(dir)), "no_cache") == 0) {
579
+ gp_result_check(gp_camera_get_config(c->camera, &(c->config), c->context));
580
+ }
581
+
582
+ gp_result_check(gp_widget_get_child_by_name(c->config, name, &(c->childConfig)));
583
+ gp_result_check(gp_widget_get_type(c->childConfig, &widgettype));
584
+ switch (widgettype) {
585
+ case GP_WIDGET_RADIO:
586
+ if (strcmp(rb_id2name(rb_to_id(dir)), "no_cache") == 0) {
587
+ val = getRadio(c->childConfig);
588
+ rb_hash_aset(rb_iv_get(self, "@configuration"), rb_str_new2(name), val);
589
+ return val;
590
+ } else if (strcmp(rb_id2name(rb_to_id(dir)), "all") == 0) {
591
+ return listRadio(c->childConfig);
592
+ } else if (strcmp(rb_id2name(rb_to_id(dir)), "type") == 0) {
593
+ return INT2FIX(GP_WIDGET_RADIO);
594
+ } else {
595
+ rb_raise(rb_cGPhoto2ConfigurationError, "Unknown directive '%s'", rb_id2name(rb_to_id(dir)));
596
+ return Qnil;
597
+ }
598
+ break;
599
+ case GP_WIDGET_TEXT:
600
+ if (strcmp(rb_id2name(rb_to_id(dir)), "no_cache") == 0) {
601
+ val = getText(c->childConfig);
602
+ rb_hash_aset(rb_iv_get(self, "@configuration"), rb_str_new2(name), val);
603
+ return val;
604
+ } else if (strcmp(rb_id2name(rb_to_id(dir)), "all") == 0) {
605
+ return rb_ary_new();
606
+ } else if (strcmp(rb_id2name(rb_to_id(dir)), "type") == 0) {
607
+ return INT2FIX(GP_WIDGET_TEXT);
608
+ } else {
609
+ rb_raise(rb_cGPhoto2ConfigurationError, "Unknown directive '%s'", rb_id2name(rb_to_id(dir)));
610
+ return Qnil;
611
+ }
612
+ break;
613
+ case GP_WIDGET_RANGE:
614
+ if (strcmp(rb_id2name(rb_to_id(dir)), "no_cache") == 0) {
615
+ val = getRange(c->childConfig);
616
+ rb_hash_aset(rb_iv_get(self, "@configuration"), rb_str_new2(name), val);
617
+ return val;
618
+ } else if (strcmp(rb_id2name(rb_to_id(dir)), "all") == 0) {
619
+ return listRange(c->childConfig);
620
+ } else if (strcmp(rb_id2name(rb_to_id(dir)), "type") == 0) {
621
+ return INT2FIX(GP_WIDGET_RANGE);
622
+ } else {
623
+ rb_raise(rb_cGPhoto2ConfigurationError, "Unknown directive '%s'", rb_id2name(rb_to_id(dir)));
624
+ return Qnil;
625
+ }
626
+ break;
627
+ case GP_WIDGET_TOGGLE:
628
+ if (strcmp(rb_id2name(rb_to_id(dir)), "no_cache") == 0) {
629
+ val = getToggle(c->childConfig);
630
+ rb_hash_aset(rb_iv_get(self, "@configuration"), rb_str_new2(name), val);
631
+ return val;
632
+ } else if (strcmp(rb_id2name(rb_to_id(dir)), "all") == 0) {
633
+ VALUE arr = rb_ary_new();
634
+ rb_ary_push(arr, Qtrue);
635
+ rb_ary_push(arr, Qfalse);
636
+ return arr;
637
+ } else if (strcmp(rb_id2name(rb_to_id(dir)), "type") == 0) {
638
+ return INT2FIX(GP_WIDGET_TOGGLE);
639
+ } else {
640
+ rb_raise(rb_cGPhoto2ConfigurationError, "Unknown directive '%s'", rb_id2name(rb_to_id(dir)));
641
+ return Qnil;
642
+ }
643
+ break;
644
+ default:
645
+ rb_raise(rb_cGPhoto2ConfigurationError, "Not supported yet");
634
646
  return Qnil;
635
- }
636
- break;
637
- default:
638
- rb_raise(rb_cGPhoto2ConfigurationError, "Not supported yet");
639
- return Qnil;
640
- }
647
+ }
648
+ break;
649
+ default:
650
+ rb_raise(rb_eArgError, "Wrong number of arguments (%d for 1 or 2)", argc);
651
+ return Qnil;
641
652
  }
642
653
  }
643
654
 
@@ -867,6 +878,32 @@ VALUE camera_folder_down(VALUE self, VALUE folder) {
867
878
  return self;
868
879
  }
869
880
 
881
+ /*
882
+ * call-seq:
883
+ * create_folder(name) => camera
884
+ *
885
+ * Creates subfolder in current camera path with specified name. If not
886
+ * supported by camera throws "Unspecified error" GPhoto2::Exception
887
+ *
888
+ * Examples:
889
+ *
890
+ * c = GPhoto2::Camera.new
891
+ * c.create_folder "my_store"
892
+ *
893
+ */
894
+ VALUE camera_create_folder(VALUE self, VALUE folder) {
895
+ Check_Type(folder, T_STRING);
896
+
897
+ const char *name;
898
+ GPhoto2Camera *c;
899
+
900
+ Data_Get_Struct(self, GPhoto2Camera, c);
901
+
902
+ name = RSTRING(folder)->ptr;
903
+ gp_result_check(gp_camera_folder_make_dir(c->camera, c->virtFolder, name, c->context));
904
+ return self;
905
+ }
906
+
870
907
  /*
871
908
  * call-seq:
872
909
  * wait(timeout=2000) => camera event
data/ext/gphoto2camera.h CHANGED
@@ -60,6 +60,7 @@ VALUE camera_subfolders(VALUE self);
60
60
  VALUE camera_files(VALUE self);
61
61
  VALUE camera_folder_up(VALUE self);
62
62
  VALUE camera_folder_down(VALUE self, VALUE folder);
63
+ VALUE camera_create_folder(VALUE self, VALUE folder);
63
64
 
64
65
  VALUE camera_wait(int argc, VALUE *argv, VALUE self);
65
66
 
data/ext/gphoto4ruby.c CHANGED
@@ -82,6 +82,7 @@ void Init_gphoto4ruby() {
82
82
  rb_define_method(rb_cGPhoto2Camera, "files", camera_files, 0); /* in gphoto2camera.c */
83
83
  rb_define_method(rb_cGPhoto2Camera, "folder_up", camera_folder_up, 0); /* in gphoto2camera.c */
84
84
  rb_define_method(rb_cGPhoto2Camera, "folder_down", camera_folder_down, 1); /* in gphoto2camera.c */
85
+ rb_define_method(rb_cGPhoto2Camera, "create_folder", camera_create_folder, 1); /* in gphoto2camera.c */
85
86
  rb_define_method(rb_cGPhoto2Camera, "wait", camera_wait, -1); /* in gphoto2camera.c */
86
87
 
87
88
  rb_define_method(rb_cGPhoto2CameraEvent, "type", camera_event_type, 0); /* in gphoto2camera_event.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.2
4
+ version: 0.2.4
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-09-29 00:00:00 +04:00
13
+ date: 2008-10-06 00:00:00 +04:00
14
14
  default_executable:
15
15
  dependencies: []
16
16