ruby-macrodroid 0.9.6 → 0.9.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - checksums.yaml.gz.sig +0 -0
 - data.tar.gz.sig +0 -0
 - data/lib/ruby-macrodroid.rb +53 -35
 - data/lib/ruby-macrodroid/actions.rb +162 -55
 - data/lib/ruby-macrodroid/actionsnlp.rb +244 -0
 - data/lib/ruby-macrodroid/base.rb +7 -5
 - data/lib/ruby-macrodroid/constraints.rb +11 -3
 - data/lib/ruby-macrodroid/constraintsnlp.rb +75 -0
 - data/lib/ruby-macrodroid/macro.rb +26 -451
 - data/lib/ruby-macrodroid/triggers.rb +5 -0
 - data/lib/ruby-macrodroid/triggersnlp.rb +150 -0
 - metadata +5 -2
 - metadata.gz.sig +0 -0
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 7c377e6586f261b43617f7daa117872cab4a642476c7923a6b353e2d3adfea8b
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 73dc4c91553017f35fa6d37afcda647ff1e14fd732f6bb52c89266fde62c66f0
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 1fc6439e1bb63fde2828ba2cc3593223b0fdf9ec22c6caf2e926456973663f85cb0f389d641503e41e82c1b660412781485b8ef8b280b55fe7e077ebdaa64cce
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 2056084f2c420f6f7a3328c92f6ebad1caf150a0a34ea353f1ce2fce5c22c237841ce02dbea3a805eb73baad69a4beb57050570a593a63052559a498fb22c416
         
     | 
    
        checksums.yaml.gz.sig
    CHANGED
    
    | 
         Binary file 
     | 
    
        data.tar.gz.sig
    CHANGED
    
    | 
         Binary file 
     | 
    
        data/lib/ruby-macrodroid.rb
    CHANGED
    
    | 
         @@ -110,16 +110,19 @@ class MacroDroid 
     | 
|
| 
       110 
110 
     | 
    
         
             
              using Params  
         
     | 
| 
       111 
111 
     | 
    
         | 
| 
       112 
112 
     | 
    
         
             
              attr_reader :macros, :geofences, :yaml
         
     | 
| 
       113 
     | 
    
         
            -
              attr_accessor :deviceid, :remote_url
         
     | 
| 
      
 113 
     | 
    
         
            +
              attr_accessor :deviceid, :remote_url, :picture_path
         
     | 
| 
       114 
114 
     | 
    
         | 
| 
       115 
115 
     | 
    
         
             
              # note: The deviceid can only be found from an existing Webhook trigger, 
         
     | 
| 
       116 
116 
     | 
    
         
             
              #       generated from MacroDroid itself.
         
     | 
| 
       117 
117 
     | 
    
         | 
| 
       118 
     | 
    
         
            -
              def initialize(obj=nil, deviceid: nil, remote_url: nil,  
     | 
| 
      
 118 
     | 
    
         
            +
              def initialize(obj=nil, deviceid: nil, remote_url: nil, 
         
     | 
| 
      
 119 
     | 
    
         
            +
                             picture_path: '/storage/emulated/0/Pictures', debug: false)
         
     | 
| 
       119 
120 
     | 
    
         | 
| 
       120 
121 
     | 
    
         
             
                @deviceid, @remote_url, @debug = deviceid, remote_url, debug    
         
     | 
| 
      
 122 
     | 
    
         
            +
                @picture_path = picture_path
         
     | 
| 
       121 
123 
     | 
    
         | 
| 
       122 
124 
     | 
    
         
             
                @geofences = {}
         
     | 
| 
      
 125 
     | 
    
         
            +
                @macros = []
         
     | 
| 
       123 
126 
     | 
    
         | 
| 
       124 
127 
     | 
    
         
             
                if obj then
         
     | 
| 
       125 
128 
     | 
    
         | 
| 
         @@ -143,34 +146,7 @@ class MacroDroid 
     | 
|
| 
       143 
146 
     | 
    
         | 
| 
       144 
147 
     | 
    
         
             
                    if s =~ /m(?:acro)?:\s/ then
         
     | 
| 
       145 
148 
     | 
    
         | 
| 
       146 
     | 
    
         
            -
                       
     | 
| 
       147 
     | 
    
         
            -
             
     | 
| 
       148 
     | 
    
         
            -
                      s2 = s.gsub(/^g:/,'geofence:').gsub(/^m:/,'macro:')\
         
     | 
| 
       149 
     | 
    
         
            -
                          .gsub(/^d:/,'description:').gsub(/^v:/,'variable:')\
         
     | 
| 
       150 
     | 
    
         
            -
                          .gsub(/^t:/,'trigger:').gsub(/^a:/,'action:')\
         
     | 
| 
       151 
     | 
    
         
            -
                          .gsub(/^c:/,'constraint:').gsub(/^#.*/,'')
         
     | 
| 
       152 
     | 
    
         
            -
                      
         
     | 
| 
       153 
     | 
    
         
            -
                      a = s2.split(/(?=^macro:)/)
         
     | 
| 
       154 
     | 
    
         
            -
                      
         
     | 
| 
       155 
     | 
    
         
            -
                      raw_geofences = a.shift if a.first =~ /^geofence/
         
     | 
| 
       156 
     | 
    
         
            -
                      raw_macros = a.join
         
     | 
| 
       157 
     | 
    
         
            -
                      #raw_macros, raw_geofences .reverse
         
     | 
| 
       158 
     | 
    
         
            -
                      
         
     | 
| 
       159 
     | 
    
         
            -
                      puts 'raw_macros: ' + raw_macros.inspect if @debug
         
     | 
| 
       160 
     | 
    
         
            -
                      
         
     | 
| 
       161 
     | 
    
         
            -
                      if raw_geofences then
         
     | 
| 
       162 
     | 
    
         
            -
                        
         
     | 
| 
       163 
     | 
    
         
            -
                        geoxml = RowX.new(raw_geofences).to_xml
         
     | 
| 
       164 
     | 
    
         
            -
                        
         
     | 
| 
       165 
     | 
    
         
            -
                        geodoc = Rexle.new(geoxml)  
         
     | 
| 
       166 
     | 
    
         
            -
                        geofences = geodoc.root.xpath('item/geofence')        
         
     | 
| 
       167 
     | 
    
         
            -
                        @geofences = fetch_geofences(geofences) if geofences.any?          
         
     | 
| 
       168 
     | 
    
         
            -
                        
         
     | 
| 
       169 
     | 
    
         
            -
                      end
         
     | 
| 
       170 
     | 
    
         
            -
                      
         
     | 
| 
       171 
     | 
    
         
            -
                      xml = RowX.new(raw_macros, allow_lonely_keyfield: true).to_xml
         
     | 
| 
       172 
     | 
    
         
            -
                      puts 'xml: ' + xml if @debug
         
     | 
| 
       173 
     | 
    
         
            -
                      import_rowxml(xml)
         
     | 
| 
      
 149 
     | 
    
         
            +
                      import_txt(s)
         
     | 
| 
       174 
150 
     | 
    
         | 
| 
       175 
151 
     | 
    
         
             
                    elsif s =~ /^# / 
         
     | 
| 
       176 
152 
     | 
    
         
             
                      xml = pc_to_xml(s)
         
     | 
| 
         @@ -227,6 +203,10 @@ class MacroDroid 
     | 
|
| 
       227 
203 
     | 
    
         
             
              def export(filepath)
         
     | 
| 
       228 
204 
     | 
    
         
             
                FileX.write filepath, to_json
         
     | 
| 
       229 
205 
     | 
    
         
             
              end
         
     | 
| 
      
 206 
     | 
    
         
            +
              
         
     | 
| 
      
 207 
     | 
    
         
            +
              def import(s)
         
     | 
| 
      
 208 
     | 
    
         
            +
                import_txt(s)
         
     | 
| 
      
 209 
     | 
    
         
            +
              end
         
     | 
| 
       230 
210 
     | 
    
         | 
| 
       231 
211 
     | 
    
         
             
              def to_json()
         
     | 
| 
       232 
212 
     | 
    
         | 
| 
         @@ -334,7 +314,8 @@ class MacroDroid 
     | 
|
| 
       334 
314 
     | 
    
         
             
            #       puts '@geofences: ' + @geofences.inspect if @debug
         
     | 
| 
       335 
315 
     | 
    
         | 
| 
       336 
316 
     | 
    
         
             
                  m = Macro.new(geofences: @geofences.map(&:last), deviceid: @deviceid, 
         
     | 
| 
       337 
     | 
    
         
            -
                                remote_url: @remote_url,  
     | 
| 
      
 317 
     | 
    
         
            +
                                remote_url: @remote_url, picture_path: @picture_path, 
         
     | 
| 
      
 318 
     | 
    
         
            +
                                parent: self, debug: @debug )
         
     | 
| 
       338 
319 
     | 
    
         
             
                  m.import_h(macro)
         
     | 
| 
       339 
320 
     | 
    
         
             
                  m
         
     | 
| 
       340 
321 
     | 
    
         | 
| 
         @@ -353,14 +334,50 @@ class MacroDroid 
     | 
|
| 
       353 
334 
     | 
    
         
             
                puts 'import_rowxml: @geofences: ' + @geofences.inspect if @debug
         
     | 
| 
       354 
335 
     | 
    
         
             
                geofences = @geofences
         
     | 
| 
       355 
336 
     | 
    
         | 
| 
       356 
     | 
    
         
            -
                 
     | 
| 
      
 337 
     | 
    
         
            +
                a = doc.root.xpath('item').map do |node|
         
     | 
| 
       357 
338 
     | 
    
         
             
                  puts ('geofences: ' + geofences.inspect).highlight if @debug
         
     | 
| 
       358 
339 
     | 
    
         
             
                  Macro.new(geofences: geofences.map(&:last), deviceid: @deviceid, 
         
     | 
| 
       359 
     | 
    
         
            -
                            remote_url: @remote_url,  
     | 
| 
      
 340 
     | 
    
         
            +
                            remote_url: @remote_url, picture_path: @picture_path, 
         
     | 
| 
      
 341 
     | 
    
         
            +
                            parent: self, debug: @debug).import_xml(node)
         
     | 
| 
       360 
342 
     | 
    
         | 
| 
       361 
343 
     | 
    
         
             
                end
         
     | 
| 
      
 344 
     | 
    
         
            +
                
         
     | 
| 
      
 345 
     | 
    
         
            +
                @macros.concat a
         
     | 
| 
       362 
346 
     | 
    
         | 
| 
       363 
     | 
    
         
            -
              end 
     | 
| 
      
 347 
     | 
    
         
            +
              end
         
     | 
| 
      
 348 
     | 
    
         
            +
             
     | 
| 
      
 349 
     | 
    
         
            +
              def import_txt(s)
         
     | 
| 
      
 350 
     | 
    
         
            +
                
         
     | 
| 
      
 351 
     | 
    
         
            +
                puts 'before RowX.new' if @debug
         
     | 
| 
      
 352 
     | 
    
         
            +
             
     | 
| 
      
 353 
     | 
    
         
            +
                s2 = s.gsub(/^g:/,'geofence:').gsub(/^m:/,'macro:')\
         
     | 
| 
      
 354 
     | 
    
         
            +
                    .gsub(/^d:/,'description:').gsub(/^v:/,'variable:')\
         
     | 
| 
      
 355 
     | 
    
         
            +
                    .gsub(/^t:/,'trigger:').gsub(/^a:/,'action:')\
         
     | 
| 
      
 356 
     | 
    
         
            +
                    .gsub(/^c:/,'constraint:').gsub(/^#.*/,'')
         
     | 
| 
      
 357 
     | 
    
         
            +
                
         
     | 
| 
      
 358 
     | 
    
         
            +
                a = s2.split(/(?=^macro:)/)
         
     | 
| 
      
 359 
     | 
    
         
            +
                
         
     | 
| 
      
 360 
     | 
    
         
            +
                raw_geofences = a.shift if a.first =~ /^geofence/
         
     | 
| 
      
 361 
     | 
    
         
            +
                raw_macros = a.join
         
     | 
| 
      
 362 
     | 
    
         
            +
                #raw_macros, raw_geofences .reverse
         
     | 
| 
      
 363 
     | 
    
         
            +
                
         
     | 
| 
      
 364 
     | 
    
         
            +
                puts 'raw_macros: ' + raw_macros.inspect if @debug
         
     | 
| 
      
 365 
     | 
    
         
            +
                
         
     | 
| 
      
 366 
     | 
    
         
            +
                if raw_geofences then
         
     | 
| 
      
 367 
     | 
    
         
            +
                  
         
     | 
| 
      
 368 
     | 
    
         
            +
                  geoxml = RowX.new(raw_geofences).to_xml
         
     | 
| 
      
 369 
     | 
    
         
            +
                  
         
     | 
| 
      
 370 
     | 
    
         
            +
                  geodoc = Rexle.new(geoxml)  
         
     | 
| 
      
 371 
     | 
    
         
            +
                  geofences = geodoc.root.xpath('item/geofence')        
         
     | 
| 
      
 372 
     | 
    
         
            +
                  @geofences = fetch_geofences(geofences) if geofences.any?          
         
     | 
| 
      
 373 
     | 
    
         
            +
                  
         
     | 
| 
      
 374 
     | 
    
         
            +
                end
         
     | 
| 
      
 375 
     | 
    
         
            +
                
         
     | 
| 
      
 376 
     | 
    
         
            +
                xml = RowX.new(raw_macros, allow_lonely_keyfield: true).to_xml
         
     | 
| 
      
 377 
     | 
    
         
            +
                puts 'xml: ' + xml if @debug
         
     | 
| 
      
 378 
     | 
    
         
            +
                import_rowxml(xml)
         
     | 
| 
      
 379 
     | 
    
         
            +
                
         
     | 
| 
      
 380 
     | 
    
         
            +
              end
         
     | 
| 
       364 
381 
     | 
    
         | 
| 
       365 
382 
     | 
    
         
             
              def import_xml(raws)
         
     | 
| 
       366 
383 
     | 
    
         | 
| 
         @@ -380,7 +397,8 @@ class MacroDroid 
     | 
|
| 
       380 
397 
     | 
    
         
             
                @macros = doc.root.xpath('macro').map do |node|
         
     | 
| 
       381 
398 
     | 
    
         
             
                  puts 'node: ' + node.inspect if @debug    
         
     | 
| 
       382 
399 
     | 
    
         
             
                  Macro.new(geofences: @geofences.map(&:last), deviceid: @deviceid, 
         
     | 
| 
       383 
     | 
    
         
            -
                            debug: @debug) 
     | 
| 
      
 400 
     | 
    
         
            +
                            picture_path: @picture_path, parent: self, debug: @debug)\
         
     | 
| 
      
 401 
     | 
    
         
            +
                            .import_xml(node)
         
     | 
| 
       384 
402 
     | 
    
         | 
| 
       385 
403 
     | 
    
         
             
                end
         
     | 
| 
       386 
404 
     | 
    
         
             
              end
         
     | 
| 
         @@ -150,7 +150,7 @@ class OpenWebPageAction < ApplicationAction 
     | 
|
| 
       150 
150 
     | 
    
         | 
| 
       151 
151 
     | 
    
         
             
              def initialize(obj={}, macro=nil)
         
     | 
| 
       152 
152 
     | 
    
         | 
| 
       153 
     | 
    
         
            -
                $debug =  
     | 
| 
      
 153 
     | 
    
         
            +
                $debug = false    
         
     | 
| 
       154 
154 
     | 
    
         
             
                puts ('obj: ' + obj.inspect).debug if $debug
         
     | 
| 
       155 
155 
     | 
    
         | 
| 
       156 
156 
     | 
    
         
             
                h = if obj.is_a? Hash then
         
     | 
| 
         @@ -190,9 +190,9 @@ class OpenWebPageAction < ApplicationAction 
     | 
|
| 
       190 
190 
     | 
    
         
             
                #h[:url_to_open] = h[:url] if h[:url] and h[:url].length > 1
         
     | 
| 
       191 
191 
     | 
    
         | 
| 
       192 
192 
     | 
    
         
             
                options = {
         
     | 
| 
       193 
     | 
    
         
            -
                  variable_to_save_response: {:string_value=>"", :name=>"coords", 
         
     | 
| 
       194 
     | 
    
         
            -
                  decimal_value: 0.0, isLocal: true, m_boolean_value: false, 
         
     | 
| 
       195 
     | 
    
         
            -
                  excludeFromLog: false, int_value: 0, type: 2},
         
     | 
| 
      
 193 
     | 
    
         
            +
                  #variable_to_save_response: {:string_value=>"", :name=>"coords", 
         
     | 
| 
      
 194 
     | 
    
         
            +
                  #decimal_value: 0.0, isLocal: true, m_boolean_value: false, 
         
     | 
| 
      
 195 
     | 
    
         
            +
                  #excludeFromLog: false, int_value: 0, type: 2},
         
     | 
| 
       196 
196 
     | 
    
         
             
                  url_to_open: '',
         
     | 
| 
       197 
197 
     | 
    
         
             
                  http_get: true,
         
     | 
| 
       198 
198 
     | 
    
         
             
                  disable_url_encode: false,
         
     | 
| 
         @@ -284,11 +284,64 @@ end 
     | 
|
| 
       284 
284 
     | 
    
         
             
            #
         
     | 
| 
       285 
285 
     | 
    
         
             
            class TakePictureAction < CameraAction
         
     | 
| 
       286 
286 
     | 
    
         | 
| 
       287 
     | 
    
         
            -
              def initialize( 
     | 
| 
      
 287 
     | 
    
         
            +
              def initialize(obj=nil)
         
     | 
| 
      
 288 
     | 
    
         
            +
             
     | 
| 
      
 289 
     | 
    
         
            +
                
         
     | 
| 
      
 290 
     | 
    
         
            +
                h = if obj.is_a? Hash then
         
     | 
| 
      
 291 
     | 
    
         
            +
             
     | 
| 
      
 292 
     | 
    
         
            +
                  macro = obj[:macro]    
         
     | 
| 
      
 293 
     | 
    
         
            +
                  obj.delete :macro
         
     | 
| 
      
 294 
     | 
    
         
            +
                  obj
         
     | 
| 
      
 295 
     | 
    
         
            +
             
     | 
| 
      
 296 
     | 
    
         
            +
                  
         
     | 
| 
      
 297 
     | 
    
         
            +
                elsif obj.is_a? Array
         
     | 
| 
      
 298 
     | 
    
         
            +
                  
         
     | 
| 
      
 299 
     | 
    
         
            +
                  e, macro = obj
         
     | 
| 
      
 300 
     | 
    
         
            +
                  
         
     | 
| 
      
 301 
     | 
    
         
            +
                  #puts 'e: ' + e.xml.inspect
         
     | 
| 
      
 302 
     | 
    
         
            +
             
     | 
| 
      
 303 
     | 
    
         
            +
                  a = e.xpath('item/*')
         
     | 
| 
      
 304 
     | 
    
         
            +
                  
         
     | 
| 
      
 305 
     | 
    
         
            +
                  if a.any? then
         
     | 
| 
      
 306 
     | 
    
         
            +
                    
         
     | 
| 
      
 307 
     | 
    
         
            +
                    h2 = a.map {|node| [node.name.to_sym, node.text.to_s.strip]}.to_h
         
     | 
| 
      
 308 
     | 
    
         
            +
                    
         
     | 
| 
      
 309 
     | 
    
         
            +
                    desc = ''
         
     | 
| 
      
 310 
     | 
    
         
            +
                    
         
     | 
| 
      
 311 
     | 
    
         
            +
                    if h2[:description] then
         
     | 
| 
      
 312 
     | 
    
         
            +
             
     | 
| 
      
 313 
     | 
    
         
            +
                      desc = h2[:description]
         
     | 
| 
      
 314 
     | 
    
         
            +
                      h2.delete :description
         
     | 
| 
      
 315 
     | 
    
         
            +
                      #puts 'desc: ' + desc.inspect
         
     | 
| 
      
 316 
     | 
    
         
            +
                      
         
     | 
| 
      
 317 
     | 
    
         
            +
                      if desc.length > 1 then
         
     | 
| 
      
 318 
     | 
    
         
            +
                        
         
     | 
| 
      
 319 
     | 
    
         
            +
                        flash = case desc
         
     | 
| 
      
 320 
     | 
    
         
            +
                        when /Flash On/i
         
     | 
| 
      
 321 
     | 
    
         
            +
                          1
         
     | 
| 
      
 322 
     | 
    
         
            +
                        when /Flash Auto/i
         
     | 
| 
      
 323 
     | 
    
         
            +
                          2
         
     | 
| 
      
 324 
     | 
    
         
            +
                        else
         
     | 
| 
      
 325 
     | 
    
         
            +
                          0
         
     | 
| 
      
 326 
     | 
    
         
            +
                        end
         
     | 
| 
      
 327 
     | 
    
         
            +
                        
         
     | 
| 
       288 
328 
     | 
    
         | 
| 
      
 329 
     | 
    
         
            +
                      end          
         
     | 
| 
      
 330 
     | 
    
         
            +
                      
         
     | 
| 
      
 331 
     | 
    
         
            +
                    end
         
     | 
| 
      
 332 
     | 
    
         
            +
                    
         
     | 
| 
      
 333 
     | 
    
         
            +
                    {
         
     | 
| 
      
 334 
     | 
    
         
            +
                      use_front_camera: (desc =~ /Front Facing/ ? true : false),
         
     | 
| 
      
 335 
     | 
    
         
            +
                      flash_option: flash
         
     | 
| 
      
 336 
     | 
    
         
            +
                    }.merge(h2)          
         
     | 
| 
      
 337 
     | 
    
         
            +
                    
         
     | 
| 
      
 338 
     | 
    
         
            +
                  
         
     | 
| 
      
 339 
     | 
    
         
            +
                  end
         
     | 
| 
      
 340 
     | 
    
         
            +
                end
         
     | 
| 
      
 341 
     | 
    
         
            +
                
         
     | 
| 
       289 
342 
     | 
    
         
             
                options = {
         
     | 
| 
       290 
     | 
    
         
            -
                  new_path:  
     | 
| 
       291 
     | 
    
         
            -
                  path:  
     | 
| 
      
 343 
     | 
    
         
            +
                  new_path: macro.picture_path,
         
     | 
| 
      
 344 
     | 
    
         
            +
                  path: macro.picture_path,
         
     | 
| 
       292 
345 
     | 
    
         
             
                  show_icon: true,
         
     | 
| 
       293 
346 
     | 
    
         
             
                  use_front_camera: true,
         
     | 
| 
       294 
347 
     | 
    
         
             
                  flash_option: 0
         
     | 
| 
         @@ -304,7 +357,22 @@ class TakePictureAction < CameraAction 
     | 
|
| 
       304 
357 
     | 
    
         
             
              end
         
     | 
| 
       305 
358 
     | 
    
         | 
| 
       306 
359 
     | 
    
         
             
              def to_s(colour: false, indent: 0)
         
     | 
| 
       307 
     | 
    
         
            -
                 
     | 
| 
      
 360 
     | 
    
         
            +
                
         
     | 
| 
      
 361 
     | 
    
         
            +
                flash = case @h[:flash_option]
         
     | 
| 
      
 362 
     | 
    
         
            +
                when 0
         
     | 
| 
      
 363 
     | 
    
         
            +
                  ''
         
     | 
| 
      
 364 
     | 
    
         
            +
                when 1
         
     | 
| 
      
 365 
     | 
    
         
            +
                  'Flash On'
         
     | 
| 
      
 366 
     | 
    
         
            +
                when 2
         
     | 
| 
      
 367 
     | 
    
         
            +
                  'Flash Auto'
         
     | 
| 
      
 368 
     | 
    
         
            +
                end
         
     | 
| 
      
 369 
     | 
    
         
            +
                
         
     | 
| 
      
 370 
     | 
    
         
            +
                @s = 'Take Picture'# + @h.inspect
         
     | 
| 
      
 371 
     | 
    
         
            +
                a = [@h[:use_front_camera] ? 'Front Facing' : 'Rear Facing']
         
     | 
| 
      
 372 
     | 
    
         
            +
                a << flash if flash.length > 0
         
     | 
| 
      
 373 
     | 
    
         
            +
                @s += "\n" + a.join(', ')
         
     | 
| 
      
 374 
     | 
    
         
            +
                super()
         
     | 
| 
      
 375 
     | 
    
         
            +
                
         
     | 
| 
       308 
376 
     | 
    
         
             
              end  
         
     | 
| 
       309 
377 
     | 
    
         | 
| 
       310 
378 
     | 
    
         
             
            end
         
     | 
| 
         @@ -401,10 +469,14 @@ end 
     | 
|
| 
       401 
469 
     | 
    
         | 
| 
       402 
470 
     | 
    
         
             
            # Conditions/Loops
         
     | 
| 
       403 
471 
     | 
    
         
             
            #
         
     | 
| 
       404 
     | 
    
         
            -
            class IfConditionAction < Action
         
     | 
| 
       405 
472 
     | 
    
         | 
| 
      
 473 
     | 
    
         
            +
            class IfAction < Action
         
     | 
| 
      
 474 
     | 
    
         
            +
              using ColouredText
         
     | 
| 
      
 475 
     | 
    
         
            +
              
         
     | 
| 
       406 
476 
     | 
    
         
             
              def initialize(obj=nil)
         
     | 
| 
       407 
     | 
    
         
            -
             
     | 
| 
      
 477 
     | 
    
         
            +
                
         
     | 
| 
      
 478 
     | 
    
         
            +
                $debug = false
         
     | 
| 
      
 479 
     | 
    
         
            +
                
         
     | 
| 
       408 
480 
     | 
    
         
             
                options = {
         
     | 
| 
       409 
481 
     | 
    
         
             
                  a: true,
         
     | 
| 
       410 
482 
     | 
    
         
             
                  constraint_list: []
         
     | 
| 
         @@ -424,10 +496,10 @@ class IfConditionAction < Action 
     | 
|
| 
       424 
496 
     | 
    
         
             
                  super()
         
     | 
| 
       425 
497 
     | 
    
         
             
                  puts 'e.xml: ' + e.xml if $debug
         
     | 
| 
       426 
498 
     | 
    
         
             
                  puts 'e.text: ' + e.text.to_s.strip if $debug
         
     | 
| 
       427 
     | 
    
         
            -
                  raw_txt = e.text.to_s.strip[ 
     | 
| 
      
 499 
     | 
    
         
            +
                  raw_txt = e.text.to_s.strip[/^#{@label}[^$]+/i] || e.text('item/description')
         
     | 
| 
       428 
500 
     | 
    
         
             
                  puts 'raw_txt: ' + raw_txt.inspect if $debug
         
     | 
| 
       429 
501 
     | 
    
         | 
| 
       430 
     | 
    
         
            -
                  clause = raw_txt[ 
     | 
| 
      
 502 
     | 
    
         
            +
                  clause = raw_txt[/^#{@label}(.*)/i,1]
         
     | 
| 
       431 
503 
     | 
    
         
             
                  puts 'clause: ' + clause.inspect if $debug
         
     | 
| 
       432 
504 
     | 
    
         
             
                  conditions = clause.split(/\s+\b(?:AND|OR)\b\s+/i)
         
     | 
| 
       433 
505 
     | 
    
         
             
                  puts 'conditions: ' + conditions.inspect if $debug
         
     | 
| 
         @@ -446,6 +518,7 @@ class IfConditionAction < Action 
     | 
|
| 
       446 
518 
     | 
    
         | 
| 
       447 
519 
     | 
    
         
             
                  # find any nested actions
         
     | 
| 
       448 
520 
     | 
    
         
             
                  item = e.element('item')
         
     | 
| 
      
 521 
     | 
    
         
            +
                  #puts  ('item: ' + item.xml.inspect).debug if $debug
         
     | 
| 
       449 
522 
     | 
    
         | 
| 
       450 
523 
     | 
    
         
             
                  if item then
         
     | 
| 
       451 
524 
     | 
    
         | 
| 
         @@ -466,19 +539,13 @@ class IfConditionAction < Action 
     | 
|
| 
       466 
539 
     | 
    
         | 
| 
       467 
540 
     | 
    
         
             
                end
         
     | 
| 
       468 
541 
     | 
    
         | 
| 
       469 
     | 
    
         
            -
             
     | 
| 
       470 
     | 
    
         
            -
                
         
     | 
| 
       471 
     | 
    
         
            -
             
     | 
| 
       472 
     | 
    
         
            -
                
         
     | 
| 
       473 
     | 
    
         
            -
                @label = 'If '
         
     | 
| 
       474 
     | 
    
         
            -
             
     | 
| 
       475 
542 
     | 
    
         
             
              end
         
     | 
| 
       476 
     | 
    
         
            -
             
     | 
| 
      
 543 
     | 
    
         
            +
              
         
     | 
| 
       477 
544 
     | 
    
         
             
              def to_s(colour: false, indent: 0)
         
     | 
| 
       478 
545 
     | 
    
         | 
| 
       479 
546 
     | 
    
         
             
                h = @h.clone    
         
     | 
| 
       480 
547 
     | 
    
         
             
                #h.delete :macro
         
     | 
| 
       481 
     | 
    
         
            -
                @s =  
     | 
| 
      
 548 
     | 
    
         
            +
                @s = @label
         
     | 
| 
       482 
549 
     | 
    
         
             
                operator = @h[:is_or_condition] ? 'OR' : 'AND'
         
     | 
| 
       483 
550 
     | 
    
         
             
                constraints = @constraints.map \
         
     | 
| 
       484 
551 
     | 
    
         
             
                    {|x| '  ' * indent + x.to_summary(colour: colour)}.join(" %s " % operator)    
         
     | 
| 
         @@ -489,7 +556,18 @@ class IfConditionAction < Action 
     | 
|
| 
       489 
556 
     | 
    
         
             
                out << s + constraints
         
     | 
| 
       490 
557 
     | 
    
         
             
                out.join("\n")
         
     | 
| 
       491 
558 
     | 
    
         | 
| 
       492 
     | 
    
         
            -
              end 
     | 
| 
      
 559 
     | 
    
         
            +
              end   
         
     | 
| 
      
 560 
     | 
    
         
            +
                  
         
     | 
| 
      
 561 
     | 
    
         
            +
            end
         
     | 
| 
      
 562 
     | 
    
         
            +
             
     | 
| 
      
 563 
     | 
    
         
            +
            class IfConditionAction < IfAction
         
     | 
| 
      
 564 
     | 
    
         
            +
             
     | 
| 
      
 565 
     | 
    
         
            +
              def initialize(obj=nil)
         
     | 
| 
      
 566 
     | 
    
         
            +
             
     | 
| 
      
 567 
     | 
    
         
            +
                @label = 'If '
         
     | 
| 
      
 568 
     | 
    
         
            +
                super(obj)
         
     | 
| 
      
 569 
     | 
    
         
            +
                
         
     | 
| 
      
 570 
     | 
    
         
            +
              end
         
     | 
| 
       493 
571 
     | 
    
         | 
| 
       494 
572 
     | 
    
         
             
            end
         
     | 
| 
       495 
573 
     | 
    
         | 
| 
         @@ -537,41 +615,15 @@ class ElseAction < Action 
     | 
|
| 
       537 
615 
     | 
    
         | 
| 
       538 
616 
     | 
    
         
             
            end
         
     | 
| 
       539 
617 
     | 
    
         | 
| 
       540 
     | 
    
         
            -
            class ElseIfConditionAction <  
     | 
| 
      
 618 
     | 
    
         
            +
            class ElseIfConditionAction < IfAction
         
     | 
| 
       541 
619 
     | 
    
         | 
| 
       542 
     | 
    
         
            -
              def initialize( 
     | 
| 
       543 
     | 
    
         
            -
             
     | 
| 
       544 
     | 
    
         
            -
                options = {
         
     | 
| 
       545 
     | 
    
         
            -
                  constraint_list: ''
         
     | 
| 
       546 
     | 
    
         
            -
                }
         
     | 
| 
       547 
     | 
    
         
            -
             
     | 
| 
       548 
     | 
    
         
            -
                super(options.merge h)
         
     | 
| 
       549 
     | 
    
         
            -
                @label = 'Else If '
         
     | 
| 
      
 620 
     | 
    
         
            +
              def initialize(obj=nil)
         
     | 
| 
       550 
621 
     | 
    
         | 
| 
       551 
     | 
    
         
            -
             
     | 
| 
       552 
     | 
    
         
            -
             
     | 
| 
       553 
     | 
    
         
            -
              def to_s(colour: false, indent: 0)
         
     | 
| 
       554 
     | 
    
         
            -
                
         
     | 
| 
       555 
     | 
    
         
            -
                h = @h.clone    
         
     | 
| 
       556 
     | 
    
         
            -
                h.delete :macro
         
     | 
| 
       557 
     | 
    
         
            -
                @s = 'Else If '
         
     | 
| 
       558 
     | 
    
         
            -
                operator = @h[:is_or_condition] ? 'OR' : 'AND'
         
     | 
| 
       559 
     | 
    
         
            -
                constraints = @constraints.map \
         
     | 
| 
       560 
     | 
    
         
            -
                    {|x| '  ' * indent + x.to_summary(colour: colour)}.join(" %s " % operator)    
         
     | 
| 
       561 
     | 
    
         
            -
                
         
     | 
| 
       562 
     | 
    
         
            -
                out = []
         
     | 
| 
       563 
     | 
    
         
            -
                out << "; %s" % @h[:comment] if @h[:comment]
         
     | 
| 
       564 
     | 
    
         
            -
                s = @s.lines.map {|x| ('  ' * indent) + x}.join
         
     | 
| 
       565 
     | 
    
         
            -
                out << s + constraints
         
     | 
| 
       566 
     | 
    
         
            -
                out.join("\n")
         
     | 
| 
      
 622 
     | 
    
         
            +
                @label = 'Else If '    
         
     | 
| 
      
 623 
     | 
    
         
            +
                super(obj)
         
     | 
| 
       567 
624 
     | 
    
         | 
| 
       568 
     | 
    
         
            -
              end    
         
     | 
| 
       569 
     | 
    
         
            -
              
         
     | 
| 
       570 
     | 
    
         
            -
              def to_summary(colour: false)
         
     | 
| 
       571 
     | 
    
         
            -
                'foo'
         
     | 
| 
       572 
625 
     | 
    
         
             
              end
         
     | 
| 
       573 
     | 
    
         
            -
             
     | 
| 
       574 
     | 
    
         
            -
             
     | 
| 
      
 626 
     | 
    
         
            +
              
         
     | 
| 
       575 
627 
     | 
    
         
             
            end
         
     | 
| 
       576 
628 
     | 
    
         | 
| 
       577 
629 
     | 
    
         | 
| 
         @@ -709,6 +761,9 @@ class SetHotspotAction < ConnectivityAction 
     | 
|
| 
       709 
761 
     | 
    
         | 
| 
       710 
762 
     | 
    
         
             
              def initialize(h={})
         
     | 
| 
       711 
763 
     | 
    
         | 
| 
      
 764 
     | 
    
         
            +
                # to-do: check when *disable hotspot*, is the 
         
     | 
| 
      
 765 
     | 
    
         
            +
                #        *enable wifi* option selected?
         
     | 
| 
      
 766 
     | 
    
         
            +
                
         
     | 
| 
       712 
767 
     | 
    
         
             
                options = {
         
     | 
| 
       713 
768 
     | 
    
         
             
                  device_name: "", state: 0, turn_wifi_on: true, use_legacy_mechanism: false, mechanism: 0
         
     | 
| 
       714 
769 
     | 
    
         | 
| 
         @@ -719,8 +774,15 @@ class SetHotspotAction < ConnectivityAction 
     | 
|
| 
       719 
774 
     | 
    
         
             
              end
         
     | 
| 
       720 
775 
     | 
    
         | 
| 
       721 
776 
     | 
    
         
             
              def to_s(colour: false, indent: 0)
         
     | 
| 
       722 
     | 
    
         
            -
                 
     | 
| 
       723 
     | 
    
         
            -
                 
     | 
| 
      
 777 
     | 
    
         
            +
                
         
     | 
| 
      
 778 
     | 
    
         
            +
                @s =  "%s HotSpot" % [@h[:state] == 0 ? 'Enable' : 'Disable']
         
     | 
| 
      
 779 
     | 
    
         
            +
                
         
     | 
| 
      
 780 
     | 
    
         
            +
                if @h[:state] == 1 then
         
     | 
| 
      
 781 
     | 
    
         
            +
                  @s += "\n" + (@h[:turn_wifi_on] ? 'Enable WiFi' : 'Don\'t Enable Wifi')
         
     | 
| 
      
 782 
     | 
    
         
            +
                end
         
     | 
| 
      
 783 
     | 
    
         
            +
                
         
     | 
| 
      
 784 
     | 
    
         
            +
                super()
         
     | 
| 
      
 785 
     | 
    
         
            +
                
         
     | 
| 
       724 
786 
     | 
    
         
             
              end
         
     | 
| 
       725 
787 
     | 
    
         
             
            end
         
     | 
| 
       726 
788 
     | 
    
         | 
| 
         @@ -1644,6 +1706,51 @@ class ConfirmNextAction < Action 
     | 
|
| 
       1644 
1706 
     | 
    
         | 
| 
       1645 
1707 
     | 
    
         
             
            end
         
     | 
| 
       1646 
1708 
     | 
    
         | 
| 
      
 1709 
     | 
    
         
            +
            class DisableMacroAction < Action
         
     | 
| 
      
 1710 
     | 
    
         
            +
              
         
     | 
| 
      
 1711 
     | 
    
         
            +
              def initialize(obj=nil)
         
     | 
| 
      
 1712 
     | 
    
         
            +
                
         
     | 
| 
      
 1713 
     | 
    
         
            +
                h = if obj.is_a? Hash then
         
     | 
| 
      
 1714 
     | 
    
         
            +
                
         
     | 
| 
      
 1715 
     | 
    
         
            +
                  obj
         
     | 
| 
      
 1716 
     | 
    
         
            +
                  
         
     | 
| 
      
 1717 
     | 
    
         
            +
                elsif obj.is_a? Array
         
     | 
| 
      
 1718 
     | 
    
         
            +
                  
         
     | 
| 
      
 1719 
     | 
    
         
            +
                  e, macro, h2 = obj
         
     | 
| 
      
 1720 
     | 
    
         
            +
                  
         
     | 
| 
      
 1721 
     | 
    
         
            +
                  # find the macro guid for the given name
         
     | 
| 
      
 1722 
     | 
    
         
            +
                  name = e.text('item/description').to_s
         
     | 
| 
      
 1723 
     | 
    
         
            +
                  found = macro.parent.macros.find {|macro| macro.title =~ /#{name}/ }
         
     | 
| 
      
 1724 
     | 
    
         
            +
                  
         
     | 
| 
      
 1725 
     | 
    
         
            +
                  h3 = if found then     
         
     | 
| 
      
 1726 
     | 
    
         
            +
                    {macro_name: found.title, GUID: found.guid}
         
     | 
| 
      
 1727 
     | 
    
         
            +
                  else
         
     | 
| 
      
 1728 
     | 
    
         
            +
                    {macro_name: name}
         
     | 
| 
      
 1729 
     | 
    
         
            +
                  end
         
     | 
| 
      
 1730 
     | 
    
         
            +
                  
         
     | 
| 
      
 1731 
     | 
    
         
            +
                  h3.merge h2
         
     | 
| 
      
 1732 
     | 
    
         
            +
             
     | 
| 
      
 1733 
     | 
    
         
            +
                end      
         
     | 
| 
      
 1734 
     | 
    
         
            +
                
         
     | 
| 
      
 1735 
     | 
    
         
            +
                # state: 0 = enable, 1 = disable, 2 = toggle
         
     | 
| 
      
 1736 
     | 
    
         
            +
                
         
     | 
| 
      
 1737 
     | 
    
         
            +
                options = {macro_name: "Change brightness", state: 1, GUID: nil}
         
     | 
| 
      
 1738 
     | 
    
         
            +
                super(options.merge h)
         
     | 
| 
      
 1739 
     | 
    
         
            +
                
         
     | 
| 
      
 1740 
     | 
    
         
            +
              end  
         
     | 
| 
      
 1741 
     | 
    
         
            +
              
         
     | 
| 
      
 1742 
     | 
    
         
            +
              def to_s(colour: false, indent: 0)
         
     | 
| 
      
 1743 
     | 
    
         
            +
                
         
     | 
| 
      
 1744 
     | 
    
         
            +
                state = %w(Enable Disable Toggle)[@h[:state]]
         
     | 
| 
      
 1745 
     | 
    
         
            +
                @s = state + ' macro'# + @h.inspect
         
     | 
| 
      
 1746 
     | 
    
         
            +
                @s += "\n" + @h[:macro_name]
         
     | 
| 
      
 1747 
     | 
    
         
            +
                super()
         
     | 
| 
      
 1748 
     | 
    
         
            +
                
         
     | 
| 
      
 1749 
     | 
    
         
            +
              end
         
     | 
| 
      
 1750 
     | 
    
         
            +
              
         
     | 
| 
      
 1751 
     | 
    
         
            +
              alias to_summary to_s
         
     | 
| 
      
 1752 
     | 
    
         
            +
            end
         
     | 
| 
      
 1753 
     | 
    
         
            +
             
     | 
| 
       1647 
1754 
     | 
    
         
             
            # MacroDroid Specific
         
     | 
| 
       1648 
1755 
     | 
    
         
             
            #
         
     | 
| 
       1649 
1756 
     | 
    
         
             
            class ExportMacrosAction < Action
         
     | 
| 
         @@ -1810,7 +1917,7 @@ class PauseAction < Action 
     | 
|
| 
       1810 
1917 
     | 
    
         
             
                options = {
         
     | 
| 
       1811 
1918 
     | 
    
         
             
                  delay_in_milli_seconds: 0, delay_in_seconds: 1, use_alarm: false
         
     | 
| 
       1812 
1919 
     | 
    
         
             
                }
         
     | 
| 
       1813 
     | 
    
         
            -
                super(h)
         
     | 
| 
      
 1920 
     | 
    
         
            +
                super(options.merge h)
         
     | 
| 
       1814 
1921 
     | 
    
         | 
| 
       1815 
1922 
     | 
    
         
             
              end  
         
     | 
| 
       1816 
1923 
     | 
    
         |