legacy: implement screen resolution API.

This commit is contained in:
Miroslav Šedivý 2024-09-06 19:54:29 +02:00
parent 17467dc3c8
commit 6a8f8052cd
2 changed files with 53 additions and 31 deletions

View file

@ -188,12 +188,30 @@ func (s *session) wsToBackend(msg []byte) error {
// Screen Events
case oldEvent.SCREEN_RESOLUTION:
// No WS equivalent, call HTTP API and return screen resolution.
return fmt.Errorf("event not implemented: %s", header.Event)
response := &types.ScreenSize{}
err := s.apiReq(http.MethodGet, "/api/room/screen", nil, response)
if err != nil {
return err
}
return s.toClient(&oldMessage.ScreenResolution{
Event: oldEvent.SCREEN_RESOLUTION,
Width: response.Width,
Height: response.Height,
Rate: response.Rate,
})
case oldEvent.SCREEN_CONFIGURATIONS:
// No WS equivalent, call HTTP API and return screen configurations.
return fmt.Errorf("event not implemented: %s", header.Event)
response := &[]types.ScreenSize{}
err := s.apiReq(http.MethodGet, "/api/room/screen/configurations", nil, response)
if err != nil {
return err
}
return s.toClient(&oldMessage.ScreenConfigurations{
Event: oldEvent.SCREEN_CONFIGURATIONS,
Configurations: screenConfigurations(*response),
})
case oldEvent.SCREEN_SET:
request := &oldMessage.ScreenResolution{}

View file

@ -37,6 +37,36 @@ func profileToMember(id string, profile types.MemberProfile) (*oldTypes.Member,
}, nil
}
func screenConfigurations(screenSizes []types.ScreenSize) map[int]oldTypes.ScreenConfiguration {
rates := map[string][]int16{}
for _, size := range screenSizes {
key := fmt.Sprintf("%dx%d", size.Width, size.Height)
rates[key] = append(rates[key], size.Rate)
}
usedScreenSizes := map[string]struct{}{}
screenSizesList := map[int]oldTypes.ScreenConfiguration{}
for i, size := range screenSizes {
key := fmt.Sprintf("%dx%d", size.Width, size.Height)
if _, ok := usedScreenSizes[key]; ok {
continue
}
ratesMap := map[int]int16{}
for i, rate := range rates[key] {
ratesMap[i] = rate
}
screenSizesList[i] = oldTypes.ScreenConfiguration{
Width: size.Width,
Height: size.Height,
Rates: ratesMap,
}
}
return screenSizesList
}
func (s *session) sendControlHost(request message.ControlHost) error {
lastHostID := s.lastHostID
@ -216,35 +246,9 @@ func (s *session) wsToClient(msg []byte) error {
// ScreenSizesList
//
rates := map[string][]int16{}
for _, size := range request.ScreenSizesList {
key := fmt.Sprintf("%dx%d", size.Width, size.Height)
rates[key] = append(rates[key], size.Rate)
}
usedScreenSizes := map[string]struct{}{}
screenSizesList := map[int]oldTypes.ScreenConfiguration{}
for i, size := range request.ScreenSizesList {
key := fmt.Sprintf("%dx%d", size.Width, size.Height)
if _, ok := usedScreenSizes[key]; ok {
continue
}
ratesMap := map[int]int16{}
for i, rate := range rates[key] {
ratesMap[i] = rate
}
screenSizesList[i] = oldTypes.ScreenConfiguration{
Width: size.Width,
Height: size.Height,
Rates: ratesMap,
}
}
err = s.toClient(&oldMessage.ScreenConfigurations{
Event: oldEvent.SCREEN_CONFIGURATIONS,
Configurations: screenSizesList,
Configurations: screenConfigurations(request.ScreenSizesList),
})
if err != nil {
return err