ruby-macrodroid 0.9.15 → 0.9.20

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: 3ee2f540a744e2a309b3e4306a3f75c9ac3f437ebb9907d6f98cc39ea9b873fb
4
- data.tar.gz: 1f8f909bcd280c7fabe301d8cbb3c8535d56901bb7986224cc0d046cccb3b61b
3
+ metadata.gz: 02dafd5344cb49f34bc7314f958114e9ae1a2cf90a6f1361db5cfd9359817041
4
+ data.tar.gz: f84c673798a7d7feea32b9c10f6dfa217b12f89488c318dd31cb5abd35957276
5
5
  SHA512:
6
- metadata.gz: 045fb9a42206777def57c23a89ec1aaccb2dac969b44f2b0fc388885e14a7ce8c1a6f093451237dcbfe8e2287cc3395033506853da6dca94706e368704df66ae
7
- data.tar.gz: fc65220be3fd9e7265b6bfcdf194735c831e02fcb3b6c8e158d6e24cde83cbbbcfbb1547cd4932a0a96ba79f552d9134690dc1e91fdd0405751a6d6c41e382f9
6
+ metadata.gz: 91032bb5d4742e57d702ee1634f1dd99197acb86e75f299a451b486275ae7ef20f1e58c7f3dc992d022d8d5b6b3c0e48c58d58fcc154eeb25ff6752a9bf28301
7
+ data.tar.gz: b33532780734f52cda1f52b957084d7d4c5d445e76ca4394a3549fce3aa3f70ebbd398e88fe4dd7dfe59c2179313019146c6be142eecd441fe03d1aad7254719
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -36,18 +36,24 @@ APPS = {
36
36
  'AutoBoy' => 'com.happyconz.blackbox',
37
37
  'Amazon Alexa' => 'com.amazon.dee.app',
38
38
  'Brave' => 'com.brave.browser',
39
- 'Camera' => 'com.google.android.camera',
39
+ 'Camera' => 'com.mediatek.camera',
40
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',
41
44
  'File Manager' => 'com.alphainventor.filemanager',
42
45
  'Firefox' => 'org.mozilla.firefox',
43
46
  'Google Chrome' => 'com.google.android.chrome',
47
+ 'Google Calendar' => 'com.google.android.calendar',
44
48
  'Chrome' => 'com.google.android.chrome',
49
+ 'Earth' => 'com.google.earth',
45
50
  'Google Home' => 'com.google.android.apps.chromecast.app',
46
51
  'Google Play Music' => 'com.google.android.music',
47
52
  'MacroDroid' => 'com.arlosoft.macrodroid',
48
53
  'QuickEdit Text Editor Pro' => 'com.rhmsoft.edit.pro',
49
54
  'QR & Barcode Reader' => 'com.teacapps.barcodescanner',
50
- 'Settings' => 'com.google.android.settings',
55
+ 'Settings' => 'com.android.settings',
56
+ 'Chrome' => 'com.google.android.street',
51
57
  'tinyCam PRO' => 'com.alexvas.dvr.pro',
52
58
  'Tor Browser' => 'org.torproject.torbrowser',
53
59
  'VLC' => 'org.videolan.vlc',
@@ -99,20 +105,29 @@ end
99
105
  class LaunchActivityAction < ApplicationAction
100
106
 
101
107
  def initialize(h={})
102
-
108
+
109
+ # option 0 is by application name, 1 is launch by package name
110
+ #
103
111
  options = {
104
112
  application_name: 'Chrome',
105
113
  package_to_launch: 'com.android.chrome',
106
114
  exclude_from_recents: false,
107
- start_new: false
115
+ start_new: false,
116
+ option: 0,
117
+ launch_by_package_name: ''
108
118
  }
109
119
 
110
120
  super(options.merge h)
121
+
122
+ @list = %w(option launchByPackageName)
111
123
 
112
124
  end
113
125
 
114
126
  def to_s(colour: false, indent: 0)
115
- 'Launch ' + @h[:application_name]
127
+ option = @h[:option] == 0 ? @h[:application_name] : \
128
+ @h[:launch_by_package_name]
129
+ @s = 'Launch ' + option
130
+ super()
116
131
  end
117
132
 
118
133
  end
@@ -143,13 +158,30 @@ end
143
158
  #
144
159
  class LaunchShortcutAction < ApplicationAction
145
160
 
146
- 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
147
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
148
178
  options = {
149
179
  :app_name=>"Amazon Alexa", :intent_encoded=>"", :name=>"Ask Alexa"
150
180
  }
151
181
 
152
182
  super(options.merge h)
183
+
184
+ #@list = %w(appName intentEncoded name)
153
185
 
154
186
  end
155
187
 
@@ -174,17 +206,17 @@ class OpenWebPageAction < ApplicationAction
174
206
 
175
207
  def initialize(obj={}, macro=nil)
176
208
 
177
- $debug = false
209
+ $debug = true
178
210
  puts ('obj: ' + obj.inspect).debug if $debug
179
211
 
180
212
  h = if obj.is_a? Hash then
181
213
 
182
- obj.merge({macro: macro})
214
+ obj.merge({macro: macro}) #unless obj and obj[:macro]
183
215
 
184
216
  elsif obj.is_a? Array
185
217
 
186
218
  puts ('obj: ' + obj.inspect).debug if $debug
187
- e, macro = obj
219
+ e, macro, h3 = obj
188
220
 
189
221
  a = e.xpath('item/*')
190
222
 
@@ -205,7 +237,7 @@ class OpenWebPageAction < ApplicationAction
205
237
  {url: (txt || e.text)}
206
238
  end
207
239
 
208
- h2.merge(macro: macro)
240
+ h2.merge(macro: macro).merge(h3)
209
241
 
210
242
  end
211
243
 
@@ -243,6 +275,7 @@ class OpenWebPageAction < ApplicationAction
243
275
  h[:macro].title.downcase.gsub(/ +/,'-')
244
276
 
245
277
  end
278
+ puts 'url: ' + url.inspect if $debug
246
279
 
247
280
  if h2 then
248
281
 
@@ -266,7 +299,8 @@ class OpenWebPageAction < ApplicationAction
266
299
  end
267
300
 
268
301
  def to_s(colour: false, indent: 0)
269
- @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]
270
304
  super()
271
305
  end
272
306
 
@@ -402,6 +436,61 @@ class TakePictureAction < CameraAction
402
436
  end
403
437
 
404
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
+
405
494
  # Conditions/Loops
406
495
  #
407
496
  class IfConfirmedThenAction < Action
@@ -708,7 +797,7 @@ class SetAirplaneModeAction < ConnectivityAction
708
797
 
709
798
  state = ['On', 'Off', 'Toggle'][@h[:state]]
710
799
  @s = 'Airplane Mode ' + state
711
- super(colour: colour)
800
+ super()
712
801
 
713
802
  end
714
803
 
@@ -730,34 +819,20 @@ class SetWifiAction < ConnectivityAction
730
819
 
731
820
  end
732
821
 
733
- def to_s(colour: false, indent: 0)
734
- action = @h[:state] == 0 ? 'Enable' : 'Disable'
735
- 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()
736
832
  end
737
833
 
738
834
  end
739
835
 
740
- # Category: Connectivity
741
- #
742
- class SetBluetoothAction < ConnectivityAction
743
-
744
- def initialize(h={})
745
-
746
- options = {
747
- device_name: '',
748
- state: 0
749
- }
750
-
751
- super(options.merge h)
752
-
753
- end
754
-
755
- def to_s(colour: false, indent: 0)
756
- 'SetBluetoothAction ' + @h.inspect
757
- end
758
-
759
- alias to_summary to_s
760
- end
761
836
 
762
837
  # Category: Connectivity
763
838
  #
@@ -766,6 +841,8 @@ class SetBluetoothAction < ConnectivityAction
766
841
  def initialize(h={})
767
842
 
768
843
  options = {
844
+
845
+ device_address: '',
769
846
  device_name: '',
770
847
  state: 1
771
848
  }
@@ -775,7 +852,21 @@ class SetBluetoothAction < ConnectivityAction
775
852
  end
776
853
 
777
854
  def to_s(colour: false, indent: 0)
778
- '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
+
779
870
  end
780
871
 
781
872
  alias to_summary to_s
@@ -985,8 +1076,15 @@ end
985
1076
  #
986
1077
  class ClipboardAction < DeviceAction
987
1078
 
988
- def initialize(h={})
1079
+ def initialize(obj=nil)
989
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
+
990
1088
  options = {
991
1089
  clipboard_text: ''
992
1090
  }
@@ -1066,14 +1164,60 @@ end
1066
1164
  #
1067
1165
  class UIInteractionAction < DeviceAction
1068
1166
 
1069
- def initialize(h={})
1167
+ def initialize(obj=nil)
1070
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
+
1071
1212
  options = {
1072
1213
  ui_interaction_configuration: {:type=>"Copy"},
1073
1214
  action: 2
1074
1215
  }
1075
1216
 
1076
- super(options.merge h)
1217
+
1218
+ super(options.merge h)
1219
+
1220
+ @list = %w(uiInteractionConfiguration action xyPoint textContent clickOption type longClick)
1077
1221
 
1078
1222
  end
1079
1223
 
@@ -1113,7 +1257,8 @@ class UIInteractionAction < DeviceAction
1113
1257
  "Gesture [%s]" % detail
1114
1258
  end
1115
1259
 
1116
- 'UI Interaction' + "\n " + s #+ ' ' + @h.inspect
1260
+ @s = 'UI Interaction' + "\n" + s #+ ' ' + @h.inspect
1261
+ super()
1117
1262
  end
1118
1263
 
1119
1264
  alias to_summary to_s
@@ -1133,7 +1278,10 @@ class VoiceSearchAction < DeviceAction
1133
1278
  end
1134
1279
 
1135
1280
  def to_s(colour: false, indent: 0)
1136
- 'VoiceSearchAction ' + @h.inspect
1281
+
1282
+ @s = 'Voice Search' # + @h.inspect
1283
+ super()
1284
+
1137
1285
  end
1138
1286
 
1139
1287
  alias to_summary to_s
@@ -1275,7 +1423,11 @@ class SetAutoRotateAction < DeviceSettingsAction
1275
1423
  end
1276
1424
 
1277
1425
  def to_s(colour: false, indent: 0)
1278
- 'SetAutoRotateAction ' + @h.inspect
1426
+
1427
+ #'SetAutoRotateAction ' + @h.inspect
1428
+ @s = 'Auto Rotate ' + %w(On Off Toggle)[@h[:state]]
1429
+ super()
1430
+
1279
1431
  end
1280
1432
 
1281
1433
  alias to_summary to_s
@@ -2061,7 +2213,7 @@ class ControlMediaAction < MediaAction
2061
2213
  obj
2062
2214
  elsif obj.is_a? Array
2063
2215
 
2064
- e, macro = obj
2216
+ e, macro, h2 = obj
2065
2217
  s = e.text('item/description').to_s
2066
2218
  app = s[/Simulate Media Button \(([^\)]+)/,1]
2067
2219
 
@@ -2070,18 +2222,21 @@ class ControlMediaAction < MediaAction
2070
2222
  {
2071
2223
  application_name: app, package_name: APPS[app],
2072
2224
  simulate_media_button: true
2073
- }
2225
+ }.merge h2
2074
2226
 
2075
2227
  else
2076
- {}
2228
+ {
2229
+ send_media_player_commands: true,
2230
+ simulate_media_button: false
2231
+ }
2077
2232
  end
2078
- end
2233
+ end
2234
+ #puts 'h: ' + h.inspect
2079
2235
 
2080
2236
  options = {
2081
- application_name: "Google Play Music", option: "Play/Pause",
2082
- package_name: "com.google.android.music",
2083
- send_media_player_commands: false,
2084
- simulate_media_button: true,
2237
+ option: "Play/Pause",
2238
+ send_media_player_commands: true,
2239
+ simulate_media_button: false,
2085
2240
  }
2086
2241
 
2087
2242
  super(options.merge h)
@@ -2094,6 +2249,8 @@ class ControlMediaAction < MediaAction
2094
2249
 
2095
2250
  if @h[:simulate_media_button] then
2096
2251
  @s += "\nSimulate Media Button (%s)" % @h[:application_name]
2252
+ else
2253
+ @s += "\nSimulate Audio Button"
2097
2254
  end
2098
2255
 
2099
2256
  super()
@@ -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,16 +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
- app = APPS[application] || 'com.android.' + application.downcase.split()\
138
- .join('.')
139
- h = {
140
- application_name: application,
141
- package_to_launch: app
142
- }
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
+
143
221
  [LaunchActivityAction, h]
144
222
 
145
223
  end
@@ -157,6 +235,19 @@ class ActionsNlp
157
235
 
158
236
  end
159
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
+
160
251
  # e.g. webhook entered_kitchen
161
252
  #
162
253
  get /(?:webhook|HTTP GET) ([^$]+)$/i do |s|
@@ -164,6 +255,10 @@ class ActionsNlp
164
255
  [OpenWebPageAction, {key => s}]
165
256
  end
166
257
 
258
+ get /(https?:\/\/[^$]+)$/i do |url|
259
+ [OpenWebPageAction, {url_to_open: url}]
260
+ end
261
+
167
262
  #
168
263
  get /^WebHook \(Url\)/i do
169
264
  [OpenWebPageAction, {}]
@@ -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)
@@ -215,6 +215,10 @@ class PowerButtonToggleTrigger < Trigger
215
215
  super(options.merge h)
216
216
 
217
217
  end
218
+
219
+ def match?(detail={}, model=nil)
220
+ @h[:num_toggles] == detail[:num_toggles].to_i
221
+ end
218
222
 
219
223
  def to_s(colour: false)
220
224
  "Power Button Toggle (%s)" % @h[:num_toggles] #+ @h.inspect
@@ -19,10 +19,14 @@ class TriggersNlp
19
19
 
20
20
  # -- Battery/Power ---------------------------------------------
21
21
 
22
- get /Power Button Toggle \((\d)\)/i do |num|
22
+ get /^Power Button Toggle \((\d)\)/i do |num|
23
23
  [PowerButtonToggleTrigger, {num_toggles: num.to_i}]
24
24
  end
25
25
 
26
+ get /^Power Button (\d) times$/i do |num|
27
+ [PowerButtonToggleTrigger, {num_toggles: num.to_i}]
28
+ end
29
+
26
30
  get /^Power Connected: (Wired \([^\)]+\))/i do |s|
27
31
 
28
32
  h = {
@@ -67,6 +71,8 @@ class TriggersNlp
67
71
  [WifiConnectionTrigger, {}]
68
72
  end
69
73
 
74
+
75
+
70
76
  # -- Device Events ----------------------------------------------------
71
77
 
72
78
  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.15
4
+ version: 0.9.20
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-22 00:00:00.000000000 Z
38
+ date: 2020-10-30 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: glw
metadata.gz.sig CHANGED
Binary file