ruby-macrodroid 0.9.14 → 0.9.19

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d2421b1c983ef4223a4e461f70a37be3fa3d2200141ada22a535813b8b9ea94d
4
- data.tar.gz: cf6a20994ba0a24ca544a1b8bfb75ffab22b6022be1a1f71e4e73b3a344b39e7
3
+ metadata.gz: b5b0e328f9ba62c9217cfc9dcce286b3d450953d77eef32ba00c7fd1bf07d3d7
4
+ data.tar.gz: d8e6c46d8fc8b4a3185ab9b1a0da3a6937e1aabf43a152e6c238b1187455c0db
5
5
  SHA512:
6
- metadata.gz: b88c007520adab8bf80f1c0723d803ac2561092c450aee86f2d0e8e26a322646f15dc5df5d9419d1524f8339f0e85a332b603c65124bdb1eebf66b741ca7b1aa
7
- data.tar.gz: 9ab6f2170600df9813114f9513b1e490496db70a82d432c2e3a3bad2768a67dfe27d7bb0ce84a38c80e28bf4e3a26ed4f8e92f788b1a2bc4c23884fc816a3571
6
+ metadata.gz: 11f4918c738e8e42d78f0d5acc2b04994b45848d5d56010dc6c3f89f6c1a05ea24166cd95aaeca736a09d2b0990874cbdfdd8dba8f9548d999e5c50bae2e9dba
7
+ data.tar.gz: '09d9a30e0c8799ae2cb68acccc3d505a6f8cbe04a6206c28d0584e2b3f16b26b92b394ea24f137bfb576b8df5574a50aed3d32a09b03fe311e4427ddfab7bd3f'
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -32,6 +32,36 @@
32
32
  #
33
33
 
34
34
 
35
+ APPS = {
36
+ 'AutoBoy' => 'com.happyconz.blackbox',
37
+ 'Amazon Alexa' => 'com.amazon.dee.app',
38
+ 'Brave' => 'com.brave.browser',
39
+ 'Camera' => 'com.mediatek.camera',
40
+ 'Cast to TV' => 'cast.video.screenmirroring.casttotv',
41
+ 'Calculator' => 'com.android.pri.calculator',
42
+ 'Calendar' => 'com.google.android.calendar',
43
+ 'Clock' => 'com.android.deskclock',
44
+ 'File Manager' => 'com.alphainventor.filemanager',
45
+ 'Firefox' => 'org.mozilla.firefox',
46
+ 'Google Chrome' => 'com.google.android.chrome',
47
+ 'Google Calendar' => 'com.google.android.calendar',
48
+ 'Chrome' => 'com.google.android.chrome',
49
+ 'Earth' => 'com.google.earth',
50
+ 'Google Home' => 'com.google.android.apps.chromecast.app',
51
+ 'Google Play Music' => 'com.google.android.music',
52
+ 'MacroDroid' => 'com.arlosoft.macrodroid',
53
+ 'QuickEdit Text Editor Pro' => 'com.rhmsoft.edit.pro',
54
+ 'QR & Barcode Reader' => 'com.teacapps.barcodescanner',
55
+ 'Settings' => 'com.android.settings',
56
+ 'Chrome' => 'com.google.android.street',
57
+ 'tinyCam PRO' => 'com.alexvas.dvr.pro',
58
+ 'Tor Browser' => 'org.torproject.torbrowser',
59
+ 'VLC' => 'org.videolan.vlc',
60
+ 'WiFi FTP Server' => 'com.medhaapps.wififtpserver',
61
+ 'YouTube' => 'com.google.android.youtube'
62
+ }
63
+
64
+
35
65
  class Action < MacroObject
36
66
  using ColouredText
37
67
  using Params
@@ -75,20 +105,29 @@ end
75
105
  class LaunchActivityAction < ApplicationAction
76
106
 
77
107
  def initialize(h={})
78
-
108
+
109
+ # option 0 is by application name, 1 is launch by package name
110
+ #
79
111
  options = {
80
112
  application_name: 'Chrome',
81
113
  package_to_launch: 'com.android.chrome',
82
114
  exclude_from_recents: false,
83
- start_new: false
115
+ start_new: false,
116
+ option: 0,
117
+ launch_by_package_name: ''
84
118
  }
85
119
 
86
120
  super(options.merge h)
121
+
122
+ @list = %w(option launchByPackageName)
87
123
 
88
124
  end
89
125
 
90
126
  def to_s(colour: false, indent: 0)
91
- 'Launch ' + @h[:application_name]
127
+ option = @h[:option] == 0 ? @h[:application_name] : \
128
+ @h[:launch_by_package_name]
129
+ @s = 'Launch ' + option
130
+ super()
92
131
  end
93
132
 
94
133
  end
@@ -119,13 +158,30 @@ end
119
158
  #
120
159
  class LaunchShortcutAction < ApplicationAction
121
160
 
122
- def initialize(h={})
161
+ def initialize(obj=nil)
162
+
163
+ puts 'obj: ' + obj.inspect
164
+ h = if obj.is_a? Hash then
165
+ obj
166
+ else
167
+ obj[2] || {}
168
+ end
123
169
 
170
+ if h[:shortcut] and h[:shortcut] =~ /Ask Alexa/i then
171
+ h = {
172
+ :app_name=>"Amazon Alexa", :intent_encoded=>"#Intent;action=com." +
173
+ "amazon.alexa.action.WIDGET_SHORTCUT;launchFlags=0x10000000;" +
174
+ "component=com.amazon.dee.app/.ui.voice.LaunchAlexaActivity;end",
175
+ :name=>"Ask Alexa"
176
+ }
177
+ end
124
178
  options = {
125
179
  :app_name=>"Amazon Alexa", :intent_encoded=>"", :name=>"Ask Alexa"
126
180
  }
127
181
 
128
182
  super(options.merge h)
183
+
184
+ #@list = %w(appName intentEncoded name)
129
185
 
130
186
  end
131
187
 
@@ -150,17 +206,17 @@ class OpenWebPageAction < ApplicationAction
150
206
 
151
207
  def initialize(obj={}, macro=nil)
152
208
 
153
- $debug = false
209
+ $debug = true
154
210
  puts ('obj: ' + obj.inspect).debug if $debug
155
211
 
156
212
  h = if obj.is_a? Hash then
157
213
 
158
- obj.merge({macro: macro})
214
+ obj.merge({macro: macro}) #unless obj and obj[:macro]
159
215
 
160
216
  elsif obj.is_a? Array
161
217
 
162
218
  puts ('obj: ' + obj.inspect).debug if $debug
163
- e, macro = obj
219
+ e, macro, h3 = obj
164
220
 
165
221
  a = e.xpath('item/*')
166
222
 
@@ -181,7 +237,7 @@ class OpenWebPageAction < ApplicationAction
181
237
  {url: (txt || e.text)}
182
238
  end
183
239
 
184
- h2.merge(macro: macro)
240
+ h2.merge(macro: macro).merge(h3)
185
241
 
186
242
  end
187
243
 
@@ -219,6 +275,7 @@ class OpenWebPageAction < ApplicationAction
219
275
  h[:macro].title.downcase.gsub(/ +/,'-')
220
276
 
221
277
  end
278
+ puts 'url: ' + url.inspect if $debug
222
279
 
223
280
  if h2 then
224
281
 
@@ -242,7 +299,8 @@ class OpenWebPageAction < ApplicationAction
242
299
  end
243
300
 
244
301
  def to_s(colour: false, indent: 0)
245
- @s = "HTTP GET\nurl: " + @h[:url_to_open]
302
+ s = @h[:http_get] ? '' : 'Open Website / '
303
+ @s = s + "HTTP GET\nurl: " + @h[:url_to_open]
246
304
  super()
247
305
  end
248
306
 
@@ -378,6 +436,61 @@ class TakePictureAction < CameraAction
378
436
  end
379
437
 
380
438
 
439
+ class TakeScreenshotAction < CameraAction
440
+
441
+ def initialize(obj=nil)
442
+
443
+ h = if obj.is_a? Hash then
444
+ obj
445
+ elsif obj.is_a? Array
446
+
447
+ e, macro = obj
448
+
449
+ a = [
450
+ 'Save to device',
451
+ 'Send via email',
452
+ 'Share via intent'
453
+ ]
454
+
455
+ s = e.text('item/description').to_s
456
+ index = a.map(&:downcase).index s.downcase
457
+
458
+ {option: index}
459
+
460
+ end
461
+
462
+ options = {
463
+ option: 0,
464
+ use_smtp_email: false,
465
+ mechanism_option: 0,
466
+ save_to_jpeg: false
467
+ }
468
+
469
+ super(options.merge h)
470
+
471
+ end
472
+
473
+ def to_s(colour: false, indent: 0)
474
+
475
+ @s = 'Take Screenshot' #+ @h.inspect
476
+
477
+ options = [
478
+ 'Save to device',
479
+ 'Send via email',
480
+ 'Share via intent'
481
+ ]
482
+
483
+ option = options[@h[:option]]
484
+
485
+ @s += "\n" + option
486
+ super()
487
+
488
+ end
489
+
490
+ alias to_summary to_s
491
+ end
492
+
493
+
381
494
  # Conditions/Loops
382
495
  #
383
496
  class IfConfirmedThenAction < Action
@@ -684,7 +797,7 @@ class SetAirplaneModeAction < ConnectivityAction
684
797
 
685
798
  state = ['On', 'Off', 'Toggle'][@h[:state]]
686
799
  @s = 'Airplane Mode ' + state
687
- super(colour: colour)
800
+ super()
688
801
 
689
802
  end
690
803
 
@@ -706,34 +819,20 @@ class SetWifiAction < ConnectivityAction
706
819
 
707
820
  end
708
821
 
709
- def to_s(colour: false, indent: 0)
710
- action = @h[:state] == 0 ? 'Enable' : 'Disable'
711
- action + ' Wifi'
822
+ def to_s(colour: false, indent: 0)
823
+
824
+ @s = if @h[:state] <= 2 then
825
+ state = %w(Enable Disable Toggle)[@h[:state]]
826
+ state + ' Wifi'
827
+ else
828
+ "Connected to Network\n%s" % @h[:ssid]
829
+ end
830
+
831
+ super()
712
832
  end
713
833
 
714
834
  end
715
835
 
716
- # Category: Connectivity
717
- #
718
- class SetBluetoothAction < ConnectivityAction
719
-
720
- def initialize(h={})
721
-
722
- options = {
723
- device_name: '',
724
- state: 0
725
- }
726
-
727
- super(options.merge h)
728
-
729
- end
730
-
731
- def to_s(colour: false, indent: 0)
732
- 'SetBluetoothAction ' + @h.inspect
733
- end
734
-
735
- alias to_summary to_s
736
- end
737
836
 
738
837
  # Category: Connectivity
739
838
  #
@@ -742,6 +841,8 @@ class SetBluetoothAction < ConnectivityAction
742
841
  def initialize(h={})
743
842
 
744
843
  options = {
844
+
845
+ device_address: '',
745
846
  device_name: '',
746
847
  state: 1
747
848
  }
@@ -751,7 +852,21 @@ class SetBluetoothAction < ConnectivityAction
751
852
  end
752
853
 
753
854
  def to_s(colour: false, indent: 0)
754
- 'SetBluetoothAction ' + @h.inspect
855
+
856
+ @s = if @h[:state] <= 2 then
857
+
858
+ state = %w(Enable Disable Toggle)[@h[:state]]
859
+ state + ' Bluetooth'
860
+
861
+ else
862
+
863
+ state = @h[:state] == 3 ? 'Connect' : 'Disconnect'
864
+ state + ' Audio Device' + "\n" + @h[:device_name]
865
+
866
+ end
867
+
868
+ super()
869
+
755
870
  end
756
871
 
757
872
  alias to_summary to_s
@@ -961,8 +1076,15 @@ end
961
1076
  #
962
1077
  class ClipboardAction < DeviceAction
963
1078
 
964
- def initialize(h={})
1079
+ def initialize(obj=nil)
965
1080
 
1081
+ h = if obj.is_a? Hash then
1082
+ obj
1083
+ elsif obj.is_a? Array
1084
+ e, macro = obj
1085
+ {clipboard_text: e.text('item/description').to_s}
1086
+ end
1087
+
966
1088
  options = {
967
1089
  clipboard_text: ''
968
1090
  }
@@ -1042,14 +1164,60 @@ end
1042
1164
  #
1043
1165
  class UIInteractionAction < DeviceAction
1044
1166
 
1045
- def initialize(h={})
1167
+ def initialize(obj=nil)
1046
1168
 
1169
+ if obj.is_a? Hash then
1170
+ h = obj
1171
+ elsif obj.is_a? Array
1172
+
1173
+ e, macro = obj
1174
+ s = e.text('item/description').to_s
1175
+
1176
+ r = s.match(/^(Click|Long Click) \[(.*)\]$/)
1177
+
1178
+ # [Current focus] # Current focus
1179
+ # [0,0] # x,y location
1180
+ # [274,186] # Identify in app
1181
+ # [fooo] # Text content
1182
+
1183
+ h = {
1184
+ ui_interaction_configuration: {
1185
+ :xy_point=>{:x=>0, :y=>0},
1186
+ :type=>"Click"}
1187
+ }
1188
+ h2 = h[:ui_interaction_configuration]
1189
+
1190
+ if r then
1191
+
1192
+ h[:action] = 0
1193
+
1194
+ click, detail = r.captures
1195
+ h2[:long_click] = false if click.downcase.to_sym == :click
1196
+
1197
+ if detail == 'Current focus' then
1198
+ h2[:click_option] = 0
1199
+ elsif detail =~ /\d+,\d+/
1200
+ # to-do
1201
+ else
1202
+ # text content
1203
+ h2[:click_option] = 1
1204
+ h2[:text_content] = detail
1205
+ end
1206
+
1207
+ #h[:ui_interaction_configuration] = h2
1208
+ end
1209
+
1210
+ end
1211
+
1047
1212
  options = {
1048
1213
  ui_interaction_configuration: {:type=>"Copy"},
1049
1214
  action: 2
1050
1215
  }
1051
1216
 
1052
- super(options.merge h)
1217
+
1218
+ super(options.merge h)
1219
+
1220
+ @list = %w(uiInteractionConfiguration action xyPoint textContent clickOption type longClick)
1053
1221
 
1054
1222
  end
1055
1223
 
@@ -1089,7 +1257,8 @@ class UIInteractionAction < DeviceAction
1089
1257
  "Gesture [%s]" % detail
1090
1258
  end
1091
1259
 
1092
- 'UI Interaction' + "\n " + s #+ ' ' + @h.inspect
1260
+ @s = 'UI Interaction' + "\n" + s #+ ' ' + @h.inspect
1261
+ super()
1093
1262
  end
1094
1263
 
1095
1264
  alias to_summary to_s
@@ -1109,7 +1278,10 @@ class VoiceSearchAction < DeviceAction
1109
1278
  end
1110
1279
 
1111
1280
  def to_s(colour: false, indent: 0)
1112
- 'VoiceSearchAction ' + @h.inspect
1281
+
1282
+ @s = 'Voice Search' # + @h.inspect
1283
+ super()
1284
+
1113
1285
  end
1114
1286
 
1115
1287
  alias to_summary to_s
@@ -1251,7 +1423,11 @@ class SetAutoRotateAction < DeviceSettingsAction
1251
1423
  end
1252
1424
 
1253
1425
  def to_s(colour: false, indent: 0)
1254
- 'SetAutoRotateAction ' + @h.inspect
1426
+
1427
+ #'SetAutoRotateAction ' + @h.inspect
1428
+ @s = 'Auto Rotate ' + %w(On Off Toggle)[@h[:state]]
1429
+ super()
1430
+
1255
1431
  end
1256
1432
 
1257
1433
  alias to_summary to_s
@@ -2022,6 +2198,67 @@ end
2022
2198
 
2023
2199
  # Category: Media
2024
2200
  #
2201
+
2202
+
2203
+ # note: to find a package id from an App name, try searching for the name on
2204
+ # the Google Play Store and the id will be returned in the URL once the
2205
+ # correct app has been clicked. e.g.
2206
+ # https://play.google.com/store/apps/details?id=com.google.android.music
2207
+ #
2208
+ class ControlMediaAction < MediaAction
2209
+
2210
+ def initialize(obj=nil)
2211
+
2212
+ h = if obj.is_a? Hash then
2213
+ obj
2214
+ elsif obj.is_a? Array
2215
+
2216
+ e, macro, h2 = obj
2217
+ s = e.text('item/description').to_s
2218
+ app = s[/Simulate Media Button \(([^\)]+)/,1]
2219
+
2220
+ if app then
2221
+
2222
+ {
2223
+ application_name: app, package_name: APPS[app],
2224
+ simulate_media_button: true
2225
+ }.merge h2
2226
+
2227
+ else
2228
+ {
2229
+ send_media_player_commands: true,
2230
+ simulate_media_button: false
2231
+ }
2232
+ end
2233
+ end
2234
+ #puts 'h: ' + h.inspect
2235
+
2236
+ options = {
2237
+ option: "Play/Pause",
2238
+ send_media_player_commands: true,
2239
+ simulate_media_button: false,
2240
+ }
2241
+
2242
+ super(options.merge h)
2243
+
2244
+ end
2245
+
2246
+ def to_s(colour: false, indent: 0)
2247
+
2248
+ @s = 'Media ' + @h[:option] #+ @h.inspect
2249
+
2250
+ if @h[:simulate_media_button] then
2251
+ @s += "\nSimulate Media Button (%s)" % @h[:application_name]
2252
+ else
2253
+ @s += "\nSimulate Audio Button"
2254
+ end
2255
+
2256
+ super()
2257
+ end
2258
+
2259
+ alias to_summary to_s
2260
+ end
2261
+
2025
2262
  class RecordMicrophoneAction < MediaAction
2026
2263
 
2027
2264
  def initialize(h={})
@@ -41,6 +41,27 @@ class ActionsNlp
41
41
 
42
42
  # -- Connectivity ------------------------------------------------------
43
43
 
44
+ get /^Airplane Mode (On|Off|Toggle)/i do |state|
45
+
46
+ index = %w(on off toggle).index state.downcase
47
+ [SetAirplaneModeAction, {state: index }]
48
+
49
+ end
50
+
51
+ get /^(Enable|Disable|Toggle) Bluetooth/i do |state|
52
+
53
+ index = %w(enable disable toggle).index state.downcase
54
+ [SetBluetoothAction, {state: index }]
55
+
56
+ end
57
+
58
+ get /^(Connect|Disconnect) Audio Device/i do |state|
59
+
60
+ index = %w(connect disconnect).index(state.downcase) + 3
61
+ [SetBluetoothAction, {state: index }]
62
+
63
+ end
64
+
44
65
  get /^(Enable|Disable) HotSpot/i do |state|
45
66
  enable, state = if state.downcase == 'enable' then
46
67
  [true, 0]
@@ -50,6 +71,19 @@ class ActionsNlp
50
71
  [SetHotspotAction, {turn_wifi_on: enable, state: state }]
51
72
  end
52
73
 
74
+ get /^(Enable|Disable|Toggle) Wifi/i do |state|
75
+
76
+ index = %w(enable disable toggle).index state.downcase
77
+ [SetWifiAction, {state: index }]
78
+
79
+ end
80
+
81
+ get /^Connect to Network$/i do
82
+
83
+ [SetWifiAction, {state: 4 }]
84
+
85
+ end
86
+
53
87
  # e.g. message popup: hello world!
54
88
  get /^(?:message popup|popup message): (.*)/i do |msg|
55
89
  [ToastAction, {msg: msg}]
@@ -86,10 +120,15 @@ class ActionsNlp
86
120
 
87
121
  get /^take_picture/i do
88
122
  [TakePictureAction, {}]
89
- end
123
+ end
124
+
125
+ get /^Take Screenshot/i do
126
+ [TakeScreenshotAction, {}]
127
+ end
90
128
 
91
129
  # -- DEVICE ACTIONS ------------------------------------------------------
92
130
 
131
+ #
93
132
  get /^Speak text \(([^\)]+)\)/i do |text|
94
133
  [SpeakTextAction, {text: text}]
95
134
  end
@@ -100,7 +139,11 @@ class ActionsNlp
100
139
 
101
140
  get /^Speak text$/i do |text|
102
141
  [SpeakTextAction, {}]
103
- end
142
+ end
143
+
144
+ get /^UI Interaction$/i do
145
+ [UIInteractionAction, {}]
146
+ end
104
147
 
105
148
  get /^Vibrate \(([^\)]+)/i do |pattern|
106
149
  [VibrateAction, {pattern: pattern}]
@@ -109,6 +152,19 @@ class ActionsNlp
109
152
  get /^Vibrate$/i do |pattern|
110
153
  [VibrateAction, {pattern: 'short buzz'}]
111
154
  end
155
+
156
+ get /^Voice Search$/i do
157
+ [VoiceSearchAction, {}]
158
+ end
159
+
160
+ # -- Device settings ---------------------------------------
161
+
162
+ get /^Auto Rotate (On|Off|Toggle)$/i do |state|
163
+
164
+ a = %w(on off toggle)
165
+
166
+ [SetAutoRotateAction, {state: a.map(&:downcase).index(state.downcase)}]
167
+ end
112
168
 
113
169
  # e.g. Display Notification: Hi there: This is the body of the message
114
170
  get /^Display Notification: ([^:]+): [^$]+$/i do |subject, text|
@@ -123,6 +179,10 @@ class ActionsNlp
123
179
  [SetWifiAction, {state: state}]
124
180
 
125
181
  end
182
+
183
+ get /^Fill Clipboard$/i do
184
+ [ClipboardAction, {}]
185
+ end
126
186
 
127
187
  # e.g. Play: Altair
128
188
  get /^Play: (.*)$/i do |name|
@@ -130,14 +190,34 @@ class ActionsNlp
130
190
  [PlaySoundAction, {file_path: name}]
131
191
 
132
192
  end
193
+
194
+ get /^Launch Shortcut:? (?:Amazon|Ask) Alexa$/i do
195
+ [LaunchShortcutAction, {shortcut: 'Ask Alexa'}]
196
+ end
197
+
198
+ get /^Shortcut:? (?:Amazon|Ask) Alexa$/i do
199
+ [LaunchShortcutAction, {shortcut: 'Ask Alexa'}]
200
+ end
133
201
 
134
202
  # e.g. Launch Settings
135
- get /^Launch (.*)$/i do |application|
203
+ get /^Launch (.*)$/i do |s|
136
204
 
137
- h = {
138
- application_name: application,
139
- package_to_launch: 'com.android.' + application.downcase
140
- }
205
+ h = {}
206
+
207
+ if s[0] == '[' then
208
+
209
+ h[:launch_by_package_name] = s
210
+ h[:option] = 1
211
+
212
+ else
213
+ application = s
214
+ h[:application_name] = application
215
+ h[:package_to_launch] = APPS[application] || 'com.android.' +
216
+ application.downcase.split().join('.')
217
+ h[:option] = 0
218
+
219
+ end
220
+
141
221
  [LaunchActivityAction, h]
142
222
 
143
223
  end
@@ -155,6 +235,19 @@ class ActionsNlp
155
235
 
156
236
  end
157
237
 
238
+
239
+ get /^Open Website \/ HTTP GET$/i do
240
+
241
+ [OpenWebPageAction, {http_get: false}]
242
+
243
+ end
244
+
245
+ get /^(?:open|goto) ((?:https?:\/\/|\[lv=)[^$]+)$/i do |url|
246
+
247
+ [OpenWebPageAction, url_to_open: url, http_get: false]
248
+
249
+ end
250
+
158
251
  # e.g. webhook entered_kitchen
159
252
  #
160
253
  get /(?:webhook|HTTP GET) ([^$]+)$/i do |s|
@@ -238,6 +331,14 @@ class ActionsNlp
238
331
  [PauseAction, {delay_in_seconds: seconds.to_i}]
239
332
  end
240
333
 
334
+ ## -- Media -----------------------------------------
335
+ #
336
+ # options: Play/Pause, Previous, Next, Play, Pause, Stop
337
+ #
338
+ get /^Media ([^$]+)$/i do |option|
339
+ [ControlMediaAction, {option: option}]
340
+ end
341
+
241
342
  # -- Screen ------------------------------------------------
242
343
  #
243
344
  get /^Screen (On|Off)$/i do |state|
@@ -12,7 +12,7 @@ module ObjectX
12
12
 
13
13
  def action_to_object(ap, e, item, macro)
14
14
 
15
- debug = false
15
+ debug = true
16
16
 
17
17
  puts 'inside action_to_object: item.xml: ' + item.xml if debug
18
18
 
@@ -34,7 +34,7 @@ module ObjectX
34
34
  r = ap.find_action action
35
35
  puts 'r: ' + r.inspect if debug
36
36
 
37
- nested = description.element('item/description')
37
+ nested = description.element('item/*')
38
38
  puts 'nested: ' + nested.inspect if debug
39
39
 
40
40
  if r[1].any? and not nested then
@@ -195,6 +195,7 @@ class MacroObject
195
195
 
196
196
  end
197
197
 
198
+
198
199
  private
199
200
 
200
201
  def hashify(h)
@@ -67,6 +67,8 @@ class TriggersNlp
67
67
  [WifiConnectionTrigger, {}]
68
68
  end
69
69
 
70
+
71
+
70
72
  # -- Device Events ----------------------------------------------------
71
73
 
72
74
  get /^NFC Tag$/i do |state|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-macrodroid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.14
4
+ version: 0.9.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -11,31 +11,31 @@ cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTkxMDI3MjEyNDA0WhcN
15
- MjAxMDI2MjEyNDA0WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDGFPay
17
- XYuML5FESMa8WAbhZyaUhuUMxkOuMAQCEvZoB/aNyVE2Ho1yNLwzmJNO3t5ne7YO
18
- Q4kRP6/9r76ghiR43XJGhrMicgxL8QC3GmQtJl9KOSiAibzMcya+4hNjF99nqTKf
19
- 0IbVLz8omiskIbgMMxnLxx8hr4t1cUBW/PXkjufqtzTob+KQEESQeXkQYAjbnnME
20
- 0+x0LL8Bi1OiLVAK3b2rMzt8onNmSwvYvfPAXrBcTJczsUrCSgiGHkQYGyK8StnE
21
- 5NaCGOxXObiiyJ/PVEh+kn7R1y9C3Ugprf81qEWg6fsazlFl+JpyCdWphmo/J2Hd
22
- 7oXa+MxCrZRCRo3Z2Avz54tyXukyq4W5CWuceuucBG/vnAKSoqm69pWGhjhVFDzF
23
- BWxmV2iDrU06g+sWXVHWEGGQURyZBl/2ue0rzeaZYFEuLOTN9JRMMwqTNb9S6A0d
24
- nLhZkSiHCe7levTBK9tN1zRdqYXb/hj3iZpkIejYMRQaqxdX1sJcvqzijDcCAwEA
25
- AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUYKFwpZGg
26
- MIpWf2U87TzYBDvorjMwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjAxMDI2MjIxOTU3WhcN
15
+ MjExMDI2MjIxOTU3WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDoaG+o
17
+ lMHEAZHl1nsdoJXwq0LC+quj5tNVCWZh4YQbBElxPfqL/+37lEwiJm9DC2ITVit1
18
+ H/PAJipSJrOlnX5gBs2xZuKDChGBPLaquioK4ZyTNzMHNTEZiWz3NAGNO+bJuWQd
19
+ Ho9+C+/BhCgG85XbDrmFdEnYnep3qntkgB860+9NRQNQ53cFn8nBOfGSpvN3Fsqp
20
+ Ja7FyW59mlLkYccWZrVR+ZAdLYZQLNQ8yobSINKLOkXA9cqExF/pxMjxZpREM1S4
21
+ qY8Oo4YUw6I2TH3mUkACRdQMmyY/GRR0hDKAFwpsXajz+jmztQ3+dONsqPt+crJB
22
+ Mk7vSJbCXpVovljhSB3fAGOB0x9hd43AwijgkaW/8lm4N7jajalwXbckaV5C7nnS
23
+ uMDoU1TBdSKlP3f1VhFVdDBEh8KaqTzyrV8QvJKPirW8BrgpdXB7xYafHBXBSMxo
24
+ MiafxZoXRxY9cQc7UY9RjFLyKDipubSWhiHfHURnBYgNMJit0mdNGtVBpj8CAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUuSf+7NQJ
26
+ u1oQ39UyDRyono+FMTYwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
27
  c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
- BgkqhkiG9w0BAQsFAAOCAYEAiOFHbXd+U1P/j84TjNssAprjID/iexoPR482NaIg
29
- WVC6VldVyC2tOXEniZvtpsECzR7oLicY2+D4p6ZtYkeI6T19moSN8SFK/lPjHhh5
30
- ujRQBqFwiwInlkcZO6e36aNDhrEtocrZyE9KFkYb5ZUUOSJpPIm/+F+4u7R1o3TX
31
- gMkrwlIwKylTjbvBjqwrQ65JVHkGrzxOoN4GFo2WEMGyVgMtvCFosWg91dJNpkww
32
- RH5jzcCEVO3woUSruZQIk7WYAHiO/ucn4JcocSF/1yO5yDzuh6AODA5wr3kMywOY
33
- 5+DmfHEB/fXuwZtr6kjloq9MmQFSu+8rMSiVmrP9gzcl3zwXFVZjh4oy6QqQAITQ
34
- FvR4UThQs3/4aYBWPAwXUKrth1dV39dGFTX4VXOMqp/yEmBCOme8YMNaAu3M3hHL
35
- NZ2kdBIUDnAM24e0/wXdVxg4HnsZbdymxyzMQ4P5pKYcpI6oisBxI37p/Xy+wAg3
36
- SBHno3GEuuD8ZWj24IMJpfbp
28
+ BgkqhkiG9w0BAQsFAAOCAYEAcb48mw7R7DM/tkRsqJ3xARYEsqswd6RIcUEQlk+N
29
+ wl6h9Ep5XXZRiWkjl7LvIwixLsLYJpnr4HrJSMBJ3fOKWO19r+LgxS98BRnIR/ig
30
+ hkvDTENgc3rCM+1D40IDUVVNOITDO9sJgBGoFCPqySwvqD3k8ZBSsgEUvHCnX0mU
31
+ 7KPih5gG+3xgOKy+OYP9KT68nqJk0MOZa0wf+7Mdi0yfCQ35OWU6k4MLhVlPn3rs
32
+ KTWiZmv8DTY/GD7UmsU9PyWo4mRL/HStHKOJpayJ+hzdezD1gIKCViUJVQLaNpV4
33
+ a1xyM49vQ8wAk4hd+36Hs+te+24tUgisk5YF/m5/xHLPzCwU/dzghzyqurY1CcdZ
34
+ AP47l82yywwqaxpCXBvlpPZ81LOozzu7JOmr/ziys4ube7PbUYN6uiwfoE2/N8Ol
35
+ cu2W9lmvKJ505bT8+KLouVOtLlxYZknIB/uIea9r5rrGEJDMdYEYl4ZySFmkvJR4
36
+ tf7VMFcAy1q1HMyemsBUJk5h
37
37
  -----END CERTIFICATE-----
38
- date: 2020-10-21 00:00:00.000000000 Z
38
+ date: 2020-10-26 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: glw
metadata.gz.sig CHANGED
Binary file