mirror of
https://github.com/m1k1o/neko.git
synced 2024-07-24 14:40:50 +12:00
private mode implementation.
This commit is contained in:
@ -56,6 +56,9 @@ type SessionManagerCtx struct {
|
||||
host types.Session
|
||||
hostMu sync.Mutex
|
||||
|
||||
privateMode bool
|
||||
privateModeMu sync.Mutex
|
||||
|
||||
cursors map[types.Session][]types.Cursor
|
||||
cursorsMu sync.Mutex
|
||||
|
||||
@ -197,6 +200,39 @@ func (manager *SessionManagerCtx) ClearHost() {
|
||||
manager.SetHost(nil)
|
||||
}
|
||||
|
||||
// ---
|
||||
// private mode
|
||||
// ---
|
||||
|
||||
func (manager *SessionManagerCtx) SetPrivateMode(isPrivateMode bool) {
|
||||
manager.privateModeMu.Lock()
|
||||
|
||||
// only if value changed
|
||||
if manager.privateMode == isPrivateMode {
|
||||
manager.privateModeMu.Unlock()
|
||||
return
|
||||
}
|
||||
|
||||
// update webrtc paused state for all sessions
|
||||
for _, session := range manager.List() {
|
||||
if webrtcPeer := session.GetWebRTCPeer(); webrtcPeer != nil {
|
||||
webrtcPeer.SetPaused(isPrivateMode && !session.Profile().IsAdmin)
|
||||
}
|
||||
}
|
||||
|
||||
manager.privateMode = isPrivateMode
|
||||
manager.privateModeMu.Unlock()
|
||||
|
||||
manager.emmiter.Emit("private_mode_changed", isPrivateMode)
|
||||
}
|
||||
|
||||
func (manager *SessionManagerCtx) PrivateMode() bool {
|
||||
manager.privateModeMu.Lock()
|
||||
defer manager.privateModeMu.Unlock()
|
||||
|
||||
return manager.privateMode
|
||||
}
|
||||
|
||||
// ---
|
||||
// cursors
|
||||
// ---
|
||||
@ -326,6 +362,12 @@ func (manager *SessionManagerCtx) OnHostChanged(listener func(session types.Sess
|
||||
})
|
||||
}
|
||||
|
||||
func (manager *SessionManagerCtx) OnPrivateModeChanged(listener func(isPrivateMode bool)) {
|
||||
manager.emmiter.On("private_mode_changed", func(payload ...interface{}) {
|
||||
listener(payload[0].(bool))
|
||||
})
|
||||
}
|
||||
|
||||
// ---
|
||||
// config
|
||||
// ---
|
||||
|
Reference in New Issue
Block a user