ruby-macrodroid 0.9.8 → 0.9.13

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.
@@ -61,6 +61,7 @@ class Trigger < MacroObject
61
61
  {|x| 'c: ' + x.to_summary(colour: colour, indent: 1)}.join(" %s " % operator)
62
62
 
63
63
  @constraints.any? ? @s + "\n" + constraints : @s
64
+ super()
64
65
 
65
66
  end
66
67
 
@@ -85,7 +86,7 @@ end
85
86
  # ["Any Network"]
86
87
  # ["some Wifi SSID"] - 1 or more SSID can be supplied
87
88
 
88
- class WifiConnectionTrigger < Trigger
89
+ class WifiConnectionTrigger2 < Trigger
89
90
 
90
91
  def initialize(h={})
91
92
 
@@ -216,7 +217,7 @@ class PowerButtonToggleTrigger < Trigger
216
217
  end
217
218
 
218
219
  def to_s(colour: false)
219
- 'PowerButtonToggleTrigger ' + @h.inspect
220
+ "Power Button Toggle (%s)" % @h[:num_toggles] #+ @h.inspect
220
221
  end
221
222
 
222
223
  alias to_summary to_s
@@ -457,7 +458,7 @@ class WebHookTrigger < Trigger
457
458
 
458
459
  url = "https://trigger.macrodroid.com/%s/%s" % \
459
460
  [@deviceid, @h[:identifier]]
460
- @s = 'WebHook (Url)' + "\n " + url
461
+ @s = 'WebHook (Url)' + "\n" + url
461
462
  super()
462
463
 
463
464
  end
@@ -469,8 +470,15 @@ end
469
470
  #
470
471
  class WifiConnectionTrigger < Trigger
471
472
 
472
- def initialize(h={})
473
+ def initialize(obj=nil)
473
474
 
475
+ h = if obj.is_a? Hash then
476
+ obj
477
+ elsif obj.is_a? Array
478
+ e, macro = obj
479
+ {ssid_list: [e.text('item/description').to_s], wifi_state: 2}
480
+ end
481
+
474
482
  options = {
475
483
  ssid_list: [],
476
484
  wifi_state: 0
@@ -482,10 +490,15 @@ class WifiConnectionTrigger < Trigger
482
490
 
483
491
  def to_s(colour: false)
484
492
  access_point = @h[:ssid_list].first
485
- 'Connected to network ' + access_point
493
+ @s = 'Connected to network'
494
+ @s += "\n" + access_point
495
+ super()
486
496
  end
487
497
 
488
- alias to_summary to_s
498
+ def to_summary()
499
+ access_point = @h[:ssid_list].first
500
+ 'Connected to network' + access_point
501
+ end
489
502
  end
490
503
 
491
504
  # Category: Connectivity
@@ -1010,7 +1023,7 @@ class MusicPlayingTrigger < DeviceEventsTrigger
1010
1023
  def to_s(colour: false)
1011
1024
 
1012
1025
  event = @h[:option] == 0 ? 'Started' : 'Stopped'
1013
- @s = 'Music/Sound Playing' + "\n %s" % event #+ @h.inspect
1026
+ @s = 'Music/Sound Playing' + "\n%s" % event #+ @h.inspect
1014
1027
  super()
1015
1028
 
1016
1029
  end
@@ -1026,8 +1039,15 @@ end
1026
1039
  #
1027
1040
  class NFCTrigger < DeviceEventsTrigger
1028
1041
 
1029
- def initialize(h={})
1030
-
1042
+ def initialize(obj=nil)
1043
+
1044
+ h = if obj.is_a? Hash then
1045
+ obj
1046
+ elsif obj.is_a? Array
1047
+ e, macro = obj
1048
+ {tag_name: e.text('item/description').to_s}
1049
+ end
1050
+
1031
1051
  options = {
1032
1052
  }
1033
1053
 
@@ -1367,8 +1387,24 @@ end
1367
1387
  #
1368
1388
  class ActivityRecognitionTrigger < SensorsTrigger
1369
1389
 
1370
- def initialize(h={})
1371
-
1390
+ def initialize(obj=nil)
1391
+
1392
+ #puts 'obj: ' + obj.inspect
1393
+
1394
+ h = if obj.is_a? Hash then
1395
+
1396
+ obj
1397
+
1398
+ elsif obj.is_a? Array
1399
+
1400
+ e, macro, h2 = obj
1401
+ #puts 'h2: ' + h2.inspect
1402
+ #puts 'e: ' + e.xml
1403
+ s = e.text('item/description').to_s
1404
+ #puts 's: ' + s.inspect
1405
+ {confidence_level: s[/\d+%$/].to_i}.merge h2
1406
+ end
1407
+
1372
1408
  options = {
1373
1409
  confidence_level: 50,
1374
1410
  selected_index: 1
@@ -1381,8 +1417,13 @@ class ActivityRecognitionTrigger < SensorsTrigger
1381
1417
  end
1382
1418
 
1383
1419
  def to_s(colour: false)
1420
+
1384
1421
  activity = @activity[@h[:selected_index]]
1385
- 'Activity - ' + activity
1422
+ @s = 'Activity - ' + activity #+ @h.inspect
1423
+ @s += "\nConfidence >= %s%%" % @h[:confidence_level]
1424
+
1425
+ super()
1426
+
1386
1427
  end
1387
1428
 
1388
1429
  def to_summary(colour: false)
@@ -1577,7 +1618,7 @@ class ShortcutTrigger < Trigger
1577
1618
  end
1578
1619
 
1579
1620
  def to_s(colour: false)
1580
- 'ShortcutTrigger ' + @h.inspect
1621
+ 'Shortcut Launched' #+ @h.inspect
1581
1622
  end
1582
1623
 
1583
1624
  alias to_summary to_s
@@ -1633,8 +1674,15 @@ end
1633
1674
  #
1634
1675
  class MediaButtonPressedTrigger < Trigger
1635
1676
 
1636
- def initialize(h={})
1677
+ def initialize(obj=nil)
1637
1678
 
1679
+ h = if obj.is_a? Hash then
1680
+ obj
1681
+ elsif obj.is_a? Array
1682
+ e, macro = obj
1683
+ {option: e.text('item/description').to_s}
1684
+ end
1685
+
1638
1686
  options = {
1639
1687
  option: 'Single Press',
1640
1688
  cancel_press: false
@@ -1645,7 +1693,50 @@ class MediaButtonPressedTrigger < Trigger
1645
1693
  end
1646
1694
 
1647
1695
  def to_s(colour: false)
1648
- 'MediaButtonPressedTrigger ' + @h.inspect
1696
+
1697
+ @s = 'Media Button Pressed ' #+ @h.inspect
1698
+ @s += "\n" + @h[:option]
1699
+ super()
1700
+
1701
+ end
1702
+
1703
+ alias to_summary to_s
1704
+ end
1705
+
1706
+ class MediaButtonV2Trigger < Trigger
1707
+
1708
+ def initialize(obj=nil)
1709
+
1710
+ @a = %w(Play Play/Pause Pause Stop Previous Next Headset Hook)
1711
+
1712
+ h = if obj.is_a? Hash then
1713
+ obj
1714
+ elsif obj.is_a? Array
1715
+ e, macro = obj
1716
+ s = e.text('item/description').to_s
1717
+ a = s.split(/, /)
1718
+ {options_enabled_array: @a.map {|x| a.include? x } }
1719
+ end
1720
+
1721
+
1722
+
1723
+ options = {
1724
+ options_enabled_array: [true, false, false, false, false, false, false]
1725
+ }
1726
+
1727
+ super(options.merge h)
1728
+
1729
+ end
1730
+
1731
+ def to_s(colour: false)
1732
+
1733
+
1734
+ options = @a.zip(@h[:options_enabled_array]).select(&:last).map(&:first)
1735
+
1736
+ @s = 'Media Button V2 ' #+ @h.inspect
1737
+ @s += "\n" + options.join(', ')
1738
+ super()
1739
+
1649
1740
  end
1650
1741
 
1651
1742
  alias to_summary to_s
@@ -1655,8 +1746,22 @@ end
1655
1746
  #
1656
1747
  class SwipeTrigger < Trigger
1657
1748
 
1658
- def initialize(h={})
1659
-
1749
+ def initialize(obj=nil)
1750
+
1751
+ h = if obj.is_a? Hash then
1752
+ obj
1753
+ elsif obj.is_a? Array
1754
+
1755
+ e, macro = obj
1756
+ s = e.text('item/description').to_s
1757
+ start, motion = s.split(/ - /,2)
1758
+
1759
+ {
1760
+ swipe_start_area: ['Top Left', 'Top Right'].index(start),
1761
+ swipe_motion: %w(Across Diagonal Down).index(motion)
1762
+ }
1763
+ end
1764
+
1660
1765
  options = {
1661
1766
  swipe_start_area: 0,
1662
1767
  swipe_motion: 0,
@@ -1668,7 +1773,12 @@ class SwipeTrigger < Trigger
1668
1773
  end
1669
1774
 
1670
1775
  def to_s(colour: false)
1671
- 'SwipeTrigger ' + @h.inspect
1776
+
1777
+ direction = [['Top Left', 'Top Right'][@h[:swipe_start_area]],
1778
+ %w(Across Diagonal Down)[@h[:swipe_motion]]].join(' - ')
1779
+ @s = 'Swipe Screen'# + @h.inspect
1780
+ @s += "\n" + direction
1781
+ super()
1672
1782
  end
1673
1783
 
1674
1784
  alias to_summary to_s
@@ -0,0 +1,199 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # file: triggersnlp.rb
4
+
5
+
6
+ class TriggersNlp
7
+ include AppRoutes
8
+ using ColouredText
9
+
10
+ def initialize(macro=nil)
11
+
12
+ super()
13
+ params = {macro: macro}
14
+ triggers(params)
15
+
16
+ end
17
+
18
+ def triggers(params)
19
+
20
+ # -- Battery/Power ---------------------------------------------
21
+
22
+ get /Power Button Toggle \((\d)\)/i do |num|
23
+ [PowerButtonToggleTrigger, {num_toggles: num.to_i}]
24
+ end
25
+
26
+ get /^Power Connected: (Wired \([^\)]+\))/i do |s|
27
+
28
+ h = {
29
+ power_connected_options: [true, true, true],
30
+ has_set_usb_option: true,
31
+ power_connected: true
32
+ }
33
+
34
+ a = ['Wired (Fast Charge)', 'Wireless', 'Wired (Slow Charge)']
35
+
36
+ puts ('s: ' + s.inspect).debug
37
+
38
+ options = s.downcase.split(/ \+ /)
39
+ puts ('options: ' + options.inspect).debug
40
+
41
+ h[:power_connected_options] = a.map {|x| options.include? x.downcase }
42
+
43
+ [ExternalPowerTrigger, h]
44
+ end
45
+
46
+ get /^Power Connected: Any/i do |s|
47
+
48
+ h = {
49
+ power_connected_options: [true, true, true],
50
+ has_set_usb_option: true,
51
+ power_connected: true
52
+ }
53
+
54
+ [ExternalPowerTrigger, h]
55
+ end
56
+
57
+ # -- Connectivity ----------------------------------------------------
58
+ #
59
+
60
+ # Wifi State Change
61
+
62
+ get /^Connected to network (.*)$/i do |network|
63
+ [WifiConnectionTrigger, {ssid_list: [network], wifi_state: 2 }]
64
+ end
65
+
66
+ get /^Connected to network$/i do
67
+ [WifiConnectionTrigger, {}]
68
+ end
69
+
70
+ # -- Device Events ----------------------------------------------------
71
+
72
+ get /^NFC Tag$/i do |state|
73
+ [NFCTrigger, {}]
74
+ end
75
+
76
+ get /^Screen[ _](On|Off)/i do |state|
77
+ [ScreenOnOffTrigger, {screen_on: state.downcase == 'on'}]
78
+ end
79
+
80
+ # e.g. at 7:30pm daily
81
+ get /^(?:at )?(\d+:\d+(?:[ap]m)?) daily/i do |time, days|
82
+ [TimerTrigger, {time: time,
83
+ days: %w(Mon Tue Wed Thu Fri Sat Sun).join(', ')}]
84
+ end
85
+
86
+ get /^(?:at )?(\d+:\d+(?:[ap]m)?) (?:on )?(.*)/i do |time, days|
87
+ [TimerTrigger, {time: time, days: days}]
88
+ end
89
+
90
+ # time.is? 'at 18:30pm on Mon or Tue'
91
+ get /^time.is\? ['"](?:at )?(\d+:\d+(?:[ap]m)?) (?:on )?(.*)['"]/i do |time, days|
92
+ [TimerTrigger, {time: time, days: days.gsub(' or ',', ')}]
93
+ end
94
+
95
+ get /^shake[ _]device\??$/i do
96
+ [ShakeDeviceTrigger, {}]
97
+ end
98
+
99
+ get /^Flip Device (.*)$/i do |motion|
100
+ facedown = motion =~ /Face Up (?:->|to) Face Down/i
101
+ [FlipDeviceTrigger, {face_down: facedown }]
102
+ end
103
+
104
+ get /^flip_device_down\?$/i do
105
+ [FlipDeviceTrigger, {face_down: true }]
106
+ end
107
+
108
+ get /^flip_device_up\?$/i do
109
+ [FlipDeviceTrigger, {face_down: false }]
110
+ end
111
+
112
+ get /^Failed Login Attempt$/i do
113
+ [FailedLoginTrigger, {}]
114
+ end
115
+
116
+ get /^failed_login?$/i do
117
+ [FailedLoginTrigger, {}]
118
+ end
119
+
120
+ get /^Geofence (Entry|Exit) \(([^\)]+)/i do |direction, name|
121
+ enter_area = direction.downcase.to_sym == :entry
122
+ [GeofenceTrigger, {name: name, enter_area: enter_area}]
123
+ end
124
+
125
+ get /^location (entered|exited) \(([^\)]+)/i do |direction, name|
126
+ enter_area = direction.downcase.to_sym == :entered
127
+ [GeofenceTrigger, {name: name, enter_area: enter_area}]
128
+ end
129
+
130
+ # eg. Proximity Sensor (Near)
131
+ #
132
+ get /^Proximity Sensor \(([^\)]+)\)/i do |distance|
133
+
134
+ [ProximityTrigger, {distance: distance}]
135
+ end
136
+
137
+ # eg. Proximity near
138
+ #
139
+ get /^Proximity (near|far|slow wave|fast wave)/i do |distance|
140
+
141
+ [ProximityTrigger, {distance: distance}]
142
+ end
143
+
144
+ get /^WebHook \(Url\)/i do
145
+ [WebHookTrigger, params]
146
+ end
147
+
148
+ get /^WebHook/i do
149
+ [WebHookTrigger, params]
150
+ end
151
+
152
+ get /^wh/i do
153
+ [WebHookTrigger, params]
154
+ end
155
+
156
+ #-- MacroDroid specific ---------------------------------------------------------------
157
+
158
+ get /^EmptyTrigger$/i do
159
+ [EmptyTrigger, params]
160
+ end
161
+
162
+ #-- Sensors ---------------------------------------------------------------
163
+
164
+ get /^Activity - (.*)$/i do |s|
165
+
166
+ a = ['In Vehicle', 'On Bicycle', 'Running', 'Walking', 'Still']
167
+ r = a.find {|x| x.downcase == s.downcase}
168
+ h = r ? {selected_index: a.index(r)} : {}
169
+ [ActivityRecognitionTrigger , h]
170
+ end
171
+
172
+ # -- User Input ---------------------------------------------------------------
173
+
174
+ get /^Media Button Pressed$/i do
175
+ [MediaButtonPressedTrigger, {}]
176
+ end
177
+
178
+ get /^Media Button V2$/i do
179
+ [MediaButtonV2Trigger, {}]
180
+ end
181
+
182
+ get /^Shortcut Launched$/i do
183
+ [ShortcutTrigger, {}]
184
+ end
185
+
186
+ get /^Swipe Screen$/i do
187
+ [SwipeTrigger, {}]
188
+ end
189
+
190
+ end
191
+
192
+ alias find_trigger run_route
193
+
194
+ def to_s(colour: false)
195
+ 'TriggersNlp ' + @h.inspect
196
+ end
197
+
198
+ alias to_summary to_s
199
+ end
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.8
4
+ version: 0.9.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -35,7 +35,7 @@ cert_chain:
35
35
  NZ2kdBIUDnAM24e0/wXdVxg4HnsZbdymxyzMQ4P5pKYcpI6oisBxI37p/Xy+wAg3
36
36
  SBHno3GEuuD8ZWj24IMJpfbp
37
37
  -----END CERTIFICATE-----
38
- date: 2020-10-16 00:00:00.000000000 Z
38
+ date: 2020-10-20 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: glw
@@ -185,10 +185,13 @@ extra_rdoc_files: []
185
185
  files:
186
186
  - lib/ruby-macrodroid.rb
187
187
  - lib/ruby-macrodroid/actions.rb
188
+ - lib/ruby-macrodroid/actionsnlp.rb
188
189
  - lib/ruby-macrodroid/base.rb
189
190
  - lib/ruby-macrodroid/constraints.rb
191
+ - lib/ruby-macrodroid/constraintsnlp.rb
190
192
  - lib/ruby-macrodroid/macro.rb
191
193
  - lib/ruby-macrodroid/triggers.rb
194
+ - lib/ruby-macrodroid/triggersnlp.rb
192
195
  homepage: https://github.com/jrobertson/ruby-macrodroid
193
196
  licenses:
194
197
  - MIT