From 6a8f8052cd7ab124712b4ed8ed2fbd8a0ebb5c6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?= Date: Fri, 6 Sep 2024 19:54:29 +0200 Subject: [PATCH] legacy: implement screen resolution API. --- server/internal/http/legacy/wstobackend.go | 26 ++++++++-- server/internal/http/legacy/wstoclient.go | 58 ++++++++++++---------- 2 files changed, 53 insertions(+), 31 deletions(-) diff --git a/server/internal/http/legacy/wstobackend.go b/server/internal/http/legacy/wstobackend.go index 61b8e1db..1922ad3d 100644 --- a/server/internal/http/legacy/wstobackend.go +++ b/server/internal/http/legacy/wstobackend.go @@ -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{} diff --git a/server/internal/http/legacy/wstoclient.go b/server/internal/http/legacy/wstoclient.go index 06bb96ae..48050616 100644 --- a/server/internal/http/legacy/wstoclient.go +++ b/server/internal/http/legacy/wstoclient.go @@ -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