ruburple 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README +4 -6
- data/ext/ruburple_ext.c +39 -18
- metadata +1 -1
data/README
CHANGED
@@ -18,17 +18,15 @@ Then, to build, I did:
|
|
18
18
|
|
19
19
|
This is mainly because I dont need any of the disabled features to get ruburple running, and the configure script had big trouble finding the gnutls headers and libs on its own.
|
20
20
|
|
21
|
-
== Usage example:
|
21
|
+
== Usage example (using (almost?) all methods defined in the ruburple gem):
|
22
22
|
|
23
23
|
require 'ruburple'
|
24
24
|
Ruburple::init
|
25
25
|
Ruburple::subscribe(:received_im_msg, (Proc.new do |a,b,c,d,e| puts "rcv im: #{a}, #{b}, #{c}, #{d}, #{e}" end))
|
26
26
|
Ruburple::subscribe(:signed_on, (Proc.new do |a| puts "signed on: #{a}" end))
|
27
27
|
p = Ruburple::protocols[5]
|
28
|
-
|
29
|
-
a
|
28
|
+
puts "gonna connect to #{p.id}, #{p.name}, #{p.version}, #{p.summary}, #{p.description}, #{p.author}, #{p.homepage}"
|
29
|
+
a = p.get_account("some@msn.account", "some_msn_password")
|
30
30
|
a.connect
|
31
31
|
a.connection.send_im("some_other@msn_account", "some message")
|
32
|
-
|
33
|
-
|
34
|
-
|
32
|
+
a.connection.close
|
data/ext/ruburple_ext.c
CHANGED
@@ -195,18 +195,16 @@ typedef struct
|
|
195
195
|
gpointer result;
|
196
196
|
GCond *done;
|
197
197
|
GMutex *lock;
|
198
|
-
gboolean do_free;
|
199
198
|
gboolean run;
|
200
199
|
} RuburpleSingleShotCall;
|
201
200
|
|
202
201
|
/* Creator of single shot calls */
|
203
202
|
static RuburpleSingleShotCall*
|
204
|
-
ruburple_single_shot_call_new(RuburpleCallFunc function, gpointer data
|
203
|
+
ruburple_single_shot_call_new(RuburpleCallFunc function, gpointer data)
|
205
204
|
{
|
206
205
|
RuburpleSingleShotCall *return_value = g_new(RuburpleSingleShotCall, 1);
|
207
206
|
return_value->function = function;
|
208
207
|
return_value->data = data;
|
209
|
-
return_value->do_free = do_free;
|
210
208
|
return_value->run = FALSE;
|
211
209
|
return_value->done = g_cond_new();
|
212
210
|
return_value->lock = g_mutex_new();
|
@@ -236,18 +234,14 @@ call_single_shot(gpointer data)
|
|
236
234
|
|
237
235
|
g_mutex_unlock(call->lock);
|
238
236
|
|
239
|
-
if (call->do_free) {
|
240
|
-
ruburple_single_shot_call_free(call);
|
241
|
-
}
|
242
|
-
|
243
237
|
return FALSE;
|
244
238
|
}
|
245
239
|
|
246
240
|
/* Ask glib to run something once */
|
247
241
|
static RuburpleSingleShotCall*
|
248
|
-
add_single_shot(RuburpleCallFunc function, gpointer data
|
242
|
+
add_single_shot(RuburpleCallFunc function, gpointer data)
|
249
243
|
{
|
250
|
-
RuburpleSingleShotCall *call = ruburple_single_shot_call_new(function, data
|
244
|
+
RuburpleSingleShotCall *call = ruburple_single_shot_call_new(function, data);
|
251
245
|
g_idle_add(call_single_shot, call);
|
252
246
|
return call;
|
253
247
|
}
|
@@ -256,7 +250,7 @@ add_single_shot(RuburpleCallFunc function, gpointer data, gboolean do_free)
|
|
256
250
|
static gpointer
|
257
251
|
call_and_get_result(RuburpleCallFunc function, gpointer data)
|
258
252
|
{
|
259
|
-
RuburpleSingleShotCall *call = add_single_shot(function, data
|
253
|
+
RuburpleSingleShotCall *call = add_single_shot(function, data);
|
260
254
|
gpointer return_value;
|
261
255
|
|
262
256
|
g_mutex_lock(call->lock);
|
@@ -527,20 +521,47 @@ ruburple_protocol_get_account(gpointer data)
|
|
527
521
|
return (gpointer) purple_account_new((char *) args[0], (char *) args[1]);
|
528
522
|
}
|
529
523
|
|
524
|
+
static gpointer
|
525
|
+
ruburple_protocol_get_account_and_set_password(gpointer data)
|
526
|
+
{
|
527
|
+
gpointer *args = (gpointer *) data;
|
528
|
+
gpointer return_value;
|
529
|
+
return_value = (gpointer) purple_account_new((char *) args[0], (char *) args[1]);
|
530
|
+
purple_account_set_password((PurpleAccount *) return_value, (char *) args[2]);
|
531
|
+
return return_value;
|
532
|
+
}
|
533
|
+
|
530
534
|
static VALUE
|
531
|
-
rb_ruburple_protocol_get_account(VALUE
|
535
|
+
rb_ruburple_protocol_get_account(int argc, VALUE *argv, VALUE self)
|
532
536
|
{
|
533
537
|
PurplePlugin *plugin;
|
534
|
-
gpointer *args
|
538
|
+
gpointer *args;
|
535
539
|
VALUE return_value;
|
536
540
|
|
537
|
-
|
541
|
+
if (argc > 2)
|
542
|
+
rb_raise(rb_eRuntimeError, "Ruburple::Protocol#get_account(USERNAME, PASSWORD = nil) takes at most 2 arguments");
|
543
|
+
else if (argc < 1)
|
544
|
+
rb_raise(rb_eRuntimeError, "Ruburple::Protocol#get_account(USERNAME, PASSWORD = nil) takes at least 1 argument");
|
545
|
+
else if (argc > 1)
|
546
|
+
Check_Type(argv[1], T_STRING);
|
547
|
+
Check_Type(argv[0], T_STRING);
|
548
|
+
|
538
549
|
PURPLE_PLUGIN(self, plugin);
|
539
550
|
|
540
|
-
|
551
|
+
if (argc == 1)
|
552
|
+
args = g_new(gpointer, 2);
|
553
|
+
else if (argc == 2)
|
554
|
+
args = g_new(gpointer, 3);
|
555
|
+
|
556
|
+
args[0] = (gpointer) RSTRING(argv[0])->ptr;
|
541
557
|
args[1] = (gpointer) plugin->info->id;
|
542
558
|
|
543
|
-
|
559
|
+
if (argc == 1)
|
560
|
+
return_value = RB_RUBURPLE_PROTOCOL_ACCOUNT_gc((PurpleAccount *) call_and_get_result(ruburple_protocol_get_account, args));
|
561
|
+
else if (argc == 2) {
|
562
|
+
args[2] = (gpointer) RSTRING(argv[1])->ptr;
|
563
|
+
return_value = RB_RUBURPLE_PROTOCOL_ACCOUNT_gc((PurpleAccount *) call_and_get_result(ruburple_protocol_get_account_and_set_password, args));
|
564
|
+
}
|
544
565
|
|
545
566
|
g_free(args);
|
546
567
|
|
@@ -1042,7 +1063,7 @@ rb_ruburple_protocol_connection_send_im(int argc, VALUE *argv, VALUE self)
|
|
1042
1063
|
int rval;
|
1043
1064
|
|
1044
1065
|
if (argc > 3)
|
1045
|
-
rb_raise(rb_eRuntimeError, "Connection#send_im(RECIPIENT, MESSAGE, FLAGS = 0) takes at most 3 arguments");
|
1066
|
+
rb_raise(rb_eRuntimeError, "Ruburple::Protocol::Connection#send_im(RECIPIENT, MESSAGE, FLAGS = 0) takes at most 3 arguments");
|
1046
1067
|
if (argc == 3) {
|
1047
1068
|
Check_Type(argv[2], T_FIXNUM);
|
1048
1069
|
flags = NUM2INT(argv[2]);
|
@@ -1051,7 +1072,7 @@ rb_ruburple_protocol_connection_send_im(int argc, VALUE *argv, VALUE self)
|
|
1051
1072
|
Check_Type(argv[1], T_STRING);
|
1052
1073
|
Check_Type(argv[0], T_STRING);
|
1053
1074
|
} else {
|
1054
|
-
rb_raise(rb_eRuntimeError, "Connection#send_im(RECIPIENT, MESSAGE, FLAGS = 0) takes at least 2 arguments");
|
1075
|
+
rb_raise(rb_eRuntimeError, "Ruburple::Protocol::Connection#send_im(RECIPIENT, MESSAGE, FLAGS = 0) takes at least 2 arguments");
|
1055
1076
|
}
|
1056
1077
|
|
1057
1078
|
PURPLE_CONNECTION(self, connection);
|
@@ -1165,7 +1186,7 @@ extern "C" {
|
|
1165
1186
|
rb_ruburple_plugin = rb_define_class_under(rb_ruburple, "Plugin", rb_cObject);
|
1166
1187
|
|
1167
1188
|
rb_ruburple_protocol = rb_define_class_under(rb_ruburple, "Protocol", rb_ruburple_plugin);
|
1168
|
-
rb_define_method(rb_ruburple_protocol, "get_account", rb_ruburple_protocol_get_account, 1);
|
1189
|
+
rb_define_method(rb_ruburple_protocol, "get_account", rb_ruburple_protocol_get_account, -1);
|
1169
1190
|
rb_define_method(rb_ruburple_protocol, "id", rb_protocol_get_id, 0);
|
1170
1191
|
rb_define_method(rb_ruburple_protocol, "name", rb_protocol_get_name, 0);
|
1171
1192
|
rb_define_method(rb_ruburple_protocol, "version", rb_protocol_get_version, 0);
|