-
Notifications
You must be signed in to change notification settings - Fork 46
/
Copy pathNiuDataWidget.js
1041 lines (906 loc) · 106 KB
/
NiuDataWidget.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
// Variables used by Scriptable.
// These must be at the very top of the file. Do not edit.
// icon-color: red; icon-glyph: motorcycle;
// NiuData Widget
// Version 1.0
// Vxider ([email protected])
//
// Map Code blatenly stolen from @ThisIsBenny
//
{
var show_last_track_map = true;
var show_map = false;
var username = "";
var password = "";
var sn = ""
var debug_size = "medium"; // which size should the widget try to run as when run through Scriptable. (small, medium, large)
var is_dark_mode_working = true; // always use white theme when setting to false
}
var mapKey = "";
var useGoogleMaps = false;
// set up all the colors we want to use
var colors = {
background: "#ffffff",
background_status: "#ffffff33",
text: {
primary: "#333333cc",
status: "#737782",
distance: "#333333"
},
battery: {
charging: "#ddbb22",
centreCtrl: "#E74C3C",
default: "#2BD82E",
low: "#E74C3C"
},
icons: {
default: "#33333399",
locked: "#0080FF",
acc_on: "#00CC00"
},
map: {
type: "light", // light or dark
position: "222222" // hex without the #
}
}
function isDarkMode()
{
return Device.isUsingDarkAppearance() && is_dark_mode_working;
}
if (isDarkMode()) {
colors.background = "#1E1E1E";
colors.background_status = "#dddddd88";
colors.text.distance = "#FFFFFF";
colors.text.primary = "#FFFFFF";
colors.icons.default = "#FFFFFF";
colors.map.type = "dark";
colors.map.position = "CB4335";
}
const battery_icon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAtCAYAAADbcffLAAADIUlEQVRoBe2bzWsTQRTA501WENRTEeoXCGKTNKmtCBUErdWr6LXpxVsP/gOCB73oTfSu3ork7s0PtO1FEYSaNG5E/ECpCm0vfoCH7D7fJiWks2/JdJlT9i2UzvzmzYP3IwyTzQwo5ik1x6cVYkWBOk3Dh+hvFxM2yOgvFfdNASxBCNWV4vJCmmKhd1L5Q/kIBvoesXO9POttQPVMg5qrFWqft+OiK7fsl08h6Ec0eWg7CTIUu64RL9aL9Ze2NbflFvyJwzkIX9OkvbYTMxq3Abnw5MrRlY829esoiMQ+oH8itr+xIVo27/cP60ToUvNYtL6et50gcWq67E+ctfHgKVQztCvgnn8K8JpqhdVGqfGTCxhUVnx3Yp/OtSq0Y7pFNe6M1QnBDLGFGDeAR2LPGKzTJbGNfP0uOzbg0B9984NKvDPqjwMA3jbLRQW8MyMwWnMPGKzTpU8syzMEIWw9TCj3YALfgiO5u7eQzU7WloJtOtjDxZusvVswofTdGBC5bjyyWUQuq8UNFLluPLJZRC6rxQ303KTJdhb6los9Br4rBfMqaF0XuT1WHDX3K4VXVc5Tsiw4MhpPg5dFbtyKKzIscl2pZPKIXEaKKyRyXZlk8ohcRoorJHJdmWTyiFxGiiskcl2ZZPKIXEaKKyRyXZmM51kVuXEpbgjivLy4caOyN0vnrVgY3BC5vVpSthuFGnvyQ5aFlEJtpolcG0spY0RuSnE200SujaWUMSI3pTibaZHc31xgqVEa5niWWL55nH4P4x78xVGTRXJpX8Y8njfL0EyhHRgkOIBVGxF0hBQW6RxqPhZMZ1NL78dVGHjVzSOVsZBBBdH5XIDWLALe5Gqk39EXOW4yaF+LUvjcHJB+soFQ45Q/Ul9KjuiM6Ebh7Qv69D7tFyjjXQOPbcRG0e3dQhDCHLXXutOlkWRgQ2u8kjRo8rbcZnH5C92xukSD62aA9LsG1sJQXaiP1D91SZ9GW24UE11eyyk1KUsEZwyfBKgn/dHaK240ibFvc8b8sSkEVdm8WBHd/WWP9iclHQD+h3ZQX5Hu/qLGqu0aa9b9HyijvIXRaGahAAAAAElFTkSuQmCC'
const shield_icon = 'data:image/png;base64,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'
const power_on_icon = 'data:image/png;base64,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'
const power_off_icon = 'data:image/png;base64,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'
const no_battery_icon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABmJLR0QA/wD/AP+gvaeTAAACeklEQVRIie2VP0xTURSHv/N4GJuoSUnE9m0aNCYwODBgeUxM0GJCImww4KQJjv6JiSa6uDPg4qKTkYhJW5yIyGvrxERIDBEGE9sGiAgMVEzfceAVWqQC9rHx2+65v3e/c+659z440YlO5JMEYK6v+VTDZvAZwgBK2GdGFuH1j9Orj5vfzm2VgiZAQyH4FLiH+ozcloVyP7gZVOBhBRhlAMBQo/1CcjrjJzXbY9uiOAKD5WBjJyvAbyiAFU+lyhklmfuZczHbl00PJ1JSbW5f8HHKKyplHOg8Htm+ghUyotwy4FrBNIO7E3JHlHS516+t/obIoBV3Pu03GU46o8CoN1wELtUMVsj8Ms3oxfdTP/O9kUa2jLsIUYXLnmNekCT17khoPLNEUdq0Th8J7J7i0ik8wqlepCht4Q/Oci5q9yG8BM5W8W6ADIUTzhh4T+Ze8FHlQd+U1vuHFKQ/nHDGSuDvgKVCR9mFP5TyvZFG/W18pXqle7VOUZpML41XAg9EcXIx+1BfK3rbSqRfeD3dgbqG2FLUgggTAKp0YxAQxfEs5zAZNgBWA6tPFJ4D2UNmjeHWpQFcIVYel6IWrGRqRtTtFHU7rWRqhqIWKrN2Y//V03LlYvYGcKYstCyu0RmamJ4FyPZcvypa9xEIlXk2/HhADr4B8pdHawYLLFSsqHSFJqZn89FISz4aabHin79oUW/s4S74UXGiYmQQyHa3t6oYkyrGZLa7vRUhUMklXnOPj3ydhDXFbKq54tB4ZglkiMP0GlRdHbLiUyu+/J22n0HpB9armoQ1Vb1pJdPvtoc+KtfVcR6TYVSjwBUvPI9qQo36ESs+tVLy/gEwFO/qY+s2dQAAAABJRU5ErkJggg=='
const niu_icon = 'data:image/png;base64,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qZ9b7OkrRHbmOovUYwQIECBAgAABAgQIECBAgACBeQT2Y2Hmg4u6PrfYk0760N3YvehkzxEgQIAAAQIECBAgQIAAAQIECEwnENutX1qrubDY823338MId2+6kPVEgAABAgQIECBAgAABAgQIECBwjsD+ne7X/XOeO3n4wmJPOsrsnhMrdwgQIECAAAECBAgQIECAAAECswksM6snBXdpsSfN7omduS6dIjRbpjomQIAAAQIECBAgQIAAAQIECFQuEIWel8vM6kkMlxZ70kF25koKbgQIECBAgAABAgQIECBAgACBeQTedzcfL9vzPhjVHQAAIABJREFUUsWetDPXslOFlu3YcQQIECBAgAABAgQIECBAgAABAksJPO/XVV7q4GtLHdUf9Kq781Pc3VrlHMcSIECAAAECBAgQIECAAAECBAhcWeDoVvduM03EWbaFpWb2nGrs4an77hIgQIAAAQIECBAgQIAAAQIECIwoEOsoP1yl0JNCWanYc7d7fRDnPB8xB00TIECAAAECBAgQIECAAAECBAiEQFqU+evu1ctVMVYq9qTGY+pQ2pnrMN13I0CAAAECBAgQIECAAAECBAgQGEXgaJVFmU9HsHKxp1+s2eVcpxXdJ0CAAAECBAgQIECAAAECBAgMKJAu31plUebTXa9c7Eknp33do9M0w8eNAAECBAgQIECAAAECBAgQIEBgQIGrXr51HMK14ztX+Rq7c/0Y521f5VznECBAgAABAgQIECBAgAABAgQIfCFwGEvo3Ft1UebTrVxpZs9xA9H5d3F/6a2/js/zlQABAgQIECBAgAABAgQIECBA4AuBVGP5bp1CT2pxrWJPv35PKvi4ESBAgAABAgQIECBAgAABAgQIrCfwuN8Jfa1W1ir2pJ7T+j1xLdnjtaJwMgECBAgQIECAAAECBAgQIECgbYG9KPTsDUGw1po9pwOI9XtexPc7px9znwABAgQIECBAgAABAgQIECBA4FKB/Sj03L/0qCUPWHtmz3E/EdTDuL9//L2vBAgQIECAAAECBAgQIECAAAEClwoc9GsiX3rgsgcMVuxJHfbBHSzbueMIECBAgAABAgQIECBAgAABAg0LpJ237q+7IPPnfoMWe1JwKcjoRMHnc2nfEyBAgAABAgQIECBAgAABAgT+FBhk560/m/vz3mBr9vzZZNe96RYb77pbP8Zj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'
// set up a container for our data.
//NOTE: these values may not align with the data names from our service. Review the documention for the expected values and their names.
// If you want to do additional post-processing of data from your API, you should create a theme that modifies info_data.postLoad(json).
var info_data = {
scooter_name: '',
circle_color: '',
source: "Unknown",
last_contact: "",
usable_battery_level: -1,
centre_battery_level: -1,
battery_range: -1,
scooter_state: "Unknown",
scooter_img: "",
is_charging: false,
fortification_on: true,
time_to_charge: 10000,
longitude: -1,
latitude: -1,
gps: 0,
gsm: 0,
lastTrack_ridingTime: 0,
lastTrack_distance: 0,
battery_connected: false
};
var last_track_data = {
trackId: '',
ridingTime: 0,
distance: 0,
avespeed: 0,
track_thumb: '',
power_consumption: 0
};
var theme = {
small: {
available: true,
init: function () {
},
draw: async function (widget, info_data, colors) {
widget.setPadding(10, 10, 10, 10)
widget.backgroundColor = new Color(colors.background)
await theme.drawScooterStatus(widget, info_data, colors);
await theme.drawScooterInfo(widget, info_data, colors);
theme.drawLastTrack(widget, last_track_data, colors, true);
}
},
medium: { available: false, init: function () { }, draw: function () { } }, // this theme doesn't support medium
large: { available: false, init: function () { }, draw: function () { } }, // this theme doesn't support large
init: function () {
var widgetSizing = debug_size;
if (config.widgetFamily != null) {
widgetSizing = config.widgetFamily;
}
switch (widgetSizing) {
case "medium":
if (this.medium.available) { this.medium.init(); }
break;
case "large":
if (this.large.available) { this.large.init(); }
break;
case "small":
default:
if (this.small.available) { this.small.init(); }
break;
}
},
draw: async function (widget, info_data, colors) {
var widgetSizing = debug_size;
if (config.widgetFamily != null) {
widgetSizing = config.widgetFamily;
}
switch (widgetSizing) {
case "medium":
if (this.medium.available) { await this.medium.draw(widget, info_data, colors); }
else { drawErrorWidget(widget, 'Theme not available at this size'); }
break;
case "large":
if (this.large.available) { await this.large.draw(widget, info_data, colors); }
else { drawErrorWidget(widget, 'Theme not available at this size'); }
break;
case "small":
default:
if (this.small.available) { await this.small.draw(widget, info_data, colors); }
else { drawErrorWidget(widget, 'Theme not available at this size'); }
break;
}
}
}
theme.medium.available = true;
theme.medium.init = theme.small.init;
theme.medium.draw = theme.small.draw;
function addLastTrackMapArea() { // add the last track map area for medium size.
if (show_last_track_map && ! show_map) {
// only if we have everything we need, otherwise leave the medium size as is.
theme.medium.draw = async function (widget, info_data, colors) {
widget.setPadding(5, 5, 5, 5);
widget.backgroundColor = new Color(colors.background);
let body = widget.addStack();
body.layoutHorizontally();
let column_left = body.addStack();
column_left.setPadding(5, 5, 5, 5);
column_left.layoutVertically();
await theme.drawScooterStatus(column_left, info_data, colors);
await theme.drawScooterInfo(column_left, info_data, colors);
column_left.addSpacer(null);
theme.drawLastTrack(column_left, last_track_data, colors, false);
let center_padding = body.addSpacer(10);
let column_right = body.addStack();
var mapImage;
configFilePath = 'niu_data/niu_last_track_id_' + sn + '.data';
imageFilePath = 'niu_data/niu_last_track_thumb_' + sn + '.png';
var last_track_id = '';
let imageManager = FileManager.iCloud();
let configFile = imageManager.joinPath(imageManager.documentsDirectory(), configFilePath);
let imageFile = imageManager.joinPath(imageManager.documentsDirectory(), imageFilePath);
if (imageManager.fileExists(configFile))
{
imageManager.downloadFileFromiCloud(configFile);
last_track_id = imageManager.readString(configFile);
}
if (last_track_id == last_track_data.trackId && imageManager.fileExists(imageFile))
{
imageManager.downloadFileFromiCloud(imageFile);
mapImage = await imageManager.readImage(imageFile);
}
else
{
var req = new Request(last_track_data.track_thumb);
mapImage = await req.loadImage()
imageManager.writeImage(imageFile, mapImage);
imageManager.writeString(configFile, last_track_data.trackId);
}
column_right.topAlignContent();
let mapImageObj = column_right.addImage(mapImage);
mapImageObj.cornerRadius = 22;
mapImageObj.rightAlignImage();
}
}
}
function addMapArea() { // add the map area for medium size.
if (!show_last_track_map && show_map && info_data.longitude != -1 && info_data.latitude != -1) {
// only if we have everything we need, otherwise leave the medium size as is.
const mapZoomLevel = 15;
theme.medium.draw = async function (widget, info_data, colors) {
widget.setPadding(5, 5, 5, 5);
widget.backgroundColor = new Color(colors.background);
let body = widget.addStack();
body.layoutHorizontally();
let column_left = body.addStack();
column_left.layoutVertically();
column_left.setPadding(5, 5, 5, 5);
await theme.drawScooterStatus(column_left, info_data, colors);
await theme.drawScooterInfo(column_left, info_data, colors);
theme.drawLastTrack(column_left, last_track_data, colors, false);
let center_padding = body.addSpacer(10);
let column_right = body.addStack();
var mapImage;
roundedLat = Math.round(info_data.latitude * 2000) / 2000;
roundedLong = Math.round(info_data.longitude * 2000) / 2000;
if (isDarkMode())
storedFile = "niu_data/niu_widget_map_dark_" + roundedLat * 2000 + "_" + roundedLong * 2000 + ".image";
else
storedFile = "niu_data/niu_widget_map_" + roundedLat * 2000 + "_" + roundedLong * 2000 + ".image";
let map_image_manager = FileManager.iCloud();
let map_image_file = map_image_manager.joinPath(map_image_manager.documentsDirectory(), storedFile);
if (map_image_manager.fileExists(map_image_file)) {
// load old map from disk
map_image_manager.downloadFileFromiCloud(map_image_file);
mapImage = await map_image_manager.readImage(map_image_file);
}
if (mapImage == null) {
mapImage = await getMapImage(roundedLong, roundedLat, mapZoomLevel, colors);
// write image to disk for future use
map_image_manager.writeImage(map_image_file, mapImage);
}
column_right.topAlignContent();
if (useGoogleMaps) {
// use Google Maps
column_right.url = `comgooglemaps://maps.google.com/?center=${info_data.latitude},${info_data.longitude}&zoom=${mapZoomLevel}&q=${info_data.latitude},${info_data.longitude}`;
} else {
// use Apple Maps
column_right.url = `http://maps.apple.com/?ll=${info_data.latitude},${info_data.longitude}&q=Niu`;
}
let mapImageObj = column_right.addImage(mapImage);
mapImageObj.cornerRadius = 22;
mapImageObj.rightAlignImage();
}
}
}
var _0xd9c9 = ["\x32\x30\x30\x2C\x32\x30\x30\x40\x32\x78", "", "\x32\x4F\x6F\x59\x6D\x41\x46\x71\x49\x74\x53\x30\x71\x54\x54\x74\x48\x70\x37\x56\x72\x45\x56\x42\x48\x67\x49\x45\x7A\x4E\x58\x41", "\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x6D\x61\x70\x71\x75\x65\x73\x74\x61\x70\x69\x2E\x63\x6F\x6D\x2F\x73\x74\x61\x74\x69\x63\x6D\x61\x70\x2F\x76\x35\x2F\x6D\x61\x70\x3F\x6B\x65\x79\x3D", "\x26\x6C\x6F\x63\x61\x74\x69\x6F\x6E\x73\x3D", "\x2C", "\x26\x7A\x6F\x6F\x6D\x3D", "\x26\x66\x6F\x72\x6D\x61\x74\x3D\x70\x6E\x67\x26\x73\x69\x7A\x65\x3D", "\x26\x74\x79\x70\x65\x3D", "\x74\x79\x70\x65", "\x6D\x61\x70", "\x26\x64\x65\x66\x61\x75\x6C\x74\x4D\x61\x72\x6B\x65\x72\x3D\x6D\x61\x72\x6B\x65\x72\x2D", "\x70\x6F\x73\x69\x74\x69\x6F\x6E", "\x6C\x6F\x61\x64\x49\x6D\x61\x67\x65"]; async function getMapImage(_0x4583x2, _0x4583x3, _0x4583x4, _0x4583x5) { var _0x4583x6 = _0xd9c9[0]; if (mapKey == null || mapKey == _0xd9c9[1]) { mapKey = _0xd9c9[2] }; let _0x4583x7 = `${_0xd9c9[3]}${mapKey}${_0xd9c9[4]}${_0x4583x3}${_0xd9c9[5]}${_0x4583x2}${_0xd9c9[6]}${_0x4583x4}${_0xd9c9[7]}${_0x4583x6}${_0xd9c9[8]}${_0x4583x5[_0xd9c9[10]][_0xd9c9[9]]}${_0xd9c9[11]}${_0x4583x5[_0xd9c9[10]][_0xd9c9[12]]}${_0xd9c9[1]}`; r = new Request(_0x4583x7); i = await r[_0xd9c9[13]](); return i }
theme.drawScooterStatus = async function (widget, info_data, colors) {
let stack = widget.addStack();
stack.topAlignContent();
stack.setPadding(0, 6, 0, 6);
var column_left = stack.addStack();
column_left.layoutVertically();
let scooterName = column_left.addText(info_data.scooter_name);
scooterName.textColor = new Color(colors.text.status);
scooterName.centerAlignText()
scooterName.font = Font.semiboldSystemFont(12)
scooterName.minimumScaleFactor = 0.5
let signal_info = column_left.addStack();
signal_info.layoutHorizontally();
signal_info.setPadding(3, 0, 3, 0);
var GPStext1 = "GPS ";
for (i = 0; i < info_data.gps && i < 5; i++)
GPStext1 = GPStext1 + "•";
var GPStext2 = '';
for (i = info_data.gps; i < 5; i++)
GPStext2 = GPStext2 + "•";
let gpsLabel1 = signal_info.addText(GPStext1)
gpsLabel1.font = Font.boldMonospacedSystemFont(8)
gpsLabel1.textColor = new Color(colors.text.status);
let gpsLabel2 = signal_info.addText(GPStext2)
gpsLabel2.font = Font.boldMonospacedSystemFont(8)
gpsLabel2.textColor = new Color(colors.text.primary);
gpsLabel2.textOpacity = 0.3
var GSMtext1 = " GSM ";
for (i = 0; i < info_data.gsm && i < 5; i++)
GSMtext1 = GSMtext1 + "•";
var GSMtext2 = "";
for (i = info_data.gsm; i < 5; i++)
GSMtext2 = GSMtext2 + "•";
let gsmLabel1 = signal_info.addText(' ' + GSMtext1);
gsmLabel1.font = Font.boldMonospacedSystemFont(8);
gsmLabel1.textColor = new Color(colors.text.status);
let gsmLabel2 = signal_info.addText(GSMtext2);
gsmLabel2.font = Font.boldMonospacedSystemFont(8);
gsmLabel2.textColor = new Color(colors.text.status);
gsmLabel2.textOpacity = 0.3
stack.addSpacer(null)
switch (info_data.scooter_state) {
case "fortification_on": {
let req = new Request(shield_icon)
let lockIcon = await req.loadImage()
var scooterState = stack.addImage(lockIcon);
scooterState.imageSize = scaleImage(lockIcon.size, 22);
scooterState.rightAlignImage();
break;
}
case "acc_off": {
let req = new Request(power_off_icon)
let powerOffIcon = await req.loadImage()
var scooterState = stack.addImage(powerOffIcon);
scooterState.imageSize = scaleImage(powerOffIcon.size, 22);
scooterState.rightAlignImage();
break;
}
case "acc_on": {
let req = new Request(power_on_icon)
let powerOnIcon = await req.loadImage()
var scooterState = stack.addImage(powerOnIcon);
scooterState.imageSize = scaleImage(powerOnIcon.size, 22);
scooterState.rightAlignImage();
break;
}
case "disconnected": {
let req = new Request(no_battery_icon)
let disconnectIcon = await req.loadImage()
var scooterState = stack.addImage(disconnectIcon);
scooterState.imageSize = scaleImage(disconnectIcon.size, 22);
scooterState.rightAlignImage();
break;
}
default: {
}
}
}
theme.drawScooterInfo = async function (widget, info_data, colors) {
let stack = widget.addStack();
stack.centerAlignContent();
stack.layoutHorizontally();
let imageFileManager = FileManager.iCloud();
var imageFile = imageFileManager.joinPath(imageFileManager.documentsDirectory(), 'niu_data/niu_scooter_img_' + sn + '.png');
if (imageFileManager.fileExists(imageFile))
{
imageFileManager.downloadFileFromiCloud(imageFile);
var imageContent = imageFileManager.readImage(imageFile);
}
else
{
var req = new Request(info_data.scooter_img);
var imageContent = await req.loadImage();
imageFileManager.writeImage(imageFile, imageContent);
}
var column_right = stack.addStack();
column_right.layoutVertically();
column_right.topAlignContent();
let estimatedMileage = column_right.addStack();
estimatedMileage.layoutHorizontally();
let estimatedMileageText = estimatedMileage.addStack().addText(Math.floor(info_data.battery_range) + "KM");
estimatedMileageText.font = Font.boldMonospacedSystemFont(20);
estimatedMileageText.textColor = new Color(colors.text.distance);
estimatedMileageText.leftAlignText();
estimatedMileage.addSpacer(null);
column_right.addSpacer(3);
let battery = column_right.addStack();
battery.layoutHorizontally();
battery.centerAlignContent();
if (info_data.is_charging)
{
var battery_image = SFSymbol.named("battery.100.bolt").image;
var image_stack = battery.addImage(battery_image);
image_stack.tintColor = new Color(colors.battery.charging);
image_stack.imageSize = scaleImage(image_stack.image.size, 10)
image_stack.leftAlignImage();
}
else if (info_data.battery_connected)
{
let req = new Request(battery_icon)
let battery_image = await req.loadImage()
let batteryImageContext = new DrawContext()
batteryImageContext.opaque = true
batteryImageContext.size = battery_image.size;
batteryImageContext.setFillColor(new Color(colors.background));
batteryImageContext.fillRect(new Rect(0, 0, battery_image.size.width, battery_image.size.height))
batteryImageContext.drawImageAtPoint(battery_image, new Point(0, 0))
batteryImageContext.setFillColor(new Color(info_data.usable_battery_level > 20 ? colors.battery.default : colors.battery.low));
var bar_width = (info_data.usable_battery_level / 100) * (battery_image.size.width - 28);
batteryImageContext.fillRect(new Rect(10, 8, bar_width, battery_image.size.height - 17))
var image_stack = battery.addImage(batteryImageContext.getImage());
image_stack.imageSize = scaleImage(image_stack.image.size, 10)
image_stack.leftAlignImage();
}
else
{
var battery_image = SFSymbol.named("cpu").image;
var image_stack = battery.addImage(battery_image);
image_stack.tintColor = new Color(colors.battery.centreCtrl);
image_stack.imageSize = scaleImage(image_stack.image.size, 10)
image_stack.leftAlignImage();
}
if (info_data.battery_connected)
var batteryText = battery.addStack().addText(' ' + Math.floor(info_data.usable_battery_level) + "%");
else
var batteryText = battery.addStack().addText(' ' + Math.floor(info_data.centre_battery_level) + "%");
batteryText.font = Font.boldMonospacedSystemFont(14);
batteryText.leftAlignText();
if (info_data.is_charging)
batteryText.textColor = new Color(colors.battery.charging)
else if (info_data.battery_connected)
batteryText.textColor = new Color(info_data.usable_battery_level > 20 ? colors.battery.default : colors.battery.low);
else
batteryText.textColor = new Color(colors.battery.centreCtrl)
battery.addSpacer(null);
column_right.addSpacer(3);
const address = await Location.reverseGeocode(info_data.latitude, info_data.longitude);
var location_text = address[0].name;
let location = column_right.addStack();
location.layoutHorizontally();
let mapIcon = location.addImage(SFSymbol.named("location.fill").image);
mapIcon.imageSize = scaleImage(mapIcon.image.size, 8)
mapIcon.tintColor = new Color(colors.icons.default);
location.addSpacer(1);
let location_stack = location.addText(location_text);
location_stack.font = Font.systemFont(8);
location_stack.textColor = new Color(colors.text.primary);
location_stack.leftAlignText();
location.addSpacer(null);
column_right.addSpacer(null);
if (info_data.last_contact.length > 0) {
let lastUpdate = column_right.addStack();
lastUpdate.layoutHorizontally();
let lastUpdateText = lastUpdate.addStack().addText(info_data.last_contact)
lastUpdateText.textColor = new Color(colors.text.status);
lastUpdateText.font = Font.systemFont(8)
lastUpdateText.leftAlignText()
lastUpdate.addSpacer(null);
}
column_right.addSpacer(1);
stack.addSpacer(null);
let scooter_img_context = new DrawContext()
var canvSize = 200;
canvWidth = 45;
scooter_img_context.opaque = true
scooter_img_context.setFillColor(new Color(colors.background));
scooter_img_context.fillRect(new Rect(0, 0, scooter_img_context.size.width, scooter_img_context.size.height))
bgr = new Rect(canvSize * 0.11, -canvSize * 0.15, canvSize * 1.1, canvSize * 1.1);
scooter_img_context.setStrokeColor(new Color(info_data.circle_color));
scooter_img_context.setLineWidth(canvWidth);
scooter_img_context.strokeEllipse(bgr);
const canvLogoRect = new Rect(canvSize * 0.1, - canvSize * 0.1, canvSize * 1.2,canvSize * 1.2);
scooter_img_context.drawImageInRect(imageContent, canvLogoRect)
stack.addImage(scooter_img_context.getImage());
}
theme.drawLastTrack = function (widget, last_track_data, colors, is_small) {
let stack = widget.addStack();
stack.setPadding(3, 5, 3, 5);
stack.backgroundColor = new Color(colors.background_status);;
stack.cornerRadius = 5;
stack.centerAlignContent();
let mapIcon = stack.addImage(this.getMapIcon());
mapIcon.imageSize = scaleImage(mapIcon.image.size, 8)
mapIcon.tintColor = new Color(colors.icons.default);
stack.addSpacer(2);
let distance = stack.addText((last_track_data.distance / 1000).toFixed(1) + 'KM')
distance.textColor = new Color(colors.text.primary);
distance.font = Font.systemFont(10)
stack.addSpacer(null);
let clockIcon = stack.addImage(this.getClockIcon());
clockIcon.imageSize = scaleImage(clockIcon.image.size, 8)
clockIcon.tintColor = new Color(colors.icons.default);
stack.addSpacer(2);
if(is_small)
var clock = stack.addText(Math.round(last_track_data.ridingTime / 60) + "m")
else
var clock = stack.addText(Math.round(last_track_data.ridingTime / 60) + "min")
clock.textColor = new Color(colors.text.primary);
clock.font = Font.systemFont(10)
stack.addSpacer(null);
let batteryIcon = stack.addImage(this.getFlashIcon());
batteryIcon.imageSize = scaleImage(batteryIcon.image.size, 8)
batteryIcon.tintColor = new Color(colors.icons.default);
stack.addSpacer(2);
let battery = stack.addText(last_track_data.power_consumption + "%")
battery.textColor = new Color(colors.text.primary);
battery.font = Font.systemFont(10)
}
{ // helper functions to draw things for status lights
theme.getMapIcon = function () {
return SFSymbol.named("location.circle.fill").image;
}
theme.getClockIcon = function () {
return SFSymbol.named("clock.fill").image;
}
theme.getFlashIcon = function () {
return SFSymbol.named("bolt.circle.fill").image;
}
}
function presentWidget(widget) {
switch (debug_size) {
case "medium":
widget.presentMedium();
break;
case "large":
widget.presentLarge();
break;
case "small":
default:
widget.presentSmall();
break;
}
}
async function createWidget(info_data, colors) {
let w = new ListWidget()
theme.init();
await theme.draw(w, info_data, colors);
return w
}
async function createLockScreenWidget(usable_battery_level) {
let w = new ListWidget()
let req = new Request(niu_icon)
let iconImage = await req.loadImage()
let progressStack = await progressCircle(w, usable_battery_level)
let stack = progressStack.addStack();
stack.layoutVertically();
let text_stack = stack.addStack();
text_stack.layoutHorizontally();
text_stack.centerAlignContent();
text_stack.addSpacer()
let text = text_stack.addText(usable_battery_level.toString())
text.font = Font.semiboldSystemFont(20)
text_stack.addSpacer()
let image_stack = stack.addStack();
image_stack.layoutHorizontally();
image_stack.centerAlignContent();
image_stack.addSpacer()
let sf = image_stack.addImage(iconImage)
sf.imageSize = new Size(10,10)
image_stack.addSpacer()
return w
}
function errorWidget(reason) {
let w = new ListWidget()
drawErrorWidget(w, reason);
return w
}
function drawErrorWidget(w, reason) {
w.setPadding(5, 5, 5, 5)
let myGradient = new LinearGradient()
w.backgroundColor = new Color("#933")
myGradient.colors = [new Color("#44444466"), new Color("#88888855"), new Color("#66666655")]
myGradient.locations = [0, 0.8, 1]
w.backgroundGradient = myGradient
let title = w.addText("Error")
title.textColor = Color.white()
title.font = Font.semiboldSystemFont(30)
title.minimumScaleFactor = 0.5
let reasonText = w.addText(reason)
reasonText.textColor = Color.white()
reasonText.minimumScaleFactor = 0.5
}
async function progressCircle(
on,
value = 50,
colour = "hsl(120, 100%, 50%)",
background = "hsl(0, 100%, 50%)",
size = 60,
barWidth = 4.4
) {
if (value > 1) {
value /= 100
}
if (value < 0) {
value = 0
}
if (value > 1) {
value = 1
}
if (colour.split("-").length > 1) {
colour = colour.split("-")[0]
}
if (background.split("-").length > 1) {
background = background.split("-")[0]
}
let w = new WebView()
await w.loadHTML('<canvas id="c"></canvas>')
let base64 = await w.evaluateJavaScript(
`
let colour = "${colour}",
background = "${background}",
size = ${size}*3,
lineWidth = ${barWidth}*4,
percent = ${value * 100}
let canvas = document.getElementById('c'),
c = canvas.getContext('2d')
canvas.width = size
canvas.height = size
let posX = canvas.width / 2,
posY = canvas.height / 2,
onePercent = 360 / 100,
result = onePercent * percent
c.lineCap = 'round'
c.beginPath()
c.arc( posX, posY, (size-lineWidth-1)/2, (Math.PI/180) * 270, (Math.PI/180) * (270 + 360) )
c.strokeStyle = background
c.lineWidth = lineWidth
c.stroke()
c.beginPath()
c.strokeStyle = colour
c.lineWidth = lineWidth
c.arc( posX, posY, (size-lineWidth-1)/2, (Math.PI/180) * 270, (Math.PI/180) * (270 + result) )
c.stroke()
completion(canvas.toDataURL().replace("data:image/png;base64,",""))`,
true
)
const image = Image.fromData(Data.fromBase64String(base64))
let stack = on.addStack()
stack.size = new Size(size, size)
stack.backgroundImage = image
stack.centerAlignContent()
let padding = barWidth * 2
stack.setPadding(padding, padding, padding, padding)
return stack
}
async function fetchScooterDetail(token, sn) {
var req = new Request('https://app-api.niu.com/v5/scooter/detail/' + sn);
req.method = 'GET';
req.headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'manager/4.6.48 (iPhone; iOS 15.1.1; Scale/3.00);timezone=Asia/Shanghai;model=iPhone13,2;lang=zh-CN;ostype=iOS;clientIdentifier=Domestic',
'token': token
};
var json = await req.loadJSON();
if (json.status == 0)
return [true, json];
else
return [false, json];
}
async function fetchInfoData(token) {
var req = new Request('https://app-api.niu.com/v3/motor_data/index_info?&sn=' + sn);
req.method = 'GET';
req.headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148',
'token': token
};
var json= await req.loadJSON();
if (json.status == 0)
return [true, json];
else
return [false, json];
}
async function loadLastTrackData(token, sn, from_local = true) {
let fileManager = FileManager.iCloud();
let file = fileManager.joinPath(fileManager.documentsDirectory(), 'niu_data/niu_last_track_' + sn + '.dat');
if (from_local && fileManager.fileExists(file))
{
fileManager.downloadFileFromiCloud(file);
return [true, JSON.parse(fileManager.readString(file))];
}
else
{
var req = await new Request('https://app-api.niu.com/v5/track/list/v2');
req.method = 'POST';
req.headers = {
'Content-Type': 'application/json',
'User-Agent': 'manager/4.6.20 (iPhone; iOS 14.5.1; Scale/3.00);timezone=Asia/Shanghai;model=iPhone13,2;lang=zh-CN;ostype=iOS;clientIdentifier=Domestic',
'token': token
};
req.body = '{"sn":"' + sn + '","index":"0","token":"' + token + '","pagesize":1}';
var json = await req.loadJSON();
if (json.status == 0)
{
fileManager.writeString(file, JSON.stringify(json));
return [true, json];
}
return [false, json];
}
}
async function loadToken(force = false) {
let tokenManager = FileManager.iCloud()
token_file = tokenManager.joinPath(tokenManager.documentsDirectory(), "niu_data/token_" + username + ".dat");
if (force || !tokenManager.fileExists(token_file)) {
var request_ = await new Request('https://account.niu.com/v3/api/oauth2/token');
request_.method = "POST";
request_.headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'manager/4.6.48 (iPhone; iOS 15.1.1; Scale/3.00);timezone=Asia/Shanghai;model=iPhone13,2;lang=zh-CN;ostype=iOS;clientIdentifier=Domestic'
};
request_.body = 'account=' + username + '&password=' + password + '&app_id=niu_03cn0n7v&scope=base&countryCode=86&grant_type=password';
var json = await request_.loadJSON();
if (json.status == 0) {
var token = json.data.token.access_token;
tokenManager.writeString(token_file, token)
return [true, token];
}
else {
return [false, JSON.stringify(json)];
}
}
else {
tokenManager.downloadFileFromiCloud(token_file);
return [true, tokenManager.readString(token_file)];
}
}
async function action(type, token) {
var req = new Request('https://app-api.niu.com/v5/cmd/creat');
req.method = 'POST';
req.headers = {
'Content-Type': 'application/json',
'User-Agent': 'manager/4.6.20 (iPhone; iOS 14.5.1; Scale/3.00);timezone=Asia/Shanghai;model=iPhone13,2;lang=zh-CN;ostype=iOS;clientIdentifier=Domestic',
'token': token
};
req.body = '{"token":"' + token + '","sn":"' + sn + '", "type":"' + type + '"}';
var json = await req.loadJSON();
if (json.status == 0)
return [true, json];
else
return [false, json];
}
function parseInfoData(json) {
info_data.usable_battery_level = json.data.batteries.compartmentA.batteryCharging;
info_data.battery_connected = json.data.batteries.compartmentA.isConnected;
info_data.centre_battery_level = json.data.centreCtrlBattery;
info_data.battery_range = json.data.estimatedMileage;
info_data.is_charging = json.data.isCharging == 1;
if (!info_data.battery_connected)
info_data.scooter_state = "disconnected";
else if (json.data.isFortificationOn == 1)
info_data.scooter_state = "fortification_on";
else if (json.data.isAccOn == 1)
info_data.scooter_state = "acc_on";
else
info_data.scooter_state = "acc_off"
info_data.gps = json.data.gps;
info_data.gsm = Math.ceil(json.data.gsm / 2.5);
info_data.fortification_on = (json.data.isFortificationOn == 1);
info_data.time_to_charge = json.data.leftTime;
info_data.longitude = json.data.postion.lng;
info_data.latitude = json.data.postion.lat;
info_data.lastTrack_ridingTime = json.data.lastTrack.ridingTime;
info_data.lastTrack_distance = json.data.lastTrack.distance;
const timeFormatter = new DateFormatter();
timeFormatter.dateFormat = "HH:mm"
info_data.last_contact = timeFormatter.string(new Date(json.data.time));
}
function parseScooterDetail(json) {
info_data.scooter_name = json.data.scooter_name;
info_data.scooter_img = json.data.index_scooter_img;
if (info_data.scooter_state == "acc_on")
info_data.circle_color = "#28F67E";
else if (isDarkMode())
info_data.circle_color = "#373C40";
else
info_data.circle_color = "#eeeeee"
}
function parseLastTrackData(json) {
last_track_data.ridingTime = json.data.items[0].ridingtime;
last_track_data.trackId= json.data.items[0].trackId;
last_track_data.distance = json.data.items[0].distance;
last_track_data.avespeed = json.data.items[0].avespeed;
last_track_data.track_thumb = json.data.items[0].track_thumb;
last_track_data.power_consumption = json.data.items[0].power_consumption;
}
async function loadNiuData() {
let config_folder = FileManager.iCloud()
folder_file = config_folder.joinPath(config_folder.documentsDirectory(), "niu_data/");
if (!config_folder.fileExists(folder_file)) {
config_folder.createDirectory(folder_file);
}
if (username != null && username != "" && password != null && password != "" && sn != null && sn != "") {
try {
var token = await loadToken();
if (!token[0])
token = await loadToken(true);
if (!token[0])
return token[1];
var infoJson = await fetchInfoData(token[1]);
if (!infoJson[0])
{
token = await loadToken(true);
return infoJson[1];
}
var lastTrackJSON = await loadLastTrackData(token[1], sn, (infoJson[1].data.isAccOn == 1));
if (!lastTrackJSON[0])
{
token = await loadToken(true);
return lastTrackJSON[1];
}
var scooterDetailJSON = await fetchScooterDetail(token[1], sn);
if (!scooterDetailJSON[0])
{
token = await loadToken(true);
return scooterDetailJSON[1];
}
parseInfoData(infoJson[1]);
parseLastTrackData(lastTrackJSON[1]);
parseScooterDetail(scooterDetailJSON[1]);
} catch (e) {
// offline, grab the backup copy
return e.toString();
}
} else {
niu_data = getSampleData();
}
return "ok";
}
// utility functions
function scaleLines(lineArray, maxHeight, offsetX, offsetY) {
//scale an array of lines and make it an array of scaled Points
let pointArray = [];
let scaleFactor = 0;
for (var i = 0; i < lineArray.length; i++) {
if (lineArray[i][1] > scaleFactor) { scaleFactor = lineArray[i][1]; }
}
scaleFactor = maxHeight / scaleFactor;
for (var i = 0; i < lineArray.length; i++) {
pointArray[pointArray.length] = new Point(lineArray[i][0] * scaleFactor + offsetX, lineArray[i][1] * scaleFactor + offsetY);
}
return pointArray;
}
function scaleImage(imageSize, height) {
scale = height / imageSize.height
return new Size(scale * imageSize.width, height)
}
function getSampleData() {
return {
"scooter_name": 'Test',
"usable_battery_level": 88,
"centre_battery_level": 100,
"battery_range": 104,
"scooter_state": "Unknown",
"fortification_on": true,
"is_charging": false,
"time_to_charge": 10000,
"longitude": -1,
"latitude": -1,
"last_contact": "10m ago",
"lastTrack_ridingTime": 0,
"lastTrack_distance": 0,
"battery_connected": true,
"gps": 0,
"gsm": 0
}
}
switch (args.plainTexts[0]) {
case "fortification_on":
case "fortification_off":
case "acc_on":
case "acc_off":
var token = await loadToken();
if (!token[0])
var token = await loadToken(true);
var actionJson = await action(args.plainTexts, token[1]);
if (!actionJson[0])
token = await loadToken(true);
return actionJson[1];
case "acc_toggle":
await loadNiuData()
var command = "acc_off";
if (info_data.scooter_state == "fortification_on" || info_data.scooter_state == "acc_off")
command = "acc_on";
var token = await loadToken();
if (!token[0])
var token = await loadToken(true);
var actionJson = await action(command, token[1]);
if (!actionJson[0])
token = await loadToken(true);
return actionJson[1];
case "scooter_info":
await loadNiuData()
const address = await Location.reverseGeocode(info_data.latitude, info_data.longitude);