Ruby4Skype 0.2.2 → 0.2.3
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/lib/skypeapi/application.rb +12 -7
- data/lib/skypeapi/call.rb +60 -45
- data/lib/skypeapi/chat.rb +38 -37
- data/lib/skypeapi/chatmember.rb +2 -2
- data/lib/skypeapi/chatmessage.rb +17 -11
- data/lib/skypeapi/event.rb +7 -3
- data/lib/skypeapi/group.rb +8 -8
- data/lib/skypeapi/menuitem.rb +15 -9
- data/lib/skypeapi/message.rb +10 -10
- data/lib/skypeapi/object.rb +10 -9
- data/lib/skypeapi/os/etc.rb +132 -0
- data/lib/skypeapi/os/linux.rb +110 -0
- data/lib/skypeapi/os/mac.rb +10 -0
- data/lib/skypeapi/os/timer.rb +108 -0
- data/lib/skypeapi/os/windows.rb +369 -0
- data/lib/skypeapi/profile.rb +35 -27
- data/lib/skypeapi/sharefunctions.rb +38 -19
- data/lib/skypeapi/sms.rb +8 -8
- data/lib/skypeapi/user.rb +18 -19
- data/lib/skypeapi/version.rb +6 -2
- data/lib/skypeapi/voicemail.rb +10 -10
- data/lib/skypeapi.rb +66 -57
- metadata +47 -35
- data/lib/skypeapi/os.rb +0 -439
data/lib/skypeapi/menuitem.rb
CHANGED
@@ -6,7 +6,7 @@ module SkypeAPI
|
|
6
6
|
def self.create h, block=Proc.new
|
7
7
|
raise ArgumentError unless h[:id] and h[:context] and h[:caption]
|
8
8
|
#id, context, caption, hint=nil, icon=nil, enabled=nil, enableMultipleContacts=nil, &block
|
9
|
-
res =
|
9
|
+
res = SkypeAPI.invoke "CREATE MENU_ITEM #{h[:id]} CONTEXT #{h[:context]} CAPTION #{h[:caption]}#{h[:hint].nil? ? '' : " HINT #{h[:hint]}"}#{h[:icon].nil? ? '' : " ICON #{h[:icon]}"}#{h[:enable].nil? ? '' : " ENABLED #{h[:enabled]}"}#{h[:enableMultipleContacts].nil? ? '' : " ENABLE_MULTIPLE_CONTACTS #{h[:enableMultipleContacts]}"}"
|
10
10
|
res == "MENU_ITEM #{h[:id]} CREATED"
|
11
11
|
instance = new h[:id]
|
12
12
|
instance.setNotify block if block
|
@@ -20,16 +20,16 @@ module SkypeAPI
|
|
20
20
|
def self.notified msg
|
21
21
|
if msg =~ /^([^ ]+) CLICKED( ([^ ]+))? CONTEXT ([^ ]+)( CONTEXT_ID (.+))?$/m
|
22
22
|
id = $1; context = $4; userID = $3; contextID = $6
|
23
|
-
user = userID ?
|
23
|
+
user = userID ? SkypeAPI.user(userID) : nil
|
24
24
|
instance = new $1
|
25
25
|
@notify[nil].call instance, context, user, contextID if @notify[nil]
|
26
26
|
@notify[id].call instance, context, user, contextID if @notify[id]
|
27
|
-
@@instance[self][id].notified context, user, contextID if @@instance[self][id]
|
27
|
+
@@instance[self][id].notified instance, context, user, contextID if @@instance[self][id]
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
def notified context, user, contextID
|
32
|
-
@notify.call context, user, contextID if @notify
|
31
|
+
def notified instance, context, user, contextID
|
32
|
+
@notify.call instance, context, user, contextID if @notify
|
33
33
|
end
|
34
34
|
|
35
35
|
def setNotify block=Proc.new
|
@@ -41,24 +41,30 @@ module SkypeAPI
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def delete
|
44
|
-
res =
|
44
|
+
res = SkypeAPI.invoke "DELETE MENU_ITEM #{@id}"
|
45
45
|
res == "DELETE MENU_ITEM #{@id}"
|
46
46
|
end
|
47
47
|
|
48
48
|
def setCaption caption
|
49
|
-
res =
|
49
|
+
res = invoke "SET MENU_ITEM #{@id} CAPTION #{caption}"
|
50
50
|
res == "MENU_ITEM #{@id} CAPTION \"#{caption}\""
|
51
51
|
end
|
52
52
|
|
53
53
|
def setHint hint
|
54
|
-
res =
|
54
|
+
res = invoke "SET MENU_ITEM #{@id} HINT #{hint}"
|
55
55
|
res == "MENU_ITEM #{@id} HINT \"#{hint}\""
|
56
56
|
end
|
57
57
|
|
58
58
|
def setEnabled flag
|
59
|
-
res =
|
59
|
+
res = invoke "SET MENU_ITEM #{@id} ENABLED #{flag._str}"
|
60
60
|
res == "MENU_ITEM #{@id} ENABLED #{flag._str}"
|
61
61
|
end
|
62
|
+
|
63
|
+
alias set_notify setNotify
|
64
|
+
#alias del_notify delNotify
|
65
|
+
alias set_caption setCaption
|
66
|
+
alias set_hint setHint
|
67
|
+
alias set_enabled setEnabled
|
62
68
|
end
|
63
69
|
end
|
64
70
|
end
|
data/lib/skypeapi/message.rb
CHANGED
@@ -21,7 +21,7 @@ module SkypeAPI
|
|
21
21
|
else
|
22
22
|
raise target
|
23
23
|
end
|
24
|
-
res = @skypeApi.
|
24
|
+
res = @skypeApi.invoke_one "MESSAGE #{target} #{text}","MESSAGE"
|
25
25
|
if res =~ /^(\d+) STATUS (.+)$/
|
26
26
|
return @skypeApi.getMessage($1),"getStatus",$2
|
27
27
|
else
|
@@ -29,17 +29,17 @@ module SkypeAPI
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
def timestamp()
|
33
|
-
def partnerHandle()
|
34
|
-
def partnerDispname()
|
35
|
-
def confIdD()
|
36
|
-
def type()
|
37
|
-
def status()
|
38
|
-
def failureReason()
|
39
|
-
def body()
|
32
|
+
def timestamp() invoke_get('TIMESTAMP'); end
|
33
|
+
def partnerHandle() invoke_get('PARTNER_HANDLE'); end
|
34
|
+
def partnerDispname() invoke_get('PARTNER_DISPNAME'); end
|
35
|
+
def confIdD() invoke_get('CONF_ID'); end
|
36
|
+
def type() invoke_get('TYPE'); end
|
37
|
+
def status() invoke_get('STATUS'); end
|
38
|
+
def failureReason() invoke_get('FAILUREREASON'); end
|
39
|
+
def body() invoke_get('BODY'); end
|
40
40
|
|
41
41
|
#def setSeen
|
42
|
-
# str2object
|
42
|
+
# str2object invoke_one("SET MESSAGE #{@id} SEEN","SET MESSAGE #{@id} STATUS")
|
43
43
|
#end
|
44
44
|
end
|
45
45
|
end
|
data/lib/skypeapi/object.rb
CHANGED
@@ -21,23 +21,25 @@ module SkypeAPI
|
|
21
21
|
@notify
|
22
22
|
end
|
23
23
|
|
24
|
-
def notified property,value
|
24
|
+
def notified instance, property,value
|
25
25
|
if @notify[nil]
|
26
|
-
@notify[nil][nil].call property, value if @notify[nil][nil]
|
27
|
-
@notify[nil][value].call property if @notify[nil][value]
|
26
|
+
@notify[nil][nil].call instance, property, value if @notify[nil][nil]
|
27
|
+
@notify[nil][value].call instance, property if @notify[nil][value]
|
28
28
|
end
|
29
29
|
if @notify[property]
|
30
|
-
@notify[property][nil].call value if @notify[property][nil]
|
31
|
-
@notify[property][value].call if @notify[property][value]
|
30
|
+
@notify[property][nil].call instance, value if @notify[property][nil]
|
31
|
+
@notify[property][value].call instance if @notify[property][value]
|
32
32
|
end
|
33
33
|
end
|
34
|
+
alias set_notify setNotify
|
35
|
+
alias del_notify delNotify
|
34
36
|
end
|
35
37
|
|
36
38
|
module Get
|
37
39
|
def getter methodName, skypeProperty=methodName.to_s.upcase, &callBack
|
38
40
|
defineMethod = self == SkypeAPI ? self.class.method(:define_method) : method(:define_method)
|
39
41
|
defineMethod.call 'get' + methodName.to_s do
|
40
|
-
str =
|
42
|
+
str = invoke_get skypeProperty
|
41
43
|
callBack ? callBack.call(str) : str
|
42
44
|
end
|
43
45
|
|
@@ -98,7 +100,7 @@ module SkypeAPI
|
|
98
100
|
@notify[property][nil].call instance, value if @notify[property][nil]
|
99
101
|
@notify[property][value].call instance if @notify[property][value]
|
100
102
|
end
|
101
|
-
@@instance[self][id].notified property,value if @@instance[self][id]
|
103
|
+
@@instance[self][id].notified instance, property, value if @@instance[self][id]
|
102
104
|
end
|
103
105
|
end
|
104
106
|
|
@@ -123,8 +125,7 @@ module SkypeAPI
|
|
123
125
|
@id.to_s
|
124
126
|
end
|
125
127
|
|
126
|
-
|
127
|
-
def_delegators :@@skypeApi, :sendCMD
|
128
|
+
def_delegators :@@skypeApi, :invoke
|
128
129
|
end
|
129
130
|
|
130
131
|
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
module SkypeAPI
|
2
|
+
module OS
|
3
|
+
module Share
|
4
|
+
def invoke cmd, method=nil, &block
|
5
|
+
method = method ? method : block
|
6
|
+
if method
|
7
|
+
invoke_callback cmd do |res|
|
8
|
+
check_response res,cmd
|
9
|
+
method.call res
|
10
|
+
end
|
11
|
+
return true
|
12
|
+
else
|
13
|
+
begin
|
14
|
+
return check_response(invoke_block(cmd), cmd)
|
15
|
+
rescue SkypeAPIError
|
16
|
+
raise $!, caller(1)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
#����reg==nil�ŁA���̑��ƌ���㩁B
|
22
|
+
def add_notify reg, block=Proc.new
|
23
|
+
@notify[reg] = block
|
24
|
+
end
|
25
|
+
|
26
|
+
def del_notify reg
|
27
|
+
@notify.delete reg
|
28
|
+
end
|
29
|
+
|
30
|
+
def add_event sym, block=Proc.new
|
31
|
+
@event[sym].push block
|
32
|
+
block
|
33
|
+
end
|
34
|
+
|
35
|
+
#def set_event sym, block=Proc.new
|
36
|
+
# @event[sym] = Array.new
|
37
|
+
# add_event sym, block
|
38
|
+
#end
|
39
|
+
|
40
|
+
def del_event sym, block=nil
|
41
|
+
unless block
|
42
|
+
@event[sym] = Array.new
|
43
|
+
else
|
44
|
+
@event[sym].delete block
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def exist_event? sym
|
49
|
+
if @event[sym].length > 0
|
50
|
+
return true
|
51
|
+
else
|
52
|
+
return false
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def get_event sym
|
57
|
+
@event[sym]
|
58
|
+
end
|
59
|
+
|
60
|
+
def do_event sym,*args
|
61
|
+
@event[sym].each do |e|
|
62
|
+
if e.arity == 1
|
63
|
+
e.call args[0]
|
64
|
+
else
|
65
|
+
e.call args
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def check_response res,cmd
|
73
|
+
if res =~ /^ERROR /m
|
74
|
+
raise SkypeAPIError::API,res, caller
|
75
|
+
else
|
76
|
+
return res
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
class Abstruct
|
83
|
+
include Share
|
84
|
+
|
85
|
+
def initialize
|
86
|
+
@send_count = 0
|
87
|
+
@queue = Queue.new
|
88
|
+
#@queue = Array.new
|
89
|
+
@notify = Hash.new
|
90
|
+
@event = Hash.new do |h,k|
|
91
|
+
h[k] = Array.new
|
92
|
+
end
|
93
|
+
@attached = false
|
94
|
+
@first_attached = true
|
95
|
+
@raise_when_detached = false
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
def invoke_callback cmd, callback = Proc.new
|
100
|
+
end
|
101
|
+
|
102
|
+
def invoke_block cmd
|
103
|
+
end
|
104
|
+
|
105
|
+
def attach name = nil
|
106
|
+
end
|
107
|
+
|
108
|
+
def attach_wait name = nil
|
109
|
+
end
|
110
|
+
|
111
|
+
def wait action = nil
|
112
|
+
end
|
113
|
+
|
114
|
+
def polling
|
115
|
+
end
|
116
|
+
|
117
|
+
def close
|
118
|
+
end
|
119
|
+
|
120
|
+
private
|
121
|
+
def invoke_prototype cmd
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
class Mac
|
127
|
+
#wiki like
|
128
|
+
def initialize
|
129
|
+
raise SkypeAPIError::NotImplement
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'dbus'
|
2
|
+
require "thread"
|
3
|
+
|
4
|
+
module SkypeAPI
|
5
|
+
module OS
|
6
|
+
class Linux < Abstruct
|
7
|
+
class Notify < DBus::Object
|
8
|
+
dbus_interface "com.Skype.API.Client" do
|
9
|
+
dbus_method :Notify, "in data:s" do |res|
|
10
|
+
@os.push_queue res
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize service_name="org.ruby.service"
|
16
|
+
super()
|
17
|
+
bus = DBus.session_bus
|
18
|
+
exobj = Notify.new("/com/Skype/Client")
|
19
|
+
#exobj.instance_variable_set(:@queue, @queue)
|
20
|
+
exobj.instance_variable_set(:@os, self)
|
21
|
+
bus.request_service(service_name).export(exobj)
|
22
|
+
service = bus.service 'com.Skype.API'
|
23
|
+
@invoker = service.object '/com/Skype'
|
24
|
+
@invoker.default_iface = 'com.Skype.API'
|
25
|
+
@invoker.introspect
|
26
|
+
|
27
|
+
#l = DBus::Main.new
|
28
|
+
#l << bus
|
29
|
+
#Thread.new do
|
30
|
+
# l.run
|
31
|
+
#end
|
32
|
+
end
|
33
|
+
|
34
|
+
def attach name
|
35
|
+
invoke "NAME #{name}"
|
36
|
+
invoke "PROTOCOL 9999"
|
37
|
+
if @first_attached
|
38
|
+
@queue.push proc{do_event :attached}
|
39
|
+
else
|
40
|
+
@queue.push proc{do_event :reattached}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def invoke_prototype(cmd)
|
45
|
+
res = @invoker.Invoke('#' + @send_count.to_s + ' ' + cmd)[0]
|
46
|
+
old_count = @send_count.to_s
|
47
|
+
@send_count+=1
|
48
|
+
@queue.push proc{do_event :sent, '#' + old_count + ' ' + cmd}
|
49
|
+
@queue.push proc{do_event :received, res}
|
50
|
+
res =~ /^##{old_count} (.*)$/m
|
51
|
+
return $1
|
52
|
+
end
|
53
|
+
|
54
|
+
alias :invoke_block :invoke_prototype
|
55
|
+
|
56
|
+
def invoke_callcack cmd,cb=Proc.new
|
57
|
+
res = send_prototype(cmd)
|
58
|
+
cb.call(res)
|
59
|
+
end
|
60
|
+
|
61
|
+
def close
|
62
|
+
end
|
63
|
+
|
64
|
+
def polling
|
65
|
+
flag = true
|
66
|
+
begin
|
67
|
+
while flag
|
68
|
+
proc = @queue.shift true
|
69
|
+
proc.call
|
70
|
+
end
|
71
|
+
rescue
|
72
|
+
flag = false
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def push_queue res
|
77
|
+
@queue.push(proc{do_event(:received, res)})
|
78
|
+
|
79
|
+
if res == 'CONNSTATUS LOGGEDOUT'
|
80
|
+
@attached = false
|
81
|
+
@queue.push(proc{do_event(:detached)})
|
82
|
+
SkypeAPI.attach
|
83
|
+
end
|
84
|
+
|
85
|
+
flag = false
|
86
|
+
@notify.each do |reg,action|
|
87
|
+
if res =~ reg
|
88
|
+
tmp = $1
|
89
|
+
@queue.push(proc{action.call(tmp)})
|
90
|
+
flag = true
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
unless flag
|
95
|
+
action = @notify[nil]
|
96
|
+
@queue.push(proc{action.call(cmd)})
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
def wait
|
102
|
+
end
|
103
|
+
|
104
|
+
def attach_wait(name)
|
105
|
+
@name = name
|
106
|
+
attach(name)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
#module SkypeAPI
|
2
|
+
# module OS
|
3
|
+
# class Windows
|
4
|
+
class Timer
|
5
|
+
class << self
|
6
|
+
def interval term, block=Proc.new
|
7
|
+
Interval.new term, block
|
8
|
+
end
|
9
|
+
|
10
|
+
def timeout term, block=Proc.new
|
11
|
+
Timeout.new term, block
|
12
|
+
end
|
13
|
+
|
14
|
+
def delete instance
|
15
|
+
case instance.class
|
16
|
+
when Timeout
|
17
|
+
instance.delete
|
18
|
+
when Interval
|
19
|
+
instance.delete
|
20
|
+
else
|
21
|
+
raise ArgumentError
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def polling
|
26
|
+
now = Time.now.to_i
|
27
|
+
Timeout.polling now
|
28
|
+
Interval.polling now
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class Abstruct
|
33
|
+
|
34
|
+
class << self
|
35
|
+
|
36
|
+
def new term, block
|
37
|
+
instance = super
|
38
|
+
@stack << instance
|
39
|
+
return instance
|
40
|
+
end
|
41
|
+
|
42
|
+
def delete instance
|
43
|
+
@stack.delete instance
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
def delete
|
50
|
+
self.class.delete self
|
51
|
+
end
|
52
|
+
|
53
|
+
attr_reader :term, :block
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
class Timeout < Abstruct
|
58
|
+
@stack = Array.new
|
59
|
+
class << self
|
60
|
+
|
61
|
+
def polling now
|
62
|
+
@stack.delete_if do |timeout|
|
63
|
+
if now >= timeout.term
|
64
|
+
timeout.block.call
|
65
|
+
true
|
66
|
+
else
|
67
|
+
false
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
def initialize term, block
|
75
|
+
@term = term + Time.now.to_i
|
76
|
+
@block = block
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
class Interval < Abstruct
|
82
|
+
@stack = Array.new
|
83
|
+
|
84
|
+
class << self
|
85
|
+
|
86
|
+
def polling now
|
87
|
+
@stack.each do |interval|
|
88
|
+
if now >= interval.term + interval.old
|
89
|
+
interval.old = now
|
90
|
+
interval.block.call
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
def initialize term, block
|
98
|
+
@term = term
|
99
|
+
@old = Time.now.to_i
|
100
|
+
@block = block
|
101
|
+
end
|
102
|
+
|
103
|
+
attr_accessor :old
|
104
|
+
end
|
105
|
+
end
|
106
|
+
# end
|
107
|
+
# end
|
108
|
+
#end
|