]> git.sven.stormbind.net Git - sven/vym.git/blob - scripts/vym-ruby.rb
Import Upstream version 2.6.11
[sven/vym.git] / scripts / vym-ruby.rb
1 require 'dbus'
2
3 $deb = false
4
5 class Vym
6   def initialize (name)
7     @dbus = DBus::SessionBus.instance
8     @service = @dbus.service(name)
9     @service.introspect
10     @main = @service.object('vym')
11     @main.introspect
12     @main.default_iface = "org.insilmaril.vym.main.adaptor"
13
14     # Use metaprogramming to create methods for commands in vym
15     if modelCount > 0
16       m = model(1)
17       m.default_iface = "org.insilmaril.vym.model.adaptor"
18       s=m.listCommands
19       @model_commands = s[0].split ","
20       @model_commands.each do |c|
21         self.class.send(:define_method, c) do |*pars|
22           if pars.length == 0
23             puts " * Calling \"#{c}\":" if $deb
24             ret = m.execute("#{c} ()")
25           else  
26             # Build string with parameters
27             p = "";
28             a = []
29             pars.each do |p|
30               if p.kind_of? String
31                 a << "'#{p}'"
32               else
33                 a << p
34               end
35             end  
36             puts " * Calling \"#{c} (#{a.join(',')})\":" if $deb
37             ret = m.execute("#{c} (#{a.join(',')})")
38           end  
39
40           err = m.errorLevel[0]
41           if $deb
42             puts "     Returned: #{ret[0]}" if ret[0] != ""
43             puts "        Error: #{err}" if err > 0
44           end  
45           ret[0]
46         end
47       end
48     end
49   end
50
51   def modelCount
52     @main.modelCount[0]
53   end
54
55   def model (n)
56     if modelCount > 0 && n>=0
57       @model = @service.object "vymmodel_#{n}"
58       @model.default_iface = "org.insilmaril.vym.model.adaptor"
59       return @model
60     else
61       raise "Error: Model #{n} not accessible in #{@instance}!"
62     end  
63   end
64
65   def show_methods
66     puts "Main methods:"
67     @main[@main.default_iface].methods.each do |k,v|
68       puts "  #{k}"
69     end
70     if modelCount > 0
71       @model= @service.object 'vymmodel_1'
72       @model.default_iface = "org.insilmaril.vym.model.adaptor"
73       puts "Model methods:"
74       @model[@model.default_iface].methods.each do |k,v|
75         puts "  #{k}"
76       end
77     else
78       puts "No model!"
79     end  
80   end
81 end
82
83 class VymManager
84   def initialize
85     @dbus = DBus::SessionBus.instance
86   end
87
88   def running
89     list=@dbus.proxy.ListNames[0].find_all{|item| item =~/org\.insilmaril\.vym/ }
90   end
91
92   def show_running
93     puts "Running vym instances:\n  #{running.join "\n  "}"
94   end
95
96   def find (name)
97     list = running
98     #puts "Running vyms: #{list.length}"
99     if list.length == 0
100       return nil
101     end
102
103     for i in (0...list.length)
104       vym_service = @dbus.service(list.at(i))
105       vym_service.introspect
106       vym_main_obj = vym_service.object("vym");
107       vym_main_obj.introspect
108
109       vym_main_obj.default_iface = "org.insilmaril.vym.main.adaptor"
110
111       if vym_main_obj.getInstanceName[0] == name 
112         #puts "Found instance named '#{name}': #{list.at(i)}"
113         return Vym.new list.at(i)
114       end  
115     end
116     #raise "Could not find instance named \"test\""
117     return nil
118   end
119 end
120