ruby-macrodroid 0.6.0 → 0.7.0
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 +179 -51
- metadata +31 -11
- 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: f4d111f7d953dba3eeb6940e3e1f31af4410765fbd4c739de9b53c0d84bac137
|
4
|
+
data.tar.gz: 2d8a574b96647abb40194e3885f38153e1de3b50d3f8f86541698b766981f9d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5184ff198c42f2e75dbfd232a9b5e7ef18bd37e0484aa697983f9cf950e0811659cbdc6936d1b5f622f719de1b8bee9ba7c10c5ec22e06be5aac34530ed5d4a2
|
7
|
+
data.tar.gz: 8f3020868a714825f8e06a04b461761039048e86ecbc22cd70413cbf860bfebb4b61d9c10315530037d1248dcfc3dc8d2d0ccb7be62fe25a625a5045c3a2bade
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/ruby-macrodroid.rb
CHANGED
@@ -2,8 +2,114 @@
|
|
2
2
|
|
3
3
|
# file: ruby-macrodroid.rb
|
4
4
|
|
5
|
-
|
5
|
+
# This file contains the following classes:
|
6
|
+
#
|
7
|
+
# ## Nlp classes
|
8
|
+
#
|
9
|
+
# TriggersNlp ActionsNlp ConstraintsNlp
|
10
|
+
#
|
11
|
+
#
|
12
|
+
# ## Macro class
|
13
|
+
#
|
14
|
+
# Macro
|
15
|
+
#
|
16
|
+
#
|
17
|
+
# ## Error class
|
18
|
+
#
|
19
|
+
# MacroDroidError
|
20
|
+
#
|
21
|
+
#
|
22
|
+
# ## Droid class
|
23
|
+
#
|
24
|
+
# MacroDroid
|
25
|
+
#
|
26
|
+
#
|
27
|
+
# ## Map class
|
28
|
+
#
|
29
|
+
# GeofenceMap
|
30
|
+
#
|
31
|
+
#
|
32
|
+
# ## Object class
|
33
|
+
#
|
34
|
+
# MacroObject
|
35
|
+
#
|
36
|
+
#
|
37
|
+
# ## Trigger classes
|
38
|
+
#
|
39
|
+
# Trigger WebHookTrigger WifiConnectionTrigger
|
40
|
+
# ApplicationInstalledRemovedTrigger ApplicationLaunchedTrigger
|
41
|
+
# BatteryLevelTrigger BatteryTemperatureTrigger PowerButtonToggleTrigger
|
42
|
+
# ExternalPowerTrigger CallActiveTrigger IncomingCallTrigger
|
43
|
+
# OutgoingCallTrigger CallEndedTrigger CallMissedTrigger IncomingSMSTrigger
|
44
|
+
# WebHookTrigger WifiConnectionTrigger BluetoothTrigger HeadphonesTrigger
|
45
|
+
# SignalOnOffTrigger UsbDeviceConnectionTrigger WifiSSIDTrigger
|
46
|
+
# CalendarTrigger TimerTrigger StopwatchTrigger DayTrigger
|
47
|
+
# RegularIntervalTrigger DeviceEventsTrigger AirplaneModeTrigger
|
48
|
+
# AutoSyncChangeTrigger DayDreamTrigger DockTrigger FailedLoginTrigger
|
49
|
+
# GPSEnabledTrigger MusicPlayingTrigger DeviceUnlockedTrigger
|
50
|
+
# AutoRotateChangeTrigger ClipboardChangeTrigger BootTrigger
|
51
|
+
# IntentReceivedTrigger NotificationTrigger ScreenOnOffTrigger
|
52
|
+
# SilentModeTrigger WeatherTrigger GeofenceTrigger SunriseSunsetTrigger
|
53
|
+
# SensorsTrigger ActivityRecognitionTrigger ProximityTrigger
|
54
|
+
# ShakeDeviceTrigger FlipDeviceTrigger OrientationTrigger
|
55
|
+
# FloatingButtonTrigger ShortcutTrigger VolumeButtonTrigger
|
56
|
+
# MediaButtonPressedTrigger SwipeTrigger
|
57
|
+
#
|
58
|
+
#
|
59
|
+
# ## Action classes
|
60
|
+
#
|
61
|
+
# Action LocationAction ShareLocationAction ApplicationAction
|
62
|
+
# LaunchActivityAction KillBackgroundAppAction OpenWebPageAction CameraAction
|
63
|
+
# UploadPhotoAction TakePictureAction ConnectivityAction SetWifiAction
|
64
|
+
# SetBluetoothAction SetBluetoothAction SendIntentAction DateTimeAction
|
65
|
+
# SetAlarmClockAction StopWatchAction SayTimeAction DeviceAction
|
66
|
+
# AndroidShortcutsAction ClipboardAction PressBackAction SpeakTextAction
|
67
|
+
# UIInteractionAction VoiceSearchAction DeviceSettingsAction
|
68
|
+
# ExpandCollapseStatusBarAction LaunchHomeScreenAction CameraFlashLightAction
|
69
|
+
# VibrateAction SetAutoRotateAction DayDreamAction SetKeyboardAction
|
70
|
+
# SetKeyguardAction CarModeAction ChangeKeyboardAction SetWallpaperAction
|
71
|
+
# FileAction OpenFileAction LocationAction ForceLocationUpdateAction
|
72
|
+
# ShareLocationAction SetLocationUpdateRateAction LoggingAction
|
73
|
+
# AddCalendarEntryAction LogAction ClearLogAction MediaAction
|
74
|
+
# RecordMicrophoneAction PlaySoundAction MessagingAction SendEmailAction
|
75
|
+
# SendSMSAction UDPCommandAction NotificationsAction ClearNotificationsAction
|
76
|
+
# MessageDialogAction AllowLEDNotificationLightAction
|
77
|
+
# SetNotificationSoundAction SetNotificationSoundAction
|
78
|
+
# SetNotificationSoundAction NotificationAction ToastAction PhoneAction
|
79
|
+
# AnswerCallAction ClearCallLogAction OpenCallLogAction RejectCallAction
|
80
|
+
# MakeCallAction SetRingtoneAction ScreenAction SetBrightnessAction
|
81
|
+
# ForceScreenRotationAction ScreenOnAction DimScreenAction KeepAwakeAction
|
82
|
+
# SetScreenTimeoutAction VolumeAction SilentModeVibrateOffAction
|
83
|
+
# SetVibrateAction VolumeIncrementDecrementAction SpeakerPhoneAction
|
84
|
+
# SetVolumeAction
|
85
|
+
#
|
86
|
+
#
|
87
|
+
# ## Constraint classes
|
88
|
+
#
|
89
|
+
# Constraint TimeOfDayConstraint BatteryLevelConstraint
|
90
|
+
# BatterySaverStateConstraint BatteryTemperatureConstraint
|
91
|
+
# ExternalPowerConstraint BluetoothConstraint GPSEnabledConstraint
|
92
|
+
# LocationModeConstraint SignalOnOffConstraint WifiConstraint
|
93
|
+
# CellTowerConstraint IsRoamingConstraint DataOnOffConstraint
|
94
|
+
# WifiHotSpotConstraint CalendarConstraint DayOfWeekConstraint
|
95
|
+
# TimeOfDayConstraint DayOfMonthConstraint MonthOfYearConstraint
|
96
|
+
# SunsetSunriseConstraint AirplaneModeConstraint AutoRotateConstraint
|
97
|
+
# DeviceLockedConstraint RoamingOnOffConstraint TimeSinceBootConstraint
|
98
|
+
# AutoSyncConstraint NFCStateConstraint IsRootedConstraint VpnConstraint
|
99
|
+
# MacroEnabledConstraint ModeConstraint TriggerThatInvokedConstraint
|
100
|
+
# LastRunTimeConstraint HeadphonesConnectionConstraint MusicActiveConstraint
|
101
|
+
# NotificationPresentConstraint PriorityModeConstraint
|
102
|
+
# NotificationVolumeConstraint InCallConstraint PhoneRingingConstraint
|
103
|
+
# BrightnessConstraint VolumeConstraint SpeakerPhoneConstraint
|
104
|
+
# DarkThemeConstraint ScreenOnOffConstraint VolumeLevelConstraint
|
105
|
+
# FaceUpDownConstraint LightLevelConstraint DeviceOrientationConstraint
|
106
|
+
# ProximitySensorConstraint
|
107
|
+
|
108
|
+
|
109
|
+
|
6
110
|
require 'yaml'
|
111
|
+
require 'rowx'
|
112
|
+
require 'uuid'
|
7
113
|
require 'glw'
|
8
114
|
require 'geozone'
|
9
115
|
require 'rxfhelper'
|
@@ -68,6 +174,11 @@ class TriggersNlp
|
|
68
174
|
[GeofenceTrigger, {name: name, enter_area: enter_area}]
|
69
175
|
end
|
70
176
|
|
177
|
+
get /^location (entered|exited) \(([^\)]+)/i do |direction, name|
|
178
|
+
enter_area = direction.downcase.to_sym == :entered
|
179
|
+
[GeofenceTrigger, {name: name, enter_area: enter_area}]
|
180
|
+
end
|
181
|
+
|
71
182
|
end
|
72
183
|
|
73
184
|
alias find_trigger run_route
|
@@ -153,6 +264,12 @@ class ActionsNlp
|
|
153
264
|
[OpenWebPageAction, url_to_open: url]
|
154
265
|
|
155
266
|
end
|
267
|
+
|
268
|
+
# e.g. webhook entered_kitchen
|
269
|
+
#
|
270
|
+
get /webhook|HTTP GET/i do
|
271
|
+
[OpenWebPageAction, {}]
|
272
|
+
end
|
156
273
|
|
157
274
|
|
158
275
|
end
|
@@ -337,19 +454,20 @@ class Macro
|
|
337
454
|
end
|
338
455
|
|
339
456
|
def import_xml(node)
|
340
|
-
|
457
|
+
|
341
458
|
if @debug then
|
342
459
|
puts 'inside Macro#import_xml'
|
343
460
|
puts 'node: ' + node.xml.inspect
|
344
461
|
end
|
345
462
|
|
346
|
-
@title = node.attributes[:name]
|
347
|
-
@description = node.attributes[:description]
|
348
|
-
|
349
463
|
if node.element('triggers') then
|
350
|
-
|
464
|
+
|
351
465
|
# level 2
|
352
466
|
|
467
|
+
@title = node.attributes[:name]
|
468
|
+
@description = node.attributes[:description]
|
469
|
+
|
470
|
+
|
353
471
|
# get all the triggers
|
354
472
|
@triggers = node.xpath('triggers/*').map do |e|
|
355
473
|
|
@@ -385,6 +503,12 @@ class Macro
|
|
385
503
|
|
386
504
|
# Level 1
|
387
505
|
|
506
|
+
puts 'import_xml: inside level 1' if @debug
|
507
|
+
|
508
|
+
@title = node.text('macro') || node.attributes[:name]
|
509
|
+
|
510
|
+
#@description = node.attributes[:description]
|
511
|
+
|
388
512
|
tp = TriggersNlp.new
|
389
513
|
|
390
514
|
@triggers = node.xpath('trigger').map do |e|
|
@@ -403,11 +527,21 @@ class Macro
|
|
403
527
|
|
404
528
|
@actions = node.xpath('action').map do |e|
|
405
529
|
|
530
|
+
puts 'action e: ' + e.xml.inspect if @debug
|
406
531
|
r = ap.find_action e.text
|
407
532
|
puts 'found action ' + r.inspect if @debug
|
408
533
|
|
409
534
|
if r then
|
410
|
-
|
535
|
+
|
536
|
+
a = e.xpath('item/*')
|
537
|
+
|
538
|
+
h = if a.any? then
|
539
|
+
a.map {|node| [node.name.to_sym, node.text.to_s]}.to_h
|
540
|
+
else
|
541
|
+
{}
|
542
|
+
end
|
543
|
+
|
544
|
+
r[0].new(r[1].merge(h))
|
411
545
|
end
|
412
546
|
|
413
547
|
end
|
@@ -570,15 +704,21 @@ class MacroDroid
|
|
570
704
|
|
571
705
|
puts 's: ' + s.inspect if @debug
|
572
706
|
|
573
|
-
|
574
|
-
|
575
|
-
|
707
|
+
if s =~ /m(?:acro)?:\s/ then
|
708
|
+
|
709
|
+
puts 'before RowX.new' if @debug
|
710
|
+
|
711
|
+
s2 = s.gsub(/^m:/,'macro:').gsub(/^t:/,'trigger:')\
|
712
|
+
.gsub(/^a:/,'action:').gsub(/^c:/,'constraint:')
|
713
|
+
xml = RowX.new(s2.gsub(/^#.*/,'')).to_xml
|
714
|
+
import_rowxml(xml)
|
576
715
|
elsif s =~ /^# /
|
577
|
-
pc_to_xml(s)
|
716
|
+
xml = pc_to_xml(s)
|
717
|
+
import_xml(xml)
|
578
718
|
else
|
579
719
|
raise MacroDroidError, 'invalid input'
|
580
720
|
end
|
581
|
-
|
721
|
+
|
582
722
|
@h = build_h
|
583
723
|
|
584
724
|
|
@@ -690,9 +830,28 @@ class MacroDroid
|
|
690
830
|
|
691
831
|
end
|
692
832
|
|
833
|
+
def import_rowxml(raws)
|
834
|
+
|
835
|
+
s = RXFHelper.read(raws).first
|
836
|
+
puts 's: ' + s.inspect if $debug
|
837
|
+
doc = Rexle.new(s)
|
838
|
+
puts 'after doc' if $debug
|
839
|
+
|
840
|
+
@macros = doc.root.xpath('item').map do |node|
|
841
|
+
|
842
|
+
Macro.new.import_xml(node)
|
843
|
+
|
844
|
+
end
|
845
|
+
|
846
|
+
end
|
847
|
+
|
693
848
|
def import_xml(raws)
|
694
849
|
|
695
|
-
|
850
|
+
if @debug then
|
851
|
+
puts 'inside import_xml'
|
852
|
+
|
853
|
+
puts 'raws: ' + raws.inspect
|
854
|
+
end
|
696
855
|
s = RXFHelper.read(raws).first
|
697
856
|
puts 's: ' + s.inspect if @debug
|
698
857
|
doc = Rexle.new(s)
|
@@ -700,14 +859,10 @@ class MacroDroid
|
|
700
859
|
if @debug then
|
701
860
|
puts 'doc: ' + doc.root.xml
|
702
861
|
end
|
703
|
-
|
704
|
-
debug = @debug
|
705
|
-
|
862
|
+
|
706
863
|
@macros = doc.root.xpath('macro').map do |node|
|
707
864
|
|
708
|
-
|
709
|
-
macro.import_xml(node)
|
710
|
-
macro
|
865
|
+
Macro.new.import_xml(node)
|
711
866
|
|
712
867
|
end
|
713
868
|
end
|
@@ -732,36 +887,7 @@ class MacroDroid
|
|
732
887
|
doc = Rexle.new([:macros, {}, '', *macros])
|
733
888
|
doc.root.xml pretty: true
|
734
889
|
|
735
|
-
end
|
736
|
-
|
737
|
-
def text_to_xml(s)
|
738
|
-
|
739
|
-
a = s.split(/.*(?=^m:)/)
|
740
|
-
puts 'a : ' + a.inspect if @debug
|
741
|
-
a.map!(&:chomp)
|
742
|
-
|
743
|
-
macros = a.map do |x|
|
744
|
-
|
745
|
-
lines = x.lines
|
746
|
-
puts 'lines: ' + lines.inspect if @debug
|
747
|
-
|
748
|
-
name = lines.shift[/^m: +(.*)/,1]
|
749
|
-
h = {t: [], a: [], c: []}
|
750
|
-
|
751
|
-
lines.each {|line| h[line[0].to_sym] << line[/^\w: +(.*)/,1] }
|
752
|
-
triggers = h[:t].map {|text| [:trigger, {}, text]}
|
753
|
-
actions = h[:a].map {|text| [:action, {}, text]}
|
754
|
-
constraints = h[:c].map {|text| [:constraint, {}, text]}
|
755
|
-
|
756
|
-
[:macro, {name: name},'', *triggers, *actions, *constraints]
|
757
|
-
|
758
|
-
end
|
759
|
-
|
760
|
-
doc = Rexle.new([:macros, {}, '', *macros])
|
761
|
-
doc.root.xml pretty: true
|
762
|
-
|
763
|
-
end
|
764
|
-
|
890
|
+
end
|
765
891
|
|
766
892
|
end
|
767
893
|
|
@@ -2117,6 +2243,8 @@ end
|
|
2117
2243
|
class OpenWebPageAction < ApplicationAction
|
2118
2244
|
|
2119
2245
|
def initialize(h={})
|
2246
|
+
|
2247
|
+
h[:url_to_open] = h[:url] if h[:url]
|
2120
2248
|
|
2121
2249
|
options = {
|
2122
2250
|
variable_to_save_response: {:m_stringValue=>"", :m_name=>"", :m_decimalValue=>0.0, :isLocal=>true, :m_booleanValue=>false, :excludeFromLog=>false, :m_intValue=>0, :m_type=>2},
|
@@ -2126,12 +2254,12 @@ class OpenWebPageAction < ApplicationAction
|
|
2126
2254
|
block_next_action: false
|
2127
2255
|
}
|
2128
2256
|
|
2129
|
-
super(options.merge h)
|
2257
|
+
super(options.merge filter(options,h))
|
2130
2258
|
|
2131
2259
|
end
|
2132
2260
|
|
2133
2261
|
def to_s()
|
2134
|
-
|
2262
|
+
"HTTP GET\n url: " + @h[:url_to_open]
|
2135
2263
|
end
|
2136
2264
|
|
2137
2265
|
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.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -35,8 +35,28 @@ cert_chain:
|
|
35
35
|
NZ2kdBIUDnAM24e0/wXdVxg4HnsZbdymxyzMQ4P5pKYcpI6oisBxI37p/Xy+wAg3
|
36
36
|
SBHno3GEuuD8ZWj24IMJpfbp
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2020-09-
|
38
|
+
date: 2020-09-05 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
|
+
- !ruby/object:Gem::Dependency
|
41
|
+
name: glw
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0.2'
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 0.2.2
|
50
|
+
type: :runtime
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "~>"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0.2'
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 0.2.2
|
40
60
|
- !ruby/object:Gem::Dependency
|
41
61
|
name: uuid
|
42
62
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,25 +78,25 @@ dependencies:
|
|
58
78
|
- !ruby/object:Gem::Version
|
59
79
|
version: 2.3.9
|
60
80
|
- !ruby/object:Gem::Dependency
|
61
|
-
name:
|
81
|
+
name: rowx
|
62
82
|
requirement: !ruby/object:Gem::Requirement
|
63
83
|
requirements:
|
64
|
-
- - "~>"
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
version: '0.2'
|
67
84
|
- - ">="
|
68
85
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0.
|
86
|
+
version: 0.7.0
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.7'
|
70
90
|
type: :runtime
|
71
91
|
prerelease: false
|
72
92
|
version_requirements: !ruby/object:Gem::Requirement
|
73
93
|
requirements:
|
74
|
-
- - "~>"
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: '0.2'
|
77
94
|
- - ">="
|
78
95
|
- !ruby/object:Gem::Version
|
79
|
-
version: 0.
|
96
|
+
version: 0.7.0
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0.7'
|
80
100
|
- !ruby/object:Gem::Dependency
|
81
101
|
name: geozone
|
82
102
|
requirement: !ruby/object:Gem::Requirement
|
metadata.gz.sig
CHANGED
Binary file
|