bfg-common 1.3.216 → 1.3.218

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.
Files changed (49) hide show
  1. package/assets/localization/local_be.json +2 -1
  2. package/assets/localization/local_en.json +4 -1
  3. package/assets/localization/local_hy.json +2 -1
  4. package/assets/localization/local_kk.json +2 -1
  5. package/assets/localization/local_ru.json +2 -1
  6. package/assets/localization/local_zh.json +2 -1
  7. package/components/atoms/alert/Alert.vue +95 -95
  8. package/components/atoms/alert/Notification.vue +170 -170
  9. package/components/atoms/switch/Switch.vue +111 -111
  10. package/components/atoms/table/compact/Compact.vue +526 -526
  11. package/components/atoms/tooltip/Signpost.vue +225 -225
  12. package/components/common/diagramMain/lib/models/interfaces.ts +6 -11
  13. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +8 -11
  14. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +2 -9
  15. package/components/common/diagramMain/modals/editSettings/tabs/TrafficShaping.vue +6 -139
  16. package/components/common/diagramMain/modals/lib/config/index.ts +0 -4
  17. package/components/common/diagramMain/modals/lib/config/initial.ts +0 -154
  18. package/components/common/diagramMain/modals/lib/config/networkModal.ts +92 -165
  19. package/components/common/pages/Tasks.vue +120 -120
  20. package/components/common/recursionTree/RecursionTree.vue +203 -203
  21. package/components/common/vm/actions/add/Add.vue +575 -575
  22. package/components/common/vm/actions/clone/Clone.vue +518 -518
  23. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +269 -269
  24. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +693 -693
  25. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CpuModel.vue +220 -220
  26. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/dropdownItems.ts +59 -59
  27. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +294 -294
  28. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +165 -165
  29. package/components/common/vm/actions/common/select/storage/lib/config/config.ts +166 -166
  30. package/components/common/vm/actions/editSettings/EditSettings.vue +313 -313
  31. package/components/common/weekSelect/WeekSelect.vue +112 -112
  32. package/components/common/weekSelect/lib/config/options.ts +10 -10
  33. package/components/common/wizards/network/add/Add.vue +17 -1
  34. package/components/common/wizards/network/add/validations/physicalAdapter.ts +70 -0
  35. package/composables/productNameLocal.ts +22 -22
  36. package/composables/useAppVersion.ts +21 -21
  37. package/composables/useEnvLanguage.ts +20 -20
  38. package/lib/utils/sendTask.ts +72 -72
  39. package/minify.js +146 -146
  40. package/package.json +1 -1
  41. package/public/spice-console/application/codec.js +257 -257
  42. package/public/spice-console/lib/rasterEngine.js +907 -907
  43. package/public/spice-console/network/spicechannel.js +369 -369
  44. package/store/main/lib/interfaces.ts +9 -9
  45. package/store/tasks/actions.ts +133 -133
  46. package/store/tasks/getters.ts +25 -25
  47. package/store/tasks/lib/models/interfaces.ts +18 -18
  48. package/store/tasks/mutations.ts +58 -58
  49. package/store/tasks/state.ts +16 -16
@@ -1,257 +1,257 @@
1
- wdi.CodecH264 = {
2
- video: {},
3
- jmuxer: {},
4
- loadedVideo: {},
5
- queues: {},
6
- isReady: {},
7
-
8
- create: function (streamId) {
9
- if (this.video[streamId]) return
10
-
11
- const video = document.createElement('video')
12
- video.id = `video${streamId}`
13
- video.setAttribute('autoplay', '')
14
-
15
- this.video[streamId] = video
16
-
17
- this.jmuxer[streamId] = new JMuxer({
18
- node: video,
19
- mode: 'video',
20
- flushingTime: 0,
21
- fps: 60,
22
- onReady: () => {
23
- this.isReady[streamId] = true
24
- },
25
- })
26
- },
27
-
28
- addQueue: function (streamId, imageData) {
29
- if (!this.queues[streamId]) this.queues[streamId] = []
30
- this.queues[streamId].push(imageData)
31
- },
32
-
33
- resetQueues: function (streamId) {
34
- this.queues[streamId] = []
35
- },
36
-
37
- feed: function (streamId, data) {
38
- this._addListener(streamId)
39
-
40
- if (this.queues[streamId]?.length) {
41
- this.queues[streamId].forEach((queue) => {
42
- this.jmuxer[streamId].feed({
43
- video: queue,
44
- })
45
- })
46
- this.resetQueues(streamId)
47
- }
48
-
49
- this.jmuxer[streamId].feed({
50
- video: data,
51
- })
52
- },
53
-
54
- destroy: function (streamId) {
55
- this._removeListener(streamId)
56
- this.video[streamId]?.remove()
57
- this.video = {}
58
- this.jmuxer = {}
59
- this.loadedVideo = {}
60
- },
61
-
62
- _addListener: function (streamId) {
63
- this.video[streamId]?.removeEventListener(
64
- 'loadedmetadata',
65
- this.loadedVideo[streamId]
66
- )
67
- this.video[streamId].addEventListener(
68
- 'loadedmetadata',
69
- this.loadedVideo[streamId]
70
- )
71
- },
72
-
73
- _removeListener: function (streamId) {
74
- this.video[streamId]?.removeEventListener(
75
- 'loadedmetadata',
76
- this.loadedVideo[streamId]
77
- )
78
- },
79
- }
80
-
81
- wdi.CodecVp8 = {
82
- decoders: {},
83
-
84
- create: function (streamId) {
85
- this.decoders[streamId] = new vp8_decoder_ctx()
86
- },
87
-
88
- destroy: function () {
89
- this.decoders = {}
90
- },
91
-
92
- feed: function (streamId, imageData, context, box) {
93
- const errorCode = vp8_dixie_decode_frame(
94
- this.decoders[streamId],
95
- imageData,
96
- imageData.length
97
- )
98
- if (VPX_CODEC_OK === errorCode) {
99
- this._I420toRGBA(this.decoders[streamId].ref_frames[0].img, context, box)
100
- }
101
- },
102
-
103
- _I420toRGBA: function (vp8, context, box) {
104
- const yuvwidth = vp8.w
105
- const height = vp8.d_h
106
- const width = vp8.d_w
107
-
108
- let output = context.createImageData(width, height)
109
- let outputData = output.data
110
- let R, G, B
111
-
112
- for (let h = 0; h < height; h++) {
113
- for (let w = 0; w < width; w++) {
114
- const Y = vp8.planes[0][vp8.planes_off[0] + 0 + w + yuvwidth * h]
115
- const U =
116
- vp8.planes[1][
117
- vp8.planes_off[1] + 0 + (w >> 1) + (yuvwidth >> 1) * (h >> 1)
118
- ]
119
- const V =
120
- vp8.planes[2][
121
- vp8.planes_off[2] + 0 + (w >> 1) + (yuvwidth >> 1) * (h >> 1)
122
- ]
123
-
124
- R = Math.round(Y + 1.13983 * (V - 128))
125
- G = Math.round(Y - 0.39465 * (U - 128) - 0.5806 * (V - 128))
126
- B = Math.round(Y + 2.03211 * (U - 128))
127
-
128
- outputData[0 + w * 4 + width * 4 * h] = R
129
- outputData[1 + w * 4 + width * 4 * h] = G
130
- outputData[2 + w * 4 + width * 4 * h] = B
131
- outputData[3 + w * 4 + width * 4 * h] = 255
132
- }
133
- }
134
-
135
- context.putImageData(output, box.x, box.y)
136
- },
137
- }
138
-
139
- wdi.CodecH265 = {
140
- queue: {},
141
- configed: {},
142
- isReady: {},
143
- decoders: {},
144
- pendingFrames: {},
145
- underflow: {},
146
- baseTime: {},
147
-
148
- create: async function (streamId, context, box) {
149
- const init = {
150
- output: this._handleFrame.bind(this, streamId, context, box),
151
- error: (e) => {
152
- console.log(e)
153
- },
154
- }
155
- const config = {
156
- codec: wdi.SpiceVideoCodecValue[wdi.currentCodec],
157
- codedWidth: 640,
158
- codedHeight: 480,
159
- }
160
- const { supported } = await VideoDecoder.isConfigSupported(config)
161
- // Проверяем поддерживает ли браузер VideoDecoder
162
- if (supported) {
163
- this.decoders[streamId] = new VideoDecoder(init)
164
- this.decoders[streamId].configure(config)
165
- this.isReady[streamId] = true
166
- } else {
167
- // Try another config.
168
- console.log('not supported')
169
- }
170
- },
171
-
172
- destroy: function () {
173
- this.queue = {}
174
- this.configed = {}
175
- this.isReady = {}
176
- this.decoders = {}
177
- this.pendingFrames = {}
178
- this.underflow = {}
179
- this.baseTime = {}
180
- },
181
-
182
- addQueue: function (streamId, imageData) {
183
- if (!this.queues[streamId]) this.queues[streamId] = []
184
- this.queues[streamId].push(imageData)
185
- },
186
-
187
- resetQueues: function (streamId) {
188
- this.queues[streamId] = []
189
- },
190
-
191
- setConfig: function (streamId, box) {
192
- const config = {
193
- codec: wdi.SpiceVideoCodecValue[wdi.currentCodec],
194
- codedWidth: box.width,
195
- codedHeight: box.height,
196
- }
197
- this.decoders[streamId].configure(config)
198
- this.configed[streamId] = true
199
- },
200
-
201
- decode: function (streamId, imageData) {
202
- if (this.queue[streamId]?.length) {
203
- this.queue[streamId].forEach((data) => {
204
- const chunk = new EncodedVideoChunk({
205
- type: 'key',
206
- data: data,
207
- timestamp: performance.now(),
208
- })
209
- this.decoders[streamId].decode(chunk)
210
- })
211
- this.resetQueues(streamId)
212
- }
213
-
214
- const chunk = new EncodedVideoChunk({
215
- type: 'key',
216
- data: imageData,
217
- timestamp: performance.now(),
218
- })
219
- this.decoders[streamId].decode(chunk)
220
- },
221
-
222
- _handleFrame: function (streamId, context, box, frame) {
223
- if (!this.pendingFrames[streamId]) this.pendingFrames[streamId] = []
224
- this.pendingFrames[streamId].push(frame)
225
-
226
- if (this.underflow[streamId] === undefined) this.underflow[streamId] = true
227
- if (this.underflow[streamId])
228
- setTimeout(this._renderFrame.bind(this, streamId, context, box), 0)
229
- },
230
- _renderFrame: async function (streamId, context, box) {
231
- this.underflow[streamId] = this.pendingFrames[streamId].length === 0
232
- if (this.underflow[streamId]) return
233
-
234
- const frame = this.pendingFrames[streamId].shift()
235
-
236
- // Based on the frame's timestamp calculate how much of real time waiting
237
- // is needed before showing the next frame.
238
- const timeUntilNextFrame = this._calculateTimeUntilNextFrame(
239
- frame.timestamp,
240
- streamId
241
- )
242
- await new Promise((r) => {
243
- setTimeout(r, timeUntilNextFrame)
244
- })
245
-
246
- context.drawImage(frame, box.x, box.y, box.width, box.height)
247
- frame.close()
248
-
249
- // Immediately schedule rendering of the next frame
250
- setTimeout(this._renderFrame.bind(this, streamId, context, box), 0)
251
- },
252
- _calculateTimeUntilNextFrame: function (timestamp, streamId) {
253
- if (!this.baseTime[streamId]) this.baseTime[streamId] = performance.now()
254
- const mediaTime = performance.now() - this.baseTime[streamId]
255
- return Math.max(0, timestamp / 1000 - mediaTime)
256
- },
257
- }
1
+ wdi.CodecH264 = {
2
+ video: {},
3
+ jmuxer: {},
4
+ loadedVideo: {},
5
+ queues: {},
6
+ isReady: {},
7
+
8
+ create: function (streamId) {
9
+ if (this.video[streamId]) return
10
+
11
+ const video = document.createElement('video')
12
+ video.id = `video${streamId}`
13
+ video.setAttribute('autoplay', '')
14
+
15
+ this.video[streamId] = video
16
+
17
+ this.jmuxer[streamId] = new JMuxer({
18
+ node: video,
19
+ mode: 'video',
20
+ flushingTime: 0,
21
+ fps: 60,
22
+ onReady: () => {
23
+ this.isReady[streamId] = true
24
+ },
25
+ })
26
+ },
27
+
28
+ addQueue: function (streamId, imageData) {
29
+ if (!this.queues[streamId]) this.queues[streamId] = []
30
+ this.queues[streamId].push(imageData)
31
+ },
32
+
33
+ resetQueues: function (streamId) {
34
+ this.queues[streamId] = []
35
+ },
36
+
37
+ feed: function (streamId, data) {
38
+ this._addListener(streamId)
39
+
40
+ if (this.queues[streamId]?.length) {
41
+ this.queues[streamId].forEach((queue) => {
42
+ this.jmuxer[streamId].feed({
43
+ video: queue,
44
+ })
45
+ })
46
+ this.resetQueues(streamId)
47
+ }
48
+
49
+ this.jmuxer[streamId].feed({
50
+ video: data,
51
+ })
52
+ },
53
+
54
+ destroy: function (streamId) {
55
+ this._removeListener(streamId)
56
+ this.video[streamId]?.remove()
57
+ this.video = {}
58
+ this.jmuxer = {}
59
+ this.loadedVideo = {}
60
+ },
61
+
62
+ _addListener: function (streamId) {
63
+ this.video[streamId]?.removeEventListener(
64
+ 'loadedmetadata',
65
+ this.loadedVideo[streamId]
66
+ )
67
+ this.video[streamId].addEventListener(
68
+ 'loadedmetadata',
69
+ this.loadedVideo[streamId]
70
+ )
71
+ },
72
+
73
+ _removeListener: function (streamId) {
74
+ this.video[streamId]?.removeEventListener(
75
+ 'loadedmetadata',
76
+ this.loadedVideo[streamId]
77
+ )
78
+ },
79
+ }
80
+
81
+ wdi.CodecVp8 = {
82
+ decoders: {},
83
+
84
+ create: function (streamId) {
85
+ this.decoders[streamId] = new vp8_decoder_ctx()
86
+ },
87
+
88
+ destroy: function () {
89
+ this.decoders = {}
90
+ },
91
+
92
+ feed: function (streamId, imageData, context, box) {
93
+ const errorCode = vp8_dixie_decode_frame(
94
+ this.decoders[streamId],
95
+ imageData,
96
+ imageData.length
97
+ )
98
+ if (VPX_CODEC_OK === errorCode) {
99
+ this._I420toRGBA(this.decoders[streamId].ref_frames[0].img, context, box)
100
+ }
101
+ },
102
+
103
+ _I420toRGBA: function (vp8, context, box) {
104
+ const yuvwidth = vp8.w
105
+ const height = vp8.d_h
106
+ const width = vp8.d_w
107
+
108
+ let output = context.createImageData(width, height)
109
+ let outputData = output.data
110
+ let R, G, B
111
+
112
+ for (let h = 0; h < height; h++) {
113
+ for (let w = 0; w < width; w++) {
114
+ const Y = vp8.planes[0][vp8.planes_off[0] + 0 + w + yuvwidth * h]
115
+ const U =
116
+ vp8.planes[1][
117
+ vp8.planes_off[1] + 0 + (w >> 1) + (yuvwidth >> 1) * (h >> 1)
118
+ ]
119
+ const V =
120
+ vp8.planes[2][
121
+ vp8.planes_off[2] + 0 + (w >> 1) + (yuvwidth >> 1) * (h >> 1)
122
+ ]
123
+
124
+ R = Math.round(Y + 1.13983 * (V - 128))
125
+ G = Math.round(Y - 0.39465 * (U - 128) - 0.5806 * (V - 128))
126
+ B = Math.round(Y + 2.03211 * (U - 128))
127
+
128
+ outputData[0 + w * 4 + width * 4 * h] = R
129
+ outputData[1 + w * 4 + width * 4 * h] = G
130
+ outputData[2 + w * 4 + width * 4 * h] = B
131
+ outputData[3 + w * 4 + width * 4 * h] = 255
132
+ }
133
+ }
134
+
135
+ context.putImageData(output, box.x, box.y)
136
+ },
137
+ }
138
+
139
+ wdi.CodecH265 = {
140
+ queue: {},
141
+ configed: {},
142
+ isReady: {},
143
+ decoders: {},
144
+ pendingFrames: {},
145
+ underflow: {},
146
+ baseTime: {},
147
+
148
+ create: async function (streamId, context, box) {
149
+ const init = {
150
+ output: this._handleFrame.bind(this, streamId, context, box),
151
+ error: (e) => {
152
+ console.log(e)
153
+ },
154
+ }
155
+ const config = {
156
+ codec: wdi.SpiceVideoCodecValue[wdi.currentCodec],
157
+ codedWidth: 640,
158
+ codedHeight: 480,
159
+ }
160
+ const { supported } = await VideoDecoder.isConfigSupported(config)
161
+ // Проверяем поддерживает ли браузер VideoDecoder
162
+ if (supported) {
163
+ this.decoders[streamId] = new VideoDecoder(init)
164
+ this.decoders[streamId].configure(config)
165
+ this.isReady[streamId] = true
166
+ } else {
167
+ // Try another config.
168
+ console.log('not supported')
169
+ }
170
+ },
171
+
172
+ destroy: function () {
173
+ this.queue = {}
174
+ this.configed = {}
175
+ this.isReady = {}
176
+ this.decoders = {}
177
+ this.pendingFrames = {}
178
+ this.underflow = {}
179
+ this.baseTime = {}
180
+ },
181
+
182
+ addQueue: function (streamId, imageData) {
183
+ if (!this.queues[streamId]) this.queues[streamId] = []
184
+ this.queues[streamId].push(imageData)
185
+ },
186
+
187
+ resetQueues: function (streamId) {
188
+ this.queues[streamId] = []
189
+ },
190
+
191
+ setConfig: function (streamId, box) {
192
+ const config = {
193
+ codec: wdi.SpiceVideoCodecValue[wdi.currentCodec],
194
+ codedWidth: box.width,
195
+ codedHeight: box.height,
196
+ }
197
+ this.decoders[streamId].configure(config)
198
+ this.configed[streamId] = true
199
+ },
200
+
201
+ decode: function (streamId, imageData) {
202
+ if (this.queue[streamId]?.length) {
203
+ this.queue[streamId].forEach((data) => {
204
+ const chunk = new EncodedVideoChunk({
205
+ type: 'key',
206
+ data: data,
207
+ timestamp: performance.now(),
208
+ })
209
+ this.decoders[streamId].decode(chunk)
210
+ })
211
+ this.resetQueues(streamId)
212
+ }
213
+
214
+ const chunk = new EncodedVideoChunk({
215
+ type: 'key',
216
+ data: imageData,
217
+ timestamp: performance.now(),
218
+ })
219
+ this.decoders[streamId].decode(chunk)
220
+ },
221
+
222
+ _handleFrame: function (streamId, context, box, frame) {
223
+ if (!this.pendingFrames[streamId]) this.pendingFrames[streamId] = []
224
+ this.pendingFrames[streamId].push(frame)
225
+
226
+ if (this.underflow[streamId] === undefined) this.underflow[streamId] = true
227
+ if (this.underflow[streamId])
228
+ setTimeout(this._renderFrame.bind(this, streamId, context, box), 0)
229
+ },
230
+ _renderFrame: async function (streamId, context, box) {
231
+ this.underflow[streamId] = this.pendingFrames[streamId].length === 0
232
+ if (this.underflow[streamId]) return
233
+
234
+ const frame = this.pendingFrames[streamId].shift()
235
+
236
+ // Based on the frame's timestamp calculate how much of real time waiting
237
+ // is needed before showing the next frame.
238
+ const timeUntilNextFrame = this._calculateTimeUntilNextFrame(
239
+ frame.timestamp,
240
+ streamId
241
+ )
242
+ await new Promise((r) => {
243
+ setTimeout(r, timeUntilNextFrame)
244
+ })
245
+
246
+ context.drawImage(frame, box.x, box.y, box.width, box.height)
247
+ frame.close()
248
+
249
+ // Immediately schedule rendering of the next frame
250
+ setTimeout(this._renderFrame.bind(this, streamId, context, box), 0)
251
+ },
252
+ _calculateTimeUntilNextFrame: function (timestamp, streamId) {
253
+ if (!this.baseTime[streamId]) this.baseTime[streamId] = performance.now()
254
+ const mediaTime = performance.now() - this.baseTime[streamId]
255
+ return Math.max(0, timestamp / 1000 - mediaTime)
256
+ },
257
+ }