class RemoteDroid::Controller
Attributes
devices[R]
macros[RW]
model[R]
store[RW]
syslog[R]
title[RW]
Public Class Methods
new(mcs, model=MODEL, devices: {}, debug: false)
click to toggle source
# File lib/remotedroid/controller.rb, line 8 def initialize(mcs, model=MODEL, devices: {}, debug: false) @debug = debug @syslog = [] @devices = devices @devices.each do |key, deviceid| devices[key] = Control.new(deviceid) end @macros = mcs.macros if model then @model = Model.new(model) end @store = {} #@query = Query.new(self) # enable the required triggers on the Android device # names = @macros.map {|x| x.triggers.first.type}.uniq #@control.enable names.first.to_s.gsub('_',' ') puts 'Enabling ' + names.join(',') =begin Thread.new do names.each do |title| @control.enable title.to_s.gsub('_',' ') sleep 0.8 end end =end end
Public Instance Methods
control(device)
click to toggle source
# File lib/remotedroid/controller.rb, line 43 def control(device) @devices[device] end
delete_all()
click to toggle source
# File lib/remotedroid/controller.rb, line 47 def delete_all() @macros = [] end
export(s, replace: false)
click to toggle source
# File lib/remotedroid/controller.rb, line 51 def export(s, replace: false) macros = MacroDroid.new(s).macros replace ? @macros = macros : @macros.concat(macros) end
invoke(device, name, options={})
click to toggle source
# File lib/remotedroid/controller.rb, line 58 def invoke(device, name, options={}) if control(device).respond_to? name.to_sym then control(device).method(name.to_sym).call(options) else control(device).http_exec name.to_sym, options end end
local(action, options={})
click to toggle source
# File lib/remotedroid/controller.rb, line 67 def local(action, options={}) case action.to_sym when :open_web_page open(options[:url_to_open]).read end end
op()
click to toggle source
Object
Property (op) Helpful for accessing properites in dot notation e.g. op.livingroom.light.switch = 'off'
# File lib/remotedroid/controller.rb, line 79 def op() @model.op end
query(device, id=nil)
click to toggle source
# File lib/remotedroid/controller.rb, line 83 def query(device, id=nil) return Query.new(device, self) unless id @store[id] = nil sys = %i(accelerometer_rotation) global = [:airplane_mode_on, :bluetooth_on, :cell_on, :device_name, \ :usb_mass_storage_enabled, :wifi_on] secure = %i(bluetooth_name flashlight_enabled) # send http request via macrodroid.com API identifier, options = if id.downcase.to_sym == :location then id elsif sys.include? id [:'query-setting-system', {qvar: id}] elsif global.include? id [:'query-setting-global', {qvar: id}] elsif secure.include? id [:'query-setting-secure', {qvar: id}] elsif id.downcase.to_sym == :'take-picture' id else [:query, {qvar: id}] end control(device).http_exec identifier, options # wait for the local variable to be updated # timeout after 5 seoncds t = Time.now begin sleep 1 end until @store[id] or Time.now > t + 10 return {warning: 'HTTP response timeout'} if Time.now > t+5 return @store[id] end
request(s)
click to toggle source
# File lib/remotedroid/controller.rb, line 130 def request(s) @model.request s end
run_macro(macro_name: '')
click to toggle source
# File lib/remotedroid/controller.rb, line 134 def run_macro(macro_name: '') found = @macros.find do |macro| macro.title.downcase == macro_name.downcase end found.run if found end
trigger(name, detail={})
click to toggle source
# File lib/remotedroid/controller.rb, line 144 def trigger(name, detail={}) macros = @macros.select do |macro| puts 'macro: ' + macro.inspect if @debug # fetch the associated properties from the model if possible and # merge them into the detail. # valid_trigger = macro.match?(name, detail, @model.op) #puts 'valid_trigger: ' + valid_trigger.inspect if @debug #if valid_trigger then # @syslog << [Time.now, :trigger, name] # @syslog << [Time.now, :macro, macro.title] #end @syslog << [Time.now, name, detail] valid_trigger end puts 'macros: ' + macros.inspect if @debug macros.flat_map(&:run) end
Also aliased as: trigger_fired
update(id, val)
click to toggle source
# File lib/remotedroid/controller.rb, line 175 def update(id, val) if @debug then puts 'inside update' puts [id, val].inspect end key = if %i(location take-picture).include? id id else val.keys.first.to_sym end @syslog << [id, val] @store[key] = val end