jam-cloud/web/lib/tasks/bridge.rake

60 lines
1.2 KiB
Ruby
Raw Permalink Normal View History

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