@ledvance/group-ui-biz-bundle 1.0.32 → 1.0.35
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.
- package/package.json +1 -1
- package/src/modules/flags/FlagActions.ts +1 -1
- package/src/modules/flags/FlagPage.tsx +1 -1
- package/src/modules/mood/AddMoodPage.tsx +2 -2
- package/src/modules/mood/DynamicMoodEditorPage.tsx +2 -0
- package/src/modules/mood/MoodItem.tsx +1 -0
- package/src/modules/mood/MoodPage.tsx +8 -1
- package/src/modules/mood/SceneInfo.ts +217 -15
- package/src/modules/randomTimeForPlug/RandomTimeForPlugAction.ts +41 -78
package/package.json
CHANGED
|
@@ -55,7 +55,7 @@ export const useFlag: UseFlagType = (params) => {
|
|
|
55
55
|
|
|
56
56
|
return dps
|
|
57
57
|
}
|
|
58
|
-
}, flagData => ({workMode: (params.isStripLight && flagData?.drawToolStatus) ? WorkMode.Colour : WorkMode.Scene,
|
|
58
|
+
}, flagData => ({workMode: (params.isStripLight && flagData?.drawToolStatus) ? WorkMode.Colour : WorkMode.Scene, switch_led: true}))
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
export interface FlagOption {
|
|
@@ -223,7 +223,7 @@ const FlagPage = () => {
|
|
|
223
223
|
enable={flagState?.workMode === (params.isStripLight ? WorkMode.Colour : WorkMode.Scene) && flagId === item.id && flagMode?.flagMode}
|
|
224
224
|
title={item.name}
|
|
225
225
|
icon={item.icon}
|
|
226
|
-
colors={item.colors.map(item => hsv2Hex(item.h, item.s, item.v))}
|
|
226
|
+
colors={item.colors.map(item => hsv2Hex(item.h, item.s, item.v)).reverse()}
|
|
227
227
|
onSwitch={async (enable) => {
|
|
228
228
|
if (enable) {
|
|
229
229
|
await setFlag({
|
|
@@ -186,7 +186,7 @@ const MoodPage = () => {
|
|
|
186
186
|
sceneDataDpCode: params.sceneDataDpCode,
|
|
187
187
|
mixSceneDataDpCode: params.mixSceneDataDpCode,
|
|
188
188
|
workModeDpCode: params.workModeDpCode,
|
|
189
|
-
workMode
|
|
189
|
+
workMode,
|
|
190
190
|
switchLedDpCode: params.switchLedDpCode
|
|
191
191
|
})
|
|
192
192
|
}
|
|
@@ -195,6 +195,13 @@ const MoodPage = () => {
|
|
|
195
195
|
}
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
+
function getWorkMode(mood: SceneUIState | undefined, params: MoodPageProps): WorkMode {
|
|
199
|
+
if (mood) return WorkMode.Scene;
|
|
200
|
+
if (params.isSupportFan) return WorkMode.Control;
|
|
201
|
+
if (params.isSupportColor) return WorkMode.Colour;
|
|
202
|
+
return WorkMode.White;
|
|
203
|
+
}
|
|
204
|
+
|
|
198
205
|
const updateFlagMode = () =>{
|
|
199
206
|
if(flagMode?.flagMode && params.isSupportColor){
|
|
200
207
|
saveFlagMode(uaGroupInfo.tyGroupId.toString(), JSON.stringify({
|
|
@@ -20,7 +20,7 @@ export interface SceneInfo {
|
|
|
20
20
|
expand: number,
|
|
21
21
|
// 方向 0 顺时针方向, 1 逆时针方向
|
|
22
22
|
direction: number,
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
export interface SceneNodeInfo {
|
|
@@ -290,6 +290,7 @@ function getRGBWDefSceneList(): RemoteSceneInfo[] {
|
|
|
290
290
|
t: 0,
|
|
291
291
|
e: false,
|
|
292
292
|
},
|
|
293
|
+
...defColorSceneList
|
|
293
294
|
]
|
|
294
295
|
}
|
|
295
296
|
|
|
@@ -337,6 +338,7 @@ function getRGBDefSceneList(): RemoteSceneInfo[] {
|
|
|
337
338
|
t: 0,
|
|
338
339
|
e: false,
|
|
339
340
|
},
|
|
341
|
+
...defColorSceneList
|
|
340
342
|
]
|
|
341
343
|
}
|
|
342
344
|
|
|
@@ -349,13 +351,6 @@ function getOnlyRGBDefSceneList(): RemoteSceneInfo[] {
|
|
|
349
351
|
t: 0,
|
|
350
352
|
e: false,
|
|
351
353
|
},
|
|
352
|
-
{
|
|
353
|
-
n: I18n.getLang('mesh_device_detail_lighting_read'),
|
|
354
|
-
i: '010e0d000084000003e800000000',
|
|
355
|
-
s: '',
|
|
356
|
-
t: 0,
|
|
357
|
-
e: false,
|
|
358
|
-
},
|
|
359
354
|
{
|
|
360
355
|
n: I18n.getLang('mesh_device_detail_lighting_work'),
|
|
361
356
|
i: '020e0d00001403e803e800000000',
|
|
@@ -377,13 +372,7 @@ function getOnlyRGBDefSceneList(): RemoteSceneInfo[] {
|
|
|
377
372
|
t: 0,
|
|
378
373
|
e: false,
|
|
379
374
|
},
|
|
380
|
-
|
|
381
|
-
n: I18n.getLang('mesh_device_detail_lighting_white_mode'),
|
|
382
|
-
i: '0646460100000000000003e8000046460100000000000003e8019046460100000000000003e803e8',
|
|
383
|
-
s: '',
|
|
384
|
-
t: 0,
|
|
385
|
-
e: false,
|
|
386
|
-
},
|
|
375
|
+
...defColorSceneList
|
|
387
376
|
]
|
|
388
377
|
}
|
|
389
378
|
|
|
@@ -860,6 +849,219 @@ function getStripLightSceneList(): RemoteSceneInfo[] {
|
|
|
860
849
|
]
|
|
861
850
|
}
|
|
862
851
|
|
|
852
|
+
const defColorSceneList: RemoteSceneInfo[] = [
|
|
853
|
+
{
|
|
854
|
+
n: I18n.getLang('dynamicmoods_forest'),
|
|
855
|
+
i: '074b4b02007802f80226000000004b4b02003303e803e8000000004b4b02007803e8018600000000',
|
|
856
|
+
s: '',
|
|
857
|
+
t: 0,
|
|
858
|
+
e: false,
|
|
859
|
+
},
|
|
860
|
+
{
|
|
861
|
+
n: I18n.getLang('dynamicmoods_desert'),
|
|
862
|
+
i: '084b4b020022014a0334000000004b4b02001002b203e8000000004b4b02001003e803e800000000',
|
|
863
|
+
s: '',
|
|
864
|
+
t: 0,
|
|
865
|
+
e: false,
|
|
866
|
+
},
|
|
867
|
+
{
|
|
868
|
+
n: I18n.getLang('dynamicmoods_dreams'),
|
|
869
|
+
i: '094b4b02014b00c803e8000000004b4b0200b4010403a2000000004b4b02001c010e03e800000000',
|
|
870
|
+
s: '',
|
|
871
|
+
t: 0,
|
|
872
|
+
e: false,
|
|
873
|
+
},
|
|
874
|
+
{
|
|
875
|
+
n: I18n.getLang('dynamicmoods_breeze'),
|
|
876
|
+
i: '0a4b4b02002b03520352000000004b4b020000032a02bc000000004b4b02002703e803e800000000',
|
|
877
|
+
s: '',
|
|
878
|
+
t: 0,
|
|
879
|
+
e: false,
|
|
880
|
+
},
|
|
881
|
+
{
|
|
882
|
+
n: I18n.getLang('dynamicmoods_waters'),
|
|
883
|
+
i: '0b4b4b0200c303e803e8000000004b4b0200a001f403e8000000004b4b0200f0030c01b800000000',
|
|
884
|
+
s: '',
|
|
885
|
+
t: 0,
|
|
886
|
+
e: false,
|
|
887
|
+
},
|
|
888
|
+
{
|
|
889
|
+
n: I18n.getLang('dynamicmoods_splash'),
|
|
890
|
+
i: '0c4b4b02003c03e803e8000000004b4b02002703e803e8000000004b4b02001003e803e800000000',
|
|
891
|
+
s: '',
|
|
892
|
+
t: 0,
|
|
893
|
+
e: false,
|
|
894
|
+
},
|
|
895
|
+
{
|
|
896
|
+
n: I18n.getLang("dynamicmoods_sunrise"),
|
|
897
|
+
i: '0d4b4b02000902d003e8000000004b4b020026012203e8000000004b4b02003303e803e800000000',
|
|
898
|
+
s: '',
|
|
899
|
+
t: 0,
|
|
900
|
+
e: false,
|
|
901
|
+
},
|
|
902
|
+
{
|
|
903
|
+
n: I18n.getLang('dynamicmoods_wonderland'),
|
|
904
|
+
i: '0e4b4b0200bb00e60384000000004b4b020000001403e8000000004b4b020000000002ee00000000',
|
|
905
|
+
s: '',
|
|
906
|
+
t: 0,
|
|
907
|
+
e: false,
|
|
908
|
+
},
|
|
909
|
+
{
|
|
910
|
+
n: I18n.getLang('dynamicmoods_Twilight'),
|
|
911
|
+
i: '0f4b4b02014a024e03e8000000004b4b02002703e803e8000000004b4b0200b403e801f400000000',
|
|
912
|
+
s: '',
|
|
913
|
+
t: 0,
|
|
914
|
+
e: false,
|
|
915
|
+
},
|
|
916
|
+
{
|
|
917
|
+
n: I18n.getLang('dynamicmoods_symphony'),
|
|
918
|
+
i: '104b4b0200d2037003e8000000004b4b020000000003e8000000004b4b02003303e803e800000000',
|
|
919
|
+
s: '',
|
|
920
|
+
t: 0,
|
|
921
|
+
e: false,
|
|
922
|
+
},
|
|
923
|
+
{
|
|
924
|
+
n: I18n.getLang('dynamicmoods_sorbet'),
|
|
925
|
+
i: '114b4b02015e00fa03e8000000004b4b020011020803e8000000004b4b02003c03e803e800000000',
|
|
926
|
+
s: '',
|
|
927
|
+
t: 0,
|
|
928
|
+
e: false,
|
|
929
|
+
},
|
|
930
|
+
{
|
|
931
|
+
n: I18n.getLang('dynamicmoods_mansion'),
|
|
932
|
+
i: '124b4b02012c03e801f4000000004b4b0200b403e803e8000000004b4b02002703e803e800000000',
|
|
933
|
+
s: '',
|
|
934
|
+
t: 0,
|
|
935
|
+
e: false,
|
|
936
|
+
},
|
|
937
|
+
{
|
|
938
|
+
n: I18n.getLang('dynamicmoods_hour'),
|
|
939
|
+
i: '134b4b02003303e803e8000000004b4b02002103e803e8000000004b4b020026012203e800000000',
|
|
940
|
+
s: '',
|
|
941
|
+
t: 0,
|
|
942
|
+
e: false,
|
|
943
|
+
},
|
|
944
|
+
{
|
|
945
|
+
n: I18n.getLang('dynamicmoods_isle'),
|
|
946
|
+
i: '144b4b02007803e801f4000000004b4b020092029e0226000000004b4b02005a03e803de00000000',
|
|
947
|
+
s: '',
|
|
948
|
+
t: 0,
|
|
949
|
+
e: false,
|
|
950
|
+
},
|
|
951
|
+
{
|
|
952
|
+
n: I18n.getLang('dynamicmoods_Beat'),
|
|
953
|
+
i: '154b4b0200b403e803e8000000004b4b02012c03e803e8000000004b4b02003c03e803e800000000',
|
|
954
|
+
s: '',
|
|
955
|
+
t: 0,
|
|
956
|
+
e: false,
|
|
957
|
+
},
|
|
958
|
+
{
|
|
959
|
+
n: I18n.getLang('dynamicmoods_glamour'),
|
|
960
|
+
i: '164b4b02003303e803e8000000004b4b02012c03e801f4000000004b4b02015e00fa03e800000000',
|
|
961
|
+
s: '',
|
|
962
|
+
t: 0,
|
|
963
|
+
e: false,
|
|
964
|
+
},
|
|
965
|
+
{
|
|
966
|
+
n: I18n.getLang('dynamicmoods_edreams'),
|
|
967
|
+
i: '174b4b02012c03e803e8000000004b4b0200b403e803e8000000004b4b02002703e803e800000000',
|
|
968
|
+
s: '',
|
|
969
|
+
t: 0,
|
|
970
|
+
e: false,
|
|
971
|
+
},
|
|
972
|
+
{
|
|
973
|
+
n: I18n.getLang('dynamicmoods_sunset'),
|
|
974
|
+
i: '184b4b02001003e803e8000000004b4b02001d02b203e8000000004b4b02002b0352035200000000',
|
|
975
|
+
s: '',
|
|
976
|
+
t: 0,
|
|
977
|
+
e: false,
|
|
978
|
+
},
|
|
979
|
+
{
|
|
980
|
+
n: I18n.getLang('dynamicmoods_carnival'),
|
|
981
|
+
i: '194b4b02012c03e803e8000000004b4b02002703e803e8000000004b4b02003c03e803e800000000',
|
|
982
|
+
s: '',
|
|
983
|
+
t: 0,
|
|
984
|
+
e: false,
|
|
985
|
+
},
|
|
986
|
+
{
|
|
987
|
+
n: I18n.getLang('dynamicmoods_serenade'),
|
|
988
|
+
i: '1a4b4b0200f0030c01b8000000004b4b0200b4019a0136000000004b4b0200f0005003d400000000',
|
|
989
|
+
s: '',
|
|
990
|
+
t: 0,
|
|
991
|
+
e: false,
|
|
992
|
+
},
|
|
993
|
+
{
|
|
994
|
+
n: I18n.getLang('dynamicmoods_glow'),
|
|
995
|
+
i: '1b4b4b02001e03e803e8000000004b4b02003003e803e8000000004b4b020000032003e800000000',
|
|
996
|
+
s: '',
|
|
997
|
+
t: 0,
|
|
998
|
+
e: false,
|
|
999
|
+
},
|
|
1000
|
+
{
|
|
1001
|
+
n: I18n.getLang('dynamicmoods_Canopy'),
|
|
1002
|
+
i: '1c4b4b02007803e80190000000004b4b020078029e0258000000004b4b02001e029e025800000000',
|
|
1003
|
+
s: '',
|
|
1004
|
+
t: 0,
|
|
1005
|
+
e: false,
|
|
1006
|
+
},
|
|
1007
|
+
{
|
|
1008
|
+
n: I18n.getLang('dynamicmoods_Burst'),
|
|
1009
|
+
i: '1d4b4b02000003e803e8000000004b4b02002703e803e8000000004b4b02003c03e803e8000000004b4b02007803e803e8000000004b4b0200d203e803e8000000004b4b02011103e803e800000000',
|
|
1010
|
+
s: '',
|
|
1011
|
+
t: 0,
|
|
1012
|
+
e: false,
|
|
1013
|
+
},
|
|
1014
|
+
{
|
|
1015
|
+
n: I18n.getLang('dynamicmoods_Lights'),
|
|
1016
|
+
i: '1e4b4b02012c03e803e8000000004b4b02003c03e803e8000000004b4b0200b403e803e8000000004b4b02001803e803e800000000',
|
|
1017
|
+
s: '',
|
|
1018
|
+
t: 0,
|
|
1019
|
+
e: false,
|
|
1020
|
+
},
|
|
1021
|
+
{
|
|
1022
|
+
n: I18n.getLang('dynamicmoods_Dreamscape'),
|
|
1023
|
+
i: '1f4b4b02012c00c803e8000000004b4b0200f000c803e8000000004b4b02003c00c803e8000000004b4b0200b400c803e800000000',
|
|
1024
|
+
s: '',
|
|
1025
|
+
t: 0,
|
|
1026
|
+
e: false,
|
|
1027
|
+
},
|
|
1028
|
+
{
|
|
1029
|
+
n: I18n.getLang('dynamicmoods_NLights'),
|
|
1030
|
+
i: '204b4b02009603e803e8000000004b4b0200d203e803e8000000004b4b02010e03e803e800000000',
|
|
1031
|
+
s: '',
|
|
1032
|
+
t: 0,
|
|
1033
|
+
e: false,
|
|
1034
|
+
},
|
|
1035
|
+
{
|
|
1036
|
+
n: I18n.getLang('dynamicmoods_paradise'),
|
|
1037
|
+
i: '214b4b020140025803e8000000004b4b02001e032003e8000000004b4b02003c025803e800000000',
|
|
1038
|
+
s: '',
|
|
1039
|
+
t: 0,
|
|
1040
|
+
e: false,
|
|
1041
|
+
},
|
|
1042
|
+
{
|
|
1043
|
+
n: I18n.getLang('dynamicmoods_ice'),
|
|
1044
|
+
i: '224b4b02001803e803e8000000004b4b020000000003e8000000004b4b0200d803e803e800000000',
|
|
1045
|
+
s: '',
|
|
1046
|
+
t: 0,
|
|
1047
|
+
e: false,
|
|
1048
|
+
},
|
|
1049
|
+
{
|
|
1050
|
+
n: I18n.getLang('dynamicmoods_voyage'),
|
|
1051
|
+
i: '234b4b0200f003e80190000000004b4b02010e03e80190000000004b4b020000000003e800000000',
|
|
1052
|
+
s: '',
|
|
1053
|
+
t: 0,
|
|
1054
|
+
e: false,
|
|
1055
|
+
},
|
|
1056
|
+
{
|
|
1057
|
+
n: I18n.getLang('dynamicmoods_wave'),
|
|
1058
|
+
i: '244b4b0200d203e803e8000000004b4b0200b403e803e8000000004b4b02009603e803e800000000',
|
|
1059
|
+
s: '',
|
|
1060
|
+
t: 0,
|
|
1061
|
+
e: false,
|
|
1062
|
+
},
|
|
1063
|
+
]
|
|
1064
|
+
|
|
863
1065
|
export const MAXSCENE = 8
|
|
864
1066
|
|
|
865
1067
|
export const AddScene = {
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import {useFeatureHook} from "@ledvance/base/src/models/modules/NativePropsSlice";
|
|
11
|
+
import {Buffer} from "buffer";
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
export interface RandomTimeParam {
|
|
@@ -33,80 +34,39 @@ export function useRandomTime() {
|
|
|
33
34
|
return useFeatureHook<PlugConfig, RandomTimeItem[]>('randomTime', [], (val) => randomTimeItemsToBase64(val))
|
|
34
35
|
}
|
|
35
36
|
|
|
36
|
-
const base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
37
|
-
|
|
38
|
-
const decodeBase64 = (base64: string): Uint8Array => {
|
|
39
|
-
const bufferLength = base64.length * 0.75;
|
|
40
|
-
const buffer = new Uint8Array(bufferLength);
|
|
41
|
-
let encoded1: number, encoded2: number, encoded3: number, encoded4: number;
|
|
42
|
-
let p = 0;
|
|
43
|
-
|
|
44
|
-
for (let i = 0; i < base64.length; i += 4) {
|
|
45
|
-
encoded1 = base64Chars.indexOf(base64[i]);
|
|
46
|
-
encoded2 = base64Chars.indexOf(base64[i + 1]);
|
|
47
|
-
encoded3 = base64Chars.indexOf(base64[i + 2]);
|
|
48
|
-
encoded4 = base64Chars.indexOf(base64[i + 3]);
|
|
49
|
-
|
|
50
|
-
buffer[p++] = (encoded1 << 2) | (encoded2 >> 4);
|
|
51
|
-
buffer[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
|
|
52
|
-
buffer[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return buffer;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const encodeBase64 = (buffer: Uint8Array): string => {
|
|
59
|
-
let base64 = '';
|
|
60
|
-
let p = 0;
|
|
61
|
-
const length = buffer.length;
|
|
62
|
-
|
|
63
|
-
while (p < length) {
|
|
64
|
-
const byte1 = buffer[p++];
|
|
65
|
-
const byte2 = p < length ? buffer[p++] : 0;
|
|
66
|
-
const byte3 = p < length ? buffer[p++] : 0;
|
|
67
|
-
|
|
68
|
-
const encoded1 = byte1 >> 2;
|
|
69
|
-
const encoded2 = ((byte1 & 3) << 4) | (byte2 >> 4);
|
|
70
|
-
const encoded3 = ((byte2 & 15) << 2) | (byte3 >> 6);
|
|
71
|
-
const encoded4 = byte3 & 63;
|
|
72
|
-
|
|
73
|
-
base64 += base64Chars[encoded1] + base64Chars[encoded2];
|
|
74
|
-
base64 += p < length + 2 ? base64Chars[encoded3] : '=';
|
|
75
|
-
base64 += p < length + 1 ? base64Chars[encoded4] : '=';
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return base64;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
37
|
// @ts-ignore
|
|
82
|
-
const randomTimeItemsFromBase64 = (
|
|
83
|
-
const
|
|
38
|
+
const randomTimeItemsFromBase64 = (base64Str: string): RandomTimeItem[] => {
|
|
39
|
+
const buffer = Buffer.from(base64Str, 'base64');
|
|
40
|
+
|
|
84
41
|
const items: RandomTimeItem[] = [];
|
|
85
42
|
|
|
86
|
-
for (let i = 0; i <
|
|
87
|
-
const
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
const week =
|
|
91
|
-
const
|
|
92
|
-
|
|
43
|
+
for (let i = 0; i < buffer.length; i += 6) {
|
|
44
|
+
const enable = (buffer[i] & 0x01) === 1;
|
|
45
|
+
const channel = (buffer[i] >> 1) & 0x7F;
|
|
46
|
+
|
|
47
|
+
const week = buffer[i + 1];
|
|
48
|
+
const weeks: number[] = [
|
|
49
|
+
(week & 0b00000001) >> 0,
|
|
50
|
+
(week & 0b00000010) >> 1,
|
|
51
|
+
(week & 0b00000100) >> 2,
|
|
52
|
+
(week & 0b00001000) >> 3,
|
|
53
|
+
(week & 0b00010000) >> 4,
|
|
54
|
+
(week & 0b00100000) >> 5,
|
|
55
|
+
(week & 0b01000000) >> 6,
|
|
56
|
+
(week & 0b10000000) >> 7,
|
|
57
|
+
];
|
|
58
|
+
|
|
59
|
+
const startTime = (buffer[i + 2] << 8) | buffer[i + 3];
|
|
60
|
+
const endTime = (buffer[i + 4] << 8) | buffer[i + 5];
|
|
93
61
|
|
|
94
62
|
items.push({
|
|
95
63
|
enable,
|
|
96
64
|
channel,
|
|
97
|
-
weeks
|
|
98
|
-
(week & 0b00000001) >> 0,
|
|
99
|
-
(week & 0b00000010) >> 1,
|
|
100
|
-
(week & 0b00000100) >> 2,
|
|
101
|
-
(week & 0b00001000) >> 3,
|
|
102
|
-
(week & 0b00010000) >> 4,
|
|
103
|
-
(week & 0b00100000) >> 5,
|
|
104
|
-
(week & 0b01000000) >> 6,
|
|
105
|
-
(week & 0b10000000) >> 7,
|
|
106
|
-
],
|
|
65
|
+
weeks,
|
|
107
66
|
startTime,
|
|
108
67
|
endTime,
|
|
109
|
-
|
|
68
|
+
name: `RandomTime ${items.length}`,
|
|
69
|
+
index: items.length
|
|
110
70
|
});
|
|
111
71
|
}
|
|
112
72
|
|
|
@@ -114,23 +74,26 @@ const randomTimeItemsFromBase64 = (base64: string): RandomTimeItem[] => {
|
|
|
114
74
|
}
|
|
115
75
|
|
|
116
76
|
export const randomTimeItemsToBase64 = (items: RandomTimeItem[]): string => {
|
|
117
|
-
const
|
|
77
|
+
const buffer = new Uint8Array(6 * items.length);
|
|
118
78
|
|
|
119
79
|
items.forEach((item, index) => {
|
|
120
|
-
const channelByte = (item.channel!! << 1) | (item.enable ? 1 : 0);
|
|
121
|
-
const week = item.weeks.reduce((acc, bit, i) => acc | (bit << i), 0);
|
|
122
|
-
const startTime = item.startTime;
|
|
123
|
-
const endTime = item.endTime;
|
|
124
|
-
|
|
125
80
|
const offset = index * 6;
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
81
|
+
|
|
82
|
+
// Byte 1: Channel (bit0: enable, bit7-bit1: channel)
|
|
83
|
+
buffer[offset] = (item.enable ? 1 : 0) | ((item.channel ?? 0) << 1);
|
|
84
|
+
|
|
85
|
+
// Byte 2: Weeks
|
|
86
|
+
buffer[offset + 1] = item.weeks.reduce((acc, bit, i) => acc | (bit << i), 0);
|
|
87
|
+
|
|
88
|
+
// Byte 3-4: Start time
|
|
89
|
+
buffer[offset + 2] = (item.startTime >> 8) & 0xFF;
|
|
90
|
+
buffer[offset + 3] = item.startTime & 0xFF;
|
|
91
|
+
|
|
92
|
+
// Byte 5-6: End time
|
|
93
|
+
buffer[offset + 4] = (item.endTime >> 8) & 0xFF;
|
|
94
|
+
buffer[offset + 5] = item.endTime & 0xFF;
|
|
132
95
|
});
|
|
133
96
|
|
|
134
|
-
return
|
|
97
|
+
return Buffer.from(buffer).toString('base64');
|
|
135
98
|
}
|
|
136
99
|
|