yong-purple_ruby 0.5.3 → 0.6.0
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/README.txt +3 -2
- data/Rakefile +2 -15
- data/examples/purplegw_example.rb +2 -2
- data/ext/purple_ruby.c +40 -2
- metadata +3 -2
data/README.txt
CHANGED
@@ -18,7 +18,8 @@ sudo gem install yong-purple_ruby
|
|
18
18
|
|
19
19
|
Redhat/Centos
|
20
20
|
---------------
|
21
|
-
|
21
|
+
wget -O /etc/yum.repos.d/pidgin.repo http://rpm.pidgin.im/centos/pidgin.repo
|
22
|
+
yum -y install glib2-devel libpurple-devel
|
22
23
|
gem sources -a http://gems.github.com (you only have to do this once)
|
23
24
|
sudo gem install yong-purple_ruby
|
24
25
|
|
@@ -45,7 +46,7 @@ sudo gem install yong-purple_ruby
|
|
45
46
|
|
46
47
|
== Copyright
|
47
48
|
|
48
|
-
purple_ruby is Copyright (c) 2009 Xue Yong Zhi and Intridea, Inc
|
49
|
+
purple_ruby is Copyright (c) 2009 Xue Yong Zhi and Intridea, Inc. ( http://intridea.com ), released under the GPL License.
|
49
50
|
|
50
51
|
|
51
52
|
|
data/Rakefile
CHANGED
@@ -1,20 +1,7 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'hoe'
|
3
1
|
|
4
|
-
EXT = "ext/ruburple_ext.#{
|
2
|
+
EXT = "ext/ruburple_ext.#{Config::CONFIG['DLEXT']}"
|
5
3
|
|
6
|
-
|
7
|
-
p.author = 'yong'
|
8
|
-
p.email = 'yong@intridea.com'
|
9
|
-
p.url = 'http://www.intridea.com'
|
10
|
-
p.summary = 'A ruby gem to write server that sends and recives IM messages'
|
11
|
-
p.description = 'A ruby gem to write server that sends and recives IM messages'
|
12
|
-
|
13
|
-
p.spec_extras[:extensions] = "ext/extconf.rb"
|
14
|
-
p.clean_globs << EXT << "ext/*.o" << "ext/Makefile"
|
15
|
-
end
|
16
|
-
|
17
|
-
task :test => EXT
|
4
|
+
task :default => EXT
|
18
5
|
|
19
6
|
file EXT => ["ext/extconf.rb", "ext/purple_ruby.c"] do
|
20
7
|
Dir.chdir "ext" do
|
@@ -6,8 +6,8 @@
|
|
6
6
|
#
|
7
7
|
#Send im:
|
8
8
|
#$ irb
|
9
|
-
#irb(main):001:0> require '
|
10
|
-
#irb(main):007:0>
|
9
|
+
#irb(main):001:0> require 'examples/purplegw_example'
|
10
|
+
#irb(main):007:0> PurpleGWExample.deliver 'prpl-jabber', 'friend@gmail.com', 'hello worlds!'
|
11
11
|
#
|
12
12
|
|
13
13
|
require 'hpricot'
|
data/ext/purple_ruby.c
CHANGED
@@ -134,6 +134,8 @@ static VALUE connection_error_handler = Qnil;
|
|
134
134
|
static VALUE notify_message_handler = Qnil;
|
135
135
|
static VALUE request_handler = Qnil;
|
136
136
|
static VALUE ipc_handler = Qnil;
|
137
|
+
static VALUE timer_handler = Qnil;
|
138
|
+
guint timer_timeout = 0;
|
137
139
|
VALUE new_buddy_handler = Qnil;
|
138
140
|
|
139
141
|
extern void
|
@@ -364,7 +366,7 @@ static void sighandler(int sig)
|
|
364
366
|
}
|
365
367
|
}
|
366
368
|
|
367
|
-
static VALUE init(VALUE self, VALUE debug)
|
369
|
+
static VALUE init(VALUE self, VALUE debug, VALUE path)
|
368
370
|
{
|
369
371
|
signal(SIGCHLD, SIG_IGN);
|
370
372
|
signal(SIGPIPE, SIG_IGN);
|
@@ -374,6 +376,11 @@ static VALUE init(VALUE self, VALUE debug)
|
|
374
376
|
fd_hash_table = g_hash_table_new(NULL, NULL);
|
375
377
|
|
376
378
|
purple_debug_set_enabled((debug == Qnil || debug == Qfalse) ? FALSE : TRUE);
|
379
|
+
|
380
|
+
if (path != Qnil) {
|
381
|
+
purple_util_set_user_dir(RSTRING(path)->ptr);
|
382
|
+
}
|
383
|
+
|
377
384
|
purple_core_set_ui_ops(&core_uiops);
|
378
385
|
purple_eventloop_set_ui_ops(&glib_eventloops);
|
379
386
|
|
@@ -554,6 +561,24 @@ static VALUE watch_incoming_ipc(VALUE self, VALUE serverip, VALUE port)
|
|
554
561
|
return port;
|
555
562
|
}
|
556
563
|
|
564
|
+
static gboolean
|
565
|
+
do_timeout(gpointer data)
|
566
|
+
{
|
567
|
+
VALUE handler = data;
|
568
|
+
check_callback(handler, "timer_handler");
|
569
|
+
VALUE v = rb_funcall(handler, CALL, 0, 0);
|
570
|
+
return (v == Qtrue);
|
571
|
+
}
|
572
|
+
|
573
|
+
static VALUE watch_timer(VALUE self, VALUE delay)
|
574
|
+
{
|
575
|
+
set_callback(&timer_handler, "timer_handler");
|
576
|
+
if (timer_timeout != 0)
|
577
|
+
g_source_remove(timer_timeout);
|
578
|
+
timer_timeout = g_timeout_add(delay, do_timeout, timer_handler);
|
579
|
+
return delay;
|
580
|
+
}
|
581
|
+
|
557
582
|
static VALUE login(VALUE self, VALUE protocol, VALUE username, VALUE password)
|
558
583
|
{
|
559
584
|
PurpleAccount* account = purple_account_new(RSTRING(username)->ptr, RSTRING(protocol)->ptr);
|
@@ -561,6 +586,7 @@ static VALUE login(VALUE self, VALUE protocol, VALUE username, VALUE password)
|
|
561
586
|
rb_raise(rb_eRuntimeError, "No able to create account: %s", RSTRING(protocol)->ptr);
|
562
587
|
}
|
563
588
|
purple_account_set_password(account, RSTRING(password)->ptr);
|
589
|
+
purple_account_set_remember_password(account, TRUE);
|
564
590
|
purple_account_set_enabled(account, UI_ID, TRUE);
|
565
591
|
PurpleSavedStatus *status = purple_savedstatus_new(NULL, PURPLE_STATUS_AVAILABLE);
|
566
592
|
purple_savedstatus_activate(status);
|
@@ -582,6 +608,8 @@ static VALUE main_loop_run(VALUE self)
|
|
582
608
|
if (notify_message_handler == Qnil) rb_gc_unregister_address(¬ify_message_handler);
|
583
609
|
if (request_handler == Qnil) rb_gc_unregister_address(&request_handler);
|
584
610
|
if (ipc_handler == Qnil) rb_gc_unregister_address(&ipc_handler);
|
611
|
+
if (timer_timeout != 0) g_source_remove(timer_timeout);
|
612
|
+
if (timer_handler == Qnil) rb_gc_unregister_address(&timer_handler);
|
585
613
|
if (new_buddy_handler == Qnil) rb_gc_unregister_address(&new_buddy_handler);
|
586
614
|
rb_gc_start();
|
587
615
|
#endif
|
@@ -719,12 +747,20 @@ static VALUE has_buddy(VALUE self, VALUE buddy)
|
|
719
747
|
}
|
720
748
|
}
|
721
749
|
|
750
|
+
static VALUE acc_delete(VALUE self)
|
751
|
+
{
|
752
|
+
PurpleAccount *account;
|
753
|
+
Data_Get_Struct(self, PurpleAccount, account);
|
754
|
+
purple_accounts_delete(account);
|
755
|
+
return Qnil;
|
756
|
+
}
|
757
|
+
|
722
758
|
void Init_purple_ruby()
|
723
759
|
{
|
724
760
|
CALL = rb_intern("call");
|
725
761
|
|
726
762
|
cPurpleRuby = rb_define_class("PurpleRuby", rb_cObject);
|
727
|
-
rb_define_singleton_method(cPurpleRuby, "init", init,
|
763
|
+
rb_define_singleton_method(cPurpleRuby, "init", init, 2);
|
728
764
|
rb_define_singleton_method(cPurpleRuby, "list_protocols", list_protocols, 0);
|
729
765
|
rb_define_singleton_method(cPurpleRuby, "watch_signed_on_event", watch_signed_on_event, 0);
|
730
766
|
rb_define_singleton_method(cPurpleRuby, "watch_connection_error", watch_connection_error, 0);
|
@@ -733,6 +769,7 @@ void Init_purple_ruby()
|
|
733
769
|
rb_define_singleton_method(cPurpleRuby, "watch_request", watch_request, 0);
|
734
770
|
rb_define_singleton_method(cPurpleRuby, "watch_new_buddy", watch_new_buddy, 0);
|
735
771
|
rb_define_singleton_method(cPurpleRuby, "watch_incoming_ipc", watch_incoming_ipc, 2);
|
772
|
+
rb_define_singleton_method(cPurpleRuby, "watch_timer", watch_timer, 1);
|
736
773
|
rb_define_singleton_method(cPurpleRuby, "login", login, 3);
|
737
774
|
rb_define_singleton_method(cPurpleRuby, "main_loop_run", main_loop_run, 0);
|
738
775
|
rb_define_singleton_method(cPurpleRuby, "main_loop_stop", main_loop_stop, 0);
|
@@ -751,4 +788,5 @@ void Init_purple_ruby()
|
|
751
788
|
rb_define_method(cAccount, "add_buddy", add_buddy, 1);
|
752
789
|
rb_define_method(cAccount, "remove_buddy", remove_buddy, 1);
|
753
790
|
rb_define_method(cAccount, "has_buddy?", has_buddy, 1);
|
791
|
+
rb_define_method(cAccount, "delete", acc_delete, 0);
|
754
792
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yong-purple_ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- yong
|
@@ -44,6 +44,7 @@ files:
|
|
44
44
|
- Rakefile
|
45
45
|
has_rdoc: false
|
46
46
|
homepage: http://www.intridea.com
|
47
|
+
licenses:
|
47
48
|
post_install_message:
|
48
49
|
rdoc_options:
|
49
50
|
- --main
|
@@ -65,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
65
66
|
requirements: []
|
66
67
|
|
67
68
|
rubyforge_project: purplegw_ruby
|
68
|
-
rubygems_version: 1.
|
69
|
+
rubygems_version: 1.3.5
|
69
70
|
signing_key:
|
70
71
|
specification_version: 2
|
71
72
|
summary: A ruby gem to write server that sends and recives IM messages
|