gphoto4ruby 0.3.3 → 0.3.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/ext/extconf.rb +3 -0
- data/ext/gphoto2camera.c +40 -37
- data/ext/gphoto2camera.h +1 -0
- data/ext/gphoto2camera_utilities.c +5 -5
- data/ext/gphoto4ruby.c +7 -5
- metadata +2 -2
data/ext/extconf.rb
CHANGED
data/ext/gphoto2camera.c
CHANGED
@@ -104,7 +104,7 @@ VALUE camera_initialize(int argc, VALUE *argv, VALUE self) {
|
|
104
104
|
|
105
105
|
gp_result_check(gp_port_info_list_new(&portInfoList));
|
106
106
|
gp_result_check(gp_port_info_list_load(portInfoList));
|
107
|
-
portIndex = gp_result_check(gp_port_info_list_lookup_path(portInfoList,
|
107
|
+
portIndex = gp_result_check(gp_port_info_list_lookup_path(portInfoList, RSTRING_PTR(argv[0])));
|
108
108
|
gp_result_check(gp_port_info_list_get_info(portInfoList, portIndex, &p));
|
109
109
|
gp_result_check(gp_camera_set_port_info(c->camera, p));
|
110
110
|
break;
|
@@ -248,7 +248,7 @@ VALUE camera_capture(int argc, VALUE *argv, VALUE self) {
|
|
248
248
|
*
|
249
249
|
*/
|
250
250
|
VALUE camera_save(int argc, VALUE *argv, VALUE self) {
|
251
|
-
int i, count;
|
251
|
+
int i, count, retVal;
|
252
252
|
int newName = 0;
|
253
253
|
const char *fData, *key, *val, *name;
|
254
254
|
char *fPath, *newNameStr, *pchNew, *pchSrc;
|
@@ -295,13 +295,13 @@ VALUE camera_save(int argc, VALUE *argv, VALUE self) {
|
|
295
295
|
return Qnil;
|
296
296
|
}
|
297
297
|
arr = rb_funcall(argv[0], rb_intern("keys"), 0);
|
298
|
-
for (i = 0; i <
|
299
|
-
switch(TYPE(
|
298
|
+
for (i = 0; i < RARRAY_LEN(arr); i++) {
|
299
|
+
switch(TYPE(RARRAY_PTR(arr)[i])) {
|
300
300
|
case T_STRING:
|
301
|
-
key =
|
301
|
+
key = RSTRING_PTR(RARRAY_PTR(arr)[i]);
|
302
302
|
break;
|
303
303
|
case T_SYMBOL:
|
304
|
-
key = rb_id2name(rb_to_id(
|
304
|
+
key = rb_id2name(rb_to_id(RARRAY_PTR(arr)[i]));
|
305
305
|
break;
|
306
306
|
default:
|
307
307
|
gp_list_free(list);
|
@@ -309,7 +309,7 @@ VALUE camera_save(int argc, VALUE *argv, VALUE self) {
|
|
309
309
|
return Qnil;
|
310
310
|
}
|
311
311
|
if (strcmp(key, "to_folder") == 0) {
|
312
|
-
fPath =
|
312
|
+
fPath = RSTRING_PTR(rb_hash_aref(argv[0], RARRAY_PTR(arr)[i]));
|
313
313
|
if (strlen(fPath) > 0) {
|
314
314
|
if (fPath[strlen(fPath)] == '/') {
|
315
315
|
strcpy(fName, fPath);
|
@@ -319,22 +319,22 @@ VALUE camera_save(int argc, VALUE *argv, VALUE self) {
|
|
319
319
|
}
|
320
320
|
}
|
321
321
|
} else if (strcmp(key, "new_name") == 0) {
|
322
|
-
newNameStr =
|
322
|
+
newNameStr = RSTRING_PTR(rb_hash_aref(argv[0], RARRAY_PTR(arr)[i]));
|
323
323
|
if (strlen(newNameStr) > 0) {
|
324
324
|
newName = 1;
|
325
325
|
}
|
326
326
|
} else if (strcmp(key, "type") == 0) {
|
327
|
-
hVal = rb_hash_aref(argv[0],
|
327
|
+
hVal = rb_hash_aref(argv[0], RARRAY_PTR(arr)[i]);
|
328
328
|
Check_Type(hVal, T_SYMBOL);
|
329
329
|
val = rb_id2name(rb_to_id(hVal));
|
330
330
|
if (strcmp(val, "preview") == 0) {
|
331
331
|
fileType = GP_FILE_TYPE_PREVIEW;
|
332
332
|
}
|
333
333
|
} else if (strcmp(key, "file") == 0) {
|
334
|
-
hVal = rb_hash_aref(argv[0],
|
334
|
+
hVal = rb_hash_aref(argv[0], RARRAY_PTR(arr)[i]);
|
335
335
|
switch(TYPE(hVal)) {
|
336
336
|
case T_STRING:
|
337
|
-
strcpy(cFileName,
|
337
|
+
strcpy(cFileName, RSTRING_PTR(hVal));
|
338
338
|
break;
|
339
339
|
case T_SYMBOL:
|
340
340
|
val = rb_id2name(rb_to_id(hVal));
|
@@ -374,10 +374,13 @@ VALUE camera_save(int argc, VALUE *argv, VALUE self) {
|
|
374
374
|
strcat(fName, cFileName);
|
375
375
|
}
|
376
376
|
fd = open(fName, O_CREAT | O_WRONLY, 0644);
|
377
|
-
write(fd, fData, fSize);
|
377
|
+
retVal = write(fd, fData, fSize);
|
378
378
|
close(fd);
|
379
379
|
gp_file_free(file);
|
380
380
|
gp_list_free(list);
|
381
|
+
if (retVal < 0) {
|
382
|
+
rb_raise(rb_eIOError, "Can't save into file");
|
383
|
+
}
|
381
384
|
return self;
|
382
385
|
}
|
383
386
|
|
@@ -437,13 +440,13 @@ VALUE camera_delete(int argc, VALUE *argv, VALUE self) {
|
|
437
440
|
switch(TYPE(argv[0])) {
|
438
441
|
case T_HASH:
|
439
442
|
arr = rb_funcall(argv[0], rb_intern("keys"), 0);
|
440
|
-
for (i = 0; i <
|
441
|
-
switch(TYPE(
|
443
|
+
for (i = 0; i < RARRAY_LEN(arr); i++) {
|
444
|
+
switch(TYPE(RARRAY_PTR(arr)[i])) {
|
442
445
|
case T_STRING:
|
443
|
-
key =
|
446
|
+
key = RSTRING_PTR(RARRAY_PTR(arr)[i]);
|
444
447
|
break;
|
445
448
|
case T_SYMBOL:
|
446
|
-
key = rb_id2name(rb_to_id(
|
449
|
+
key = rb_id2name(rb_to_id(RARRAY_PTR(arr)[i]));
|
447
450
|
break;
|
448
451
|
default:
|
449
452
|
gp_list_free(list);
|
@@ -451,7 +454,7 @@ VALUE camera_delete(int argc, VALUE *argv, VALUE self) {
|
|
451
454
|
return Qnil;
|
452
455
|
}
|
453
456
|
if (strcmp(key, "file") == 0) {
|
454
|
-
strcpy(cFileName,
|
457
|
+
strcpy(cFileName, RSTRING_PTR(rb_hash_aref(argv[0], RARRAY_PTR(arr)[i])));
|
455
458
|
}
|
456
459
|
}
|
457
460
|
break;
|
@@ -521,25 +524,25 @@ VALUE camera_get_config(int argc, VALUE *argv, VALUE self) {
|
|
521
524
|
gp_widget_free(c->config);
|
522
525
|
gp_result_check(gp_camera_get_config(c->camera, &(c->config), c->context));
|
523
526
|
arr = rb_funcall(cfg, rb_intern("keys"), 0);
|
524
|
-
for (i = 0; i <
|
525
|
-
key =
|
527
|
+
for (i = 0; i < RARRAY_LEN(arr); i++) {
|
528
|
+
key = RSTRING_PTR(RARRAY_PTR(arr)[i]);
|
526
529
|
gp_result_check(gp_widget_get_child_by_name(c->config, key, &(c->childConfig)));
|
527
530
|
gp_result_check(gp_widget_get_type(c->childConfig, &widgettype));
|
528
531
|
switch (widgettype) {
|
529
532
|
case GP_WIDGET_RADIO:
|
530
|
-
rb_hash_aset(cfg,
|
533
|
+
rb_hash_aset(cfg, RARRAY_PTR(arr)[i], getRadio(c->childConfig));
|
531
534
|
break;
|
532
535
|
case GP_WIDGET_TEXT:
|
533
|
-
rb_hash_aset(cfg,
|
536
|
+
rb_hash_aset(cfg, RARRAY_PTR(arr)[i], getText(c->childConfig));
|
534
537
|
break;
|
535
538
|
case GP_WIDGET_RANGE:
|
536
|
-
rb_hash_aset(cfg,
|
539
|
+
rb_hash_aset(cfg, RARRAY_PTR(arr)[i], getRange(c->childConfig));
|
537
540
|
break;
|
538
541
|
case GP_WIDGET_TOGGLE:
|
539
|
-
rb_hash_aset(cfg,
|
542
|
+
rb_hash_aset(cfg, RARRAY_PTR(arr)[i], getToggle(c->childConfig));
|
540
543
|
break;
|
541
544
|
case GP_WIDGET_DATE:
|
542
|
-
rb_hash_aset(cfg,
|
545
|
+
rb_hash_aset(cfg, RARRAY_PTR(arr)[i], getDate(c->childConfig));
|
543
546
|
break;
|
544
547
|
default:
|
545
548
|
break;
|
@@ -584,13 +587,13 @@ VALUE camera_config_merge(VALUE self, VALUE hash) {
|
|
584
587
|
arr = rb_funcall(hash, rb_intern("keys"), 0);
|
585
588
|
cfgs = rb_iv_get(self, "@configuration");
|
586
589
|
cfg_changed = rb_iv_get(self, "@configs_changed");
|
587
|
-
for (i = 0; i <
|
588
|
-
switch(TYPE(
|
590
|
+
for (i = 0; i < RARRAY_LEN(arr); i++) {
|
591
|
+
switch(TYPE(RARRAY_PTR(arr)[i])) {
|
589
592
|
case T_STRING:
|
590
|
-
key =
|
593
|
+
key = RSTRING_PTR(RARRAY_PTR(arr)[i]);
|
591
594
|
break;
|
592
595
|
case T_SYMBOL:
|
593
|
-
key = rb_id2name(rb_to_id(
|
596
|
+
key = rb_id2name(rb_to_id(RARRAY_PTR(arr)[i]));
|
594
597
|
break;
|
595
598
|
default:
|
596
599
|
rb_raise(rb_eTypeError, "Not valid key type");
|
@@ -602,23 +605,23 @@ VALUE camera_config_merge(VALUE self, VALUE hash) {
|
|
602
605
|
switch (widgettype) {
|
603
606
|
case GP_WIDGET_RADIO:
|
604
607
|
rb_ary_push(cfg_changed, rb_str_new2(key));
|
605
|
-
setRadio(self, c, rb_hash_aref(hash,
|
608
|
+
setRadio(self, c, rb_hash_aref(hash, RARRAY_PTR(arr)[i]), 0);
|
606
609
|
break;
|
607
610
|
case GP_WIDGET_TEXT:
|
608
611
|
rb_ary_push(cfg_changed, rb_str_new2(key));
|
609
|
-
setText(self, c, rb_hash_aref(hash,
|
612
|
+
setText(self, c, rb_hash_aref(hash, RARRAY_PTR(arr)[i]), 0);
|
610
613
|
break;
|
611
614
|
case GP_WIDGET_RANGE:
|
612
615
|
rb_ary_push(cfg_changed, rb_str_new2(key));
|
613
|
-
setRange(self, c, rb_hash_aref(hash,
|
616
|
+
setRange(self, c, rb_hash_aref(hash, RARRAY_PTR(arr)[i]), 0);
|
614
617
|
break;
|
615
618
|
case GP_WIDGET_TOGGLE:
|
616
619
|
rb_ary_push(cfg_changed, rb_str_new2(key));
|
617
|
-
setToggle(self, c, rb_hash_aref(hash,
|
620
|
+
setToggle(self, c, rb_hash_aref(hash, RARRAY_PTR(arr)[i]), 0);
|
618
621
|
break;
|
619
622
|
case GP_WIDGET_DATE:
|
620
623
|
rb_ary_push(cfg_changed, rb_str_new2(key));
|
621
|
-
setDate(self, c, rb_hash_aref(hash,
|
624
|
+
setDate(self, c, rb_hash_aref(hash, RARRAY_PTR(arr)[i]), 0);
|
622
625
|
break;
|
623
626
|
default:
|
624
627
|
break;
|
@@ -666,7 +669,7 @@ VALUE camera_get_value(int argc, VALUE *argv, VALUE self) {
|
|
666
669
|
|
667
670
|
switch (TYPE(str)) {
|
668
671
|
case T_STRING:
|
669
|
-
name =
|
672
|
+
name = RSTRING_PTR(str);
|
670
673
|
break;
|
671
674
|
case T_SYMBOL:
|
672
675
|
name = rb_id2name(rb_to_id(str));
|
@@ -799,7 +802,7 @@ VALUE camera_set_value(VALUE self, VALUE str, VALUE newVal) {
|
|
799
802
|
|
800
803
|
switch (TYPE(str)) {
|
801
804
|
case T_STRING:
|
802
|
-
name =
|
805
|
+
name = RSTRING_PTR(str);
|
803
806
|
break;
|
804
807
|
case T_SYMBOL:
|
805
808
|
name = rb_id2name(rb_to_id(str));
|
@@ -1070,7 +1073,7 @@ VALUE camera_folder_down(VALUE self, VALUE folder) {
|
|
1070
1073
|
|
1071
1074
|
gp_list_new(&list);
|
1072
1075
|
|
1073
|
-
name =
|
1076
|
+
name = RSTRING_PTR(folder);
|
1074
1077
|
RESULT_CHECK_LIST(gp_camera_folder_list_folders(c->camera, c->virtFolder, list, c->context), list);
|
1075
1078
|
RESULT_CHECK_LIST(gp_list_find_by_name(list, &index, name), list);
|
1076
1079
|
if (strlen(c->virtFolder) > 1) {
|
@@ -1102,7 +1105,7 @@ VALUE camera_create_folder(VALUE self, VALUE folder) {
|
|
1102
1105
|
|
1103
1106
|
Data_Get_Struct(self, GPhoto2Camera, c);
|
1104
1107
|
|
1105
|
-
name =
|
1108
|
+
name = RSTRING_PTR(folder);
|
1106
1109
|
gp_result_check(gp_camera_folder_make_dir(c->camera, c->virtFolder, name, c->context));
|
1107
1110
|
return self;
|
1108
1111
|
}
|
data/ext/gphoto2camera.h
CHANGED
@@ -62,7 +62,7 @@ VALUE listRadio(CameraWidget *cc) {
|
|
62
62
|
VALUE setRadio(VALUE self, GPhoto2Camera *c, VALUE newVal, int save) {
|
63
63
|
const char *val;
|
64
64
|
|
65
|
-
val =
|
65
|
+
val = RSTRING_PTR(rb_funcall(newVal, rb_intern("to_s"), 0));
|
66
66
|
|
67
67
|
gp_result_check(gp_widget_set_value(c->childConfig, val));
|
68
68
|
if (save == 1) {
|
@@ -85,7 +85,7 @@ VALUE getText(CameraWidget *cc) {
|
|
85
85
|
VALUE setText(VALUE self, GPhoto2Camera *c, VALUE newVal, int save) {
|
86
86
|
const char *val;
|
87
87
|
|
88
|
-
val =
|
88
|
+
val = RSTRING_PTR(rb_funcall(newVal, rb_intern("to_s"), 0));
|
89
89
|
|
90
90
|
gp_result_check(gp_widget_set_value(c->childConfig, val));
|
91
91
|
if (save == 1) {
|
@@ -140,7 +140,7 @@ VALUE getToggle(CameraWidget *cc) {
|
|
140
140
|
|
141
141
|
VALUE setToggle(VALUE self, GPhoto2Camera *c, VALUE newVal, int save) {
|
142
142
|
int val = -1;
|
143
|
-
char *nV;
|
143
|
+
const char *nV;
|
144
144
|
|
145
145
|
switch(TYPE(newVal)) {
|
146
146
|
case T_TRUE:
|
@@ -150,7 +150,7 @@ VALUE setToggle(VALUE self, GPhoto2Camera *c, VALUE newVal, int save) {
|
|
150
150
|
val = 0;
|
151
151
|
break;
|
152
152
|
case T_SYMBOL:
|
153
|
-
nV = rb_id2name(
|
153
|
+
nV = rb_id2name(SYM2ID(newVal));
|
154
154
|
if (strcmp(nV, "true") == 0) {
|
155
155
|
val = 1;
|
156
156
|
} else if(strcmp(nV, "false") == 0) {
|
@@ -206,7 +206,7 @@ void saveConfigs(VALUE self, GPhoto2Camera *c) {
|
|
206
206
|
cfgs = rb_iv_get(self, "@configuration");
|
207
207
|
name = rb_ary_shift(cfg_changed);
|
208
208
|
while (TYPE(name) != T_NIL) {
|
209
|
-
gp_result_check(gp_widget_get_child_by_name(c->config,
|
209
|
+
gp_result_check(gp_widget_get_child_by_name(c->config, RSTRING_PTR(name), &(c->childConfig)));
|
210
210
|
gp_result_check(gp_widget_get_type(c->childConfig, &widgettype));
|
211
211
|
switch (widgettype) {
|
212
212
|
case GP_WIDGET_RADIO:
|
data/ext/gphoto4ruby.c
CHANGED
@@ -19,12 +19,14 @@
|
|
19
19
|
* along with GPhoto4Ruby. If not, see <http://www.gnu.org/licenses/>.
|
20
20
|
*
|
21
21
|
*/
|
22
|
+
/*
|
23
|
+
#ifndef RUBY_19
|
24
|
+
#define RSTRING_PTR(c) (RSTRING(c)->ptr)
|
25
|
+
#define RARRAY_PTR(c) (RARRAY(c)->ptr)
|
26
|
+
#define RARRAY_LEN(c) (RARRAY(c)->len)
|
27
|
+
#endif
|
28
|
+
*/
|
22
29
|
|
23
|
-
#include <stdlib.h>
|
24
|
-
#include <stdio.h>
|
25
|
-
#include <fcntl.h>
|
26
|
-
#include <string.h>
|
27
|
-
#include <gphoto2/gphoto2.h>
|
28
30
|
#include <ruby.h>
|
29
31
|
#include "gphoto2camera_event.h"
|
30
32
|
#include "gphoto2camera_utilities.h"
|
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.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- neq4 company
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-
|
13
|
+
date: 2009-10-14 00:00:00 +04:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|