3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/weechat/infolist.rb', line 3
def self.parse(type, ptr="", arguments="", requirements = {}, *fields)
infolist_ptr = Weechat.infolist_get(type, ptr, arguments)
ret = []
while Weechat.infolist_next(infolist_ptr) > 0
h = {}
not_matching = requirements.any? {|option, value|
type, value = value
Weechat.__send__("infolist_#{type}", infolist_ptr, option.to_s) != value
}
if not_matching
next
else
str = Weechat.infolist_fields(infolist_ptr)
str.split(/,/).each do |item|
type, name = item.split(/:/)
sname = name.to_sym
next if !fields.empty? && !fields.include?(sname)
h[sname] = case type
when 'p'
Weechat.infolist_pointer(infolist_ptr, name)
when 'i'
Weechat.infolist_integer(infolist_ptr, name)
when 's'
Weechat.infolist_string(infolist_ptr, name)
when 'b'
when 't'
Weechat.infolist_time(infolist_ptr, name)
end
end
ret << h
end
end
Weechat.infolist_free(infolist_ptr)
return ret
end
|