Skip to content

Commit 01e28f1

Browse files
committed
Fix direct H.264 issues and optimize UI
feat: support custom mouse wheel speed fix: prevent direct H.264 stream buffer overflow and replay style: optimize virtual keyboard layout style: optimize menu bar and settings styling
1 parent ea9068f commit 01e28f1

File tree

28 files changed

+438
-341
lines changed

28 files changed

+438
-341
lines changed

server/proto/vm.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ type GetOLEDRsp struct {
8787
Sleep int `json:"sleep"`
8888
}
8989

90+
type GetGetHdmiStateRsp struct {
91+
Enabled bool `json:"enabled"`
92+
}
93+
9094
type GetSSHStateRsp struct {
9195
Enabled bool `json:"enabled"`
9296
}

server/router/vm.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@ func vmRouter(r *gin.Engine) {
3535
api.GET("/vm/oled", service.GetOLED) // get OLED configuration
3636
api.POST("/vm/oled", service.SetOLED) // set OLED configuration
3737

38+
// Only supported by PCIe version
3839
api.GET("/vm/hdmi", service.GetHdmiState) // get HDMI state
39-
api.POST("/vm/hdmi/reset", service.ResetHdmi) // reset hdmi (pcie only)
40+
api.POST("/vm/hdmi/reset", service.ResetHdmi) // reset hdmi
4041
api.POST("/vm/hdmi/enable", service.EnableHdmi) // enable hdmi
4142
api.POST("/vm/hdmi/disable", service.DisableHdmi) // disable hdmi
4243

server/service/stream/direct/h264.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@ type Frame struct {
2121
}
2222

2323
var (
24-
mutex = sync.Mutex{}
25-
wsMap = make(map[*websocket.Conn]bool)
26-
upgrader = websocket.Upgrader{
24+
mutex = sync.Mutex{}
25+
wsMap = make(map[*websocket.Conn]bool)
26+
isSending = false
27+
upgrader = websocket.Upgrader{
2728
CheckOrigin: func(r *http.Request) bool {
2829
return true
2930
},
@@ -47,7 +48,7 @@ func Connect(c *gin.Context) {
4748

4849
mutex.Lock()
4950
wsMap[ws] = true
50-
if len(wsMap) == 1 {
51+
if len(wsMap) == 1 && !isSending {
5152
go send()
5253
}
5354
mutex.Unlock()
@@ -62,6 +63,7 @@ func Connect(c *gin.Context) {
6263
}
6364

6465
func send() {
66+
isSending = true
6567
screen := common.GetScreen()
6668
common.CheckScreen()
6769

@@ -76,6 +78,7 @@ func send() {
7678

7779
for range ticker.C {
7880
if len(wsMap) == 0 {
81+
isSending = false
7982
return
8083
}
8184

server/service/vm/hdmi.go

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
package vm
22

33
import (
4+
"time"
5+
46
"NanoKVM-Server/common"
57
"NanoKVM-Server/proto"
6-
"time"
78

89
"github.com/gin-gonic/gin"
910
log "github.com/sirupsen/logrus"
1011
)
1112

12-
// ideally read state from the device
1313
var hdmiEnabled = true
1414

1515
func (s *Service) ResetHdmi(c *gin.Context) {
@@ -53,15 +53,9 @@ func (s *Service) DisableHdmi(c *gin.Context) {
5353
func (s *Service) GetHdmiState(c *gin.Context) {
5454
var rsp proto.Response
5555

56-
if hdmiEnabled {
57-
rsp.OkRspWithData(c, &map[string]string{
58-
"state": "enabled",
59-
})
60-
} else {
61-
rsp.OkRspWithData(c, &map[string]string{
62-
"state": "disabled",
63-
})
64-
}
56+
rsp.OkRspWithData(c, &proto.GetGetHdmiStateRsp{
57+
Enabled: hdmiEnabled,
58+
})
6559

6660
log.Debug("get hdmi state")
6761
}

web/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
"react-simple-keyboard": "^3.8.19",
3535
"semver": "^7.6.3",
3636
"vaul": "^0.9.9",
37-
"websocket": "^1.0.35"
37+
"websocket": "^1.0.35",
38+
"yocto-queue": "^1.2.1"
3839
},
3940
"devDependencies": {
4041
"@ianvs/prettier-plugin-sort-imports": "^4.3.1",

web/pnpm-lock.yaml

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

web/src/api/vm.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ export function disableHdmi() {
7878
}
7979

8080
// set HDMI state
81-
export function setHdmiState(state: string) {
82-
if (state === 'enabled') {
81+
export function setHdmiState(enabled: boolean) {
82+
if (enabled) {
8383
return enableHdmi();
8484
}
8585
return disableHdmi();

web/src/i18n/locales/en.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,7 @@ const en = {
6464
frameDetect: 'Frame Detect',
6565
frameDetectTip:
6666
"Calculate the difference between frames. Stop transmitting video stream when no changes are detected on the remote host's screen.",
67-
resetHdmi: 'Reset HDMI',
68-
enableHdmi: 'Enable HDMI',
69-
disableHdmi: 'Disable HDMI',
67+
resetHdmi: 'Reset HDMI'
7068
},
7169
keyboard: {
7270
title: 'Keyboard',
@@ -75,8 +73,7 @@ const en = {
7573
placeholder: 'Please input',
7674
submit: 'Submit',
7775
virtual: 'Keyboard',
78-
ctrlaltdel: 'Ctrl+Alt+Del',
79-
layout: 'Keyboard Layout'
76+
ctrlaltdel: 'Ctrl+Alt+Del'
8077
},
8178
mouse: {
8279
title: 'Mouse',
@@ -90,6 +87,9 @@ const en = {
9087
mode: 'Mouse mode',
9188
absolute: 'Absolute mode',
9289
relative: 'Relative mode',
90+
speed: 'Wheel speed',
91+
fast: 'Fast',
92+
slow: 'Slow',
9393
requestPointer: 'Using relative mode. Please click desktop to get mouse pointer.',
9494
resetHid: 'Reset HID',
9595
hidOnly: {
@@ -213,8 +213,7 @@ const en = {
213213
menuBar: 'Menu Bar',
214214
menuBarDesc: 'Display icons in the menu bar',
215215
webTitle: 'Web Title',
216-
webTitleDesc: 'Customize the web page title',
217-
keyboardLayout: 'Keyboard Layout'
216+
webTitleDesc: 'Customize the web page title'
218217
},
219218
device: {
220219
title: 'Device',
@@ -262,6 +261,9 @@ const en = {
262261
description: 'Enable mDNS discovery service',
263262
tip: "Turning it off if it's not needed"
264263
},
264+
hdmi: {
265+
description: 'Enable HDMI/monitor output'
266+
},
265267
hidOnly: 'HID-Only Mode',
266268
disk: 'Virtual Disk',
267269
diskDesc: 'Mount virtual U-disk on the remote host',

web/src/i18n/locales/zh.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@ const zh = {
8585
mode: '鼠标模式',
8686
absolute: '绝对模式',
8787
relative: '相对模式',
88+
speed: '滚轮速度',
89+
fast: '快',
90+
slow: '慢',
8891
requestPointer: '正在使用鼠标相对模式,请点击桌面获取鼠标指针。',
8992
resetHid: '重置 HID',
9093
hidOnly: {
@@ -238,6 +241,9 @@ const zh = {
238241
description: '启用 mDNS 发现服务',
239242
tip: '如果您未使用此功能,建议将其关闭'
240243
},
244+
hdmi: {
245+
description: '启用 HDMI/显示器 输出功能'
246+
},
241247
hidOnly: 'HID-Only 模式',
242248
disk: '虚拟U盘',
243249
diskDesc: '在远程主机中挂载虚拟U盘',

web/src/jotai/hdmi.ts

Lines changed: 0 additions & 4 deletions
This file was deleted.

0 commit comments

Comments
 (0)