Ruby4Skype 0.2.1
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 +415 -0
- data/lib/skypeapi/call.rb +220 -0
- data/lib/skypeapi/chat.rb +186 -0
- data/lib/skypeapi/chatmember.rb +33 -0
- data/lib/skypeapi/chatmessage.rb +64 -0
- data/lib/skypeapi/event.rb +46 -0
- data/lib/skypeapi/filetransfer.rb +31 -0
- data/lib/skypeapi/group.rb +81 -0
- data/lib/skypeapi/menuitem.rb +64 -0
- data/lib/skypeapi/message.rb +46 -0
- data/lib/skypeapi/object.rb +122 -0
- data/lib/skypeapi/os.rb +423 -0
- data/lib/skypeapi/profile.rb +124 -0
- data/lib/skypeapi/sharefunctions.rb +123 -0
- data/lib/skypeapi/sms.rb +84 -0
- data/lib/skypeapi/user.rb +110 -0
- data/lib/skypeapi/voicemail.rb +60 -0
- data/lib/skypeapi.rb +569 -0
- metadata +64 -0
@@ -0,0 +1,186 @@
|
|
1
|
+
module SkypeAPI
|
2
|
+
module Object
|
3
|
+
class Chat < AbstractObject
|
4
|
+
OBJECT_NAME = "CHAT"
|
5
|
+
|
6
|
+
getter :Name, 'NAME'
|
7
|
+
getter :Timestamp, 'TIMESTAMP' do |str|
|
8
|
+
str.to_i
|
9
|
+
end
|
10
|
+
getter :Adder, 'ADDER' do |str|
|
11
|
+
str.empty? ? nil : @@skypeApi.user(str)
|
12
|
+
end
|
13
|
+
getter :Status, 'STATUS'
|
14
|
+
getter :Posters, 'POSTERS' do |str|
|
15
|
+
str.split(', ').map do |handle|
|
16
|
+
@@skypeApi.user handle
|
17
|
+
end
|
18
|
+
end
|
19
|
+
getter :Members, 'MEMBERS' do |str|
|
20
|
+
str.split(' ').map do |handle|
|
21
|
+
@@skypeApi.user handle
|
22
|
+
end
|
23
|
+
end
|
24
|
+
getter :Topic, 'TOPIC'
|
25
|
+
getter :TopicXML, 'TOPICXML'
|
26
|
+
getter :ChatMessages, 'CHATMESSAGES' do |str|
|
27
|
+
str.split(' ').map do |id|
|
28
|
+
@@skypeApi.chatMessage id
|
29
|
+
end
|
30
|
+
end
|
31
|
+
getter :ActiveMembers, 'ACTIVEMEMBERS' do |str|
|
32
|
+
str.split(' ').map do |handle|
|
33
|
+
@@skypeApi.user handle
|
34
|
+
end
|
35
|
+
end
|
36
|
+
getter :FriendlyName, 'FRIENDLYNAME'
|
37
|
+
getter :RecentChatMessages, 'RECENTCHATMESSAGES' do |str|
|
38
|
+
str.split(' ').map do |handle|
|
39
|
+
@@skypeApi.chatMessage handle
|
40
|
+
end
|
41
|
+
end
|
42
|
+
getter :Bookmarked, 'BOOKMARKED' do |str|
|
43
|
+
str._flag
|
44
|
+
end
|
45
|
+
getter :MemberObjects, 'MEMBEROBJECTS' do |str|
|
46
|
+
str.split(', ').map do |id|
|
47
|
+
@@skypeApi.chatMember id
|
48
|
+
end
|
49
|
+
end
|
50
|
+
getter :PasswordHint, 'PASSWORDHINT'
|
51
|
+
getter :GuideLines, 'GUIDELINES'
|
52
|
+
getter :Options, 'OPTIONS' do |str|
|
53
|
+
str.to_i
|
54
|
+
end
|
55
|
+
getter :Description, 'DESCRIPTION'
|
56
|
+
getter :DialogPartner, 'DIALOG_PARTNER' do |str|
|
57
|
+
if str.empty?
|
58
|
+
nil
|
59
|
+
else
|
60
|
+
@@skypeApi.user str
|
61
|
+
end
|
62
|
+
end
|
63
|
+
getter :ActivityTimestamp, 'ACTIVITY_TIMESTAMP' do |str|
|
64
|
+
str.to_i
|
65
|
+
end
|
66
|
+
getter :Type, 'TYPE'
|
67
|
+
getter :MyStatus, 'MYSTATUS'
|
68
|
+
getter :MyRole, 'MYROLE'
|
69
|
+
getter :Blob, 'BLOB'
|
70
|
+
getter :Applicants, 'APPLICANTS' do |str|
|
71
|
+
str.split(' ').map do |handle|
|
72
|
+
@@skypeApi.user handle
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
def self.create *users
|
78
|
+
retVal = @@skypeApi.sendCMD "CHAT CREATE #{users.join(', ')}"
|
79
|
+
retVal =~ /^CHAT ([^ ]+) STATUS (.+)$/
|
80
|
+
chatID, status = $1, $2
|
81
|
+
return @@skypeApi.chat(chatID)#, status
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.findUsingBlob blob
|
85
|
+
retVal = @@skypeApi.sendCMD "CHAT FINDUSINGBLOB #{blob}"
|
86
|
+
retVal =~ /^CHAT ([^ ]+) STATUS (.+)$/
|
87
|
+
chatID, status = $1, $2
|
88
|
+
return @@skypeApi.chat(chatID)#, status
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.createUsingBlob blob
|
92
|
+
retVal = @@skypeApi.sendCMD "CHAT CREATEUSINGBLOB #{blob}"
|
93
|
+
retVal =~ /^CHAT ([^ ]+) STATUS (.+)$/
|
94
|
+
chatID, status = $1, $2
|
95
|
+
return @@skypeApi.chat(chatID)#, status
|
96
|
+
end
|
97
|
+
|
98
|
+
#���[
|
99
|
+
#def open
|
100
|
+
# retVal = sendCMD "OPEN CHAT #{@id}"
|
101
|
+
# retVal =~ /^OPEN CHAT (.+)$/
|
102
|
+
# return @@skypeApi.chat($1)
|
103
|
+
#end
|
104
|
+
|
105
|
+
def setTopic str
|
106
|
+
sendAlter "SETTOPIC", str
|
107
|
+
end
|
108
|
+
|
109
|
+
def setTopicXML str
|
110
|
+
sendAlter "SETTOPICXML", str
|
111
|
+
end
|
112
|
+
|
113
|
+
def addMembers *member
|
114
|
+
sendAlter "ADDMEMBERS", member.join(', ')
|
115
|
+
end
|
116
|
+
|
117
|
+
def leave
|
118
|
+
sendAlter "LEAVE"
|
119
|
+
end
|
120
|
+
|
121
|
+
def bookmarked
|
122
|
+
sendAlter "BOOKMARK"
|
123
|
+
end
|
124
|
+
|
125
|
+
def unbookmarked
|
126
|
+
sendAlter "UNBOOKMARK"
|
127
|
+
end
|
128
|
+
|
129
|
+
def join
|
130
|
+
#
|
131
|
+
sendAlter "JOIN"
|
132
|
+
end
|
133
|
+
|
134
|
+
def clearRecentMessages
|
135
|
+
sendAlter "CLEARRECENTMESSAGES"
|
136
|
+
end
|
137
|
+
|
138
|
+
def setAlertString str
|
139
|
+
sendAlter "SETALERTSTRING", str
|
140
|
+
end
|
141
|
+
|
142
|
+
def acceptadd
|
143
|
+
sendAlter "ACCEPTADD"
|
144
|
+
end
|
145
|
+
|
146
|
+
def disband
|
147
|
+
sendAlter "DISBAND"
|
148
|
+
end
|
149
|
+
|
150
|
+
|
151
|
+
def setPassword password, passwordHint=''
|
152
|
+
sendAlter "SETPASSWORD", password + ' ' + passwordHint
|
153
|
+
end
|
154
|
+
|
155
|
+
def enterPassword password
|
156
|
+
sendAlter "ENTERPASSWORD", password
|
157
|
+
end
|
158
|
+
|
159
|
+
def setOptions option
|
160
|
+
sendAlter "SETOPTIONS", option
|
161
|
+
end
|
162
|
+
|
163
|
+
def kick *users
|
164
|
+
users = users.join ', '
|
165
|
+
sendAlter "KICK", users
|
166
|
+
end
|
167
|
+
|
168
|
+
def kickBan *users
|
169
|
+
users = users.join ', '
|
170
|
+
sendAlter "KICKBAN", users
|
171
|
+
end
|
172
|
+
|
173
|
+
def setGuideLines guidlines
|
174
|
+
sendAlter 'SETGUIDELINES', guidlines
|
175
|
+
end
|
176
|
+
|
177
|
+
def setOptions optionsBitmap
|
178
|
+
sendAlter 'SETOPTIONS', optionsBitmap.to_s
|
179
|
+
end
|
180
|
+
|
181
|
+
def sendMessage msg
|
182
|
+
@@skypeApi.ChatMessage.create self, msg
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module SkypeAPI
|
2
|
+
module Object
|
3
|
+
class ChatMember < AbstractObject
|
4
|
+
OBJECT_NAME = "CHATMEMBER"
|
5
|
+
|
6
|
+
getter :Chat, 'CHATNAME' do |str|
|
7
|
+
@@skypeApi.chat(str)
|
8
|
+
end
|
9
|
+
|
10
|
+
getter :User,'IDENTITY' do |str|
|
11
|
+
@@skypeApi.user str
|
12
|
+
end
|
13
|
+
|
14
|
+
getter :Role, 'ROLE'
|
15
|
+
|
16
|
+
getter :IsActive, 'IS_ACTIVE' do |str|
|
17
|
+
str._flag
|
18
|
+
end
|
19
|
+
|
20
|
+
def setRoleTo role
|
21
|
+
sendAlter('SETROLETO', role)
|
22
|
+
end
|
23
|
+
|
24
|
+
def canSetRoleTo role
|
25
|
+
#ALTER�ŕԂ茌������ɂ߂ē����B
|
26
|
+
res = sendCMD("ALTER CHATMEMBER #{@id} CANSETROLETO #{role}")
|
27
|
+
res =~ /ALTER CHATMEMBER CANSETROLETO (TRUE|FALSE)/
|
28
|
+
$1._flag
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module SkypeAPI
|
2
|
+
module Object
|
3
|
+
class ChatMessage < AbstractObject
|
4
|
+
OBJECT_NAME = "CHATMESSAGE"
|
5
|
+
|
6
|
+
def self.create chatId ,msg
|
7
|
+
res = @@skypeApi.sendCMD "CHATMESSAGE #{chatId} #{msg}"
|
8
|
+
if res =~ /^CHATMESSAGE (\d+) STATUS (.+)$/
|
9
|
+
return @@skypeApi.chatMessage($1)#, $2
|
10
|
+
else
|
11
|
+
raise #????
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
getter :Body, 'BODY'
|
16
|
+
getter :Timestamp, 'TIMESTAMP' do |str|
|
17
|
+
str.to_i
|
18
|
+
end
|
19
|
+
getter :Partner, 'PARTNER_HANDLE' do |str|
|
20
|
+
@@skypeApi.user str
|
21
|
+
end
|
22
|
+
getter :PartnerDispname, 'PARTNER_DISPNAME'
|
23
|
+
getter :From, 'FROM_HANDLE' do |str|
|
24
|
+
@@skypeApi.user str
|
25
|
+
end
|
26
|
+
getter :FromDispname, 'FROM_DISPNAME'
|
27
|
+
getter :Type, 'TYPE'
|
28
|
+
getter :Status, 'STATUS'
|
29
|
+
getter :LeaveReason, 'LEAVEREASON'
|
30
|
+
getter :Chat, 'CHATNAME' do |str|
|
31
|
+
@@skypeApi.chat str
|
32
|
+
end
|
33
|
+
getter :Users, 'USERS' do |str|
|
34
|
+
str.split(',').map do |handle|
|
35
|
+
@@skypeApi.user handle
|
36
|
+
end
|
37
|
+
end
|
38
|
+
getter :IsEditable, 'IS_EDITABLE' do |str|
|
39
|
+
str._flag
|
40
|
+
end
|
41
|
+
getter :EditedBy, 'EDITED_BY' do |str|
|
42
|
+
str.empty? ? nil : @@skypeApi.user(str)
|
43
|
+
end
|
44
|
+
getter :EditedTimestamp, 'EDITED_TIMESTAMP' do |str|
|
45
|
+
str.to_i
|
46
|
+
end
|
47
|
+
getter :Options, 'OPTIONS' do |str|
|
48
|
+
str.to_i
|
49
|
+
end
|
50
|
+
getter :Role, 'ROLE'
|
51
|
+
|
52
|
+
def setSeen
|
53
|
+
str = @@skypeApi.sendCMD "SET CHATMESSAGE #{@id} SEEN"
|
54
|
+
if str =~ /^CHATMESSAGE #{@id} STATUS (.+)$/
|
55
|
+
return true
|
56
|
+
else
|
57
|
+
raise #????
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def setBody (val) sendSet('BODY',val._str); end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module SkypeAPI
|
2
|
+
module Object
|
3
|
+
class Event < AbstractObject
|
4
|
+
OBJECT_NAME = "EVENT"
|
5
|
+
|
6
|
+
def self.create id, caption, hint, block=Proc.new
|
7
|
+
res = @@skypeApi.sendCMD "CREATE EVENT #{id} CAPTION #{caption} HINT #{hint}"
|
8
|
+
res == "EVENT #{id} CREATED"
|
9
|
+
instance = new id
|
10
|
+
instance.setNotify block if block
|
11
|
+
instance
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.setNotify id=nil, block=Proc.new
|
15
|
+
@notify[id] = block
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.notified msg
|
19
|
+
if msg =~ /^([^ ]+) CLICKED$/m
|
20
|
+
id = $1
|
21
|
+
instance = new $1
|
22
|
+
@notify[nil].call instance if @notify[nil]
|
23
|
+
@notify[id].call instance if @notify[id]
|
24
|
+
@@instance[self][id].notified if @@instance[self][id]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def notified
|
29
|
+
@notify.call self if @notify
|
30
|
+
end
|
31
|
+
|
32
|
+
def setNotify block=Proc.new
|
33
|
+
@notify = block
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.delete id
|
37
|
+
new(id).delete
|
38
|
+
end
|
39
|
+
|
40
|
+
def delete
|
41
|
+
res = sendCMD "DELETE EVENT #{@id}"
|
42
|
+
res == "DLEETE EVENT #{@id}"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module SkypeAPI
|
2
|
+
module Object
|
3
|
+
class FileTransfer < AbstractObject
|
4
|
+
OBJECT_NAME = "FILETRANSFER"
|
5
|
+
|
6
|
+
getter :Type, 'TYPE'
|
7
|
+
getter :Status, 'STATUS'
|
8
|
+
getter :FailureReason, 'FAILUREREASON'
|
9
|
+
getter :Partner, 'PARTNER_HANDLE' do |str|
|
10
|
+
@@skypeApi.user str
|
11
|
+
end
|
12
|
+
getter :PartnerDispname, 'PARTNER_DISPNAME'
|
13
|
+
getter :StartTime, 'STARTTIME' do |str|
|
14
|
+
str.to_i
|
15
|
+
end
|
16
|
+
getter :FinishTime, 'FINISHTIME' do |str|
|
17
|
+
str.to_i
|
18
|
+
end
|
19
|
+
getter :FilePath, 'FILEPATH'
|
20
|
+
getter :FileSize, 'FILESIZE' do |str|
|
21
|
+
str.to_i
|
22
|
+
end
|
23
|
+
getter :BytesPerSecond, 'BYTESPERSECOND' do |str|
|
24
|
+
str.to_i
|
25
|
+
end
|
26
|
+
getter :BytesTransferred, 'BYTESTRANSFERRED' do |str|
|
27
|
+
str.to_i
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module SkypeAPI
|
2
|
+
module Object
|
3
|
+
class Group < AbstractObject
|
4
|
+
OBJECT_NAME = "GROUP"
|
5
|
+
|
6
|
+
def self.create family
|
7
|
+
@@skypeApi.sendCMD("CREATE GROUP #{family}")
|
8
|
+
group = nil
|
9
|
+
tmp = nil
|
10
|
+
if @@skypeApi.Group.notify[:displayname] and @@skypeApi.Group.notify[:displayname][family]
|
11
|
+
tmp = @@skypeApi.Group.notify[:displayname][family]
|
12
|
+
end
|
13
|
+
@@skypeApi.Group.setNotify :DisplayName, family do |g|
|
14
|
+
group = g
|
15
|
+
end
|
16
|
+
until group
|
17
|
+
@@skypeApi.polling
|
18
|
+
sleep 0.0123
|
19
|
+
end
|
20
|
+
if tmp
|
21
|
+
@@skypeApi.Group.setNotify :DisplayName, family, tmp
|
22
|
+
tmp.call group
|
23
|
+
else
|
24
|
+
@@skypeApi.Group.notify[:displayname][family] = nil
|
25
|
+
end
|
26
|
+
group
|
27
|
+
#ThreadSafe ����ς��낤�Ȃ��B�B�B
|
28
|
+
end
|
29
|
+
|
30
|
+
getter :Type, 'TYPE'
|
31
|
+
getter :CustomGroupID, 'CUSTOM_GROUP_ID' do |str|
|
32
|
+
str.to_i
|
33
|
+
end
|
34
|
+
getter :DisplayName, 'DISPLAYNAME'
|
35
|
+
getter :NrofUsers, 'NROFUSERS' do |str|
|
36
|
+
str.to_i
|
37
|
+
end
|
38
|
+
getter :NrofUsersOnline, 'NROFUSERS_ONLINE' do |str|
|
39
|
+
str.to_i
|
40
|
+
end
|
41
|
+
getter :Users, 'USERS' do |str|
|
42
|
+
str.split('./')
|
43
|
+
end
|
44
|
+
getter :Visible, 'VISIBLE' do |str|
|
45
|
+
str._flag
|
46
|
+
end
|
47
|
+
getter :Expanded, 'EXPANDED' do |str|
|
48
|
+
str._flag
|
49
|
+
end
|
50
|
+
|
51
|
+
def setDisplayName name
|
52
|
+
sendSet "DISPLAYNAME", name
|
53
|
+
end
|
54
|
+
|
55
|
+
def delete
|
56
|
+
sendEcho "DELETE GROUP #{@id}"
|
57
|
+
end
|
58
|
+
|
59
|
+
def addUser user
|
60
|
+
sendAlter "ADDUSER", user
|
61
|
+
end
|
62
|
+
|
63
|
+
def removeUser user
|
64
|
+
sendAlter "REMOVEUSER", user
|
65
|
+
end
|
66
|
+
|
67
|
+
def share text
|
68
|
+
sendAlter "Share", text
|
69
|
+
end
|
70
|
+
|
71
|
+
def accept
|
72
|
+
sendAlter "ACCEPT"
|
73
|
+
end
|
74
|
+
|
75
|
+
def decline
|
76
|
+
sendAlter "DECLINE"
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module SkypeAPI
|
2
|
+
module Object
|
3
|
+
class MenuItem < AbstractObject
|
4
|
+
OBJECT_NAME = 'MENU_ITEM'
|
5
|
+
|
6
|
+
def self.create h, block=Proc.new
|
7
|
+
raise ArgumentError unless h[:id] and h[:context] and h[:context]
|
8
|
+
#id, context, caption, hint=nil, icon=nil, enabled=nil, enableMultipleContacts=nil, &block
|
9
|
+
res = @@skypeApi.sendCMD "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
|
+
res == "MENU_ITEM #{h[:id]} CREATED"
|
11
|
+
instance = new h[:id]
|
12
|
+
instance.setNotify block if block
|
13
|
+
instance
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.setNotify sym=nil, block=Proc.new
|
17
|
+
@notify[sym] = block
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.notified msg
|
21
|
+
if msg =~ /^([^ ]+) CLICKED( ([^ ]+))? CONTEXT ([^ ]+)( CONTEXT_ID (.+))?$/m
|
22
|
+
id = $1; context = $4; userID = $3; contextID = $6
|
23
|
+
user = userID ? @@skypeApi.user(userID) : nil
|
24
|
+
instance = new $1
|
25
|
+
@notify[nil].call instance, context, user, contextID if @notify[nil]
|
26
|
+
@notify[id].call instance, context, user, contextID if @notify[id]
|
27
|
+
@@instance[self][id].notified context, user, contextID if @@instance[self][id]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def notified context, user, contextID
|
32
|
+
@notify.call context, user, contextID if @notify
|
33
|
+
end
|
34
|
+
|
35
|
+
def setNotify block=Proc.new
|
36
|
+
@notify = block
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.delete id
|
40
|
+
new(id).delete
|
41
|
+
end
|
42
|
+
|
43
|
+
def delete
|
44
|
+
res = @@skypeApi.sendCMD "DELETE MENU_ITEM #{@id}"
|
45
|
+
res == "DELETE MENU_ITEM #{@id}"
|
46
|
+
end
|
47
|
+
|
48
|
+
def setCaption value
|
49
|
+
res = sendCMD "SET MENU_ITEM #{@id} CAPTION #{value}"
|
50
|
+
res == "MENU_ITEM #{@id} CAPTION \"#{value}\""
|
51
|
+
end
|
52
|
+
|
53
|
+
def setHint value
|
54
|
+
res = sendCMD "SET MENU_ITEM #{@id} HINT #{value}"
|
55
|
+
res == "MENU_ITEM #{@id} HINT \"#{value}\""
|
56
|
+
end
|
57
|
+
|
58
|
+
def setEnabled value
|
59
|
+
res = sendCMD "SET MENU_ITEM #{@id} ENABLED #{value._str}"
|
60
|
+
res == "MENU_ITEM #{@id} ENABLED #{value._str}"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module SkypeAPI
|
2
|
+
module Object
|
3
|
+
class Message < AbstractObject
|
4
|
+
OBJECT_NAME = "MESSAGE"
|
5
|
+
|
6
|
+
PROPERTY2METHOD = {
|
7
|
+
'TIMESTAMP' => :timestamp,
|
8
|
+
'PARTNER_HANDLE' => :partnerHandle,
|
9
|
+
'PARTNER_DISPNAME' => :partnerDispname,
|
10
|
+
'CONF_ID' => :confIdD,
|
11
|
+
'TYPE' => :type,
|
12
|
+
'STATUS' => :status,
|
13
|
+
'FAILUREREASON' => :failureReason,
|
14
|
+
'BODY' => :body,
|
15
|
+
}
|
16
|
+
|
17
|
+
def self.create target,text
|
18
|
+
if defined? target.getHandle
|
19
|
+
target = target.getHandle
|
20
|
+
elsif target.class == String
|
21
|
+
else
|
22
|
+
raise target
|
23
|
+
end
|
24
|
+
res = @skypeApi.sendOne "MESSAGE #{target} #{text}","MESSAGE"
|
25
|
+
if res =~ /^(\d+) STATUS (.+)$/
|
26
|
+
return @skypeApi.getMessage($1),"getStatus",$2
|
27
|
+
else
|
28
|
+
raise #????
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def timestamp() sendGet('TIMESTAMP'); end
|
33
|
+
def partnerHandle() sendGet('PARTNER_HANDLE'); end
|
34
|
+
def partnerDispname() sendGet('PARTNER_DISPNAME'); end
|
35
|
+
def confIdD() sendGet('CONF_ID'); end
|
36
|
+
def type() sendGet('TYPE'); end
|
37
|
+
def status() sendGet('STATUS'); end
|
38
|
+
def failureReason() sendGet('FAILUREREASON'); end
|
39
|
+
def body() sendGet('BODY'); end
|
40
|
+
|
41
|
+
#def setSeen
|
42
|
+
# str2object sendOne("SET MESSAGE #{@id} SEEN","SET MESSAGE #{@id} STATUS")
|
43
|
+
#end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
module SkypeAPI
|
4
|
+
module Object
|
5
|
+
|
6
|
+
|
7
|
+
#������R�s�y�U�݁B
|
8
|
+
module Notify
|
9
|
+
def setNotify property=nil,value=nil, block=Proc.new
|
10
|
+
property = property.to_s.downcase.to_sym if property
|
11
|
+
value = value.to_s.upcase if value.class == Symbol
|
12
|
+
@notify[property] = Hash.new unless @notify[property]
|
13
|
+
@notify[property][value] = block
|
14
|
+
end
|
15
|
+
|
16
|
+
def delNotify property=nil,value=nil
|
17
|
+
@notify[property].delete value
|
18
|
+
end
|
19
|
+
|
20
|
+
def notify
|
21
|
+
@notify
|
22
|
+
end
|
23
|
+
|
24
|
+
def notified property,value
|
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]
|
28
|
+
end
|
29
|
+
if @notify[property]
|
30
|
+
@notify[property][nil].call value if @notify[property][nil]
|
31
|
+
@notify[property][value].call if @notify[property][value]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
module Get
|
37
|
+
def getter methodName, skypeProperty=methodName.to_s.upcase, &callBack
|
38
|
+
defineMethod = self == SkypeAPI ? self.class.method(:define_method) : method(:define_method)
|
39
|
+
defineMethod.call 'get' + methodName.to_s do
|
40
|
+
str = sendGet skypeProperty
|
41
|
+
callBack ? callBack.call(str) : str
|
42
|
+
end
|
43
|
+
self::P2M[skypeProperty] = methodName.to_sym
|
44
|
+
self::V2O[skypeProperty] = callBack if callBack
|
45
|
+
end
|
46
|
+
|
47
|
+
def notice methodName,skypeProperty,&block
|
48
|
+
self::P2M[skypeProperty] = methodName.to_sym
|
49
|
+
self::V2O[methodName] = block if block
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class AbstractObject
|
54
|
+
extend SkypeAPI::Object::Notify
|
55
|
+
extend Forwardable
|
56
|
+
extend SkypeAPI::Object::Get
|
57
|
+
include SkypeAPI::Object::Notify
|
58
|
+
include SkypeAPI::ShareFunctions
|
59
|
+
|
60
|
+
#�p�������ނ�S������B@@instance[class][id of instance]
|
61
|
+
@@instance = Hash.new do |hash,key|
|
62
|
+
hash[key] = Hash.new
|
63
|
+
end
|
64
|
+
@@skypeApi = SkypeAPI
|
65
|
+
|
66
|
+
#�萔�͌p�����Ăق����Ȃ��ׁA�ʂɐ����B
|
67
|
+
#Module include self.class::P2M
|
68
|
+
#Module extend self::P2M
|
69
|
+
#Class P2M
|
70
|
+
#Instance P2M �ŃA�N�Z�X�B
|
71
|
+
def self.inherited sub
|
72
|
+
sub.const_set :P2M, Hash.new{|hash,key| hash[key] = key}
|
73
|
+
sub.const_set :V2O, Hash.new
|
74
|
+
sub.instance_variable_set :@notify, Hash.new
|
75
|
+
end
|
76
|
+
|
77
|
+
#extend����Notify���I�[�o�[���C�h�B
|
78
|
+
#����Ă�̂́A�l�̕ϊ��Ǝ�����notify�ƃC���X�^���X��notify�B
|
79
|
+
def self.notified msg
|
80
|
+
if msg =~ /^([^ ]+) ([^ ]+) (.*)$/m
|
81
|
+
id = $1; skypeProperty = $2; value = $3
|
82
|
+
instance = new id
|
83
|
+
property = self::P2M[skypeProperty].to_s.downcase.to_sym if self::P2M[skypeProperty].class == Symbol
|
84
|
+
value = self::V2O[skypeProperty].call value if self::V2O[skypeProperty]
|
85
|
+
|
86
|
+
if @notify[nil]
|
87
|
+
@notify[nil][nil].call instance, property, value if @notify[nil][nil]
|
88
|
+
@notify[nil][value].call instance, property if @notify[nil][value]
|
89
|
+
end
|
90
|
+
if @notify[property]
|
91
|
+
@notify[property][nil].call instance, value if @notify[property][nil]
|
92
|
+
@notify[property][value].call instance if @notify[property][value]
|
93
|
+
end
|
94
|
+
@@instance[self][id].notified property,value if @@instance[self][id]
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def self.new id
|
99
|
+
if @@instance[self][id]
|
100
|
+
return @@instance[self][id]
|
101
|
+
else
|
102
|
+
instance = super id
|
103
|
+
instance.instance_variable_set :@notify, Hash.new
|
104
|
+
@@instance[self][id] = instance
|
105
|
+
return instance
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def initialize id
|
110
|
+
@id = id
|
111
|
+
end
|
112
|
+
|
113
|
+
def to_s
|
114
|
+
@id.to_s
|
115
|
+
end
|
116
|
+
|
117
|
+
#def_delegators :@@skypeApi, :sendCMD
|
118
|
+
def_delegators :@@skypeApi, :sendCMD
|
119
|
+
end
|
120
|
+
|
121
|
+
end
|
122
|
+
end
|