ruby-macrodroid 0.8.1 → 0.8.7

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: 8e58584da95b866b61497cebde9f89bac44a793ebdf23bc58d9cdcdfdb208419
4
- data.tar.gz: 79d881aee3a91df644efb1733b9664faab5b46e535bfe5ad10681a884b8f19ef
3
+ metadata.gz: e161537334457ba0da45d5058d8a7a75a1a845cb2e5b9aa7895ea224aac472c5
4
+ data.tar.gz: 9503ca1e163739e18fba141a333e99fcf27eb3c34c34798f72099f723e63f3fb
5
5
  SHA512:
6
- metadata.gz: 181c71de158a1bff2a26cd6762c85961e4ae1eaaa7fc813a422ad700de73218d25902948e32161dd8c87d698ba3c833895f902dad9f568e46e384e682f2c9d7a
7
- data.tar.gz: 805329654e2d074217a0e2dc3a9738efd26fb010d91a7f1e4a0ff8f84f297103609e94f3d386bd8db191937f27a9f0be13502a9dc5f063eb36a6d208556ce49a
6
+ metadata.gz: 1035077a740b2308cde75c96da176d0dd616111bd9541b364ce2a9e3f13eb39a3ad49930222348a186fe1180bade2eb264e0a9cf4bf05ee5efd2802da27a3850
7
+ data.tar.gz: 6f0919e4921f12d5c646484f56b8c5b459335d3997559226803e4da30ec5e96e007882a247c0a52ff9766702066f28df534c044792c557a40335079828458da0
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -154,6 +154,16 @@ class ActionsNlp
154
154
  [ToastAction, {msg: msg}]
155
155
  end
156
156
 
157
+ # e.g. Popup Message\n hello world!
158
+ get /^Popup Message\n\s+(.*)/im do |msg|
159
+ [ToastAction, {msg: msg}]
160
+ end
161
+
162
+ # e.g. Popup Message
163
+ get /^Popup Message$/i do
164
+ [ToastAction, {}]
165
+ end
166
+
157
167
  # e.g. say current time
158
168
  get /^say current[ _]time/i do
159
169
  [SayTimeAction, {}]
@@ -243,16 +253,17 @@ class ActionsNlp
243
253
  [KeepAwakeAction, {enabled: false, screen_option: 0}]
244
254
  end
245
255
 
256
+ #a: Disable Keep Awake
257
+ #
258
+ get /if (.*)/i do
259
+ [IfConditionAction, {}]
260
+ end
246
261
 
247
262
  end
248
263
 
249
264
  alias find_action run_route
250
265
 
251
- def to_s(colour: false)
252
- 'ActionsNlp ' + @h.inspect
253
- end
254
266
 
255
- alias to_summary to_s
256
267
  end
257
268
 
258
269
  class ConstraintsNlp
@@ -279,6 +290,60 @@ class ConstraintsNlp
279
290
  end
280
291
 
281
292
 
293
+ module Params
294
+
295
+ refine Hash do
296
+
297
+ # turns keys from camelCase into snake_case
298
+
299
+ def to_snake_case(h=self)
300
+
301
+ h.inject({}) do |r, x|
302
+
303
+ key, value = x
304
+ #puts 'value: ' + value.inspect
305
+
306
+ val = if value.is_a?(Hash) then
307
+ to_snake_case(value)
308
+ elsif value.is_a?(Array) and value.first.is_a? Hash
309
+ value.map {|row| to_snake_case(row)}
310
+ else
311
+ value
312
+ end
313
+
314
+ r.merge key.to_s.sub(/^m_/,'').gsub(/[A-Z][a-z]/){|x| '_' +
315
+ x.downcase}.gsub(/[a-z][A-Z]/){|x| x[0] + '_' + x[1].downcase}\
316
+ .downcase.to_sym => val
317
+
318
+ end
319
+ end
320
+
321
+ # turns keys from snake_case to CamelCase
322
+ def to_camel_case(h=self)
323
+
324
+ h.inject({}) do |r,x|
325
+
326
+ key, value = x
327
+
328
+ val = if value.is_a?(Hash) then
329
+ to_camel_case(value)
330
+ elsif value.is_a?(Array) and value.first.is_a? Hash
331
+ value.map {|row| to_camel_case(row)}
332
+ else
333
+ value
334
+ end
335
+
336
+ r.merge({key.to_s.gsub(/(?<!^m)_[a-z]/){|x| x[-1].upcase} => val})
337
+ end
338
+
339
+ end
340
+
341
+
342
+ end
343
+
344
+ end
345
+
346
+
282
347
 
283
348
  class Macro
284
349
  using ColouredText
@@ -326,6 +391,7 @@ class Macro
326
391
  local_variables: @local_variables,
327
392
  m_trigger_list: @triggers.map(&:to_h),
328
393
  m_action_list: @actions.map(&:to_h),
394
+ m_category: @category,
329
395
  m_constraint_list: @constraints.map(&:to_h),
330
396
  m_description: '',
331
397
  m_name: title(),
@@ -349,11 +415,30 @@ class Macro
349
415
  puts 'h:' + h.inspect
350
416
  end
351
417
 
418
+ @category = h[:category]
352
419
  @title = h[:name]
353
420
  @description = h[:description]
354
421
 
355
422
  # fetch the local variables
356
- @local_variables = h['local_variables']
423
+ if h[:local_variables].any? and h[:local_variables].first.any? then
424
+
425
+ @local_variables = h[:local_variables].map do |var|
426
+
427
+ val = case var[:type]
428
+ when 0 # boolean
429
+ var[:boolean_value]
430
+ when 1 # integer
431
+ var[:int_value]
432
+ when 2 # string
433
+ var[:string_value]
434
+ when 3 # decimal
435
+ var[:decimal_Value]
436
+ end
437
+
438
+ [var[:name], val]
439
+
440
+ end.to_h
441
+ end
357
442
 
358
443
  # fetch the triggers
359
444
  @triggers = h[:trigger_list].map do |trigger|
@@ -366,17 +451,17 @@ class Macro
366
451
  @actions = h[:action_list].map do |action|
367
452
  object(action.to_snake_case)
368
453
  end
369
-
454
+ puts 'before fetch constraints' if @debug
370
455
  # fetch the constraints
371
456
  @constraints = h[:constraint_list].map do |constraint|
372
457
  object(constraint.to_snake_case)
373
458
  end
374
-
459
+ puts 'after fetch constraints' if @debug
375
460
  @h = h
376
461
 
377
462
  %i(local_variables m_trigger_list m_action_list m_constraint_list)\
378
463
  .each {|x| @h[x] = [] }
379
-
464
+ puts 'after @h set' if @debug
380
465
  @h
381
466
 
382
467
  end
@@ -393,6 +478,7 @@ class Macro
393
478
  # level 2
394
479
 
395
480
  @title = node.attributes[:name]
481
+ @category = node.attributes[:category]
396
482
  @description = node.attributes[:description]
397
483
 
398
484
 
@@ -460,20 +546,42 @@ class Macro
460
546
  @actions = node.xpath('action').map do |e|
461
547
 
462
548
  puts 'action e: ' + e.xml.inspect if @debug
463
- r = ap.find_action e.text
549
+ puts 'e.text ' + e.text if @debug
550
+
551
+ inner_lines = e.xpath('item/description/text()')
552
+
553
+ action = if e.text.to_s.strip.empty? then
554
+ inner_lines.shift
555
+ else
556
+ e.text.strip
557
+ end
558
+
559
+ r = ap.find_action action
464
560
  puts 'found action ' + r.inspect if @debug
465
561
 
466
562
  if r then
467
563
 
468
- a = e.xpath('item/*')
564
+ loose = inner_lines.shift
469
565
 
470
- h = if a.any? then
471
- a.map {|node| [node.name.to_sym, node.text.to_s]}.to_h
566
+ raw_attributes = if loose then
567
+
568
+ puts 'do something ' + loose.to_s if @debug
569
+ loose.to_s
570
+
472
571
  else
473
- {}
572
+
573
+ a = e.xpath('item/*')
574
+
575
+ h = if a.any? then
576
+ a.map {|node| [node.name.to_sym, node.text.to_s]}.to_h
577
+ else
578
+ {}
579
+ end
580
+
581
+ r[1].merge(h)
582
+
474
583
  end
475
-
476
- r[0].new(r[1].merge(h))
584
+ r[0].new(raw_attributes)
477
585
  end
478
586
 
479
587
  end
@@ -581,7 +689,7 @@ EOF
581
689
 
582
690
  end
583
691
 
584
- if s =~ /^If/i then
692
+ if s =~ /^(?:If|WHILE \/ DO)/i then
585
693
 
586
694
  if indent < 1 then
587
695
 
@@ -602,13 +710,32 @@ EOF
602
710
  r
603
711
 
604
712
  end.join("\n")
713
+
714
+ a = []
715
+ a << '# ' + @category + "\n" if @category
716
+ a << (colour ? "m".bg_cyan.gray.bold : 'm') + ': ' + @title
717
+
718
+
719
+ if @description and @description.length >= 1 then
720
+ a << (colour ? "d".bg_gray.gray.bold : 'd') + ': ' \
721
+ + @description.gsub(/\n/,"\n ")
722
+ end
605
723
 
606
- a = [
607
- (colour ? "m".bg_cyan.gray.bold : 'm') + ': ' + @title,
608
- @triggers.map {|x| (colour ? "t".bg_red.gray.bold : 't') \
609
- + ": %s" % x}.join("\n"),
610
- actions
611
- ]
724
+ if @local_variables.length >= 1 then
725
+
726
+ vars = @local_variables.map do |k,v|
727
+ label = colour ? 'v'.bg_magenta : 'v'
728
+ label += ': '
729
+ label + "%s: %s" % [k,v]
730
+ end
731
+
732
+ a << vars.join("\n")
733
+ end
734
+
735
+ a << @triggers.map {|x| (colour ? "t".bg_red.gray.bold : 't') \
736
+ + ": %s" % x}.join("\n")
737
+ a << actions
738
+
612
739
 
613
740
  if @constraints.any? then
614
741
  a << @constraints.map do |x|
@@ -616,10 +743,9 @@ EOF
616
743
  end.join("\n")
617
744
  end
618
745
 
619
- if @description and @description.length >= 1 then
620
- a.insert(1, (colour ? "d".bg_gray.gray.bold : 'd') + ': ' \
621
- + @description.gsub(/\n/,"\n "))
622
- end
746
+
747
+
748
+
623
749
 
624
750
  a.join("\n") + "\n"
625
751
 
@@ -682,7 +808,7 @@ EOF
682
808
  h2 = h.merge( macro: self)
683
809
  puts 'h2: ' + h2.inspect
684
810
  r = klass.new h2
685
-
811
+ puts 'r:' + r.inspect
686
812
  r
687
813
 
688
814
  end
@@ -720,6 +846,7 @@ class MacroDroid
720
846
  if s[0] == '{' then
721
847
 
722
848
  import_json(s)
849
+ puts 'after import_json' if @debug
723
850
 
724
851
  elsif s[0] == '<'
725
852
 
@@ -812,7 +939,7 @@ class MacroDroid
812
939
  end
813
940
 
814
941
  alias to_json export_json
815
-
942
+
816
943
 
817
944
  def to_h()
818
945
 
@@ -69,43 +69,6 @@ class Action < MacroObject
69
69
  end
70
70
 
71
71
 
72
- class LocationAction < Action
73
-
74
- def initialize(h={})
75
- super(h)
76
- @group = 'location'
77
- end
78
-
79
- end
80
-
81
- # Category: Location
82
- #
83
- class ShareLocationAction < LocationAction
84
-
85
- def initialize(h={})
86
-
87
- super()
88
-
89
- options = {
90
- email: '',
91
- variable: {:m_stringValue=>"", :m_name=>"",
92
- :m_decimalValue=>0.0, :isLocal=>true, :m_booleanValue=>false,
93
- :excludeFromLog=>false, :m_intValue=>0, :m_type=>2},
94
- sim_id: 0,
95
- output_channel: 5,
96
- old_variable_format: true
97
- }
98
-
99
- super(options.merge h)
100
-
101
- end
102
-
103
- def to_s(colour: false)
104
- 'ShareLocationAction ' + @h.inspect
105
- end
106
-
107
- alias to_summary to_s
108
- end
109
72
 
110
73
 
111
74
  class ApplicationAction < Action
@@ -272,7 +235,10 @@ class TakePictureAction < CameraAction
272
235
 
273
236
  end
274
237
 
275
- class IfConditionAction < Action
238
+
239
+ # Conditions/Loops
240
+ #
241
+ class IfConfirmedThenAction < Action
276
242
 
277
243
  def initialize(h={})
278
244
 
@@ -286,6 +252,92 @@ class IfConditionAction < Action
286
252
 
287
253
  super(h2)
288
254
 
255
+ @label = 'If Confirmed Then '
256
+
257
+ end
258
+
259
+ def to_s(colour: false)
260
+
261
+ @s = "If Confirmed Then " #+ @constraints.map(&:to_s).join(" %s " % operator)
262
+ super(colour: colour)
263
+
264
+ end
265
+ end
266
+
267
+ # Conditions/Loops
268
+ #
269
+ class LoopAction < Action
270
+
271
+ def initialize(h={})
272
+
273
+ options = {
274
+
275
+ }
276
+
277
+ h2 = options.merge(h)
278
+
279
+ super(h2)
280
+
281
+ @label = 'WHILE / DO '
282
+
283
+ end
284
+
285
+ def to_s(colour: false)
286
+
287
+ @s = 'WHILE / DO '
288
+ super()
289
+
290
+ end
291
+ end
292
+
293
+ # Conditions/Loops
294
+ #
295
+ class EndLoopAction < Action
296
+
297
+ def initialize(h={})
298
+
299
+ options = {
300
+
301
+ }
302
+
303
+ h2 = options.merge(h)
304
+
305
+ super(h2)
306
+
307
+ @label = 'End Loop '
308
+
309
+ end
310
+
311
+ def to_s(colour: false)
312
+
313
+ 'End Loop '
314
+
315
+ end
316
+ end
317
+
318
+ # Conditions/Loops
319
+ #
320
+ class IfConditionAction < Action
321
+
322
+ def initialize(obj=nil)
323
+
324
+ h = if obj.is_a? Hash then
325
+ obj
326
+ else
327
+ # get the constraints
328
+
329
+ end
330
+
331
+ options = {
332
+ a: true,
333
+ constraint_list: ''
334
+ }
335
+
336
+ macro = h[:macro]
337
+ h2 = options.merge(filter(options,h).merge(macro: macro))
338
+
339
+ super(h2)
340
+
289
341
  @label = 'If '
290
342
 
291
343
  end
@@ -317,7 +369,7 @@ class ElseAction < Action
317
369
 
318
370
  end
319
371
 
320
- class ElseIfConditionAction < IfConditionAction
372
+ class ElseIfConditionAction < Action
321
373
 
322
374
  def initialize(h={})
323
375
 
@@ -326,9 +378,14 @@ class ElseIfConditionAction < IfConditionAction
326
378
  }
327
379
 
328
380
  super(options.merge h)
329
- @label = 'ElseIf '
381
+ @label = 'Else If '
330
382
 
331
383
  end
384
+
385
+ def to_s(colour: false)
386
+ @s = 'Else If '
387
+ super()
388
+ end
332
389
 
333
390
 
334
391
  end
@@ -643,7 +700,7 @@ class ClipboardAction < DeviceAction
643
700
  end
644
701
 
645
702
  def to_s(colour: false)
646
- 'ClipboardAction ' + @h.inspect
703
+ 'Fill Clipboard' + "\n " + @h[:clipboard_text] #+ @h.inspect
647
704
  end
648
705
 
649
706
  alias to_summary to_s
@@ -793,6 +850,11 @@ end
793
850
  #
794
851
  class CameraFlashLightAction < DeviceSettingsAction
795
852
 
853
+ # options
854
+ # 0 Toch On
855
+ # 1 Torch Off
856
+ # 2 Torch Toggle
857
+ #
796
858
  def initialize(h={})
797
859
 
798
860
  options = {
@@ -1001,6 +1063,40 @@ class FileAction < Action
1001
1063
 
1002
1064
  end
1003
1065
 
1066
+
1067
+
1068
+ # Category: Files
1069
+ #
1070
+ class FileOperationV21Action < FileAction
1071
+
1072
+ def initialize(h={})
1073
+
1074
+ options = {
1075
+ :app_name=>"", :class_name=>"", :package_name=>"", :file_path=>"",
1076
+ :file_extensions=>["jpg", "jpeg", "png", "raw", "bmp", "tif", "tiff",
1077
+ "gif"], :file_option=>2, :from_name=>"Sent",
1078
+ :from_uri_string=>"", :option=>2
1079
+ }
1080
+
1081
+ super(options.merge h)
1082
+
1083
+ end
1084
+
1085
+ def to_s(colour: false)
1086
+
1087
+ operation = ['Copy', 'Move', 'Delete', 'Create Folder']
1088
+ file = ['All Files', 'All Media Files', 'Images', 'Audio', 'Videos', 'Specify File Pattern', 'Folder']
1089
+
1090
+ detail = @h[:from_name]
1091
+ detail += ' to: ' + @h[:to_name] if @h[:option] == 1
1092
+ @s = "%s %s" % [operation[@h[:option]], file[@h[:file_option]]] \
1093
+ + "\n " + detail #+ @h.inspect
1094
+ super()
1095
+ end
1096
+
1097
+ alias to_summary to_s
1098
+ end
1099
+
1004
1100
  # Category: Files
1005
1101
  #
1006
1102
  class OpenFileAction < FileAction
@@ -1026,6 +1122,30 @@ class OpenFileAction < FileAction
1026
1122
  end
1027
1123
 
1028
1124
 
1125
+ # Category: Files
1126
+ #
1127
+ class WriteToFileAction < FileAction
1128
+
1129
+ def initialize(h={})
1130
+
1131
+ options = {
1132
+ app_name: '',
1133
+ class_name: '',
1134
+ package_name: '',
1135
+ file_path: ''
1136
+ }
1137
+
1138
+ super(options.merge h)
1139
+
1140
+ end
1141
+
1142
+ def to_s(colour: false)
1143
+ 'Write To File' + "\n " + @h[:filename] #+ @h.inspect
1144
+ end
1145
+
1146
+ alias to_summary to_s
1147
+ end
1148
+
1029
1149
  class LocationAction < Action
1030
1150
 
1031
1151
  def initialize(h={})
@@ -1055,15 +1175,30 @@ class ForceLocationUpdateAction < LocationAction
1055
1175
  alias to_summary to_s
1056
1176
  end
1057
1177
 
1178
+ # Category: Location
1179
+ #
1180
+ class LocationAction < Action
1181
+
1182
+ def initialize(h={})
1183
+ super(h)
1184
+ @group = 'location'
1185
+ end
1186
+
1187
+ end
1188
+
1058
1189
  # Category: Location
1059
1190
  #
1060
1191
  class ShareLocationAction < LocationAction
1061
1192
 
1062
1193
  def initialize(h={})
1194
+
1195
+ super()
1063
1196
 
1064
1197
  options = {
1065
1198
  email: '',
1066
- variable: {:m_stringValue=>"", :m_name=>"", :m_decimalValue=>0.0, :isLocal=>true, :m_booleanValue=>false, :excludeFromLog=>false, :m_intValue=>0, :m_type=>2},
1199
+ variable: {:m_stringValue=>"", :m_name=>"",
1200
+ :m_decimalValue=>0.0, :isLocal=>true, :m_booleanValue=>false,
1201
+ :excludeFromLog=>false, :m_intValue=>0, :m_type=>2},
1067
1202
  sim_id: 0,
1068
1203
  output_channel: 5,
1069
1204
  old_variable_format: true
@@ -1074,12 +1209,14 @@ class ShareLocationAction < LocationAction
1074
1209
  end
1075
1210
 
1076
1211
  def to_s(colour: false)
1077
- 'ShareLocationAction ' + @h.inspect
1212
+ @s = 'Share Location' + "\n GPS" # + @h.inspect
1213
+ super()
1078
1214
  end
1079
1215
 
1080
1216
  alias to_summary to_s
1081
1217
  end
1082
1218
 
1219
+
1083
1220
  # Category: Location
1084
1221
  #
1085
1222
  class SetLocationUpdateRateAction < LocationAction
@@ -1188,6 +1325,32 @@ class ClearLogAction < LoggingAction
1188
1325
  alias to_summary to_s
1189
1326
  end
1190
1327
 
1328
+ # MacroDroid Specific
1329
+ #
1330
+ class ConfirmNextAction < Action
1331
+
1332
+ def initialize(h={})
1333
+
1334
+ options = {
1335
+ :message=>"Do you want to fill the clipboard? ", :title=>"Fill clipboard? ", :negative_text=>"NO", :positive_text=>"YES", :class_type=>"ConfirmNextAction"
1336
+
1337
+ }
1338
+
1339
+ super(h)
1340
+
1341
+ end
1342
+
1343
+ def to_s(colour: false)
1344
+
1345
+ @s = 'Confirm Next' + "\n %s: %s" % [@h[:title], @h[:message]]
1346
+ super()
1347
+
1348
+ end
1349
+
1350
+ alias to_summary to_s
1351
+
1352
+ end
1353
+
1191
1354
  # MacroDroid Specific
1192
1355
  #
1193
1356
  class ExportMacrosAction < Action
@@ -1211,6 +1374,114 @@ class ExportMacrosAction < Action
1211
1374
 
1212
1375
  end
1213
1376
 
1377
+
1378
+ # MacroDroid Specific
1379
+ #
1380
+ class SetVariableAction < Action
1381
+
1382
+ def initialize(h={})
1383
+
1384
+ options = {
1385
+ :user_prompt=>true,
1386
+ :user_prompt_message=>"Please enter a word to see it reversed",
1387
+ :user_prompt_show_cancel=>true,
1388
+ :user_prompt_stop_after_cancel=>true,
1389
+ :user_prompt_title=>"Word reverse",
1390
+ :name => 'word'
1391
+ }
1392
+ super(h)
1393
+
1394
+ end
1395
+
1396
+ def to_s(colour: false)
1397
+
1398
+ input = if @h[:user_prompt] then
1399
+ '[User Prompt]'
1400
+ elsif @h[:expression]
1401
+ @h[:expression]
1402
+ elsif @h[:int_value_increment]
1403
+ '(+1)'
1404
+ elsif @h[:int_value_decrement]
1405
+ '(-1)'
1406
+ elsif @h[:int_random]
1407
+ "Random %d -> %d" % [@h[:int_random_min], @h[:int_random_max]]
1408
+ else
1409
+
1410
+ =begin
1411
+ sym = case @h[:variable][:type]
1412
+ when 0 # boolean
1413
+ :new_boolean_value
1414
+ when 1 # integer
1415
+ :new_int_value
1416
+ when 2 # string
1417
+ :new_string_value
1418
+ when 3 # decimal
1419
+ :new_double_value
1420
+ end
1421
+
1422
+ @h[sym].to_s
1423
+ =end
1424
+ a = %i(new_boolean_value new_int_value new_string_value new_double_value)
1425
+ @h[a[@h[:variable][:type]]].to_s
1426
+
1427
+ end
1428
+
1429
+ @s = 'Set Variable' + ("\n %s: " % @h[:variable][:name]) + input #+ @h.inspect
1430
+ super()
1431
+
1432
+ end
1433
+
1434
+ alias to_summary to_s
1435
+
1436
+ end
1437
+
1438
+
1439
+
1440
+ # MacroDroid Specific
1441
+ #
1442
+ class TextManipulationAction < Action
1443
+
1444
+ def initialize(h={})
1445
+
1446
+ options = {
1447
+
1448
+ }
1449
+ super(h)
1450
+
1451
+ end
1452
+
1453
+ def to_s(colour: false)
1454
+
1455
+ #tm = @h[:text_manipulation][:type]
1456
+
1457
+ #s = case tm[:type].to_sym
1458
+ s = case 3 # @h[:text_manipulation][:option].to_i
1459
+ when 0 # :SubstringManipulation
1460
+ "Substring(%s, %s)" % [@h[:text], tm[:params].join(', ')]
1461
+ when 1 # :ReplaceAllManipulation
1462
+ "Replace all(%s, %s, %s)" % [@h[:text], *tm[:params]]
1463
+ when 2 # :ExtractTextManipulation
1464
+ "Extract text(%s, %s)" % [@h[:text], tm[:params].join(', ')]
1465
+ when 3 # :UpperCaseManipulation
1466
+ "Upper case(%s)" % [@h[:text]]
1467
+ #'foo'
1468
+ when 4 # :LowerCaseManipulation
1469
+ "Lower case(%s)" % [@h[:text]]
1470
+ when 5 # :TrimWhitespaceManipulation
1471
+ "Trim whitespace(%s)" % [@h[:text]]
1472
+ end
1473
+
1474
+ 'Text Manipulation' + "\n " + s.inspect #+ ' ' + @h.inspect
1475
+
1476
+ end
1477
+
1478
+ alias to_summary to_s
1479
+
1480
+ end
1481
+
1482
+
1483
+
1484
+
1214
1485
  class PauseAction < Action
1215
1486
 
1216
1487
  def initialize(h={})
@@ -1325,7 +1596,9 @@ class SendEmailAction < MessagingAction
1325
1596
  end
1326
1597
 
1327
1598
  def to_s(colour: false)
1328
- 'SendEmailAction ' + @h.inspect
1599
+ recipient = @h[:email_address]
1600
+ @s = 'Send EmailAction' + "\n To: " + recipient #+ ' ' + @h.inspect
1601
+ super()
1329
1602
  end
1330
1603
 
1331
1604
  alias to_summary to_s
@@ -1572,7 +1845,13 @@ end
1572
1845
  #
1573
1846
  class ToastAction < NotificationsAction
1574
1847
 
1575
- def initialize(h={})
1848
+ def initialize(obj)
1849
+
1850
+ h = if obj.is_a? Hash then
1851
+ obj
1852
+ else
1853
+ {msg: obj}
1854
+ end
1576
1855
 
1577
1856
  if h[:msg] then
1578
1857
  h[:message_text] = h[:msg]
@@ -1603,7 +1882,7 @@ class ToastAction < NotificationsAction
1603
1882
  end
1604
1883
 
1605
1884
  def to_s(colour: false)
1606
- "Popup Message\n %s" % @h[:message_text]
1885
+ @s = "Popup Message\n %s" % @h[:message_text]
1607
1886
  end
1608
1887
 
1609
1888
  end
@@ -8,58 +8,6 @@
8
8
  #
9
9
 
10
10
 
11
- module Params
12
-
13
- refine Hash do
14
-
15
- # turns keys from camelCase into snake_case
16
-
17
- def to_snake_case(h=self)
18
-
19
- h.inject({}) do |r, x|
20
-
21
- key, value = x
22
- #puts 'value: ' + value.inspect
23
-
24
- val = if value.is_a?(Hash) then
25
- to_snake_case(value)
26
- elsif value.is_a?(Array) and value.first.is_a? Hash
27
- value.map {|row| to_snake_case(row)}
28
- else
29
- value
30
- end
31
-
32
- r.merge key.to_s.sub(/^m_/,'').gsub(/[A-Z][a-z]/){|x| '_' +
33
- x.downcase}.gsub(/[a-z][A-Z]/){|x| x[0] + '_' + x[1].downcase}\
34
- .downcase.to_sym => val
35
-
36
- end
37
- end
38
-
39
- # turns keys from snake_case to CamelCase
40
- def to_camel_case(h=self)
41
-
42
- h.inject({}) do |r,x|
43
-
44
- key, value = x
45
-
46
- val = if value.is_a?(Hash) then
47
- to_camel_case(value)
48
- elsif value.is_a?(Array) and value.first.is_a? Hash
49
- value.map {|row| to_camel_case(row)}
50
- else
51
- value
52
- end
53
-
54
- r.merge({key.to_s.gsub(/(?<!^m)_[a-z]/){|x| x[-1].upcase} => val})
55
- end
56
-
57
- end
58
-
59
-
60
- end
61
-
62
- end
63
11
 
64
12
  class MacroObject
65
13
  using ColouredText
@@ -1,4 +1,4 @@
1
- # file: ruby-macrodroid/constraints.rb
1
+ # file: ruby-macrodroid/triggers.rb
2
2
 
3
3
  # This file contains the following classes:
4
4
  #
@@ -26,6 +26,8 @@
26
26
  #
27
27
 
28
28
 
29
+
30
+
29
31
  class Trigger < MacroObject
30
32
  using Params
31
33
 
@@ -132,7 +134,9 @@ class ApplicationLaunchedTrigger < Trigger
132
134
  end
133
135
 
134
136
  def to_s(colour: false)
135
- 'ApplicationLaunchedTrigger ' + @h.inspect
137
+ a = @h[:application_name_list]
138
+ apps = a.length > 1 ? "[%s]" % a.join(', ') : a.first
139
+ 'Application Launched' + "\n " + apps
136
140
  end
137
141
 
138
142
  alias to_summary to_s
@@ -971,6 +975,28 @@ class MusicPlayingTrigger < DeviceEventsTrigger
971
975
  end
972
976
 
973
977
 
978
+ # Category: Device Events
979
+ #
980
+ class NFCTrigger < DeviceEventsTrigger
981
+
982
+ def initialize(h={})
983
+
984
+ options = {
985
+ }
986
+
987
+ super(options.merge h)
988
+
989
+ end
990
+
991
+ def to_s(colour: false)
992
+ 'NFC Tag' + "\n " + @h[:tag_name]
993
+ end
994
+
995
+ alias to_summary to_s
996
+
997
+ end
998
+
999
+
974
1000
  # Category: Device Events
975
1001
  #
976
1002
  class DeviceUnlockedTrigger < DeviceEventsTrigger
@@ -1254,6 +1280,28 @@ class SunriseSunsetTrigger < Trigger
1254
1280
  end
1255
1281
 
1256
1282
 
1283
+ # Category: MacroDroid Specific
1284
+ #
1285
+ class EmptyTrigger < Trigger
1286
+
1287
+ def initialize(h={})
1288
+
1289
+ options = {
1290
+
1291
+ }
1292
+
1293
+ super(options.merge h)
1294
+
1295
+ end
1296
+
1297
+ def to_s(colour: false)
1298
+ 'EmptyTrigger'
1299
+ end
1300
+
1301
+ alias to_summary to_s
1302
+ end
1303
+
1304
+
1257
1305
  class SensorsTrigger < Trigger
1258
1306
 
1259
1307
  def initialize(h={})
@@ -1556,3 +1604,34 @@ class SwipeTrigger < Trigger
1556
1604
 
1557
1605
  alias to_summary to_s
1558
1606
  end
1607
+
1608
+
1609
+
1610
+
1611
+ # Category: User Input
1612
+ #
1613
+ class WidgetPressedTrigger < Trigger
1614
+
1615
+ def initialize(h={})
1616
+
1617
+ options = {
1618
+ :swipe_start_area=>0, :swipe_motion=>0, :cleared=>true,
1619
+ :image_id=>2130968576, :image_package_name=>"com.android.providers.settings",
1620
+ :image_resource_name=>"com.android.providers.settings", :widget_label=>"",
1621
+ :widget_type=>4
1622
+ }
1623
+
1624
+ super(options.merge h)
1625
+
1626
+ end
1627
+
1628
+ def to_s(colour: false)
1629
+ # 4 == cutom , 0 = green, 1 = blue, 2 = red, 3 = yellow
1630
+ style = %w(Green Blue Red Yellow Custom)[@h[:widget_type]]
1631
+ @s = "Widget Button (%s)" % [style] #+ @h.inspect
1632
+ super()
1633
+ end
1634
+
1635
+ alias to_summary to_s
1636
+ end
1637
+
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.8.1
4
+ version: 0.8.7
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-09-15 00:00:00.000000000 Z
38
+ date: 2020-09-20 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: glw
metadata.gz.sig CHANGED
Binary file