]> git.sven.stormbind.net Git - sven/vym.git/blob - scripts/vym-ruby.rb
Replace Pierre as the maintainer
[sven/vym.git] / scripts / vym-ruby.rb
1 require 'dbus'
2 require 'pp'
3
4 $debug = false
5
6 class Vym
7   def initialize (name)
8     @dbus = DBus::SessionBus.instance
9     @service = @dbus.service(name)
10     @service.introspect
11     @main = @service.object('/vym')
12     @main.introspect
13     @main.default_iface = "org.insilmaril.vym.main.adaptor"
14
15     # Use metaprogramming to create methods for commands in vym
16     # Getting commands for mainwindow via DBUS
17     puts "Vym::initialize Retrieving commands via dbus..." if $debug
18     s = @main.listCommands
19     @vym_commands = s[0].split ","
20     @vym_commands.each do |c|
21       puts "Creating vym command: #{c}" if $debug
22       self.class.send(:define_method, c) do |*pars|
23         if pars.length == 0
24           # No parameters
25           com = "vym.#{c}();"
26           puts " * Calling vym: \"#{com}\":" if $debug
27           ret = @main.execute( com )
28         else
29           # with parameters
30           p = "";
31           a = []
32           pars.each do |p|
33             if p.kind_of? String
34               a << "'#{p}'"
35             else
36               a << p
37             end
38           end
39           com = "vym.#{c} (#{a.join(',')});"
40           puts " ** Calling vym: \"#{com}\":" if $debug
41           ret = @main.execute( com )
42         end
43
44         #FIXME-2  err = m.errorLevel[0]
45         if $debug
46           puts "     Returned: #{ret[0]}" if ret[0] != ""
47           # puts "        Error: #{err}" if err > 0
48         end
49         ret[0]
50       end
51     end # Creating vym commands
52   end
53
54   def mapCount
55     @main.mapCount[0]
56   end
57
58   def currentMapID
59     return @main.currentMapID[0]
60   end
61
62   def map (n)
63     #puts "def map:  @service.object(\"/vymmodel_#{n}\")"
64     map = @service.object("/vymmodel_#{n}")
65     map.introspect
66     map.default_iface = "org.insilmaril.vym.model.adaptor"
67
68     if mapCount() > 0 && n >= 0
69       return VymMap.new(map, n )
70     else
71       raise "Error: Map #{n} not accessible in #{@instance}!"
72     end
73   end
74
75   def show_methods
76     puts "Main methods:"
77     @main[@main.default_iface].methods.each do |k,v|
78       puts " - #{k}"
79     end
80   end
81 end
82
83
84 class VymMap
85   def initialize(map, n )
86     @map = map
87
88     # Getting commands for model via DBUS
89     #if mapCount() > 0
90       # m = model(1)
91       s = @map.listCommands
92       puts "VymMap::initialize Retrieving commands via dbus..." if $debug
93       @model_commands = s[0].split ","
94       @model_commands.each do |c|
95       #puts "Creating map command: #{c}" if $debug
96         self.class.send(:define_method, c) do |*pars|
97           if pars.length == 0
98             # No parameters
99             com = "vym.currentMap().#{c}();"
100             puts " * Calling model: \"#{com}\":" if $debug
101             ret = @map.execute( com )
102           else
103             # Build string with parameters
104             p = "";
105             a = []
106             pars.each do |p|
107               if p.kind_of? String
108                 a << "'#{p}'"
109               else
110                 a << p
111               end
112             end
113             # com = "vym.clearConsole(); print( vym.currentMap().#{c} (#{a.join(',')}));"
114             com = " vym.currentMap().#{c} (#{a.join(',')});"
115             puts " ** Calling model: \"#{com}\":" if $debug
116             ret = @map.execute( com )
117             puts "Done calling" if $debug
118           end
119
120           #FIXME-2 err = m.errorLevel[0]
121           if $debug
122             puts "     Returned: #{ret[0]}" if ret[0] != ""
123             #puts "        Error: #{err}" if err > 0
124           end
125           ret[0]
126         end
127       end
128   end # Initialize
129 end # VymMap
130
131 class VymManager
132   def initialize
133     @dbus = DBus::SessionBus.instance
134   end
135
136   def running
137     list = @dbus.proxy.ListNames[0].find_all{|item| item =~/org\.insilmaril\.vym/ }
138   end
139
140   def show_running
141     puts "Running vym instances:\n  #{running.join "\n  "}"
142   end
143
144   def find (name)
145     list = running
146     if list.length == 0
147       return nil
148     end
149
150     for i in (0...list.length)
151       vym_service = @dbus.service(list.at(i))
152
153       vym_main_obj = vym_service.object("/vym");
154
155       vym_main_obj.introspect
156
157       vym_main_obj.default_iface = "org.insilmaril.vym.main.adaptor"
158
159       if vym_main_obj.getInstanceName[0] == name
160         puts "VymManager: Found instance named '#{name}': #{list.at(i)}" if $debug
161         return Vym.new list.at(i)
162      end
163     end
164
165     raise "Could not find instance named \"test\""
166     return nil
167   end
168 end
169