generated from VLADIMIR/template
up
This commit is contained in:
@@ -49,6 +49,42 @@ func (s *server) GetScreenState(ctx context.Context, req *proto.GetScreenStateRe
|
||||
return &proto.GetScreenStateRsp{State: state}, nil
|
||||
}
|
||||
|
||||
func (s *server) AdvanceScreenMusic(ctx context.Context, req *proto.AdvanceScreenMusicReq) (*proto.AdvanceScreenMusicRsp, error) {
|
||||
if req == nil || req.ScreenID == "" || req.AccessToken == "" {
|
||||
return nil, status.Error(codes.InvalidArgument, "некорректные данные экрана")
|
||||
}
|
||||
id, err := strconv.Atoi(req.ScreenID)
|
||||
if err != nil || id <= 0 {
|
||||
return nil, status.Error(codes.InvalidArgument, "некорректный идентификатор экрана")
|
||||
}
|
||||
session, err := s.screenService.Get(ctx, id, hashScreenToken(req.AccessToken))
|
||||
if errors.Is(err, screen_service.ErrScreenNotFound) {
|
||||
return nil, status.Error(codes.Unauthenticated, "недействительная сессия экрана")
|
||||
}
|
||||
if err != nil || session.GameID == nil {
|
||||
return nil, status.Error(codes.FailedPrecondition, "экран не привязан к игре")
|
||||
}
|
||||
state, err := s.playlistService.GetGame(ctx, *session.GameID)
|
||||
if err != nil || state.Playlist == nil || len(state.Playlist.Tracks) == 0 {
|
||||
return &proto.AdvanceScreenMusicRsp{State: mapMusicState(state)}, nil
|
||||
}
|
||||
next := state.TrackIndex + 1
|
||||
playback := state.Playback
|
||||
if next >= len(state.Playlist.Tracks) {
|
||||
if state.Loop {
|
||||
next = 0
|
||||
} else {
|
||||
next = len(state.Playlist.Tracks) - 1
|
||||
playback = 1
|
||||
}
|
||||
}
|
||||
updated, err := s.playlistService.SetGame(ctx, *session.GameID, state.Playlist.ID, next, 0, state.Volume, state.Loop, playback)
|
||||
if err != nil {
|
||||
return nil, status.Error(codes.Internal, "не удалось переключить трек")
|
||||
}
|
||||
return &proto.AdvanceScreenMusicRsp{State: mapMusicState(updated)}, nil
|
||||
}
|
||||
|
||||
func (s *server) GetGameScreens(ctx context.Context, req *proto.GetGameScreensReq) (*proto.GetGameScreensRsp, error) {
|
||||
if !canManageScreens(ctx) {
|
||||
return nil, status.Error(codes.PermissionDenied, "permission denied")
|
||||
@@ -201,6 +237,11 @@ func (s *server) enrichScreenState(ctx context.Context, session *screen_service.
|
||||
if session.GameID == nil {
|
||||
return
|
||||
}
|
||||
if s.playlistService != nil {
|
||||
if music, err := s.playlistService.GetGame(ctx, *session.GameID); err == nil {
|
||||
state.Music = mapMusicState(music)
|
||||
}
|
||||
}
|
||||
game, err := s.gameService.GetGameMedia(ctx, *session.GameID)
|
||||
if err != nil {
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user