ruby-macrodroid 0.5.1 → 0.5.2
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 +271 -30
- metadata +1 -1
- 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: 8b105d3fc8c1fe8e43ad4ea6b8b9018a26e376949c94c1623a11540ba8d5850c
|
4
|
+
data.tar.gz: 22b28e9b200b82fe6c048a0781845c032502c9b24e8ff566e455b8f2193d97f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c09be84265a4961e278e378c346a6152924848f3cf2a347aa3c52c2b87dab6711092c07be1dbb3820576e5779e73818c96b34958c1e2044edf29b24a973c5e35
|
7
|
+
data.tar.gz: 333fc854bc4ce0ff61b1921a971835a1f4d1f75d65ae8608de0990c710f5060ecc7bfedb0468baba7f575ca73b3df96e9036d93a64339ba0e08a73d9c9612ecc
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/ruby-macrodroid.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
# file: ruby-macrodroid.rb
|
4
4
|
|
5
5
|
require 'uuid'
|
6
|
+
require 'yaml'
|
6
7
|
require 'rxfhelper'
|
7
8
|
require 'chronic_cron'
|
8
9
|
|
@@ -30,7 +31,37 @@ class TriggersNlp
|
|
30
31
|
[TimerTrigger, {time: time, days: days}]
|
31
32
|
end
|
32
33
|
|
34
|
+
# time.is? 'at 18:30pm on Mon or Tue'
|
35
|
+
get /^time.is\? ['"](?:at )?(\d+:\d+(?:[ap]m)?) (?:on )?(.*)['"]/i do |time, days|
|
36
|
+
[TimerTrigger, {time: time, days: days.gsub(' or ',', ')}]
|
37
|
+
end
|
38
|
+
|
39
|
+
get /^shake[ _]device\??$/i do
|
40
|
+
[ShakeDeviceTrigger, {}]
|
41
|
+
end
|
42
|
+
|
43
|
+
get /^Flip Device (.*)$/i do |motion|
|
44
|
+
facedown = motion =~ /Face Up (?:->|to) Face Down/i
|
45
|
+
[FlipDeviceTrigger, {face_down: facedown }]
|
46
|
+
end
|
47
|
+
|
48
|
+
get /^flip_device_down\?$/i do
|
49
|
+
[FlipDeviceTrigger, {face_down: true }]
|
50
|
+
end
|
33
51
|
|
52
|
+
get /^flip_device_up\?$/i do
|
53
|
+
[FlipDeviceTrigger, {face_down: false }]
|
54
|
+
end
|
55
|
+
|
56
|
+
get /^Failed Login Attempt$/i do
|
57
|
+
[FailedLoginTrigger, {}]
|
58
|
+
end
|
59
|
+
|
60
|
+
get /^failed_login?$/i do
|
61
|
+
[FailedLoginTrigger, {}]
|
62
|
+
end
|
63
|
+
|
64
|
+
|
34
65
|
end
|
35
66
|
|
36
67
|
alias find_trigger run_route
|
@@ -54,9 +85,26 @@ class ActionsNlp
|
|
54
85
|
[ToastAction, {msg: msg}]
|
55
86
|
end
|
56
87
|
|
57
|
-
get /^Popup Message ['"][^'"]
|
88
|
+
get /^Popup[ _]Message ['"]([^'"]+)/i do |msg|
|
58
89
|
[ToastAction, {msg: msg}]
|
59
90
|
end
|
91
|
+
|
92
|
+
get /^say current[ _]time/i do
|
93
|
+
[SayTimeAction, {}]
|
94
|
+
end
|
95
|
+
|
96
|
+
get /^Torch :?(.*)/i do |onoffstate|
|
97
|
+
state = onoffstate.downcase == 'on' ? 0 : 1
|
98
|
+
[CameraFlashLightAction, {state: state}]
|
99
|
+
end
|
100
|
+
|
101
|
+
get /^Take Picture/i do
|
102
|
+
[TakePictureAction, {}]
|
103
|
+
end
|
104
|
+
|
105
|
+
get /^take_picture/i do
|
106
|
+
[TakePictureAction, {}]
|
107
|
+
end
|
60
108
|
|
61
109
|
end
|
62
110
|
|
@@ -145,7 +193,7 @@ class Macro
|
|
145
193
|
using Params
|
146
194
|
|
147
195
|
attr_reader :local_variables, :triggers, :actions, :constraints, :guid
|
148
|
-
attr_accessor :title
|
196
|
+
attr_accessor :title, :description
|
149
197
|
|
150
198
|
def initialize(name=nil, debug: false)
|
151
199
|
|
@@ -209,6 +257,7 @@ class Macro
|
|
209
257
|
end
|
210
258
|
|
211
259
|
@title = h[:name]
|
260
|
+
@description = h[:description]
|
212
261
|
|
213
262
|
# fetch the local variables
|
214
263
|
@local_variables = h['local_variables']
|
@@ -246,6 +295,7 @@ class Macro
|
|
246
295
|
end
|
247
296
|
|
248
297
|
@title = node.attributes[:name]
|
298
|
+
@description = node.attributes[:description]
|
249
299
|
|
250
300
|
if node.element('triggers') then
|
251
301
|
|
@@ -357,15 +407,33 @@ class Macro
|
|
357
407
|
|
358
408
|
def run()
|
359
409
|
@actions.map(&:invoke)
|
360
|
-
end
|
410
|
+
end
|
411
|
+
|
412
|
+
def to_pc()
|
413
|
+
|
414
|
+
heading = '# ' + @title + "\n"
|
415
|
+
heading += '# ' + @description if @description
|
416
|
+
condition = @triggers.first.to_pc
|
417
|
+
actions = @actions.map(&:to_pc).join("\n")
|
418
|
+
|
419
|
+
<<EOF
|
420
|
+
#{heading}
|
421
|
+
|
422
|
+
if #{condition} then
|
423
|
+
#{actions}
|
424
|
+
end
|
425
|
+
EOF
|
426
|
+
end
|
361
427
|
|
362
428
|
def to_s()
|
363
|
-
[
|
429
|
+
a = [
|
364
430
|
'm: ' + @title,
|
365
431
|
@triggers.map {|x| "t: %s" % x}.join("\n"),
|
366
432
|
@actions.map {|x| "a: %s" % x}.join("\n"),
|
367
433
|
@constraints.map {|x| "a: %s" % x}.join("\n")
|
368
|
-
]
|
434
|
+
]
|
435
|
+
a.insert(1, 'd: ' + @description) if @description
|
436
|
+
a.join("\n")
|
369
437
|
end
|
370
438
|
|
371
439
|
private
|
@@ -384,6 +452,9 @@ class Macro
|
|
384
452
|
end
|
385
453
|
|
386
454
|
|
455
|
+
class MacroDroidError < Exception
|
456
|
+
end
|
457
|
+
|
387
458
|
class MacroDroid
|
388
459
|
using ColouredText
|
389
460
|
using Params
|
@@ -396,16 +467,33 @@ class MacroDroid
|
|
396
467
|
|
397
468
|
if obj then
|
398
469
|
|
399
|
-
|
470
|
+
raw_s, _ = RXFHelper.read(obj)
|
471
|
+
|
472
|
+
s = raw_s.strip
|
400
473
|
|
401
474
|
if s[0] == '{' then
|
475
|
+
|
402
476
|
import_json(s)
|
477
|
+
|
403
478
|
elsif s[0] == '<'
|
479
|
+
|
404
480
|
import_xml(s)
|
405
481
|
@h = build_h
|
482
|
+
|
406
483
|
else
|
407
|
-
|
484
|
+
|
485
|
+
xml = if s =~ /^m: / then
|
486
|
+
text_to_xml(s)
|
487
|
+
elsif s =~ /^# /
|
488
|
+
pc_to_xml(s)
|
489
|
+
else
|
490
|
+
raise MacroDroidError, 'invalid input'
|
491
|
+
end
|
492
|
+
import_xml(xml)
|
408
493
|
@h = build_h
|
494
|
+
|
495
|
+
|
496
|
+
|
409
497
|
end
|
410
498
|
|
411
499
|
else
|
@@ -459,7 +547,10 @@ class MacroDroid
|
|
459
547
|
|
460
548
|
def import_json(s)
|
461
549
|
|
462
|
-
|
550
|
+
h = JSON.parse(s, symbolize_names: true)
|
551
|
+
puts 'json_to_yaml: ' + h.to_yaml if @debug
|
552
|
+
|
553
|
+
@h = h.to_snake_case
|
463
554
|
puts ('@h: ' + @h.inspect).debug if @debug
|
464
555
|
|
465
556
|
@macros = @h[:macro_list].map do |macro|
|
@@ -477,20 +568,48 @@ class MacroDroid
|
|
477
568
|
|
478
569
|
def import_xml(raws)
|
479
570
|
|
571
|
+
puts 'raws: ' + raws.inspect if @debug
|
480
572
|
s = RXFHelper.read(raws).first
|
481
573
|
puts 's: ' + s.inspect if @debug
|
482
574
|
doc = Rexle.new(s)
|
483
|
-
|
575
|
+
|
576
|
+
if @debug then
|
577
|
+
puts 'doc: ' + doc.root.xml
|
578
|
+
end
|
579
|
+
|
580
|
+
debug = @debug
|
484
581
|
|
485
582
|
@macros = doc.root.xpath('macro').map do |node|
|
486
583
|
|
487
|
-
macro = Macro.new @title, debug:
|
584
|
+
macro = Macro.new @title, debug: debug
|
488
585
|
macro.import_xml(node)
|
489
586
|
macro
|
490
587
|
|
491
588
|
end
|
492
589
|
end
|
493
590
|
|
591
|
+
def pc_to_xml(s)
|
592
|
+
|
593
|
+
macros = s.strip.split(/(?=#)/).map do |raw_macro|
|
594
|
+
|
595
|
+
a = raw_macro.lines
|
596
|
+
name = a.shift[/(?<=# ).*/]
|
597
|
+
description = a.shift[/(?<=# ).*/] if a[0][/^# /]
|
598
|
+
body = a.join.strip
|
599
|
+
|
600
|
+
a2 = body.lines
|
601
|
+
# get the trigger
|
602
|
+
trigger = [:trigger, {}, a2[0][/^if (.*) then/,1]]
|
603
|
+
action = [:action, {}, a2[1].strip]
|
604
|
+
[:macro, {name: name, description: description}, trigger, action, []]
|
605
|
+
|
606
|
+
end
|
607
|
+
|
608
|
+
doc = Rexle.new([:macros, {}, '', *macros])
|
609
|
+
doc.root.xml pretty: true
|
610
|
+
|
611
|
+
end
|
612
|
+
|
494
613
|
def text_to_xml(s)
|
495
614
|
|
496
615
|
a = s.split(/.*(?=^m:)/); a.shift
|
@@ -523,9 +642,15 @@ class MacroDroid
|
|
523
642
|
@h.merge(macro_list: @macros.map(&:to_h)).to_camel_case
|
524
643
|
|
525
644
|
end
|
645
|
+
|
646
|
+
# returns pseudocode
|
647
|
+
#
|
648
|
+
def to_pc()
|
649
|
+
@macros.map(&:to_pc).join("\n\n")
|
650
|
+
end
|
526
651
|
|
527
652
|
def to_s()
|
528
|
-
@macros.map(&:to_s).join("\n
|
653
|
+
@macros.map(&:to_s).join("\n")
|
529
654
|
end
|
530
655
|
|
531
656
|
end
|
@@ -1103,6 +1228,10 @@ class TimerTrigger < Trigger
|
|
1103
1228
|
|
1104
1229
|
end
|
1105
1230
|
|
1231
|
+
def to_pc()
|
1232
|
+
"time.is? '%s'" % self.to_s.gsub(',', ' or')
|
1233
|
+
end
|
1234
|
+
|
1106
1235
|
def to_s()
|
1107
1236
|
|
1108
1237
|
dow = @h[:days_of_week]
|
@@ -1185,6 +1314,15 @@ class RegularIntervalTrigger < Trigger
|
|
1185
1314
|
|
1186
1315
|
end
|
1187
1316
|
|
1317
|
+
class DeviceEventsTrigger < Trigger
|
1318
|
+
|
1319
|
+
def initialize(h={})
|
1320
|
+
super(h)
|
1321
|
+
@group = 'device_events'
|
1322
|
+
end
|
1323
|
+
|
1324
|
+
end
|
1325
|
+
|
1188
1326
|
# Category: Device Events
|
1189
1327
|
#
|
1190
1328
|
# Airplane Mode Changed
|
@@ -1196,7 +1334,7 @@ end
|
|
1196
1334
|
# shorthand example:
|
1197
1335
|
# airplanemode: enabled
|
1198
1336
|
#
|
1199
|
-
class AirplaneModeTrigger <
|
1337
|
+
class AirplaneModeTrigger < DeviceEventsTrigger
|
1200
1338
|
|
1201
1339
|
def initialize(h={})
|
1202
1340
|
|
@@ -1212,7 +1350,7 @@ end
|
|
1212
1350
|
|
1213
1351
|
# Category: Device Events
|
1214
1352
|
#
|
1215
|
-
class AutoSyncChangeTrigger <
|
1353
|
+
class AutoSyncChangeTrigger < DeviceEventsTrigger
|
1216
1354
|
|
1217
1355
|
def initialize(h={})
|
1218
1356
|
|
@@ -1228,7 +1366,7 @@ end
|
|
1228
1366
|
|
1229
1367
|
# Category: Device Events
|
1230
1368
|
#
|
1231
|
-
class DayDreamTrigger <
|
1369
|
+
class DayDreamTrigger < DeviceEventsTrigger
|
1232
1370
|
|
1233
1371
|
def initialize(h={})
|
1234
1372
|
|
@@ -1244,7 +1382,7 @@ end
|
|
1244
1382
|
|
1245
1383
|
# Category: Device Events
|
1246
1384
|
#
|
1247
|
-
class DockTrigger <
|
1385
|
+
class DockTrigger < DeviceEventsTrigger
|
1248
1386
|
|
1249
1387
|
def initialize(h={})
|
1250
1388
|
|
@@ -1260,7 +1398,30 @@ end
|
|
1260
1398
|
|
1261
1399
|
# Category: Device Events
|
1262
1400
|
#
|
1263
|
-
class
|
1401
|
+
class FailedLoginTrigger < DeviceEventsTrigger
|
1402
|
+
|
1403
|
+
def initialize(h={})
|
1404
|
+
|
1405
|
+
options = {
|
1406
|
+
num_failures: 1
|
1407
|
+
}
|
1408
|
+
|
1409
|
+
super(options.merge h)
|
1410
|
+
|
1411
|
+
end
|
1412
|
+
|
1413
|
+
def to_pc()
|
1414
|
+
'failed_login?'
|
1415
|
+
end
|
1416
|
+
|
1417
|
+
def to_s()
|
1418
|
+
'Failed Login Attempt'
|
1419
|
+
end
|
1420
|
+
end
|
1421
|
+
|
1422
|
+
# Category: Device Events
|
1423
|
+
#
|
1424
|
+
class GPSEnabledTrigger < DeviceEventsTrigger
|
1264
1425
|
|
1265
1426
|
def initialize(h={})
|
1266
1427
|
|
@@ -1276,7 +1437,7 @@ end
|
|
1276
1437
|
|
1277
1438
|
# Category: Device Events
|
1278
1439
|
#
|
1279
|
-
class MusicPlayingTrigger <
|
1440
|
+
class MusicPlayingTrigger < DeviceEventsTrigger
|
1280
1441
|
|
1281
1442
|
def initialize(h={})
|
1282
1443
|
|
@@ -1293,7 +1454,7 @@ end
|
|
1293
1454
|
|
1294
1455
|
# Category: Device Events
|
1295
1456
|
#
|
1296
|
-
class DeviceUnlockedTrigger <
|
1457
|
+
class DeviceUnlockedTrigger < DeviceEventsTrigger
|
1297
1458
|
|
1298
1459
|
def initialize(h={})
|
1299
1460
|
|
@@ -1308,7 +1469,7 @@ end
|
|
1308
1469
|
|
1309
1470
|
# Category: Device Events
|
1310
1471
|
#
|
1311
|
-
class AutoRotateChangeTrigger <
|
1472
|
+
class AutoRotateChangeTrigger < DeviceEventsTrigger
|
1312
1473
|
|
1313
1474
|
def initialize(h={})
|
1314
1475
|
|
@@ -1324,7 +1485,7 @@ end
|
|
1324
1485
|
|
1325
1486
|
# Category: Device Events
|
1326
1487
|
#
|
1327
|
-
class ClipboardChangeTrigger <
|
1488
|
+
class ClipboardChangeTrigger < DeviceEventsTrigger
|
1328
1489
|
|
1329
1490
|
def initialize(h={})
|
1330
1491
|
|
@@ -1341,7 +1502,7 @@ end
|
|
1341
1502
|
|
1342
1503
|
# Category: Device Events
|
1343
1504
|
#
|
1344
|
-
class BootTrigger <
|
1505
|
+
class BootTrigger < DeviceEventsTrigger
|
1345
1506
|
|
1346
1507
|
def initialize(h={})
|
1347
1508
|
|
@@ -1356,7 +1517,7 @@ end
|
|
1356
1517
|
|
1357
1518
|
# Category: Device Events
|
1358
1519
|
#
|
1359
|
-
class IntentReceivedTrigger <
|
1520
|
+
class IntentReceivedTrigger < DeviceEventsTrigger
|
1360
1521
|
|
1361
1522
|
def initialize(h={})
|
1362
1523
|
|
@@ -1376,7 +1537,7 @@ end
|
|
1376
1537
|
|
1377
1538
|
# Category: Device Events
|
1378
1539
|
#
|
1379
|
-
class NotificationTrigger <
|
1540
|
+
class NotificationTrigger < DeviceEventsTrigger
|
1380
1541
|
|
1381
1542
|
def initialize(h={})
|
1382
1543
|
|
@@ -1402,7 +1563,7 @@ end
|
|
1402
1563
|
|
1403
1564
|
# Category: Device Events
|
1404
1565
|
#
|
1405
|
-
class ScreenOnOffTrigger <
|
1566
|
+
class ScreenOnOffTrigger < DeviceEventsTrigger
|
1406
1567
|
|
1407
1568
|
def initialize(h={})
|
1408
1569
|
|
@@ -1418,7 +1579,7 @@ end
|
|
1418
1579
|
|
1419
1580
|
# Category: Device Events
|
1420
1581
|
#
|
1421
|
-
class SilentModeTrigger <
|
1582
|
+
class SilentModeTrigger < DeviceEventsTrigger
|
1422
1583
|
|
1423
1584
|
def initialize(h={})
|
1424
1585
|
|
@@ -1494,9 +1655,19 @@ class SunriseSunsetTrigger < Trigger
|
|
1494
1655
|
|
1495
1656
|
end
|
1496
1657
|
|
1658
|
+
|
1659
|
+
class SensorsTrigger < Trigger
|
1660
|
+
|
1661
|
+
def initialize(h={})
|
1662
|
+
super(h)
|
1663
|
+
@group = 'sensors'
|
1664
|
+
end
|
1665
|
+
|
1666
|
+
end
|
1667
|
+
|
1497
1668
|
# Category: Sensors
|
1498
1669
|
#
|
1499
|
-
class ActivityRecognitionTrigger <
|
1670
|
+
class ActivityRecognitionTrigger < SensorsTrigger
|
1500
1671
|
|
1501
1672
|
def initialize(h={})
|
1502
1673
|
|
@@ -1513,7 +1684,7 @@ end
|
|
1513
1684
|
|
1514
1685
|
# Category: Sensors
|
1515
1686
|
#
|
1516
|
-
class ProximityTrigger <
|
1687
|
+
class ProximityTrigger < SensorsTrigger
|
1517
1688
|
|
1518
1689
|
def initialize(h={})
|
1519
1690
|
|
@@ -1530,7 +1701,7 @@ end
|
|
1530
1701
|
|
1531
1702
|
# Category: Sensors
|
1532
1703
|
#
|
1533
|
-
class ShakeDeviceTrigger <
|
1704
|
+
class ShakeDeviceTrigger < SensorsTrigger
|
1534
1705
|
|
1535
1706
|
def initialize(h={})
|
1536
1707
|
|
@@ -1540,12 +1711,25 @@ class ShakeDeviceTrigger < Trigger
|
|
1540
1711
|
super(options.merge h)
|
1541
1712
|
|
1542
1713
|
end
|
1714
|
+
|
1715
|
+
def to_pc()
|
1716
|
+
'shake_device?'
|
1717
|
+
end
|
1718
|
+
|
1719
|
+
def to_s()
|
1720
|
+
'Shake Device'
|
1721
|
+
end
|
1543
1722
|
|
1544
1723
|
end
|
1545
1724
|
|
1546
1725
|
# Category: Sensors
|
1547
1726
|
#
|
1548
|
-
|
1727
|
+
# options:
|
1728
|
+
# Face Up -> Face Down
|
1729
|
+
# Face Down -> Face Up
|
1730
|
+
# Any -> Face Down
|
1731
|
+
#
|
1732
|
+
class FlipDeviceTrigger < SensorsTrigger
|
1549
1733
|
|
1550
1734
|
def initialize(h={})
|
1551
1735
|
|
@@ -1557,13 +1741,23 @@ class FlipDeviceTrigger < Trigger
|
|
1557
1741
|
|
1558
1742
|
super(options.merge h)
|
1559
1743
|
|
1744
|
+
end
|
1745
|
+
|
1746
|
+
def to_pc()
|
1747
|
+
@h[:face_down] ? 'flip_device_down?' : 'flip_device_up?'
|
1560
1748
|
end
|
1749
|
+
|
1750
|
+
def to_s()
|
1751
|
+
|
1752
|
+
action = @h[:face_down] ? 'Face Up -> Face Down' : 'Face Down -> Face Up'
|
1753
|
+
'Flip Device ' + action
|
1754
|
+
end
|
1561
1755
|
|
1562
1756
|
end
|
1563
1757
|
|
1564
1758
|
# Category: Sensors
|
1565
1759
|
#
|
1566
|
-
class OrientationTrigger <
|
1760
|
+
class OrientationTrigger < SensorsTrigger
|
1567
1761
|
|
1568
1762
|
def initialize(h={})
|
1569
1763
|
|
@@ -1829,6 +2023,15 @@ class TakePictureAction < CameraAction
|
|
1829
2023
|
super(options.merge h)
|
1830
2024
|
|
1831
2025
|
end
|
2026
|
+
|
2027
|
+
def to_pc()
|
2028
|
+
camera = @h[:use_front_camera] ? :front : :back
|
2029
|
+
'take_photo :' + camera.to_s
|
2030
|
+
end
|
2031
|
+
|
2032
|
+
def to_s()
|
2033
|
+
'Take Picture'
|
2034
|
+
end
|
1832
2035
|
|
1833
2036
|
end
|
1834
2037
|
|
@@ -1987,6 +2190,20 @@ class SayTimeAction < DateTimeAction
|
|
1987
2190
|
super(options.merge h)
|
1988
2191
|
|
1989
2192
|
end
|
2193
|
+
|
2194
|
+
def invoke()
|
2195
|
+
time = ($env and $env[:time]) ? $env[:time] : Time.now
|
2196
|
+
tformat = @h['12_hour'] ? "%-I:%M%P" : "%H:%M"
|
2197
|
+
super(time.strftime(tformat))
|
2198
|
+
end
|
2199
|
+
|
2200
|
+
def to_pc()
|
2201
|
+
'say current_time()'
|
2202
|
+
end
|
2203
|
+
|
2204
|
+
def to_s()
|
2205
|
+
'Say Current Time'
|
2206
|
+
end
|
1990
2207
|
|
1991
2208
|
end
|
1992
2209
|
|
@@ -2158,6 +2375,14 @@ class CameraFlashLightAction < DeviceSettingsAction
|
|
2158
2375
|
|
2159
2376
|
end
|
2160
2377
|
|
2378
|
+
def to_pc()
|
2379
|
+
'torch :on'
|
2380
|
+
end
|
2381
|
+
|
2382
|
+
def to_s()
|
2383
|
+
'Torch On'
|
2384
|
+
end
|
2385
|
+
|
2161
2386
|
end
|
2162
2387
|
|
2163
2388
|
# Category: Device Settings
|
@@ -2750,6 +2975,10 @@ class ToastAction < NotificationsAction
|
|
2750
2975
|
super(@h[:message_text])
|
2751
2976
|
end
|
2752
2977
|
|
2978
|
+
def to_pc()
|
2979
|
+
"popup_message '%s'" % @h[:message_text]
|
2980
|
+
end
|
2981
|
+
|
2753
2982
|
def to_s()
|
2754
2983
|
"Popup Message '%s'" % @h[:message_text]
|
2755
2984
|
end
|
@@ -3489,6 +3718,18 @@ class AirplaneModeConstraint < Constraint
|
|
3489
3718
|
end
|
3490
3719
|
|
3491
3720
|
end
|
3721
|
+
|
3722
|
+
def to_pc()
|
3723
|
+
status = @h[:enabled] ? 'enabled?' : 'disabled?'
|
3724
|
+
'airplane_mode.' + status
|
3725
|
+
end
|
3726
|
+
|
3727
|
+
def to_s()
|
3728
|
+
|
3729
|
+
status = @h[:enabled] ? 'Enabled' : 'Disabled'
|
3730
|
+
'Airplane Mode ' + status
|
3731
|
+
|
3732
|
+
end
|
3492
3733
|
|
3493
3734
|
end
|
3494
3735
|
|
metadata
CHANGED
metadata.gz.sig
CHANGED
Binary file
|