60 lines
1.2 KiB
Ruby
60 lines
1.2 KiB
Ruby
|
|
task rebuild_bridge: :environment do
|
||
|
|
|
||
|
|
path = File.join(Dir.home, 'workspace', 'JamKazamBuild', 'client')
|
||
|
|
|
||
|
|
puts "client directory: #{path}"
|
||
|
|
|
||
|
|
interface = File.join(path, 'src', 'mumble', 'JavaScriptBridgeUntyped.h')
|
||
|
|
|
||
|
|
puts "interface file: #{interface}"
|
||
|
|
|
||
|
|
output = File.join('app', 'assets', 'javascripts', 'bridge_api.es6')
|
||
|
|
|
||
|
|
puts "output file: #{output}"
|
||
|
|
|
||
|
|
# every line is something like this:
|
||
|
|
# Q_INVOKABLE QVariantMap FTUEGetAvailableEncodeVideoResolutions(){ return bridge->FTUEGetAvailableEncodeVideoResolutions(); }
|
||
|
|
|
||
|
|
methods = []
|
||
|
|
File.open(interface).each_line do |li|
|
||
|
|
if li['Q_INVOKABLE']
|
||
|
|
match = /^.*Q_INVOKABLE\s+\S+\s+([^\(]+)\(.*$/.match(li)
|
||
|
|
method = match.captures[0]
|
||
|
|
bits = method.split()
|
||
|
|
methods << bits[bits.length - 1]
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
header = <<-FOO
|
||
|
|
class BridgeApi {
|
||
|
|
constructor(options) {
|
||
|
|
this.options = options
|
||
|
|
this.bridge = bridge
|
||
|
|
}
|
||
|
|
|
||
|
|
FOO
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
File.open(output, 'w') { |file|
|
||
|
|
file.write(header)
|
||
|
|
|
||
|
|
methods.each do |method|
|
||
|
|
|
||
|
|
method_print = <<-FOO
|
||
|
|
#{method}() {
|
||
|
|
return this.bridge.invokeMethod('#{method}()', arguments)
|
||
|
|
}
|
||
|
|
|
||
|
|
FOO
|
||
|
|
|
||
|
|
file.write(method_print)
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
file.puts('}')
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
end
|