@ledvance/group-ui-biz-bundle 1.0.33 → 1.0.36
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/FlagPage.tsx +2 -8
- 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 +10 -3
- package/src/modules/mood/SceneInfo.ts +217 -15
- package/src/modules/randomTimeForPlug/RandomTimeForPlugAction.ts +41 -78
package/package.json
CHANGED
|
@@ -112,12 +112,6 @@ const FlagPage = () => {
|
|
|
112
112
|
const res = await getRemoteFlag(uaGroupInfo.tyGroupId.toString(), {isDef2, isDef3})
|
|
113
113
|
if (res.success) {
|
|
114
114
|
let cloneFlag: FlagUiInfo[] = cloneDeep(res.data) || []
|
|
115
|
-
if(!params.drawToolLight){
|
|
116
|
-
cloneFlag = cloneFlag.map(flag => {
|
|
117
|
-
flag.colors = flag.colors.reverse()
|
|
118
|
-
return flag
|
|
119
|
-
})
|
|
120
|
-
}
|
|
121
115
|
state.flags = cloneFlag
|
|
122
116
|
setFlags(cloneDeep(cloneFlag))
|
|
123
117
|
}
|
|
@@ -159,7 +153,7 @@ const FlagPage = () => {
|
|
|
159
153
|
if (res.success) {
|
|
160
154
|
state.flags = cloneDeep(newScene)
|
|
161
155
|
setFlags(cloneDeep(newScene))
|
|
162
|
-
if(mode === 'del' && flagState?.flag
|
|
156
|
+
if(mode === 'del' && (!flagState?.flag || checkedMood.id !== flagId)){
|
|
163
157
|
return{
|
|
164
158
|
success: true
|
|
165
159
|
}
|
|
@@ -223,7 +217,7 @@ const FlagPage = () => {
|
|
|
223
217
|
enable={flagState?.workMode === (params.isStripLight ? WorkMode.Colour : WorkMode.Scene) && flagId === item.id && flagMode?.flagMode}
|
|
224
218
|
title={item.name}
|
|
225
219
|
icon={item.icon}
|
|
226
|
-
colors={item.colors.map(item => hsv2Hex(item.h, item.s, item.v))}
|
|
220
|
+
colors={item.colors.map(item => hsv2Hex(item.h, item.s, item.v)).reverse()}
|
|
227
221
|
onSwitch={async (enable) => {
|
|
228
222
|
if (enable) {
|
|
229
223
|
await setFlag({
|
|
@@ -175,18 +175,18 @@ const MoodPage = () => {
|
|
|
175
175
|
state.scenes = cloneDeep(newScene)
|
|
176
176
|
setMoods(cloneDeep(newScene))
|
|
177
177
|
updateFlagMode()
|
|
178
|
-
if(mode === 'del' && currentMood.id !== scene?.scene?.id){
|
|
178
|
+
if(mode === 'del' && (currentMood.id !== scene?.scene?.id || workMode !== WorkMode.Scene)){
|
|
179
179
|
return {
|
|
180
180
|
success: true
|
|
181
181
|
}
|
|
182
182
|
}
|
|
183
|
-
let
|
|
183
|
+
let workModeCode: WorkMode = getWorkMode(mood, params);
|
|
184
184
|
return setScene({
|
|
185
185
|
scene: cloneDeep(mood),
|
|
186
186
|
sceneDataDpCode: params.sceneDataDpCode,
|
|
187
187
|
mixSceneDataDpCode: params.mixSceneDataDpCode,
|
|
188
188
|
workModeDpCode: params.workModeDpCode,
|
|
189
|
-
workMode:
|
|
189
|
+
workMode: workModeCode,
|
|
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
|
|