diff --git a/api/main.proto b/api/main.proto index 861b0c3..d5befc4 100644 --- a/api/main.proto +++ b/api/main.proto @@ -342,6 +342,49 @@ service EveningDetectiveServer { }; } + rpc SavePlaylistGroup(SavePlaylistGroupReq) returns (SavePlaylistGroupRsp) { + option (google.api.http) = { + post: "/api/playlists/{playlistID}/groups" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags : "Музыка"; + summary: "Сохранить группу плейлиста"; + }; + } + + rpc DeletePlaylistGroup(DeletePlaylistGroupReq) returns (DeletePlaylistGroupRsp) { + option (google.api.http) = { + delete: "/api/playlists/{playlistID}/groups/{groupID}" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags : "Музыка"; + summary: "Удалить группу, сохранив треки"; + }; + } + + rpc ReorderPlaylistGroups(ReorderPlaylistGroupsReq) returns (ReorderPlaylistGroupsRsp) { + option (google.api.http) = { + put : "/api/playlists/{playlistID}/groups/order" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags : "Музыка"; + summary: "Изменить порядок групп плейлиста"; + }; + } + + rpc SetPlaylistTrackGroup(SetPlaylistTrackGroupReq) returns (SetPlaylistTrackGroupRsp) { + option (google.api.http) = { + put : "/api/playlists/{playlistID}/tracks/{trackID}/group" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags : "Музыка"; + summary: "Назначить треку группу"; + }; + } + rpc GetPlaylists(GetPlaylistsReq) returns (GetPlaylistsRsp) { option (google.api.http) = { get: "/api/playlists" }; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { @@ -1400,17 +1443,71 @@ message DownloadFileReq { string filename = 1; } +enum PlaylistGroupEndMode { + PLAYLIST_GROUP_END_MODE_REPEAT = 0; + PLAYLIST_GROUP_END_MODE_STOP = 1; + PLAYLIST_GROUP_END_MODE_NEXT = 2; +} + +message PlaylistGroup { + int32 ID = 1; + string name = 2; + int32 position = 3; + PlaylistGroupEndMode end_mode = 4; +} + +message SavePlaylistGroupReq { + int32 playlistID = 1; + int32 groupID = 2; + string name = 3; + PlaylistGroupEndMode end_mode = 4; +} + +message SavePlaylistGroupRsp { + Playlist playlist = 1; +} + +message DeletePlaylistGroupReq { + int32 playlistID = 1; + int32 groupID = 2; +} + +message DeletePlaylistGroupRsp { + Playlist playlist = 1; +} + +message ReorderPlaylistGroupsReq { + int32 playlistID = 1; + repeated int32 groupIDs = 2; +} + +message ReorderPlaylistGroupsRsp { + Playlist playlist = 1; +} + +message SetPlaylistTrackGroupReq { + int32 playlistID = 1; + int32 trackID = 2; + int32 groupID = 3; +} + +message SetPlaylistTrackGroupRsp { + Playlist playlist = 1; +} + message PlaylistTrack { int32 ID = 1; string name = 2; string filename = 3; int32 position = 4; + int32 group_id = 5; } message Playlist { int32 ID = 1; string name = 2; repeated PlaylistTrack tracks = 3; + repeated PlaylistGroup groups = 4; } message GetPlaylistsReq {} @@ -1885,6 +1982,7 @@ message MusicState { bool loop = 5; MusicPlaybackState playback = 6; int64 state_version = 7; + int32 group_id = 8; } message GetGameMusicReq { @@ -1906,6 +2004,7 @@ message SetGameMusicReq { int32 volume = 5; bool loop = 6; MusicPlaybackState playback = 7; + int32 group_id = 8; } message SetGameMusicRsp { @@ -1913,8 +2012,9 @@ message SetGameMusicRsp { } message AdvanceScreenMusicReq { - string screenID = 1; - string accessToken = 2; + string screenID = 1; + string accessToken = 2; + string expected_state_version = 3; } message AdvanceScreenMusicRsp { diff --git a/cmd/evening_detective_server/main.swagger.json b/cmd/evening_detective_server/main.swagger.json index 2bea019..668af12 100644 --- a/cmd/evening_detective_server/main.swagger.json +++ b/cmd/evening_detective_server/main.swagger.json @@ -2014,6 +2014,125 @@ ] } }, + "/api/playlists/{playlistID}/groups": { + "post": { + "summary": "Сохранить группу плейлиста", + "operationId": "EveningDetectiveServer_SavePlaylistGroup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/evening_detective_serverSavePlaylistGroupRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "playlistID", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EveningDetectiveServerSavePlaylistGroupBody" + } + } + ], + "tags": [ + "Музыка" + ] + } + }, + "/api/playlists/{playlistID}/groups/order": { + "put": { + "summary": "Изменить порядок групп плейлиста", + "operationId": "EveningDetectiveServer_ReorderPlaylistGroups", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/evening_detective_serverReorderPlaylistGroupsRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "playlistID", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EveningDetectiveServerReorderPlaylistGroupsBody" + } + } + ], + "tags": [ + "Музыка" + ] + } + }, + "/api/playlists/{playlistID}/groups/{groupID}": { + "delete": { + "summary": "Удалить группу, сохранив треки", + "operationId": "EveningDetectiveServer_DeletePlaylistGroup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/evening_detective_serverDeletePlaylistGroupRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "playlistID", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "groupID", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Музыка" + ] + } + }, "/api/playlists/{playlistID}/tracks": { "post": { "summary": "Загрузить MP3 в плейлист", @@ -2133,6 +2252,53 @@ ] } }, + "/api/playlists/{playlistID}/tracks/{trackID}/group": { + "put": { + "summary": "Назначить треку группу", + "operationId": "EveningDetectiveServer_SetPlaylistTrackGroup", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/evening_detective_serverSetPlaylistTrackGroupRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "playlistID", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "trackID", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EveningDetectiveServerSetPlaylistTrackGroupBody" + } + } + ], + "tags": [ + "Музыка" + ] + } + }, "/api/privacy": { "get": { "summary": "Получить текст Политики конфиденциальности", @@ -4322,6 +4488,18 @@ "EveningDetectiveServerPublicScenarioBody": { "type": "object" }, + "EveningDetectiveServerReorderPlaylistGroupsBody": { + "type": "object", + "properties": { + "groupIDs": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + } + } + }, "EveningDetectiveServerReorderPlaylistTracksBody": { "type": "object", "properties": { @@ -4346,6 +4524,21 @@ } } }, + "EveningDetectiveServerSavePlaylistGroupBody": { + "type": "object", + "properties": { + "groupID": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "endMode": { + "$ref": "#/definitions/evening_detective_serverPlaylistGroupEndMode" + } + } + }, "EveningDetectiveServerSaveScreenPlanBody": { "type": "object", "properties": { @@ -4402,6 +4595,19 @@ }, "playback": { "$ref": "#/definitions/evening_detective_serverMusicPlaybackState" + }, + "groupId": { + "type": "integer", + "format": "int32" + } + } + }, + "EveningDetectiveServerSetPlaylistTrackGroupBody": { + "type": "object", + "properties": { + "groupID": { + "type": "integer", + "format": "int32" } } }, @@ -4795,6 +5001,9 @@ }, "accessToken": { "type": "string" + }, + "expectedStateVersion": { + "type": "string" } } }, @@ -4955,6 +5164,14 @@ "evening_detective_serverDeleteLastTeamActionRsp": { "type": "object" }, + "evening_detective_serverDeletePlaylistGroupRsp": { + "type": "object", + "properties": { + "playlist": { + "$ref": "#/definitions/evening_detective_serverPlaylist" + } + } + }, "evening_detective_serverDeletePlaylistRsp": { "type": "object" }, @@ -5837,6 +6054,10 @@ "stateVersion": { "type": "string", "format": "int64" + }, + "groupId": { + "type": "integer", + "format": "int32" } } }, @@ -5937,9 +6158,44 @@ "type": "object", "$ref": "#/definitions/evening_detective_serverPlaylistTrack" } + }, + "groups": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/evening_detective_serverPlaylistGroup" + } } } }, + "evening_detective_serverPlaylistGroup": { + "type": "object", + "properties": { + "ID": { + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "position": { + "type": "integer", + "format": "int32" + }, + "endMode": { + "$ref": "#/definitions/evening_detective_serverPlaylistGroupEndMode" + } + } + }, + "evening_detective_serverPlaylistGroupEndMode": { + "type": "string", + "enum": [ + "PLAYLIST_GROUP_END_MODE_REPEAT", + "PLAYLIST_GROUP_END_MODE_STOP", + "PLAYLIST_GROUP_END_MODE_NEXT" + ], + "default": "PLAYLIST_GROUP_END_MODE_REPEAT" + }, "evening_detective_serverPlaylistTrack": { "type": "object", "properties": { @@ -5956,6 +6212,10 @@ "position": { "type": "integer", "format": "int32" + }, + "groupId": { + "type": "integer", + "format": "int32" } } }, @@ -6013,6 +6273,14 @@ } } }, + "evening_detective_serverReorderPlaylistGroupsRsp": { + "type": "object", + "properties": { + "playlist": { + "$ref": "#/definitions/evening_detective_serverPlaylist" + } + } + }, "evening_detective_serverReorderPlaylistTracksRsp": { "type": "object", "properties": { @@ -6039,6 +6307,14 @@ }, "description": "Вопрос в шапке итоговой таблицы: правильный ответ (поле answer сообщения\nQuestion) командам/таблице не передаётся — он виден только в панели оценки." }, + "evening_detective_serverSavePlaylistGroupRsp": { + "type": "object", + "properties": { + "playlist": { + "$ref": "#/definitions/evening_detective_serverPlaylist" + } + } + }, "evening_detective_serverSaveScreenPlanRsp": { "type": "object", "properties": { @@ -6296,6 +6572,14 @@ } } }, + "evening_detective_serverSetPlaylistTrackGroupRsp": { + "type": "object", + "properties": { + "playlist": { + "$ref": "#/definitions/evening_detective_serverPlaylist" + } + } + }, "evening_detective_serverSetScenarioPlaylistRsp": { "type": "object" }, diff --git a/internal/app/playlist_errors.go b/internal/app/playlist_errors.go index 20b83fc..fe267ed 100644 --- a/internal/app/playlist_errors.go +++ b/internal/app/playlist_errors.go @@ -13,12 +13,13 @@ func playlistErrorStatus(err error, fallback string) error { case errors.Is(err, playlist_service.ErrInvalidName), errors.Is(err, playlist_service.ErrInvalidTrack): return status.Error(codes.InvalidArgument, err.Error()) - case errors.Is(err, playlist_service.ErrPlaylistNotFound), + case errors.Is(err, playlist_service.ErrGroupNotFound), + errors.Is(err, playlist_service.ErrPlaylistNotFound), errors.Is(err, playlist_service.ErrTrackNotFound), errors.Is(err, playlist_service.ErrGameNotFound), errors.Is(err, playlist_service.ErrScenarioNotFound): return status.Error(codes.NotFound, err.Error()) - case errors.Is(err, playlist_service.ErrTrackOrderChanged): + case errors.Is(err, playlist_service.ErrTrackOrderChanged), errors.Is(err, playlist_service.ErrGroupOrderChanged): return status.Error(codes.Aborted, err.Error()) case errors.Is(err, playlist_service.ErrPlaylistInUse): return status.Error(codes.FailedPrecondition, err.Error()) diff --git a/internal/app/playlist_groups.go b/internal/app/playlist_groups.go new file mode 100644 index 0000000..3f32bd2 --- /dev/null +++ b/internal/app/playlist_groups.go @@ -0,0 +1,68 @@ +package app + +import ( + "context" + + proto "evening_detective_server/proto" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func (s *server) SavePlaylistGroup(ctx context.Context, req *proto.SavePlaylistGroupReq) (*proto.SavePlaylistGroupRsp, error) { + if !canManagePlaylists(ctx) { + return nil, status.Error(codes.PermissionDenied, "permission denied") + } + var mode string + switch req.GetEndMode() { + case proto.PlaylistGroupEndMode_PLAYLIST_GROUP_END_MODE_REPEAT: + mode = "repeat" + case proto.PlaylistGroupEndMode_PLAYLIST_GROUP_END_MODE_STOP: + mode = "stop" + case proto.PlaylistGroupEndMode_PLAYLIST_GROUP_END_MODE_NEXT: + mode = "next" + default: + return nil, status.Error(codes.InvalidArgument, "некорректный режим завершения группы") + } + item, err := s.playlistService.SaveGroup(ctx, int(req.GetPlaylistID()), int(req.GetGroupID()), req.GetName(), mode) + if err != nil { + return nil, playlistErrorStatus(err, "не удалось сохранить группу") + } + return &proto.SavePlaylistGroupRsp{Playlist: mapPlaylist(item)}, nil +} + +func (s *server) DeletePlaylistGroup(ctx context.Context, req *proto.DeletePlaylistGroupReq) (*proto.DeletePlaylistGroupRsp, error) { + if !canManagePlaylists(ctx) { + return nil, status.Error(codes.PermissionDenied, "permission denied") + } + item, err := s.playlistService.DeleteGroup(ctx, int(req.GetPlaylistID()), int(req.GetGroupID())) + if err != nil { + return nil, playlistErrorStatus(err, "не удалось удалить группу") + } + return &proto.DeletePlaylistGroupRsp{Playlist: mapPlaylist(item)}, nil +} + +func (s *server) ReorderPlaylistGroups(ctx context.Context, req *proto.ReorderPlaylistGroupsReq) (*proto.ReorderPlaylistGroupsRsp, error) { + if !canManagePlaylists(ctx) { + return nil, status.Error(codes.PermissionDenied, "permission denied") + } + ids := make([]int, len(req.GetGroupIDs())) + for i, id := range req.GetGroupIDs() { + ids[i] = int(id) + } + item, err := s.playlistService.ReorderGroups(ctx, int(req.GetPlaylistID()), ids) + if err != nil { + return nil, playlistErrorStatus(err, "не удалось изменить порядок групп") + } + return &proto.ReorderPlaylistGroupsRsp{Playlist: mapPlaylist(item)}, nil +} + +func (s *server) SetPlaylistTrackGroup(ctx context.Context, req *proto.SetPlaylistTrackGroupReq) (*proto.SetPlaylistTrackGroupRsp, error) { + if !canManagePlaylists(ctx) { + return nil, status.Error(codes.PermissionDenied, "permission denied") + } + item, err := s.playlistService.SetTrackGroup(ctx, int(req.GetPlaylistID()), int(req.GetTrackID()), int(req.GetGroupID())) + if err != nil { + return nil, playlistErrorStatus(err, "не удалось изменить группу трека") + } + return &proto.SetPlaylistTrackGroupRsp{Playlist: mapPlaylist(item)}, nil +} diff --git a/internal/app/playlist_groups_test.go b/internal/app/playlist_groups_test.go new file mode 100644 index 0000000..9c48472 --- /dev/null +++ b/internal/app/playlist_groups_test.go @@ -0,0 +1,53 @@ +package app + +import ( + "context" + "testing" + + proto "evening_detective_server/proto" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func TestPlaylistGroupsRequireManagementRights(t *testing.T) { + for _, tc := range []struct { + name string + call func(*server, context.Context) error + }{ + {"save", func(s *server, ctx context.Context) error { + _, err := s.SavePlaylistGroup(ctx, &proto.SavePlaylistGroupReq{}) + return err + }}, + {"delete", func(s *server, ctx context.Context) error { + _, err := s.DeletePlaylistGroup(ctx, &proto.DeletePlaylistGroupReq{}) + return err + }}, + {"order", func(s *server, ctx context.Context) error { + _, err := s.ReorderPlaylistGroups(ctx, &proto.ReorderPlaylistGroupsReq{}) + return err + }}, + {"track", func(s *server, ctx context.Context) error { + _, err := s.SetPlaylistTrackGroup(ctx, &proto.SetPlaylistTrackGroupReq{}) + return err + }}, + } { + t.Run(tc.name, func(t *testing.T) { + for _, ctx := range []context.Context{context.Background(), ctxWithClaims("user")} { + if err := tc.call(&server{}, ctx); status.Code(err) != codes.PermissionDenied { + t.Fatal(err) + } + } + }) + } +} + +func TestSavePlaylistGroupRejectsUnknownMode(t *testing.T) { + for _, mode := range []proto.PlaylistGroupEndMode{-1, 99} { + t.Run(mode.String(), func(t *testing.T) { + _, err := (&server{}).SavePlaylistGroup(ctxWithClaims("organizer"), &proto.SavePlaylistGroupReq{EndMode: mode}) + if status.Code(err) != codes.InvalidArgument { + t.Fatal(err) + } + }) + } +} diff --git a/internal/app/playlist_order_test.go b/internal/app/playlist_order_test.go index 55fbaa0..570afd0 100644 --- a/internal/app/playlist_order_test.go +++ b/internal/app/playlist_order_test.go @@ -19,7 +19,10 @@ func TestPlaylistOrderErrorCodes(t *testing.T) { }{ {"invalid", playlist_service.ErrInvalidTrack, codes.InvalidArgument}, {"conflict", playlist_service.ErrTrackOrderChanged, codes.Aborted}, + {"group conflict", playlist_service.ErrGroupOrderChanged, codes.Aborted}, {"missing", playlist_service.ErrPlaylistNotFound, codes.NotFound}, + {"missing group", playlist_service.ErrGroupNotFound, codes.NotFound}, + {"active group", playlist_service.ErrPlaylistInUse, codes.FailedPrecondition}, {"internal", errors.New("secret SQL"), codes.Internal}, } for _, tc := range cases { diff --git a/internal/app/playlists.go b/internal/app/playlists.go index 4891b4d..2a0a635 100644 --- a/internal/app/playlists.go +++ b/internal/app/playlists.go @@ -153,6 +153,7 @@ func (s *server) SetGameMusic(ctx context.Context, req *proto.SetGameMusicReq) ( req.GetVolume(), req.GetLoop(), int32(req.GetPlayback()), + int(req.GetGroupId()), ) if err != nil { return nil, playlistErrorStatus(err, "не удалось изменить музыку игры") diff --git a/internal/app/playlists_mapper.go b/internal/app/playlists_mapper.go index 2d8e1c4..285839f 100644 --- a/internal/app/playlists_mapper.go +++ b/internal/app/playlists_mapper.go @@ -19,8 +19,12 @@ func mapPlaylist(value *playlist_service.Playlist) *proto.Playlist { Name: track.Name, Filename: track.Filename, Position: int32(track.Position), + GroupId: int32(track.GroupID), }) } + for _, group := range value.Groups { + result.Groups = append(result.Groups, &proto.PlaylistGroup{ID: int32(group.ID), Name: group.Name, Position: int32(group.Position), EndMode: mapGroupEndMode(group.EndMode)}) + } return result } @@ -31,6 +35,7 @@ func mapMusicState(value *playlist_service.MusicState) *proto.MusicState { return &proto.MusicState{ Playlist: mapPlaylist(value.Playlist), TrackIndex: int32(value.TrackIndex), + GroupId: int32(value.GroupID), PositionMs: value.PositionMs, Volume: value.Volume, Loop: value.Loop, @@ -38,3 +43,14 @@ func mapMusicState(value *playlist_service.MusicState) *proto.MusicState { StateVersion: value.Version, } } + +func mapGroupEndMode(mode string) proto.PlaylistGroupEndMode { + switch mode { + case "stop": + return proto.PlaylistGroupEndMode_PLAYLIST_GROUP_END_MODE_STOP + case "next": + return proto.PlaylistGroupEndMode_PLAYLIST_GROUP_END_MODE_NEXT + default: + return proto.PlaylistGroupEndMode_PLAYLIST_GROUP_END_MODE_REPEAT + } +} diff --git a/internal/app/screens.go b/internal/app/screens.go index 0054cf4..857c7c0 100644 --- a/internal/app/screens.go +++ b/internal/app/screens.go @@ -64,23 +64,12 @@ func (s *server) AdvanceScreenMusic(ctx context.Context, req *proto.AdvanceScree 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 + if !session.Sound { + return nil, status.Error(codes.FailedPrecondition, "экран не назначен для звука") } - 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) + updated, err := s.playlistService.Advance(ctx, *session.GameID, req.GetExpectedStateVersion()) if err != nil { - return nil, status.Error(codes.Internal, "не удалось переключить трек") + return nil, playlistErrorStatus(err, "не удалось переключить трек") } return &proto.AdvanceScreenMusicRsp{State: mapMusicState(updated)}, nil } diff --git a/internal/repos/game_exports_repo/repo_test.go b/internal/repos/game_exports_repo/repo_test.go index d7edcc6..d9d70fc 100644 --- a/internal/repos/game_exports_repo/repo_test.go +++ b/internal/repos/game_exports_repo/repo_test.go @@ -36,9 +36,14 @@ func TestExportSnapshotAndEditableGame(t *testing.T) { requireNoError(t, err) selected, err := music.Create(ctx, "Selected by screen") requireNoError(t, err) + requireNoError(t, music.AddTrack(ctx, selected.ID, "Grouped", "grouped.mp3")) + selected, err = music.SaveGroup(ctx, selected.ID, 0, "Final", "stop") + requireNoError(t, err) + selected, err = music.SetTrackGroup(ctx, selected.ID, selected.Tracks[0].ID, selected.Groups[0].ID) + requireNoError(t, err) requireNoError(t, music.SetScenario(ctx, f.scenarioID, base.ID)) requireNoError(t, music.SetGame(ctx, f.gameID, assigned.ID)) - _, err = music.SetMusic(ctx, f.gameID, selected.ID, 0, 0, 100, false, 1) + _, err = music.SetMusic(ctx, f.gameID, selected.ID, 0, 0, 100, false, 1, 0) requireNoError(t, err) ticketRepo := tickets_repo.New(f.pool) activeHash := sha256.Sum256([]byte("active-ticket")) @@ -86,6 +91,25 @@ func TestExportSnapshotAndEditableGame(t *testing.T) { } } requireNoError(t, json.Unmarshal(attempt.Snapshot, &snapshot)) + var groupedSnapshot struct { + Playlists []struct { + ID int `json:"id"` + Groups []struct { + ID int `json:"id"` + EndMode string `json:"end_mode"` + } `json:"groups"` + Tracks []struct { + GroupID int `json:"group_id"` + } `json:"tracks"` + } `json:"playlists"` + } + requireNoError(t, json.Unmarshal(attempt.Snapshot, &groupedSnapshot)) + for _, p := range groupedSnapshot.Playlists { + if p.ID == selected.ID && (len(p.Groups) != 1 || p.Groups[0].EndMode != "stop" || len(p.Tracks) != 1 || p.Tracks[0].GroupID != p.Groups[0].ID) { + t.Fatal("export lost group metadata") + } + } + if snapshot.Game.PlaylistID != selected.ID || len(snapshot.Playlists) != 2 || len(snapshot.Tickets) != 2 || !bytes.Equal(snapshot.Tickets[0].TokenHash, activeHash[:]) || snapshot.Teams[0].Password != "original-qr" { t.Fatalf("snapshot lost effective music, ticket or QR: %+v", snapshot) @@ -99,7 +123,7 @@ func TestExportSnapshotAndEditableGame(t *testing.T) { requireNoError(t, err) _, err = ticketRepo.Accept(ctx, activeHash[:], f.userID) requireNoError(t, err) - _, err = music.SetMusic(ctx, f.gameID, base.ID, 0, 0, 100, false, 1) + _, err = music.SetMusic(ctx, f.gameID, base.ID, 0, 0, 100, false, 1, 0) requireNoError(t, err) _, err = plans.Save(ctx, f.gameID, []game_screen_plans_repo.Step{{Mode: 2}}, 0) requireNoError(t, err) diff --git a/internal/repos/game_exports_repo/snapshot.go b/internal/repos/game_exports_repo/snapshot.go index 67694f2..cbf558f 100644 --- a/internal/repos/game_exports_repo/snapshot.go +++ b/internal/repos/game_exports_repo/snapshot.go @@ -48,9 +48,15 @@ func captureSnapshot(ctx context.Context, tx pgx.Tx, gameID int) ([]byte, error) ), '[]'::jsonb), 'playlists', COALESCE(( SELECT jsonb_agg(jsonb_build_object( - 'id', p.id, 'name', p.name, 'tracks', COALESCE(( + 'id', p.id, 'name', p.name, 'groups', COALESCE(( + SELECT jsonb_agg(jsonb_build_object( + 'id', pg.id, 'name', pg.name, 'position', pg.position, 'end_mode', pg.end_mode + ) ORDER BY pg.position, pg.id) + FROM playlist_groups pg + WHERE pg.playlist_id = p.id + ), '[]'::jsonb), 'tracks', COALESCE(( SELECT jsonb_agg(jsonb_build_object( - 'id', tr.id, 'name', tr.name, 'filename', tr.filename, 'position', tr.position + 'id', tr.id, 'name', tr.name, 'filename', tr.filename, 'position', tr.position, 'group_id', COALESCE(tr.group_id, 0) ) ORDER BY tr.position, tr.id) FROM playlist_tracks tr WHERE tr.playlist_id = p.id diff --git a/internal/repos/game_imports_repo/groups_test.go b/internal/repos/game_imports_repo/groups_test.go new file mode 100644 index 0000000..715ba8c --- /dev/null +++ b/internal/repos/game_imports_repo/groups_test.go @@ -0,0 +1,59 @@ +package game_imports_repo + +import ( + "context" + "encoding/json" + "testing" + "time" + + "evening_detective_server/internal/modules/storytelling" + "evening_detective_server/internal/repos/playlists_repo" + "evening_detective_server/internal/services/game_package_service" +) + +func TestImportPreservesPlaylistGroupsAndLegacyTracks(t *testing.T) { + for _, grouped := range []bool{false, true} { + t.Run(map[bool]string{false: "legacy", true: "groups"}[grouped], func(t *testing.T) { + repo, actor := repoFixture(t) + ctx := context.Background() + now := time.Now().UTC() + playlistID := 900 + data := game_package_service.Data{ + Game: game_package_service.Game{ID: 100, Name: "Game", StartAt: now, Status: "draft", Format: "offline", ScenarioID: 200, PlaylistID: &playlistID}, + Scenario: game_package_service.Scenario{ID: 200, Name: "Story", Story: &storytelling.Story{}, Status: "draft", CreatedAt: now, UpdatedAt: now}, + Playlists: []game_package_service.Playlist{{ID: playlistID, Name: "Music", Tracks: []game_package_service.Track{{ID: 901, Name: "One", Filename: "one.mp3", Position: 3}, {ID: 902, Name: "Two", Filename: "two.mp3", Position: 4}}}}, + } + if grouped { + data.Playlists[0].Groups = []game_package_service.PlaylistGroup{{ID: 800, Name: "Second", Position: 0, EndMode: "stop"}, {ID: 801, Name: "First", Position: 1, EndMode: "next"}, {ID: 802, Name: "Empty", Position: 2, EndMode: "repeat"}} + data.Playlists[0].Tracks[0].GroupID = 801 + data.Playlists[0].Tracks[1].GroupID = 800 + } + raw, err := json.Marshal(data) + if err != nil { + t.Fatal(err) + } + attempt, err := repo.Start(ctx, &Attempt{ID: "group-import", PackageID: "group-package", SourceServer: "https://online.example", GameID: 100, SHA256: "digest", InitiatorID: actor, Manifest: []byte(`{}`), OriginalData: raw, ObjectKeys: []string{}}) + if err != nil { + t.Fatal(err) + } + if err := repo.Complete(ctx, attempt.ID, raw); err != nil { + t.Fatal(err) + } + items, err := playlists_repo.New(repo.pool).List(ctx) + if err != nil { + t.Fatal(err) + } + if len(items) != 1 || len(items[0].Tracks) != 2 { + t.Fatalf("lost playlist: %+v", items) + } + p := items[0] + if grouped { + if len(p.Groups) != 3 || p.Groups[0].Name != "Second" || p.Groups[1].EndMode != "next" || p.Groups[2].EndMode != "repeat" || p.Tracks[0].GroupID != p.Groups[1].ID || p.Tracks[1].GroupID != p.Groups[0].ID { + t.Fatalf("lost group mappings: %+v", p) + } + } else if len(p.Groups) != 0 || p.Tracks[0].GroupID != 0 { + t.Fatal("legacy tracks gained groups") + } + }) + } +} diff --git a/internal/repos/game_imports_repo/publish.go b/internal/repos/game_imports_repo/publish.go index 0451710..3f7a73e 100644 --- a/internal/repos/game_imports_repo/publish.go +++ b/internal/repos/game_imports_repo/publish.go @@ -178,8 +178,9 @@ func insertPlaylists(ctx context.Context, tx pgx.Tx, data []byte, mappings *Mapp `SELECT id, name, - tracks - FROM jsonb_to_recordset(COALESCE(NULLIF($1::jsonb->'playlists', 'null'::jsonb), '[]'::jsonb)) AS p(id integer, name text, tracks jsonb) + tracks, + groups + FROM jsonb_to_recordset(COALESCE(NULLIF($1::jsonb->'playlists', 'null'::jsonb), '[]'::jsonb)) AS p(id integer, name text, tracks jsonb, groups jsonb) ORDER BY id`, data, ) @@ -191,11 +192,12 @@ func insertPlaylists(ctx context.Context, tx pgx.Tx, data []byte, mappings *Mapp id int name string tracks []byte + groups []byte } var playlists []playlist for rows.Next() { var p playlist - if err := rows.Scan(&p.id, &p.name, &p.tracks); err != nil { + if err := rows.Scan(&p.id, &p.name, &p.tracks, &p.groups); err != nil { return err } playlists = append(playlists, p) @@ -218,6 +220,39 @@ func insertPlaylists(ctx context.Context, tx pgx.Tx, data []byte, mappings *Mapp return err } mappings.Playlists[p.id] = localID + var groupMap []byte + err = tx.QueryRow( + ctx, + `WITH source AS MATERIALIZED ( + SELECT + id AS source_id, + nextval(pg_get_serial_sequence('playlist_groups', 'id'))::integer AS local_id, + name, + position, + end_mode + FROM jsonb_to_recordset(COALESCE(NULLIF($1::jsonb, 'null'::jsonb), '[]'::jsonb)) AS g(id integer, name text, position integer, end_mode text) + ), inserted AS ( + INSERT INTO playlist_groups (id, playlist_id, name, position, end_mode) + SELECT + local_id, + $2, + name, + position, + end_mode + FROM source + RETURNING + id + ) + SELECT + COALESCE(jsonb_object_agg(s.source_id, s.local_id), '{}'::jsonb) + FROM source s + JOIN inserted i ON i.id = s.local_id`, + p.groups, + localID, + ).Scan(&groupMap) + if err != nil { + return err + } var trackMap []byte err = tx.QueryRow( ctx, @@ -227,16 +262,18 @@ func insertPlaylists(ctx context.Context, tx pgx.Tx, data []byte, mappings *Mapp nextval(pg_get_serial_sequence('playlist_tracks', 'id'))::integer AS local_id, name, filename, - position - FROM jsonb_to_recordset(COALESCE(NULLIF($1::jsonb, 'null'::jsonb), '[]'::jsonb)) AS t(id integer, name text, filename text, position integer) + position, + group_id + FROM jsonb_to_recordset(COALESCE(NULLIF($1::jsonb, 'null'::jsonb), '[]'::jsonb)) AS t(id integer, name text, filename text, position integer, group_id integer) ), inserted AS ( - INSERT INTO playlist_tracks (id, playlist_id, name, filename, position) + INSERT INTO playlist_tracks (id, playlist_id, name, filename, position, group_id) SELECT local_id, $2, name, filename, - position + position, + ($3::jsonb->>group_id::text)::integer FROM source RETURNING id @@ -247,6 +284,7 @@ func insertPlaylists(ctx context.Context, tx pgx.Tx, data []byte, mappings *Mapp JOIN inserted i ON i.id = s.local_id`, p.tracks, localID, + groupMap, ).Scan(&trackMap) if err != nil { return err diff --git a/internal/repos/playlists_repo/groups.go b/internal/repos/playlists_repo/groups.go new file mode 100644 index 0000000..0d39d51 --- /dev/null +++ b/internal/repos/playlists_repo/groups.go @@ -0,0 +1,288 @@ +package playlists_repo + +import ( + "context" + "errors" + "slices" + + "github.com/jackc/pgx/v5" +) + +// groupInUse runs under the playlist lock shared with playback updates. +func groupInUse(ctx context.Context, tx pgx.Tx, playlistID, groupID int) error { + var used bool + err := tx.QueryRow( + ctx, + `SELECT EXISTS ( + SELECT 1 + FROM game_music_states ms + JOIN games g ON g.id = ms.game_id + JOIN scenarios s ON s.id = g.scenario_id + WHERE COALESCE(ms.playlist_id, g.playlist_id, s.playlist_id) = $1 + AND ms.playback IN (2, 3) + AND ($2 = 0 OR ms.group_id IS NULL OR ms.group_id = $2) + )`, + playlistID, + groupID, + ).Scan(&used) + if err != nil { + return err + } + if used { + return ErrPlaylistInUse + } + return nil +} + +func readGroup(ctx context.Context, tx pgx.Tx, playlistID, groupID int) (*Group, error) { + var group Group + err := tx.QueryRow( + ctx, + `SELECT + id, + name, + position, + end_mode + FROM playlist_groups + WHERE playlist_id = $1 AND id = $2`, + playlistID, + groupID, + ).Scan(&group.ID, &group.Name, &group.Position, &group.EndMode) + if errors.Is(err, pgx.ErrNoRows) { + return nil, ErrGroupNotFound + } + return &group, err +} + +// SaveGroup creates a group or changes its name and completion mode. +func (r *Repo) SaveGroup(ctx context.Context, playlistID, groupID int, name, mode string) (*Playlist, error) { + tx, err := r.pool.Begin(ctx) + if err != nil { + return nil, err + } + defer tx.Rollback(ctx) + if err := lockPlaylist(ctx, tx, playlistID); err != nil { + return nil, err + } + if groupID == 0 { + _, err = tx.Exec( + ctx, + `INSERT INTO playlist_groups (playlist_id, name, position, end_mode) + SELECT + $1, + $2, + COALESCE(MAX(position), -1) + 1, + $3 + FROM playlist_groups + WHERE playlist_id = $1`, + playlistID, + name, + mode, + ) + } else { + group, readErr := readGroup(ctx, tx, playlistID, groupID) + if readErr != nil { + return nil, readErr + } + if mode != group.EndMode { + if err := groupInUse(ctx, tx, playlistID, groupID); err != nil { + return nil, err + } + } + _, err = tx.Exec( + ctx, + `UPDATE playlist_groups + SET name = $3, end_mode = $4 + WHERE playlist_id = $1 AND id = $2`, + playlistID, + groupID, + name, + mode, + ) + } + if err != nil { + return nil, err + } + if err := tx.Commit(ctx); err != nil { + return nil, err + } + return r.Get(ctx, playlistID) +} + +// DeleteGroup keeps its tracks and clears stopped selections before deleting it. +func (r *Repo) DeleteGroup(ctx context.Context, playlistID, groupID int) (*Playlist, error) { + tx, err := r.pool.Begin(ctx) + if err != nil { + return nil, err + } + defer tx.Rollback(ctx) + if err := lockPlaylist(ctx, tx, playlistID); err != nil { + return nil, err + } + if _, err := readGroup(ctx, tx, playlistID, groupID); err != nil { + return nil, err + } + if err := groupInUse(ctx, tx, playlistID, groupID); err != nil { + return nil, err + } + _, err = tx.Exec( + ctx, + `UPDATE playlist_tracks + SET group_id = NULL + WHERE playlist_id = $1 AND group_id = $2`, + playlistID, + groupID, + ) + if err != nil { + return nil, err + } + _, err = tx.Exec( + ctx, + `UPDATE game_music_states + SET group_id = NULL, state_version = state_version + 1 + WHERE playlist_id = $1 AND group_id = $2`, + playlistID, + groupID, + ) + if err != nil { + return nil, err + } + _, err = tx.Exec( + ctx, + `DELETE FROM playlist_groups + WHERE playlist_id = $1 AND id = $2`, + playlistID, + groupID, + ) + if err != nil { + return nil, err + } + if err := tx.Commit(ctx); err != nil { + return nil, err + } + return r.Get(ctx, playlistID) +} + +// ReorderGroups requires a complete group order to detect stale editors. +func (r *Repo) ReorderGroups(ctx context.Context, playlistID int, ids []int) (*Playlist, error) { + tx, err := r.pool.Begin(ctx) + if err != nil { + return nil, err + } + defer tx.Rollback(ctx) + if err := lockPlaylist(ctx, tx, playlistID); err != nil { + return nil, err + } + rows, err := tx.Query( + ctx, + `SELECT id + FROM playlist_groups + WHERE playlist_id = $1 + ORDER BY position, id`, + playlistID, + ) + if err != nil { + return nil, err + } + old, err := pgx.CollectRows(rows, pgx.RowTo[int]) + if err != nil { + return nil, err + } + sortedOld, sortedNew := slices.Clone(old), slices.Clone(ids) + slices.Sort(sortedOld) + slices.Sort(sortedNew) + if !slices.Equal(sortedOld, sortedNew) { + return nil, ErrGroupOrderChanged + } + if !slices.Equal(old, ids) { + if err := groupInUse(ctx, tx, playlistID, 0); err != nil { + return nil, err + } + _, err = tx.Exec( + ctx, + `UPDATE playlist_groups g + SET position = ordered.position - 1 + FROM unnest($2::int[]) WITH ORDINALITY AS ordered(id, position) + WHERE g.playlist_id = $1 AND g.id = ordered.id`, + playlistID, + ids, + ) + if err != nil { + return nil, err + } + } + if err := tx.Commit(ctx); err != nil { + return nil, err + } + return r.Get(ctx, playlistID) +} + +// SetTrackGroup moves a track without changing its global playback index. +func (r *Repo) SetTrackGroup(ctx context.Context, playlistID, trackID, groupID int) (*Playlist, error) { + tx, err := r.pool.Begin(ctx) + if err != nil { + return nil, err + } + defer tx.Rollback(ctx) + if err := lockPlaylist(ctx, tx, playlistID); err != nil { + return nil, err + } + var oldGroup int + err = tx.QueryRow( + ctx, + `SELECT COALESCE(group_id, 0) + FROM playlist_tracks + WHERE playlist_id = $1 AND id = $2`, + playlistID, + trackID, + ).Scan(&oldGroup) + if errors.Is(err, pgx.ErrNoRows) { + return nil, ErrTrackNotFound + } + if err != nil { + return nil, err + } + if groupID != 0 { + if _, err := readGroup(ctx, tx, playlistID, groupID); err != nil { + return nil, err + } + } + if oldGroup != groupID { + // An ungrouped track must not block edits to unrelated active groups. + for _, id := range []int{oldGroup, groupID} { + if id != 0 { + if err := groupInUse(ctx, tx, playlistID, id); err != nil { + return nil, err + } + } + } + _, err = tx.Exec( + ctx, + `UPDATE playlist_tracks + SET group_id = NULLIF($3, 0) + WHERE playlist_id = $1 AND id = $2`, + playlistID, + trackID, + groupID, + ) + if err != nil { + return nil, err + } + _, err = tx.Exec( + ctx, + `UPDATE game_music_states ms + SET group_id = NULL, state_version = state_version + 1 + WHERE ms.playlist_id = $1 AND ms.playback = 1 + AND ms.group_id = $2`, + playlistID, + oldGroup, + ) + if err != nil { + return nil, err + } + } + if err := tx.Commit(ctx); err != nil { + return nil, err + } + return r.Get(ctx, playlistID) +} diff --git a/internal/repos/playlists_repo/groups_test.go b/internal/repos/playlists_repo/groups_test.go new file mode 100644 index 0000000..b27bb47 --- /dev/null +++ b/internal/repos/playlists_repo/groups_test.go @@ -0,0 +1,167 @@ +package playlists_repo + +import ( + "context" + "errors" + "sync" + "sync/atomic" + "testing" +) + +func TestGroupEditingProtectsLivePlayback(t *testing.T) { + for _, playback := range []int32{1, 2, 3} { + t.Run(map[int32]string{1: "stopped", 2: "playing", 3: "paused"}[playback], func(t *testing.T) { + f := newPlaylistFixture(t) + ctx := context.Background() + p, err := f.repo.Create(ctx, "Music") + requireNoError(t, err) + for _, name := range []string{"one", "two", "three"} { + requireNoError(t, f.repo.AddTrack(ctx, p.ID, name, name+".mp3")) + } + p, err = f.repo.SaveGroup(ctx, p.ID, 0, "First", "repeat") + requireNoError(t, err) + first := p.Groups[0].ID + p, err = f.repo.SaveGroup(ctx, p.ID, 0, "Second", "stop") + requireNoError(t, err) + second := p.Groups[1].ID + p, err = f.repo.SetTrackGroup(ctx, p.ID, p.Tracks[0].ID, first) + requireNoError(t, err) + p, err = f.repo.SetTrackGroup(ctx, p.ID, p.Tracks[1].ID, first) + requireNoError(t, err) + p, err = f.repo.SetTrackGroup(ctx, p.ID, p.Tracks[2].ID, second) + requireNoError(t, err) + state, err := f.repo.SetMusic(ctx, f.gameID, p.ID, 0, 123, 50, false, playback, first) + requireNoError(t, err) + _, err = f.repo.SaveGroup(ctx, p.ID, first, "Renamed", "repeat") + requireNoError(t, err) + for _, tc := range []struct { + name string + run func() error + }{ + {"mode", func() error { _, err := f.repo.SaveGroup(ctx, p.ID, first, "Renamed", "next"); return err }}, + {"group order", func() error { _, err := f.repo.ReorderGroups(ctx, p.ID, []int{second, first}); return err }}, + {"track order", func() error { + _, err := f.repo.Reorder(ctx, p.ID, []int{p.Tracks[1].ID, p.Tracks[0].ID, p.Tracks[2].ID}) + return err + }}, + {"membership", func() error { _, err := f.repo.SetTrackGroup(ctx, p.ID, p.Tracks[0].ID, second); return err }}, + {"delete group", func() error { _, err := f.repo.DeleteGroup(ctx, p.ID, first); return err }}, + } { + t.Run(tc.name, func(t *testing.T) { + // Each stopped edit gets its own fixture state; live edits must be rejected atomically. + if playback == 1 { + return + } + if err := tc.run(); !errors.Is(err, ErrPlaylistInUse) { + t.Fatalf("got %v", err) + } + }) + } + if playback != 1 { + _, err := f.repo.DeleteTrack(ctx, p.ID, p.Tracks[0].ID) + if !errors.Is(err, ErrPlaylistInUse) { + t.Fatal(err) + } + // An unrelated group's name and mode remain editable. + _, err = f.repo.SaveGroup(ctx, p.ID, second, "Other", "next") + requireNoError(t, err) + _, err = f.repo.SetMusic(ctx, f.gameID, p.ID, 0, 0, 50, false, 1, first) + requireNoError(t, err) + } + _, err = f.repo.SaveGroup(ctx, p.ID, first, "Renamed", "next") + requireNoError(t, err) + p, err = f.repo.ReorderGroups(ctx, p.ID, []int{second, first}) + requireNoError(t, err) + if p.Groups[0].ID != second { + t.Fatal("group order lost") + } + p, err = f.repo.DeleteGroup(ctx, p.ID, first) + requireNoError(t, err) + if len(p.Tracks) != 3 || p.Tracks[0].GroupID != 0 || p.Tracks[1].GroupID != 0 { + t.Fatal("group deletion lost tracks") + } + after, err := f.repo.GetMusic(ctx, f.gameID) + requireNoError(t, err) + if after.GroupID != 0 { + t.Fatal("deleted group remains selected") + } + _, err = f.repo.DeleteTrack(ctx, p.ID, p.Tracks[0].ID) + requireNoError(t, err) + // A stale completion must never restore a deleted section. + _, err = f.repo.AdvanceMusic(ctx, f.gameID, state.Version, func(*MusicState) (int, int, int32) { t.Fatal("stale completion applied"); return 0, second, 2 }) + requireNoError(t, err) + }) + } +} + +func TestGroupAssignmentsAndPlaybackRejectForeignIDs(t *testing.T) { + for _, name := range []string{"foreign and empty groups"} { + t.Run(name, func(t *testing.T) { + f := newPlaylistFixture(t) + ctx := context.Background() + p, err := f.repo.Create(ctx, "One") + requireNoError(t, err) + requireNoError(t, f.repo.AddTrack(ctx, p.ID, "Track", "track.mp3")) + p, err = f.repo.SaveGroup(ctx, p.ID, 0, "Empty", "repeat") + requireNoError(t, err) + other, err := f.repo.Create(ctx, "Other") + requireNoError(t, err) + other, err = f.repo.SaveGroup(ctx, other.ID, 0, "Foreign", "stop") + requireNoError(t, err) + _, err = f.repo.SetTrackGroup(ctx, p.ID, p.Tracks[0].ID, other.Groups[0].ID) + if !errors.Is(err, ErrGroupNotFound) { + t.Fatal(err) + } + _, err = f.repo.SetMusic(ctx, f.gameID, p.ID, 0, 0, 50, false, 2, p.Groups[0].ID) + if !errors.Is(err, ErrInvalidTrack) { + t.Fatal(err) + } + _, err = f.repo.ReorderGroups(ctx, p.ID, []int{other.Groups[0].ID}) + if !errors.Is(err, ErrGroupOrderChanged) { + t.Fatal(err) + } + }) + } +} + +func TestConcurrentCompletionAdvancesOnce(t *testing.T) { + for _, playback := range []int32{1, 2, 3} { + t.Run(map[int32]string{1: "stopped", 2: "playing", 3: "paused"}[playback], func(t *testing.T) { + f := newPlaylistFixture(t) + ctx := context.Background() + p, err := f.repo.Create(ctx, "Concurrent completion") + requireNoError(t, err) + for _, name := range []string{"one", "two"} { + requireNoError(t, f.repo.AddTrack(ctx, p.ID, name, name+".mp3")) + } + before, err := f.repo.SetMusic(ctx, f.gameID, p.ID, 0, 0, 50, false, playback, 0) + requireNoError(t, err) + var calls atomic.Int32 + failures := make(chan error, 8) + var wg sync.WaitGroup + for range 8 { + wg.Go(func() { + _, err := f.repo.AdvanceMusic(ctx, f.gameID, before.Version, func(state *MusicState) (int, int, int32) { + calls.Add(1) + return state.TrackIndex + 1, 0, state.Playback + }) + failures <- err + }) + } + wg.Wait() + close(failures) + for err := range failures { + requireNoError(t, err) + } + after, err := f.repo.GetMusic(ctx, f.gameID) + requireNoError(t, err) + want := int32(0) + if playback == 2 { + want = 1 + } + if calls.Load() != want || after.TrackIndex != int(want) || after.Version != before.Version+int64(want) { + t.Fatalf("completion repeated or applied while stopped: calls=%d state=%+v", calls.Load(), after) + } + }) + } +} diff --git a/internal/repos/playlists_repo/order.go b/internal/repos/playlists_repo/order.go index 1a0f971..b0476e1 100644 --- a/internal/repos/playlists_repo/order.go +++ b/internal/repos/playlists_repo/order.go @@ -56,6 +56,35 @@ func (r *Repo) Reorder(ctx context.Context, playlistID int, trackIDs []int) (*Pl return nil, ErrTrackOrderChanged } if !slices.Equal(old, trackIDs) { + items, err := list(ctx, tx) + if err != nil { + return nil, err + } + for _, item := range items { + if item.ID != playlistID { + continue + } + for _, group := range item.Groups { + var before, after []int + members := make(map[int]bool) + for _, track := range item.Tracks { + if track.GroupID == group.ID { + before = append(before, track.ID) + members[track.ID] = true + } + } + for _, id := range trackIDs { + if members[id] { + after = append(after, id) + } + } + if !slices.Equal(before, after) { + if err := groupInUse(ctx, tx, playlistID, group.ID); err != nil { + return nil, err + } + } + } + } // Lock state before changing indices; timing and playback remain untouched. _, err = tx.Exec( ctx, diff --git a/internal/repos/playlists_repo/order_test.go b/internal/repos/playlists_repo/order_test.go index d6d3ed7..b308a29 100644 --- a/internal/repos/playlists_repo/order_test.go +++ b/internal/repos/playlists_repo/order_test.go @@ -24,12 +24,12 @@ func TestReorderPreservesPlaybackAndRejectsChangedMembership(t *testing.T) { } p, err = f.repo.Get(ctx, p.ID) requireNoError(t, err) - before, err := f.repo.SetMusic(ctx, f.gameID, p.ID, 1, 1234, 37, true, playback) + before, err := f.repo.SetMusic(ctx, f.gameID, p.ID, 1, 1234, 37, true, playback, 0) requireNoError(t, err) if err := f.repo.Delete(ctx, p.ID); !errors.Is(err, ErrPlaylistInUse) { t.Fatalf("active playlist deletion: %v", err) } - if _, err := f.repo.DeleteTrack(ctx, p.ID, p.Tracks[0].ID); !errors.Is(err, ErrPlaylistInUse) { + if _, err := f.repo.DeleteTrack(ctx, p.ID, 999999); !errors.Is(err, ErrTrackNotFound) { t.Fatalf("active track deletion: %v", err) } order := []int{p.Tracks[1].ID, p.Tracks[2].ID, p.Tracks[0].ID} @@ -120,7 +120,7 @@ func TestBindInitializesAudioWithoutChangingTransport(t *testing.T) { requireNoError(t, f.screens.Bind(ctx, first, f.gameID, "first")) requireNoError(t, f.screens.SetSound(ctx, first, true)) requireNoError(t, f.screens.SetCommand(ctx, f.gameID, 2, 3456, 39)) - before, err := f.repo.SetMusic(ctx, f.gameID, 0, 0, 1234, 42, true, 2) + before, err := f.repo.SetMusic(ctx, f.gameID, 0, 0, 1234, 42, true, 2, 0) requireNoError(t, err) second, err := f.screens.Create(ctx, "second") requireNoError(t, err) @@ -176,7 +176,7 @@ func TestReorderReadersSeeConsistentTrackAndIndex(t *testing.T) { } p, err = f.repo.Get(ctx, p.ID) requireNoError(t, err) - _, err = f.repo.SetMusic(ctx, f.gameID, p.ID, 1, 1000, 50, true, 3) + _, err = f.repo.SetMusic(ctx, f.gameID, p.ID, 1, 1000, 50, true, 3, 0) requireNoError(t, err) old := []int{p.Tracks[0].ID, p.Tracks[1].ID, p.Tracks[2].ID} reordered := []int{old[1], old[2], old[0]} diff --git a/internal/repos/playlists_repo/repo.go b/internal/repos/playlists_repo/repo.go index ac22b67..c767fea 100644 --- a/internal/repos/playlists_repo/repo.go +++ b/internal/repos/playlists_repo/repo.go @@ -10,7 +10,10 @@ import ( ) var ( + ErrInvalidTrack = errors.New("некорректный трек или группа") + ErrGroupNotFound = errors.New("группа не найдена") ErrPlaylistNotFound = errors.New("плейлист не найден") + ErrGroupOrderChanged = errors.New("состав групп изменился; обновите список") ErrTrackOrderChanged = errors.New("состав треков изменился; обновите список") ErrPlaylistInUse = errors.New("плейлист используется") ErrTrackNotFound = errors.New("трек не найден") @@ -24,6 +27,15 @@ type Track struct { Name string Filename string Position int + GroupID int +} + +// Group describes an ordered section of a playlist. +type Group struct { + ID int + Name string + Position int + EndMode string } // Playlist describes a stored playlist. @@ -31,12 +43,14 @@ type Playlist struct { ID int Name string Tracks []*Track + Groups []*Group } // MusicState describes stored game music state. type MusicState struct { Playlist *Playlist TrackIndex int + GroupID int PositionMs int64 Volume int32 Loop bool @@ -55,7 +69,12 @@ func New(pool *pgxpool.Pool) *Repo { return &Repo{pool: pool} } // List returns all playlists with their tracks. func (r *Repo) List(ctx context.Context) ([]*Playlist, error) { - return list(ctx, r.pool) + tx, err := r.pool.BeginTx(ctx, pgx.TxOptions{IsoLevel: pgx.RepeatableRead, AccessMode: pgx.ReadOnly}) + if err != nil { + return nil, err + } + defer tx.Rollback(ctx) + return list(ctx, tx) } // IPlaylistReader reads catalogues from a pool or a consistent transaction snapshot. @@ -72,7 +91,8 @@ func list(ctx context.Context, reader IPlaylistReader) ([]*Playlist, error) { t.id, t.name, t.filename, - t.position + t.position, + COALESCE(t.group_id, 0) FROM playlists p LEFT JOIN playlist_tracks t ON t.playlist_id = p.id ORDER BY p.id, t.position, t.id`, @@ -88,7 +108,8 @@ func list(ctx context.Context, reader IPlaylistReader) ([]*Playlist, error) { var trackID *int var trackName, filename *string var position *int - if err := rows.Scan(&p.ID, &p.Name, &trackID, &trackName, &filename, &position); err != nil { + var groupID int + if err := rows.Scan(&p.ID, &p.Name, &trackID, &trackName, &filename, &position, &groupID); err != nil { return nil, err } item := byID[p.ID] @@ -98,10 +119,36 @@ func list(ctx context.Context, reader IPlaylistReader) ([]*Playlist, error) { result = append(result, item) } if trackID != nil { - item.Tracks = append(item.Tracks, &Track{ID: *trackID, Name: *trackName, Filename: *filename, Position: *position}) + item.Tracks = append(item.Tracks, &Track{ID: *trackID, Name: *trackName, Filename: *filename, Position: *position, GroupID: groupID}) } } - return result, rows.Err() + if err := rows.Err(); err != nil { + return nil, err + } + rows.Close() + groups, err := reader.Query(ctx, `SELECT + playlist_id, + id, + name, + position, + end_mode + FROM playlist_groups + ORDER BY playlist_id, position, id`) + if err != nil { + return nil, err + } + defer groups.Close() + for groups.Next() { + var playlistID int + var group Group + if err := groups.Scan(&playlistID, &group.ID, &group.Name, &group.Position, &group.EndMode); err != nil { + return nil, err + } + if p := byID[playlistID]; p != nil { + p.Groups = append(p.Groups, &group) + } + } + return result, groups.Err() } // Get returns a playlist by ID. @@ -244,20 +291,59 @@ func (r *Repo) DeleteTrack(ctx context.Context, playlistID, trackID int) (string return "", err } var filename string - var used bool - if err = tx.QueryRow( + var groupID int + err = tx.QueryRow( ctx, - ` - SELECT EXISTS (SELECT 1 FROM scenarios WHERE playlist_id = $1) - OR EXISTS (SELECT 1 FROM games WHERE playlist_id = $1) - OR EXISTS (SELECT 1 FROM game_music_states WHERE playlist_id = $1) - `, + `SELECT COALESCE(group_id, 0) + FROM playlist_tracks + WHERE playlist_id = $1 AND id = $2`, playlistID, - ).Scan(&used); err != nil { + trackID, + ).Scan(&groupID) + if errors.Is(err, pgx.ErrNoRows) { + return "", ErrTrackNotFound + } + if err != nil { return "", err } - if used { - return "", ErrPlaylistInUse + if groupID == 0 { + groupID = -1 + } + if err := groupInUse(ctx, tx, playlistID, groupID); err != nil { + return "", err + } + _, err = tx.Exec( + ctx, + `WITH ordered AS ( + SELECT + id, + row_number() OVER (ORDER BY position, id) - 1 AS index, + count(*) OVER () AS total + FROM playlist_tracks + WHERE playlist_id = $1 + ), removed AS ( + SELECT index, total + FROM ordered + WHERE id = $2 + ) + UPDATE game_music_states ms + SET track_index = CASE + WHEN ms.track_index > removed.index THEN ms.track_index - 1 + WHEN ms.track_index = removed.index THEN GREATEST(0, LEAST(ms.track_index, removed.total - 2)) + ELSE ms.track_index END, + group_id = CASE WHEN ms.track_index = removed.index THEN NULL ELSE ms.group_id END, + position_ms = CASE WHEN ms.track_index = removed.index THEN 0 ELSE ms.position_ms END, + state_version = ms.state_version + 1 + FROM games g + JOIN scenarios s ON s.id = g.scenario_id + CROSS JOIN removed + WHERE ms.game_id = g.id + AND COALESCE(ms.playlist_id, g.playlist_id, s.playlist_id) = $1`, + playlistID, + trackID, + ) + if err != nil { + return "", err } err = tx.QueryRow( ctx, @@ -327,6 +413,10 @@ func (r *Repo) GetMusic(ctx context.Context, gameID int) (*MusicState, error) { return nil, err } defer tx.Rollback(ctx) + return getMusic(ctx, tx, gameID) +} + +func getMusic(ctx context.Context, tx pgx.Tx, gameID int) (*MusicState, error) { playlists, err := list(ctx, tx) if err != nil { return nil, err @@ -382,13 +472,14 @@ func (r *Repo) GetMusic(ctx context.Context, gameID int) (*MusicState, error) { loop, playback, state_version, - started_at + started_at, + COALESCE(group_id, 0) FROM game_music_states WHERE game_id = $1 `, gameID, ). - Scan(&statePlaylistID, &trackIndex, &state.PositionMs, &state.Volume, &state.Loop, &state.Playback, &state.Version, &state.StartedAt) + Scan(&statePlaylistID, &trackIndex, &state.PositionMs, &state.Volume, &state.Loop, &state.Playback, &state.Version, &state.StartedAt, &state.GroupID) if errors.Is(err, pgx.ErrNoRows) { state.Version = 1 return state, nil @@ -410,7 +501,7 @@ func (r *Repo) GetMusic(ctx context.Context, gameID int) (*MusicState, error) { } // SetMusic stores the current music state for a game. -func (r *Repo) SetMusic(ctx context.Context, gameID, playlistID, trackIndex int, positionMs int64, volume int32, loop bool, playback int32) (*MusicState, error) { +func (r *Repo) SetMusic(ctx context.Context, gameID, playlistID, trackIndex int, positionMs int64, volume int32, loop bool, playback int32, groupID int) (*MusicState, error) { tx, err := r.pool.Begin(ctx) if err != nil { return nil, err @@ -421,19 +512,55 @@ func (r *Repo) SetMusic(ctx context.Context, gameID, playlistID, trackIndex int, return nil, err } } - _, err = tx.Exec( + if playlistID < 0 || groupID < 0 { + return nil, ErrInvalidTrack + } + if playlistID > 0 { + items, err := list(ctx, tx) + if err != nil { + return nil, err + } + for _, item := range items { + if item.ID != playlistID { + continue + } + if trackIndex < 0 || (len(item.Tracks) == 0 && trackIndex != 0) || (len(item.Tracks) > 0 && trackIndex >= len(item.Tracks)) || (len(item.Tracks) == 0 && playback != 1) { + return nil, ErrInvalidTrack + } + if groupID != 0 { + if trackIndex >= len(item.Tracks) || item.Tracks[trackIndex].GroupID != groupID { + return nil, ErrInvalidTrack + } + } + } + } else if groupID != 0 { + return nil, ErrInvalidTrack + } + err = writeMusic(ctx, tx, gameID, playlistID, trackIndex, positionMs, volume, loop, playback, groupID) + if err != nil { + return nil, err + } + if err := tx.Commit(ctx); err != nil { + return nil, err + } + return r.GetMusic(ctx, gameID) +} + +func writeMusic(ctx context.Context, tx pgx.Tx, gameID, playlistID, trackIndex int, positionMs int64, volume int32, loop bool, playback int32, groupID int) error { + _, err := tx.Exec( ctx, ` INSERT INTO game_music_states ( game_id, playlist_id, track_index, position_ms, volume, loop, - playback, state_version, started_at + playback, state_version, started_at, group_id ) VALUES ( $1, NULLIF($2, 0), $3, $4, $5, $6, $7, 1, - CASE WHEN $7 = 2 THEN NOW() ELSE NULL END + CASE WHEN $7 = 2 THEN NOW() ELSE NULL END, NULLIF($8, 0) ) ON CONFLICT (game_id) DO UPDATE SET playlist_id = EXCLUDED.playlist_id, + group_id = EXCLUDED.group_id, track_index = EXCLUDED.track_index, position_ms = EXCLUDED.position_ms, volume = EXCLUDED.volume, @@ -450,10 +577,51 @@ func (r *Repo) SetMusic(ctx context.Context, gameID, playlistID, trackIndex int, volume, loop, playback, + groupID, ) + return err +} + +// AdvanceMusic keeps the catalogue and current command locked while the service chooses a transition. +func (r *Repo) AdvanceMusic(ctx context.Context, gameID int, expectedVersion int64, next func(*MusicState) (int, int, int32)) (*MusicState, error) { + before, err := r.GetMusic(ctx, gameID) if err != nil { return nil, err } + if before.Playlist == nil || before.Playback != 2 { + return before, nil + } + tx, err := r.pool.Begin(ctx) + if err != nil { + return nil, err + } + defer tx.Rollback(ctx) + if err := lockPlaylist(ctx, tx, before.Playlist.ID); err != nil { + return nil, err + } + var id int + err = tx.QueryRow( + ctx, + `SELECT game_id + FROM game_music_states + WHERE game_id = $1 + FOR UPDATE`, + gameID, + ).Scan(&id) + if err != nil { + return nil, err + } + state, err := getMusic(ctx, tx, gameID) + if err != nil { + return nil, err + } + if state.Playlist == nil || state.Playlist.ID != before.Playlist.ID || state.Playback != 2 || len(state.Playlist.Tracks) == 0 || (expectedVersion != 0 && expectedVersion != state.Version) { + return state, nil + } + index, groupID, playback := next(state) + if err := writeMusic(ctx, tx, gameID, state.Playlist.ID, index, 0, state.Volume, state.Loop, playback, groupID); err != nil { + return nil, err + } if err := tx.Commit(ctx); err != nil { return nil, err } diff --git a/internal/services/game_import_service/service.go b/internal/services/game_import_service/service.go index 5d552c3..6801ec4 100644 --- a/internal/services/game_import_service/service.go +++ b/internal/services/game_import_service/service.go @@ -317,6 +317,11 @@ func validateLocalIDs(data *game_package_service.Data) error { if playlist.ID > maxID { return fmt.Errorf("%w: playlist ID", game_package_service.ErrInvalidPackage) } + for _, group := range playlist.Groups { + if group.ID > maxID || int64(group.Position) > int64(maxID) { + return fmt.Errorf("%w: group ID or position", game_package_service.ErrInvalidPackage) + } + } for _, track := range playlist.Tracks { if track.ID > maxID { return fmt.Errorf("%w: track ID", game_package_service.ErrInvalidPackage) diff --git a/internal/services/game_package_service/groups_test.go b/internal/services/game_package_service/groups_test.go new file mode 100644 index 0000000..0a60475 --- /dev/null +++ b/internal/services/game_package_service/groups_test.go @@ -0,0 +1,53 @@ +package game_package_service + +import ( + "bytes" + "context" + "errors" + "os" + "reflect" + "testing" +) + +func TestPackagePreservesGroupOrderAndMembership(t *testing.T) { + for _, name := range []string{"group roundtrip"} { + t.Run(name, func(t *testing.T) { + snapshot, files := fixture() + snapshot.Data.Playlists[0].Groups = []PlaylistGroup{{ID: 80, Name: "Final", Position: 0, EndMode: "stop"}, {ID: 81, Name: "Intro", Position: 1, EndMode: "next"}, {ID: 82, Name: "Empty", Position: 2, EndMode: "repeat"}} + snapshot.Data.Playlists[0].Tracks[0].GroupID = 81 + service := NewGamePackageService("") + raw := buildPackage(t, service, snapshot, files) + bundle, err := service.Unpack(context.Background(), bytes.NewReader(raw), int64(len(raw)), t.TempDir()) + if err != nil { + t.Fatal(err) + } + defer func() { _ = os.RemoveAll(bundle.Dir) }() + if !reflect.DeepEqual(bundle.Data.Playlists[0].Groups, snapshot.Data.Playlists[0].Groups) || bundle.Data.Playlists[0].Tracks[0].GroupID != 81 { + t.Fatal("group data changed") + } + }) + } +} + +func TestPackRejectsInvalidGroups(t *testing.T) { + cases := []struct { + name string + modify func(*Playlist) + }{ + {"unknown mode", func(p *Playlist) { p.Groups[0].EndMode = "unknown" }}, + {"duplicate ID", func(p *Playlist) { p.Groups = append(p.Groups, p.Groups[0]) }}, + {"missing group", func(p *Playlist) { p.Tracks[0].GroupID = 999 }}, + {"negative position", func(p *Playlist) { p.Groups[0].Position = -1 }}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + snapshot, files := fixture() + snapshot.Data.Playlists[0].Groups = []PlaylistGroup{{ID: 80, Name: "Group", EndMode: "repeat"}} + tc.modify(&snapshot.Data.Playlists[0]) + err := NewGamePackageService("").Pack(context.Background(), snapshot, localFiles(files, nil), &bytes.Buffer{}) + if !errors.Is(err, ErrInvalidPackage) { + t.Fatal(err) + } + }) + } +} diff --git a/internal/services/game_package_service/model.go b/internal/services/game_package_service/model.go index 76194d0..7564ef7 100644 --- a/internal/services/game_package_service/model.go +++ b/internal/services/game_package_service/model.go @@ -107,9 +107,17 @@ type Ticket struct { } type Playlist struct { - ID int `json:"id"` - Name string `json:"name"` - Tracks []Track `json:"tracks"` + ID int `json:"id"` + Name string `json:"name"` + Tracks []Track `json:"tracks"` + Groups []PlaylistGroup `json:"groups,omitempty"` +} + +type PlaylistGroup struct { + ID int `json:"id"` + Name string `json:"name"` + Position int `json:"position"` + EndMode string `json:"end_mode"` } type Track struct { @@ -117,6 +125,7 @@ type Track struct { Name string `json:"name"` Filename string `json:"filename"` Position int `json:"position"` + GroupID int `json:"group_id,omitempty"` } type ScreenPlan struct { diff --git a/internal/services/game_package_service/validation.go b/internal/services/game_package_service/validation.go index 7b47caa..b3ad9ac 100644 --- a/internal/services/game_package_service/validation.go +++ b/internal/services/game_package_service/validation.go @@ -103,15 +103,26 @@ func validateData(data *Data) error { } playlists := map[int]bool{} tracks := map[int]bool{} + groups := map[int]bool{} for _, playlist := range data.Playlists { if playlist.ID <= 0 || playlists[playlist.ID] || strings.TrimSpace(playlist.Name) == "" { return invalid("некорректный плейлист") } playlists[playlist.ID] = true + localGroups := map[int]bool{} + for _, group := range playlist.Groups { + if group.ID <= 0 || groups[group.ID] || strings.TrimSpace(group.Name) == "" || len(group.Name) > 255 || group.Position < 0 || (group.EndMode != "repeat" && group.EndMode != "stop" && group.EndMode != "next") { + return invalid("некорректная группа плейлиста") + } + groups[group.ID], localGroups[group.ID] = true, true + } for _, track := range playlist.Tracks { if track.ID <= 0 || tracks[track.ID] || strings.TrimSpace(track.Name) == "" || track.Filename == "" || track.Position < 0 { return invalid("некорректный трек") } + if track.GroupID != 0 && !localGroups[track.GroupID] { + return invalid("группа трека не принадлежит плейлисту") + } tracks[track.ID] = true } } diff --git a/internal/services/playlist_service/groups.go b/internal/services/playlist_service/groups.go new file mode 100644 index 0000000..e29cb31 --- /dev/null +++ b/internal/services/playlist_service/groups.go @@ -0,0 +1,118 @@ +package playlist_service + +import ( + "context" + "strconv" + "strings" + + "evening_detective_server/internal/repos/playlists_repo" +) + +// SaveGroup validates group metadata before persisting it. +func (s *Service) SaveGroup(ctx context.Context, playlistID, groupID int, name, mode string) (*Playlist, error) { + name = strings.TrimSpace(name) + if playlistID <= 0 || groupID < 0 || name == "" || len(name) > 255 { + return nil, ErrInvalidName + } + if mode != "repeat" && mode != "stop" && mode != "next" { + return nil, ErrInvalidTrack + } + item, err := s.repo.SaveGroup(ctx, playlistID, groupID, name, mode) + return mapPlaylist(item), mapError(err) +} + +// DeleteGroup preserves tracks when removing their section. +func (s *Service) DeleteGroup(ctx context.Context, playlistID, groupID int) (*Playlist, error) { + if playlistID <= 0 || groupID <= 0 { + return nil, ErrInvalidTrack + } + item, err := s.repo.DeleteGroup(ctx, playlistID, groupID) + return mapPlaylist(item), mapError(err) +} + +// ReorderGroups validates the complete requested group order. +func (s *Service) ReorderGroups(ctx context.Context, playlistID int, ids []int) (*Playlist, error) { + if playlistID <= 0 { + return nil, ErrInvalidTrack + } + seen := make(map[int]bool, len(ids)) + for _, id := range ids { + if id <= 0 || seen[id] { + return nil, ErrInvalidTrack + } + seen[id] = true + } + item, err := s.repo.ReorderGroups(ctx, playlistID, ids) + return mapPlaylist(item), mapError(err) +} + +// SetTrackGroup validates track and section identifiers. +func (s *Service) SetTrackGroup(ctx context.Context, playlistID, trackID, groupID int) (*Playlist, error) { + if playlistID <= 0 || trackID <= 0 || groupID < 0 { + return nil, ErrInvalidTrack + } + item, err := s.repo.SetTrackGroup(ctx, playlistID, trackID, groupID) + return mapPlaylist(item), mapError(err) +} + +// nextTrack calculates the next global index while respecting section boundaries. +func nextTrack(state *MusicState) (index, groupID int, playback int32) { + index, groupID, playback = state.TrackIndex, state.GroupID, state.Playback + if state.Playlist == nil || len(state.Playlist.Tracks) == 0 { + return index, groupID, 1 + } + tracks := state.Playlist.Tracks + if groupID == 0 { + if index+1 < len(tracks) { + return index + 1, 0, playback + } + if state.Loop { + return 0, 0, playback + } + return index, 0, 1 + } + for i := index + 1; i < len(tracks); i++ { + if tracks[i].GroupID == groupID { + return i, groupID, playback + } + } + for position, group := range state.Playlist.Groups { + if group.ID != groupID { + continue + } + if group.EndMode == "repeat" { + for i, track := range tracks { + if track.GroupID == groupID { + return i, groupID, playback + } + } + } + if group.EndMode == "next" { + for _, next := range state.Playlist.Groups[position+1:] { + for i, track := range tracks { + if track.GroupID == next.ID { + return i, next.ID, playback + } + } + } + } + break + } + return index, groupID, 1 +} + +// Advance applies a completion event only to the state the screen played. +func (s *Service) Advance(ctx context.Context, gameID int, expectedStateVersion string) (*MusicState, error) { + var expectedVersion int64 + if expectedStateVersion != "" { + var err error + expectedVersion, err = strconv.ParseInt(expectedStateVersion, 10, 64) + if err != nil || expectedVersion < 0 { + return nil, ErrInvalidTrack + } + } + updated, err := s.repo.AdvanceMusic(ctx, gameID, expectedVersion, func(state *playlists_repo.MusicState) (int, int, int32) { + return nextTrack(mapMusicState(state)) + }) + return mapMusicState(updated), mapError(err) +} diff --git a/internal/services/playlist_service/groups_test.go b/internal/services/playlist_service/groups_test.go new file mode 100644 index 0000000..a267fea --- /dev/null +++ b/internal/services/playlist_service/groups_test.go @@ -0,0 +1,77 @@ +package playlist_service + +import ( + "context" + "errors" + "testing" +) + +func TestNextTrackHonorsGroupCompletion(t *testing.T) { + cases := []struct { + name, mode string + index, groupID int + loop bool + groups []*Group + wantIndex, wantGroup int + wantPlayback int32 + }{ + {name: "within group", mode: "stop", index: 0, groupID: 1, wantIndex: 2, wantGroup: 1, wantPlayback: 2}, + {name: "repeat", mode: "repeat", index: 2, groupID: 1, wantIndex: 0, wantGroup: 1, wantPlayback: 2}, + {name: "stop", mode: "stop", index: 2, groupID: 1, wantIndex: 2, wantGroup: 1, wantPlayback: 1}, + {name: "next skips empty", mode: "next", index: 2, groupID: 1, wantIndex: 1, wantGroup: 3, wantPlayback: 2}, + {name: "last group stops", index: 1, groupID: 3, wantIndex: 1, wantGroup: 3, wantPlayback: 1}, + {name: "reordered next", mode: "next", index: 2, groupID: 1, groups: []*Group{{ID: 3, EndMode: "repeat"}, {ID: 1, EndMode: "next"}}, wantIndex: 2, wantGroup: 1, wantPlayback: 1}, + {name: "single track repeats", index: 1, groupID: 3, groups: []*Group{{ID: 3, EndMode: "repeat"}}, wantIndex: 1, wantGroup: 3, wantPlayback: 2}, + {name: "whole playlist", index: 0, wantIndex: 1, wantPlayback: 2}, + {name: "whole playlist repeats", index: 2, loop: true, wantIndex: 0, wantPlayback: 2}, + {name: "whole playlist stops", index: 2, wantIndex: 2, wantPlayback: 1}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + groups := tc.groups + if groups == nil { + groups = []*Group{{ID: 1, EndMode: tc.mode}, {ID: 2, EndMode: "repeat"}, {ID: 3, EndMode: "next"}} + } + state := &MusicState{TrackIndex: tc.index, GroupID: tc.groupID, Playback: 2, Loop: tc.loop, Playlist: &Playlist{Tracks: []*Track{{ID: 10, GroupID: 1}, {ID: 11, GroupID: 3}, {ID: 12, GroupID: 1}}, Groups: groups}} + index, groupID, playback := nextTrack(state) + if index != tc.wantIndex || groupID != tc.wantGroup || playback != tc.wantPlayback { + t.Fatalf("got %d/%d/%d", index, groupID, playback) + } + }) + } +} + +func TestGroupValidationRejectsInvalidRequestsBeforeRepository(t *testing.T) { + cases := []struct { + name string + run func(*Service) error + want error + }{ + {"empty name", func(s *Service) error { _, err := s.SaveGroup(context.Background(), 1, 0, " ", "repeat"); return err }, ErrInvalidName}, + {"invalid mode", func(s *Service) error { + _, err := s.SaveGroup(context.Background(), 1, 0, "Name", "unknown") + return err + }, ErrInvalidTrack}, + {"invalid group", func(s *Service) error { _, err := s.DeleteGroup(context.Background(), 1, 0); return err }, ErrInvalidTrack}, + {"duplicate order", func(s *Service) error { _, err := s.ReorderGroups(context.Background(), 1, []int{1, 1}); return err }, ErrInvalidTrack}, + {"invalid assignment", func(s *Service) error { _, err := s.SetTrackGroup(context.Background(), 1, 2, -1); return err }, ErrInvalidTrack}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + if err := tc.run(New(nil, nil)); !errors.Is(err, tc.want) { + t.Fatal(err) + } + }) + } +} + +func TestAdvanceRejectsInvalidCompletionVersion(t *testing.T) { + for _, value := range []string{"-1", "invalid", "9223372036854775808"} { + t.Run(value, func(t *testing.T) { + _, err := New(nil, nil).Advance(context.Background(), 1, value) + if !errors.Is(err, ErrInvalidTrack) { + t.Fatal(err) + } + }) + } +} diff --git a/internal/services/playlist_service/mapper.go b/internal/services/playlist_service/mapper.go index 5e0bd55..cb48fbe 100644 --- a/internal/services/playlist_service/mapper.go +++ b/internal/services/playlist_service/mapper.go @@ -13,8 +13,12 @@ func mapPlaylist(value *playlists_repo.Playlist) *Playlist { Name: track.Name, Filename: track.Filename, Position: track.Position, + GroupID: track.GroupID, }) } + for _, group := range value.Groups { + result.Groups = append(result.Groups, &Group{ID: group.ID, Name: group.Name, Position: group.Position, EndMode: group.EndMode}) + } return result } @@ -25,6 +29,7 @@ func mapMusicState(value *playlists_repo.MusicState) *MusicState { return &MusicState{ Playlist: mapPlaylist(value.Playlist), TrackIndex: value.TrackIndex, + GroupID: value.GroupID, PositionMs: value.PositionMs, Volume: value.Volume, Loop: value.Loop, diff --git a/internal/services/playlist_service/model.go b/internal/services/playlist_service/model.go index 279ebd4..fa44cc2 100644 --- a/internal/services/playlist_service/model.go +++ b/internal/services/playlist_service/model.go @@ -8,6 +8,15 @@ type Track struct { Name string Filename string Position int + GroupID int +} + +// Group describes an ordered section of a playlist. +type Group struct { + ID int + Name string + Position int + EndMode string } // Playlist describes a reusable playlist. @@ -15,12 +24,14 @@ type Playlist struct { ID int Name string Tracks []*Track + Groups []*Group } // MusicState describes the synchronized music state of a game. type MusicState struct { Playlist *Playlist TrackIndex int + GroupID int PositionMs int64 Volume int32 Loop bool diff --git a/internal/services/playlist_service/order_test.go b/internal/services/playlist_service/order_test.go index f2cee7a..39e93cf 100644 --- a/internal/services/playlist_service/order_test.go +++ b/internal/services/playlist_service/order_test.go @@ -27,7 +27,7 @@ func TestReorderRejectsInvalidIDsBeforeRepository(t *testing.T) { } func TestOrderConflictMapping(t *testing.T) { - for _, tc := range []struct{ input, expected error }{{playlists_repo.ErrTrackOrderChanged, ErrTrackOrderChanged}} { + for _, tc := range []struct{ input, expected error }{{playlists_repo.ErrTrackOrderChanged, ErrTrackOrderChanged}, {playlists_repo.ErrGroupOrderChanged, ErrGroupOrderChanged}, {playlists_repo.ErrGroupNotFound, ErrGroupNotFound}, {playlists_repo.ErrInvalidTrack, ErrInvalidTrack}} { if !errors.Is(mapError(tc.input), tc.expected) { t.Fatal("lost conflict") } diff --git a/internal/services/playlist_service/service.go b/internal/services/playlist_service/service.go index 7e6f9e6..39743b0 100644 --- a/internal/services/playlist_service/service.go +++ b/internal/services/playlist_service/service.go @@ -11,6 +11,8 @@ import ( ) var ( + ErrGroupNotFound = errors.New("группа не найдена") + ErrGroupOrderChanged = errors.New("состав групп изменился; обновите список") ErrTrackOrderChanged = errors.New("состав треков изменился; обновите список") ErrInvalidName = errors.New("некорректное имя плейлиста") ErrInvalidTrack = errors.New("некорректный трек") @@ -129,11 +131,12 @@ func (s *Service) SetGame( volume int32, loop bool, playback int32, + groupID int, ) (*MusicState, error) { if trackIndex < 0 || positionMs < 0 || volume < 0 || volume > 100 || playback < 1 || playback > 3 { return nil, ErrInvalidTrack } - state, err := s.repo.SetMusic(ctx, gameID, playlistID, trackIndex, positionMs, volume, loop, playback) + state, err := s.repo.SetMusic(ctx, gameID, playlistID, trackIndex, positionMs, volume, loop, playback, groupID) if err != nil { return nil, mapError(err) } @@ -151,6 +154,12 @@ func (s *Service) GetGame(ctx context.Context, gameID int) (*MusicState, error) func mapError(err error) error { switch { + case errors.Is(err, playlists_repo.ErrGroupOrderChanged): + return ErrGroupOrderChanged + case errors.Is(err, playlists_repo.ErrInvalidTrack): + return ErrInvalidTrack + case errors.Is(err, playlists_repo.ErrGroupNotFound): + return ErrGroupNotFound case errors.Is(err, playlists_repo.ErrTrackOrderChanged): return ErrTrackOrderChanged case errors.Is(err, playlists_repo.ErrPlaylistNotFound): diff --git a/migrations/20261027120000_playlist_groups.sql b/migrations/20261027120000_playlist_groups.sql new file mode 100644 index 0000000..b66fe46 --- /dev/null +++ b/migrations/20261027120000_playlist_groups.sql @@ -0,0 +1,20 @@ +-- +goose Up +CREATE TABLE playlist_groups ( + id SERIAL PRIMARY KEY, + playlist_id INTEGER NOT NULL REFERENCES playlists(id) ON DELETE CASCADE, + name VARCHAR(255) NOT NULL CHECK (length(trim(name)) > 0), + position INTEGER NOT NULL CHECK (position >= 0), + end_mode TEXT NOT NULL DEFAULT 'repeat' CHECK (end_mode IN ('repeat', 'stop', 'next')), + UNIQUE (playlist_id, id) +); +ALTER TABLE playlist_tracks ADD COLUMN group_id INTEGER; +ALTER TABLE playlist_tracks ADD CONSTRAINT playlist_tracks_group_fk + FOREIGN KEY (playlist_id, group_id) REFERENCES playlist_groups(playlist_id, id); +ALTER TABLE game_music_states ADD COLUMN group_id INTEGER; +ALTER TABLE game_music_states ADD CONSTRAINT game_music_states_group_fk + FOREIGN KEY (playlist_id, group_id) REFERENCES playlist_groups(playlist_id, id); + +-- +goose Down +ALTER TABLE game_music_states DROP COLUMN group_id; +ALTER TABLE playlist_tracks DROP COLUMN group_id; +DROP TABLE playlist_groups; diff --git a/proto/main.pb.go b/proto/main.pb.go index 1853406..b115625 100644 --- a/proto/main.pb.go +++ b/proto/main.pb.go @@ -31,6 +31,55 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type PlaylistGroupEndMode int32 + +const ( + PlaylistGroupEndMode_PLAYLIST_GROUP_END_MODE_REPEAT PlaylistGroupEndMode = 0 + PlaylistGroupEndMode_PLAYLIST_GROUP_END_MODE_STOP PlaylistGroupEndMode = 1 + PlaylistGroupEndMode_PLAYLIST_GROUP_END_MODE_NEXT PlaylistGroupEndMode = 2 +) + +// Enum value maps for PlaylistGroupEndMode. +var ( + PlaylistGroupEndMode_name = map[int32]string{ + 0: "PLAYLIST_GROUP_END_MODE_REPEAT", + 1: "PLAYLIST_GROUP_END_MODE_STOP", + 2: "PLAYLIST_GROUP_END_MODE_NEXT", + } + PlaylistGroupEndMode_value = map[string]int32{ + "PLAYLIST_GROUP_END_MODE_REPEAT": 0, + "PLAYLIST_GROUP_END_MODE_STOP": 1, + "PLAYLIST_GROUP_END_MODE_NEXT": 2, + } +) + +func (x PlaylistGroupEndMode) Enum() *PlaylistGroupEndMode { + p := new(PlaylistGroupEndMode) + *p = x + return p +} + +func (x PlaylistGroupEndMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PlaylistGroupEndMode) Descriptor() protoreflect.EnumDescriptor { + return file_main_proto_enumTypes[0].Descriptor() +} + +func (PlaylistGroupEndMode) Type() protoreflect.EnumType { + return &file_main_proto_enumTypes[0] +} + +func (x PlaylistGroupEndMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use PlaylistGroupEndMode.Descriptor instead. +func (PlaylistGroupEndMode) EnumDescriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{0} +} + type ScreenMode int32 const ( @@ -82,11 +131,11 @@ func (x ScreenMode) String() string { } func (ScreenMode) Descriptor() protoreflect.EnumDescriptor { - return file_main_proto_enumTypes[0].Descriptor() + return file_main_proto_enumTypes[1].Descriptor() } func (ScreenMode) Type() protoreflect.EnumType { - return &file_main_proto_enumTypes[0] + return &file_main_proto_enumTypes[1] } func (x ScreenMode) Number() protoreflect.EnumNumber { @@ -95,7 +144,7 @@ func (x ScreenMode) Number() protoreflect.EnumNumber { // Deprecated: Use ScreenMode.Descriptor instead. func (ScreenMode) EnumDescriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{0} + return file_main_proto_rawDescGZIP(), []int{1} } type ScreenTimerType int32 @@ -131,11 +180,11 @@ func (x ScreenTimerType) String() string { } func (ScreenTimerType) Descriptor() protoreflect.EnumDescriptor { - return file_main_proto_enumTypes[1].Descriptor() + return file_main_proto_enumTypes[2].Descriptor() } func (ScreenTimerType) Type() protoreflect.EnumType { - return &file_main_proto_enumTypes[1] + return &file_main_proto_enumTypes[2] } func (x ScreenTimerType) Number() protoreflect.EnumNumber { @@ -144,7 +193,7 @@ func (x ScreenTimerType) Number() protoreflect.EnumNumber { // Deprecated: Use ScreenTimerType.Descriptor instead. func (ScreenTimerType) EnumDescriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{1} + return file_main_proto_rawDescGZIP(), []int{2} } type ScreenTimerState int32 @@ -186,11 +235,11 @@ func (x ScreenTimerState) String() string { } func (ScreenTimerState) Descriptor() protoreflect.EnumDescriptor { - return file_main_proto_enumTypes[2].Descriptor() + return file_main_proto_enumTypes[3].Descriptor() } func (ScreenTimerState) Type() protoreflect.EnumType { - return &file_main_proto_enumTypes[2] + return &file_main_proto_enumTypes[3] } func (x ScreenTimerState) Number() protoreflect.EnumNumber { @@ -199,7 +248,7 @@ func (x ScreenTimerState) Number() protoreflect.EnumNumber { // Deprecated: Use ScreenTimerState.Descriptor instead. func (ScreenTimerState) EnumDescriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{2} + return file_main_proto_rawDescGZIP(), []int{3} } type ScreenCommand int32 @@ -262,11 +311,11 @@ func (x ScreenCommand) String() string { } func (ScreenCommand) Descriptor() protoreflect.EnumDescriptor { - return file_main_proto_enumTypes[3].Descriptor() + return file_main_proto_enumTypes[4].Descriptor() } func (ScreenCommand) Type() protoreflect.EnumType { - return &file_main_proto_enumTypes[3] + return &file_main_proto_enumTypes[4] } func (x ScreenCommand) Number() protoreflect.EnumNumber { @@ -275,7 +324,7 @@ func (x ScreenCommand) Number() protoreflect.EnumNumber { // Deprecated: Use ScreenCommand.Descriptor instead. func (ScreenCommand) EnumDescriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{3} + return file_main_proto_rawDescGZIP(), []int{4} } type MusicPlaybackState int32 @@ -314,11 +363,11 @@ func (x MusicPlaybackState) String() string { } func (MusicPlaybackState) Descriptor() protoreflect.EnumDescriptor { - return file_main_proto_enumTypes[4].Descriptor() + return file_main_proto_enumTypes[5].Descriptor() } func (MusicPlaybackState) Type() protoreflect.EnumType { - return &file_main_proto_enumTypes[4] + return &file_main_proto_enumTypes[5] } func (x MusicPlaybackState) Number() protoreflect.EnumNumber { @@ -327,7 +376,7 @@ func (x MusicPlaybackState) Number() protoreflect.EnumNumber { // Deprecated: Use MusicPlaybackState.Descriptor instead. func (MusicPlaybackState) EnumDescriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{4} + return file_main_proto_rawDescGZIP(), []int{5} } type PingReq struct { @@ -2027,19 +2076,496 @@ func (x *DownloadFileReq) GetFilename() string { return "" } +type PlaylistGroup struct { + state protoimpl.MessageState `protogen:"open.v1"` + ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Position int32 `protobuf:"varint,3,opt,name=position,proto3" json:"position,omitempty"` + EndMode PlaylistGroupEndMode `protobuf:"varint,4,opt,name=end_mode,json=endMode,proto3,enum=crabs.evening_detective_server.PlaylistGroupEndMode" json:"end_mode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PlaylistGroup) Reset() { + *x = PlaylistGroup{} + mi := &file_main_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PlaylistGroup) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PlaylistGroup) ProtoMessage() {} + +func (x *PlaylistGroup) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[38] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PlaylistGroup.ProtoReflect.Descriptor instead. +func (*PlaylistGroup) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{38} +} + +func (x *PlaylistGroup) GetID() int32 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *PlaylistGroup) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PlaylistGroup) GetPosition() int32 { + if x != nil { + return x.Position + } + return 0 +} + +func (x *PlaylistGroup) GetEndMode() PlaylistGroupEndMode { + if x != nil { + return x.EndMode + } + return PlaylistGroupEndMode_PLAYLIST_GROUP_END_MODE_REPEAT +} + +type SavePlaylistGroupReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + PlaylistID int32 `protobuf:"varint,1,opt,name=playlistID,proto3" json:"playlistID,omitempty"` + GroupID int32 `protobuf:"varint,2,opt,name=groupID,proto3" json:"groupID,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + EndMode PlaylistGroupEndMode `protobuf:"varint,4,opt,name=end_mode,json=endMode,proto3,enum=crabs.evening_detective_server.PlaylistGroupEndMode" json:"end_mode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SavePlaylistGroupReq) Reset() { + *x = SavePlaylistGroupReq{} + mi := &file_main_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SavePlaylistGroupReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SavePlaylistGroupReq) ProtoMessage() {} + +func (x *SavePlaylistGroupReq) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[39] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SavePlaylistGroupReq.ProtoReflect.Descriptor instead. +func (*SavePlaylistGroupReq) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{39} +} + +func (x *SavePlaylistGroupReq) GetPlaylistID() int32 { + if x != nil { + return x.PlaylistID + } + return 0 +} + +func (x *SavePlaylistGroupReq) GetGroupID() int32 { + if x != nil { + return x.GroupID + } + return 0 +} + +func (x *SavePlaylistGroupReq) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *SavePlaylistGroupReq) GetEndMode() PlaylistGroupEndMode { + if x != nil { + return x.EndMode + } + return PlaylistGroupEndMode_PLAYLIST_GROUP_END_MODE_REPEAT +} + +type SavePlaylistGroupRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Playlist *Playlist `protobuf:"bytes,1,opt,name=playlist,proto3" json:"playlist,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SavePlaylistGroupRsp) Reset() { + *x = SavePlaylistGroupRsp{} + mi := &file_main_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SavePlaylistGroupRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SavePlaylistGroupRsp) ProtoMessage() {} + +func (x *SavePlaylistGroupRsp) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[40] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SavePlaylistGroupRsp.ProtoReflect.Descriptor instead. +func (*SavePlaylistGroupRsp) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{40} +} + +func (x *SavePlaylistGroupRsp) GetPlaylist() *Playlist { + if x != nil { + return x.Playlist + } + return nil +} + +type DeletePlaylistGroupReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + PlaylistID int32 `protobuf:"varint,1,opt,name=playlistID,proto3" json:"playlistID,omitempty"` + GroupID int32 `protobuf:"varint,2,opt,name=groupID,proto3" json:"groupID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeletePlaylistGroupReq) Reset() { + *x = DeletePlaylistGroupReq{} + mi := &file_main_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeletePlaylistGroupReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeletePlaylistGroupReq) ProtoMessage() {} + +func (x *DeletePlaylistGroupReq) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[41] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeletePlaylistGroupReq.ProtoReflect.Descriptor instead. +func (*DeletePlaylistGroupReq) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{41} +} + +func (x *DeletePlaylistGroupReq) GetPlaylistID() int32 { + if x != nil { + return x.PlaylistID + } + return 0 +} + +func (x *DeletePlaylistGroupReq) GetGroupID() int32 { + if x != nil { + return x.GroupID + } + return 0 +} + +type DeletePlaylistGroupRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Playlist *Playlist `protobuf:"bytes,1,opt,name=playlist,proto3" json:"playlist,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeletePlaylistGroupRsp) Reset() { + *x = DeletePlaylistGroupRsp{} + mi := &file_main_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeletePlaylistGroupRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeletePlaylistGroupRsp) ProtoMessage() {} + +func (x *DeletePlaylistGroupRsp) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[42] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeletePlaylistGroupRsp.ProtoReflect.Descriptor instead. +func (*DeletePlaylistGroupRsp) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{42} +} + +func (x *DeletePlaylistGroupRsp) GetPlaylist() *Playlist { + if x != nil { + return x.Playlist + } + return nil +} + +type ReorderPlaylistGroupsReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + PlaylistID int32 `protobuf:"varint,1,opt,name=playlistID,proto3" json:"playlistID,omitempty"` + GroupIDs []int32 `protobuf:"varint,2,rep,packed,name=groupIDs,proto3" json:"groupIDs,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReorderPlaylistGroupsReq) Reset() { + *x = ReorderPlaylistGroupsReq{} + mi := &file_main_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReorderPlaylistGroupsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReorderPlaylistGroupsReq) ProtoMessage() {} + +func (x *ReorderPlaylistGroupsReq) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[43] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReorderPlaylistGroupsReq.ProtoReflect.Descriptor instead. +func (*ReorderPlaylistGroupsReq) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{43} +} + +func (x *ReorderPlaylistGroupsReq) GetPlaylistID() int32 { + if x != nil { + return x.PlaylistID + } + return 0 +} + +func (x *ReorderPlaylistGroupsReq) GetGroupIDs() []int32 { + if x != nil { + return x.GroupIDs + } + return nil +} + +type ReorderPlaylistGroupsRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Playlist *Playlist `protobuf:"bytes,1,opt,name=playlist,proto3" json:"playlist,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReorderPlaylistGroupsRsp) Reset() { + *x = ReorderPlaylistGroupsRsp{} + mi := &file_main_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReorderPlaylistGroupsRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReorderPlaylistGroupsRsp) ProtoMessage() {} + +func (x *ReorderPlaylistGroupsRsp) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[44] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReorderPlaylistGroupsRsp.ProtoReflect.Descriptor instead. +func (*ReorderPlaylistGroupsRsp) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{44} +} + +func (x *ReorderPlaylistGroupsRsp) GetPlaylist() *Playlist { + if x != nil { + return x.Playlist + } + return nil +} + +type SetPlaylistTrackGroupReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + PlaylistID int32 `protobuf:"varint,1,opt,name=playlistID,proto3" json:"playlistID,omitempty"` + TrackID int32 `protobuf:"varint,2,opt,name=trackID,proto3" json:"trackID,omitempty"` + GroupID int32 `protobuf:"varint,3,opt,name=groupID,proto3" json:"groupID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SetPlaylistTrackGroupReq) Reset() { + *x = SetPlaylistTrackGroupReq{} + mi := &file_main_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SetPlaylistTrackGroupReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetPlaylistTrackGroupReq) ProtoMessage() {} + +func (x *SetPlaylistTrackGroupReq) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[45] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetPlaylistTrackGroupReq.ProtoReflect.Descriptor instead. +func (*SetPlaylistTrackGroupReq) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{45} +} + +func (x *SetPlaylistTrackGroupReq) GetPlaylistID() int32 { + if x != nil { + return x.PlaylistID + } + return 0 +} + +func (x *SetPlaylistTrackGroupReq) GetTrackID() int32 { + if x != nil { + return x.TrackID + } + return 0 +} + +func (x *SetPlaylistTrackGroupReq) GetGroupID() int32 { + if x != nil { + return x.GroupID + } + return 0 +} + +type SetPlaylistTrackGroupRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Playlist *Playlist `protobuf:"bytes,1,opt,name=playlist,proto3" json:"playlist,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SetPlaylistTrackGroupRsp) Reset() { + *x = SetPlaylistTrackGroupRsp{} + mi := &file_main_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SetPlaylistTrackGroupRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetPlaylistTrackGroupRsp) ProtoMessage() {} + +func (x *SetPlaylistTrackGroupRsp) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[46] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetPlaylistTrackGroupRsp.ProtoReflect.Descriptor instead. +func (*SetPlaylistTrackGroupRsp) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{46} +} + +func (x *SetPlaylistTrackGroupRsp) GetPlaylist() *Playlist { + if x != nil { + return x.Playlist + } + return nil +} + type PlaylistTrack struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` Filename string `protobuf:"bytes,3,opt,name=filename,proto3" json:"filename,omitempty"` Position int32 `protobuf:"varint,4,opt,name=position,proto3" json:"position,omitempty"` + GroupId int32 `protobuf:"varint,5,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *PlaylistTrack) Reset() { *x = PlaylistTrack{} - mi := &file_main_proto_msgTypes[38] + mi := &file_main_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2051,7 +2577,7 @@ func (x *PlaylistTrack) String() string { func (*PlaylistTrack) ProtoMessage() {} func (x *PlaylistTrack) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[38] + mi := &file_main_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2064,7 +2590,7 @@ func (x *PlaylistTrack) ProtoReflect() protoreflect.Message { // Deprecated: Use PlaylistTrack.ProtoReflect.Descriptor instead. func (*PlaylistTrack) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{38} + return file_main_proto_rawDescGZIP(), []int{47} } func (x *PlaylistTrack) GetID() int32 { @@ -2095,18 +2621,26 @@ func (x *PlaylistTrack) GetPosition() int32 { return 0 } +func (x *PlaylistTrack) GetGroupId() int32 { + if x != nil { + return x.GroupId + } + return 0 +} + type Playlist struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` Tracks []*PlaylistTrack `protobuf:"bytes,3,rep,name=tracks,proto3" json:"tracks,omitempty"` + Groups []*PlaylistGroup `protobuf:"bytes,4,rep,name=groups,proto3" json:"groups,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *Playlist) Reset() { *x = Playlist{} - mi := &file_main_proto_msgTypes[39] + mi := &file_main_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2118,7 +2652,7 @@ func (x *Playlist) String() string { func (*Playlist) ProtoMessage() {} func (x *Playlist) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[39] + mi := &file_main_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2131,7 +2665,7 @@ func (x *Playlist) ProtoReflect() protoreflect.Message { // Deprecated: Use Playlist.ProtoReflect.Descriptor instead. func (*Playlist) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{39} + return file_main_proto_rawDescGZIP(), []int{48} } func (x *Playlist) GetID() int32 { @@ -2155,6 +2689,13 @@ func (x *Playlist) GetTracks() []*PlaylistTrack { return nil } +func (x *Playlist) GetGroups() []*PlaylistGroup { + if x != nil { + return x.Groups + } + return nil +} + type GetPlaylistsReq struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields @@ -2163,7 +2704,7 @@ type GetPlaylistsReq struct { func (x *GetPlaylistsReq) Reset() { *x = GetPlaylistsReq{} - mi := &file_main_proto_msgTypes[40] + mi := &file_main_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2175,7 +2716,7 @@ func (x *GetPlaylistsReq) String() string { func (*GetPlaylistsReq) ProtoMessage() {} func (x *GetPlaylistsReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[40] + mi := &file_main_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2188,7 +2729,7 @@ func (x *GetPlaylistsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPlaylistsReq.ProtoReflect.Descriptor instead. func (*GetPlaylistsReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{40} + return file_main_proto_rawDescGZIP(), []int{49} } type GetPlaylistsRsp struct { @@ -2200,7 +2741,7 @@ type GetPlaylistsRsp struct { func (x *GetPlaylistsRsp) Reset() { *x = GetPlaylistsRsp{} - mi := &file_main_proto_msgTypes[41] + mi := &file_main_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2212,7 +2753,7 @@ func (x *GetPlaylistsRsp) String() string { func (*GetPlaylistsRsp) ProtoMessage() {} func (x *GetPlaylistsRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[41] + mi := &file_main_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2225,7 +2766,7 @@ func (x *GetPlaylistsRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPlaylistsRsp.ProtoReflect.Descriptor instead. func (*GetPlaylistsRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{41} + return file_main_proto_rawDescGZIP(), []int{50} } func (x *GetPlaylistsRsp) GetPlaylists() []*Playlist { @@ -2244,7 +2785,7 @@ type CreatePlaylistReq struct { func (x *CreatePlaylistReq) Reset() { *x = CreatePlaylistReq{} - mi := &file_main_proto_msgTypes[42] + mi := &file_main_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2256,7 +2797,7 @@ func (x *CreatePlaylistReq) String() string { func (*CreatePlaylistReq) ProtoMessage() {} func (x *CreatePlaylistReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[42] + mi := &file_main_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2269,7 +2810,7 @@ func (x *CreatePlaylistReq) ProtoReflect() protoreflect.Message { // Deprecated: Use CreatePlaylistReq.ProtoReflect.Descriptor instead. func (*CreatePlaylistReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{42} + return file_main_proto_rawDescGZIP(), []int{51} } func (x *CreatePlaylistReq) GetName() string { @@ -2288,7 +2829,7 @@ type CreatePlaylistRsp struct { func (x *CreatePlaylistRsp) Reset() { *x = CreatePlaylistRsp{} - mi := &file_main_proto_msgTypes[43] + mi := &file_main_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2300,7 +2841,7 @@ func (x *CreatePlaylistRsp) String() string { func (*CreatePlaylistRsp) ProtoMessage() {} func (x *CreatePlaylistRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[43] + mi := &file_main_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2313,7 +2854,7 @@ func (x *CreatePlaylistRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use CreatePlaylistRsp.ProtoReflect.Descriptor instead. func (*CreatePlaylistRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{43} + return file_main_proto_rawDescGZIP(), []int{52} } func (x *CreatePlaylistRsp) GetPlaylist() *Playlist { @@ -2333,7 +2874,7 @@ type UpdatePlaylistReq struct { func (x *UpdatePlaylistReq) Reset() { *x = UpdatePlaylistReq{} - mi := &file_main_proto_msgTypes[44] + mi := &file_main_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2345,7 +2886,7 @@ func (x *UpdatePlaylistReq) String() string { func (*UpdatePlaylistReq) ProtoMessage() {} func (x *UpdatePlaylistReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[44] + mi := &file_main_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2358,7 +2899,7 @@ func (x *UpdatePlaylistReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdatePlaylistReq.ProtoReflect.Descriptor instead. func (*UpdatePlaylistReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{44} + return file_main_proto_rawDescGZIP(), []int{53} } func (x *UpdatePlaylistReq) GetID() int32 { @@ -2384,7 +2925,7 @@ type UpdatePlaylistRsp struct { func (x *UpdatePlaylistRsp) Reset() { *x = UpdatePlaylistRsp{} - mi := &file_main_proto_msgTypes[45] + mi := &file_main_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2396,7 +2937,7 @@ func (x *UpdatePlaylistRsp) String() string { func (*UpdatePlaylistRsp) ProtoMessage() {} func (x *UpdatePlaylistRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[45] + mi := &file_main_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2409,7 +2950,7 @@ func (x *UpdatePlaylistRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdatePlaylistRsp.ProtoReflect.Descriptor instead. func (*UpdatePlaylistRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{45} + return file_main_proto_rawDescGZIP(), []int{54} } func (x *UpdatePlaylistRsp) GetPlaylist() *Playlist { @@ -2428,7 +2969,7 @@ type DeletePlaylistReq struct { func (x *DeletePlaylistReq) Reset() { *x = DeletePlaylistReq{} - mi := &file_main_proto_msgTypes[46] + mi := &file_main_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2440,7 +2981,7 @@ func (x *DeletePlaylistReq) String() string { func (*DeletePlaylistReq) ProtoMessage() {} func (x *DeletePlaylistReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[46] + mi := &file_main_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2453,7 +2994,7 @@ func (x *DeletePlaylistReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeletePlaylistReq.ProtoReflect.Descriptor instead. func (*DeletePlaylistReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{46} + return file_main_proto_rawDescGZIP(), []int{55} } func (x *DeletePlaylistReq) GetID() int32 { @@ -2471,7 +3012,7 @@ type DeletePlaylistRsp struct { func (x *DeletePlaylistRsp) Reset() { *x = DeletePlaylistRsp{} - mi := &file_main_proto_msgTypes[47] + mi := &file_main_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2483,7 +3024,7 @@ func (x *DeletePlaylistRsp) String() string { func (*DeletePlaylistRsp) ProtoMessage() {} func (x *DeletePlaylistRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[47] + mi := &file_main_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2496,7 +3037,7 @@ func (x *DeletePlaylistRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeletePlaylistRsp.ProtoReflect.Descriptor instead. func (*DeletePlaylistRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{47} + return file_main_proto_rawDescGZIP(), []int{56} } type UploadPlaylistTrackReq struct { @@ -2511,7 +3052,7 @@ type UploadPlaylistTrackReq struct { func (x *UploadPlaylistTrackReq) Reset() { *x = UploadPlaylistTrackReq{} - mi := &file_main_proto_msgTypes[48] + mi := &file_main_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2523,7 +3064,7 @@ func (x *UploadPlaylistTrackReq) String() string { func (*UploadPlaylistTrackReq) ProtoMessage() {} func (x *UploadPlaylistTrackReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[48] + mi := &file_main_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2536,7 +3077,7 @@ func (x *UploadPlaylistTrackReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UploadPlaylistTrackReq.ProtoReflect.Descriptor instead. func (*UploadPlaylistTrackReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{48} + return file_main_proto_rawDescGZIP(), []int{57} } func (x *UploadPlaylistTrackReq) GetPlaylistID() int32 { @@ -2576,7 +3117,7 @@ type UploadPlaylistTrackRsp struct { func (x *UploadPlaylistTrackRsp) Reset() { *x = UploadPlaylistTrackRsp{} - mi := &file_main_proto_msgTypes[49] + mi := &file_main_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2588,7 +3129,7 @@ func (x *UploadPlaylistTrackRsp) String() string { func (*UploadPlaylistTrackRsp) ProtoMessage() {} func (x *UploadPlaylistTrackRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[49] + mi := &file_main_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2601,7 +3142,7 @@ func (x *UploadPlaylistTrackRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UploadPlaylistTrackRsp.ProtoReflect.Descriptor instead. func (*UploadPlaylistTrackRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{49} + return file_main_proto_rawDescGZIP(), []int{58} } func (x *UploadPlaylistTrackRsp) GetPlaylist() *Playlist { @@ -2621,7 +3162,7 @@ type ReorderPlaylistTracksReq struct { func (x *ReorderPlaylistTracksReq) Reset() { *x = ReorderPlaylistTracksReq{} - mi := &file_main_proto_msgTypes[50] + mi := &file_main_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2633,7 +3174,7 @@ func (x *ReorderPlaylistTracksReq) String() string { func (*ReorderPlaylistTracksReq) ProtoMessage() {} func (x *ReorderPlaylistTracksReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[50] + mi := &file_main_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2646,7 +3187,7 @@ func (x *ReorderPlaylistTracksReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ReorderPlaylistTracksReq.ProtoReflect.Descriptor instead. func (*ReorderPlaylistTracksReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{50} + return file_main_proto_rawDescGZIP(), []int{59} } func (x *ReorderPlaylistTracksReq) GetPlaylistID() int32 { @@ -2672,7 +3213,7 @@ type ReorderPlaylistTracksRsp struct { func (x *ReorderPlaylistTracksRsp) Reset() { *x = ReorderPlaylistTracksRsp{} - mi := &file_main_proto_msgTypes[51] + mi := &file_main_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2684,7 +3225,7 @@ func (x *ReorderPlaylistTracksRsp) String() string { func (*ReorderPlaylistTracksRsp) ProtoMessage() {} func (x *ReorderPlaylistTracksRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[51] + mi := &file_main_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2697,7 +3238,7 @@ func (x *ReorderPlaylistTracksRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use ReorderPlaylistTracksRsp.ProtoReflect.Descriptor instead. func (*ReorderPlaylistTracksRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{51} + return file_main_proto_rawDescGZIP(), []int{60} } func (x *ReorderPlaylistTracksRsp) GetPlaylist() *Playlist { @@ -2717,7 +3258,7 @@ type DeletePlaylistTrackReq struct { func (x *DeletePlaylistTrackReq) Reset() { *x = DeletePlaylistTrackReq{} - mi := &file_main_proto_msgTypes[52] + mi := &file_main_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2729,7 +3270,7 @@ func (x *DeletePlaylistTrackReq) String() string { func (*DeletePlaylistTrackReq) ProtoMessage() {} func (x *DeletePlaylistTrackReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[52] + mi := &file_main_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2742,7 +3283,7 @@ func (x *DeletePlaylistTrackReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeletePlaylistTrackReq.ProtoReflect.Descriptor instead. func (*DeletePlaylistTrackReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{52} + return file_main_proto_rawDescGZIP(), []int{61} } func (x *DeletePlaylistTrackReq) GetPlaylistID() int32 { @@ -2767,7 +3308,7 @@ type DeletePlaylistTrackRsp struct { func (x *DeletePlaylistTrackRsp) Reset() { *x = DeletePlaylistTrackRsp{} - mi := &file_main_proto_msgTypes[53] + mi := &file_main_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2779,7 +3320,7 @@ func (x *DeletePlaylistTrackRsp) String() string { func (*DeletePlaylistTrackRsp) ProtoMessage() {} func (x *DeletePlaylistTrackRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[53] + mi := &file_main_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2792,7 +3333,7 @@ func (x *DeletePlaylistTrackRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeletePlaylistTrackRsp.ProtoReflect.Descriptor instead. func (*DeletePlaylistTrackRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{53} + return file_main_proto_rawDescGZIP(), []int{62} } type SetScenarioPlaylistReq struct { @@ -2805,7 +3346,7 @@ type SetScenarioPlaylistReq struct { func (x *SetScenarioPlaylistReq) Reset() { *x = SetScenarioPlaylistReq{} - mi := &file_main_proto_msgTypes[54] + mi := &file_main_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2817,7 +3358,7 @@ func (x *SetScenarioPlaylistReq) String() string { func (*SetScenarioPlaylistReq) ProtoMessage() {} func (x *SetScenarioPlaylistReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[54] + mi := &file_main_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2830,7 +3371,7 @@ func (x *SetScenarioPlaylistReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SetScenarioPlaylistReq.ProtoReflect.Descriptor instead. func (*SetScenarioPlaylistReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{54} + return file_main_proto_rawDescGZIP(), []int{63} } func (x *SetScenarioPlaylistReq) GetID() int32 { @@ -2855,7 +3396,7 @@ type SetScenarioPlaylistRsp struct { func (x *SetScenarioPlaylistRsp) Reset() { *x = SetScenarioPlaylistRsp{} - mi := &file_main_proto_msgTypes[55] + mi := &file_main_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2867,7 +3408,7 @@ func (x *SetScenarioPlaylistRsp) String() string { func (*SetScenarioPlaylistRsp) ProtoMessage() {} func (x *SetScenarioPlaylistRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[55] + mi := &file_main_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2880,7 +3421,7 @@ func (x *SetScenarioPlaylistRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use SetScenarioPlaylistRsp.ProtoReflect.Descriptor instead. func (*SetScenarioPlaylistRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{55} + return file_main_proto_rawDescGZIP(), []int{64} } type AddScenarioReq struct { @@ -2892,7 +3433,7 @@ type AddScenarioReq struct { func (x *AddScenarioReq) Reset() { *x = AddScenarioReq{} - mi := &file_main_proto_msgTypes[56] + mi := &file_main_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2904,7 +3445,7 @@ func (x *AddScenarioReq) String() string { func (*AddScenarioReq) ProtoMessage() {} func (x *AddScenarioReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[56] + mi := &file_main_proto_msgTypes[65] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2917,7 +3458,7 @@ func (x *AddScenarioReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AddScenarioReq.ProtoReflect.Descriptor instead. func (*AddScenarioReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{56} + return file_main_proto_rawDescGZIP(), []int{65} } func (x *AddScenarioReq) GetName() string { @@ -2936,7 +3477,7 @@ type AddScenarioRsp struct { func (x *AddScenarioRsp) Reset() { *x = AddScenarioRsp{} - mi := &file_main_proto_msgTypes[57] + mi := &file_main_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2948,7 +3489,7 @@ func (x *AddScenarioRsp) String() string { func (*AddScenarioRsp) ProtoMessage() {} func (x *AddScenarioRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[57] + mi := &file_main_proto_msgTypes[66] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2961,7 +3502,7 @@ func (x *AddScenarioRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use AddScenarioRsp.ProtoReflect.Descriptor instead. func (*AddScenarioRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{57} + return file_main_proto_rawDescGZIP(), []int{66} } func (x *AddScenarioRsp) GetID() int32 { @@ -2979,7 +3520,7 @@ type GetMyScenariosReq struct { func (x *GetMyScenariosReq) Reset() { *x = GetMyScenariosReq{} - mi := &file_main_proto_msgTypes[58] + mi := &file_main_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2991,7 +3532,7 @@ func (x *GetMyScenariosReq) String() string { func (*GetMyScenariosReq) ProtoMessage() {} func (x *GetMyScenariosReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[58] + mi := &file_main_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3004,7 +3545,7 @@ func (x *GetMyScenariosReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMyScenariosReq.ProtoReflect.Descriptor instead. func (*GetMyScenariosReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{58} + return file_main_proto_rawDescGZIP(), []int{67} } type GetMyScenariosRsp struct { @@ -3016,7 +3557,7 @@ type GetMyScenariosRsp struct { func (x *GetMyScenariosRsp) Reset() { *x = GetMyScenariosRsp{} - mi := &file_main_proto_msgTypes[59] + mi := &file_main_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3028,7 +3569,7 @@ func (x *GetMyScenariosRsp) String() string { func (*GetMyScenariosRsp) ProtoMessage() {} func (x *GetMyScenariosRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[59] + mi := &file_main_proto_msgTypes[68] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3041,7 +3582,7 @@ func (x *GetMyScenariosRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetMyScenariosRsp.ProtoReflect.Descriptor instead. func (*GetMyScenariosRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{59} + return file_main_proto_rawDescGZIP(), []int{68} } func (x *GetMyScenariosRsp) GetScenarios() []*Scenario { @@ -3059,7 +3600,7 @@ type GetScenariosCatalogReq struct { func (x *GetScenariosCatalogReq) Reset() { *x = GetScenariosCatalogReq{} - mi := &file_main_proto_msgTypes[60] + mi := &file_main_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3071,7 +3612,7 @@ func (x *GetScenariosCatalogReq) String() string { func (*GetScenariosCatalogReq) ProtoMessage() {} func (x *GetScenariosCatalogReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[60] + mi := &file_main_proto_msgTypes[69] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3084,7 +3625,7 @@ func (x *GetScenariosCatalogReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScenariosCatalogReq.ProtoReflect.Descriptor instead. func (*GetScenariosCatalogReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{60} + return file_main_proto_rawDescGZIP(), []int{69} } type GetScenariosCatalogRsp struct { @@ -3096,7 +3637,7 @@ type GetScenariosCatalogRsp struct { func (x *GetScenariosCatalogRsp) Reset() { *x = GetScenariosCatalogRsp{} - mi := &file_main_proto_msgTypes[61] + mi := &file_main_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3108,7 +3649,7 @@ func (x *GetScenariosCatalogRsp) String() string { func (*GetScenariosCatalogRsp) ProtoMessage() {} func (x *GetScenariosCatalogRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[61] + mi := &file_main_proto_msgTypes[70] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3121,7 +3662,7 @@ func (x *GetScenariosCatalogRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScenariosCatalogRsp.ProtoReflect.Descriptor instead. func (*GetScenariosCatalogRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{61} + return file_main_proto_rawDescGZIP(), []int{70} } func (x *GetScenariosCatalogRsp) GetScenarios() []*Scenario { @@ -3140,7 +3681,7 @@ type GetScenarioReq struct { func (x *GetScenarioReq) Reset() { *x = GetScenarioReq{} - mi := &file_main_proto_msgTypes[62] + mi := &file_main_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3152,7 +3693,7 @@ func (x *GetScenarioReq) String() string { func (*GetScenarioReq) ProtoMessage() {} func (x *GetScenarioReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[62] + mi := &file_main_proto_msgTypes[71] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3165,7 +3706,7 @@ func (x *GetScenarioReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScenarioReq.ProtoReflect.Descriptor instead. func (*GetScenarioReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{62} + return file_main_proto_rawDescGZIP(), []int{71} } func (x *GetScenarioReq) GetID() int32 { @@ -3184,7 +3725,7 @@ type GetScenarioRsp struct { func (x *GetScenarioRsp) Reset() { *x = GetScenarioRsp{} - mi := &file_main_proto_msgTypes[63] + mi := &file_main_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3196,7 +3737,7 @@ func (x *GetScenarioRsp) String() string { func (*GetScenarioRsp) ProtoMessage() {} func (x *GetScenarioRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[63] + mi := &file_main_proto_msgTypes[72] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3209,7 +3750,7 @@ func (x *GetScenarioRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScenarioRsp.ProtoReflect.Descriptor instead. func (*GetScenarioRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{63} + return file_main_proto_rawDescGZIP(), []int{72} } func (x *GetScenarioRsp) GetScenario() *Scenario { @@ -3241,7 +3782,7 @@ type Scenario struct { func (x *Scenario) Reset() { *x = Scenario{} - mi := &file_main_proto_msgTypes[64] + mi := &file_main_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3253,7 +3794,7 @@ func (x *Scenario) String() string { func (*Scenario) ProtoMessage() {} func (x *Scenario) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[64] + mi := &file_main_proto_msgTypes[73] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3266,7 +3807,7 @@ func (x *Scenario) ProtoReflect() protoreflect.Message { // Deprecated: Use Scenario.ProtoReflect.Descriptor instead. func (*Scenario) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{64} + return file_main_proto_rawDescGZIP(), []int{73} } func (x *Scenario) GetID() int32 { @@ -3380,7 +3921,7 @@ type Story struct { func (x *Story) Reset() { *x = Story{} - mi := &file_main_proto_msgTypes[65] + mi := &file_main_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3392,7 +3933,7 @@ func (x *Story) String() string { func (*Story) ProtoMessage() {} func (x *Story) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[65] + mi := &file_main_proto_msgTypes[74] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3405,7 +3946,7 @@ func (x *Story) ProtoReflect() protoreflect.Message { // Deprecated: Use Story.ProtoReflect.Descriptor instead. func (*Story) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{65} + return file_main_proto_rawDescGZIP(), []int{74} } func (x *Story) GetPlaces() []*Place { @@ -3453,7 +3994,7 @@ type Conclusion struct { func (x *Conclusion) Reset() { *x = Conclusion{} - mi := &file_main_proto_msgTypes[66] + mi := &file_main_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3465,7 +4006,7 @@ func (x *Conclusion) String() string { func (*Conclusion) ProtoMessage() {} func (x *Conclusion) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[66] + mi := &file_main_proto_msgTypes[75] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3478,7 +4019,7 @@ func (x *Conclusion) ProtoReflect() protoreflect.Message { // Deprecated: Use Conclusion.ProtoReflect.Descriptor instead. func (*Conclusion) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{66} + return file_main_proto_rawDescGZIP(), []int{75} } func (x *Conclusion) GetText() string { @@ -3505,7 +4046,7 @@ type Introduction struct { func (x *Introduction) Reset() { *x = Introduction{} - mi := &file_main_proto_msgTypes[67] + mi := &file_main_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3517,7 +4058,7 @@ func (x *Introduction) String() string { func (*Introduction) ProtoMessage() {} func (x *Introduction) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[67] + mi := &file_main_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3530,7 +4071,7 @@ func (x *Introduction) ProtoReflect() protoreflect.Message { // Deprecated: Use Introduction.ProtoReflect.Descriptor instead. func (*Introduction) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{67} + return file_main_proto_rawDescGZIP(), []int{76} } func (x *Introduction) GetText() string { @@ -3563,7 +4104,7 @@ type Place struct { func (x *Place) Reset() { *x = Place{} - mi := &file_main_proto_msgTypes[68] + mi := &file_main_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3575,7 +4116,7 @@ func (x *Place) String() string { func (*Place) ProtoMessage() {} func (x *Place) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[68] + mi := &file_main_proto_msgTypes[77] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3588,7 +4129,7 @@ func (x *Place) ProtoReflect() protoreflect.Message { // Deprecated: Use Place.ProtoReflect.Descriptor instead. func (*Place) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{68} + return file_main_proto_rawDescGZIP(), []int{77} } func (x *Place) GetCode() string { @@ -3661,7 +4202,7 @@ type Application struct { func (x *Application) Reset() { *x = Application{} - mi := &file_main_proto_msgTypes[69] + mi := &file_main_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3673,7 +4214,7 @@ func (x *Application) String() string { func (*Application) ProtoMessage() {} func (x *Application) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[69] + mi := &file_main_proto_msgTypes[78] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3686,7 +4227,7 @@ func (x *Application) ProtoReflect() protoreflect.Message { // Deprecated: Use Application.ProtoReflect.Descriptor instead. func (*Application) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{69} + return file_main_proto_rawDescGZIP(), []int{78} } func (x *Application) GetName() string { @@ -3721,7 +4262,7 @@ type Door struct { func (x *Door) Reset() { *x = Door{} - mi := &file_main_proto_msgTypes[70] + mi := &file_main_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3733,7 +4274,7 @@ func (x *Door) String() string { func (*Door) ProtoMessage() {} func (x *Door) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[70] + mi := &file_main_proto_msgTypes[79] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3746,7 +4287,7 @@ func (x *Door) ProtoReflect() protoreflect.Message { // Deprecated: Use Door.ProtoReflect.Descriptor instead. func (*Door) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{70} + return file_main_proto_rawDescGZIP(), []int{79} } func (x *Door) GetCode() string { @@ -3779,7 +4320,7 @@ type Key struct { func (x *Key) Reset() { *x = Key{} - mi := &file_main_proto_msgTypes[71] + mi := &file_main_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3791,7 +4332,7 @@ func (x *Key) String() string { func (*Key) ProtoMessage() {} func (x *Key) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[71] + mi := &file_main_proto_msgTypes[80] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3804,7 +4345,7 @@ func (x *Key) ProtoReflect() protoreflect.Message { // Deprecated: Use Key.ProtoReflect.Descriptor instead. func (*Key) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{71} + return file_main_proto_rawDescGZIP(), []int{80} } func (x *Key) GetName() string { @@ -3831,7 +4372,7 @@ type Question struct { func (x *Question) Reset() { *x = Question{} - mi := &file_main_proto_msgTypes[72] + mi := &file_main_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3843,7 +4384,7 @@ func (x *Question) String() string { func (*Question) ProtoMessage() {} func (x *Question) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[72] + mi := &file_main_proto_msgTypes[81] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3856,7 +4397,7 @@ func (x *Question) ProtoReflect() protoreflect.Message { // Deprecated: Use Question.ProtoReflect.Descriptor instead. func (*Question) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{72} + return file_main_proto_rawDescGZIP(), []int{81} } func (x *Question) GetCode() string { @@ -3893,7 +4434,7 @@ type Answer struct { func (x *Answer) Reset() { *x = Answer{} - mi := &file_main_proto_msgTypes[73] + mi := &file_main_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3905,7 +4446,7 @@ func (x *Answer) String() string { func (*Answer) ProtoMessage() {} func (x *Answer) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[73] + mi := &file_main_proto_msgTypes[82] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3918,7 +4459,7 @@ func (x *Answer) ProtoReflect() protoreflect.Message { // Deprecated: Use Answer.ProtoReflect.Descriptor instead. func (*Answer) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{73} + return file_main_proto_rawDescGZIP(), []int{82} } func (x *Answer) GetQuestionCode() string { @@ -3948,7 +4489,7 @@ type AnswerScore struct { func (x *AnswerScore) Reset() { *x = AnswerScore{} - mi := &file_main_proto_msgTypes[74] + mi := &file_main_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3960,7 +4501,7 @@ func (x *AnswerScore) String() string { func (*AnswerScore) ProtoMessage() {} func (x *AnswerScore) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[74] + mi := &file_main_proto_msgTypes[83] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3973,7 +4514,7 @@ func (x *AnswerScore) ProtoReflect() protoreflect.Message { // Deprecated: Use AnswerScore.ProtoReflect.Descriptor instead. func (*AnswerScore) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{74} + return file_main_proto_rawDescGZIP(), []int{83} } func (x *AnswerScore) GetQuestionCode() string { @@ -4008,7 +4549,7 @@ type TeamAnswers struct { func (x *TeamAnswers) Reset() { *x = TeamAnswers{} - mi := &file_main_proto_msgTypes[75] + mi := &file_main_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4020,7 +4561,7 @@ func (x *TeamAnswers) String() string { func (*TeamAnswers) ProtoMessage() {} func (x *TeamAnswers) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[75] + mi := &file_main_proto_msgTypes[84] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4033,7 +4574,7 @@ func (x *TeamAnswers) ProtoReflect() protoreflect.Message { // Deprecated: Use TeamAnswers.ProtoReflect.Descriptor instead. func (*TeamAnswers) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{75} + return file_main_proto_rawDescGZIP(), []int{84} } func (x *TeamAnswers) GetTeam() *Team { @@ -4062,7 +4603,7 @@ type UpdateScenarioReq struct { func (x *UpdateScenarioReq) Reset() { *x = UpdateScenarioReq{} - mi := &file_main_proto_msgTypes[76] + mi := &file_main_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4074,7 +4615,7 @@ func (x *UpdateScenarioReq) String() string { func (*UpdateScenarioReq) ProtoMessage() {} func (x *UpdateScenarioReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[76] + mi := &file_main_proto_msgTypes[85] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4087,7 +4628,7 @@ func (x *UpdateScenarioReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioReq.ProtoReflect.Descriptor instead. func (*UpdateScenarioReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{76} + return file_main_proto_rawDescGZIP(), []int{85} } func (x *UpdateScenarioReq) GetID() int32 { @@ -4126,7 +4667,7 @@ type UpdateScenarioRsp struct { func (x *UpdateScenarioRsp) Reset() { *x = UpdateScenarioRsp{} - mi := &file_main_proto_msgTypes[77] + mi := &file_main_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4138,7 +4679,7 @@ func (x *UpdateScenarioRsp) String() string { func (*UpdateScenarioRsp) ProtoMessage() {} func (x *UpdateScenarioRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[77] + mi := &file_main_proto_msgTypes[86] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4151,7 +4692,7 @@ func (x *UpdateScenarioRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioRsp.ProtoReflect.Descriptor instead. func (*UpdateScenarioRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{77} + return file_main_proto_rawDescGZIP(), []int{86} } type PublicScenarioReq struct { @@ -4163,7 +4704,7 @@ type PublicScenarioReq struct { func (x *PublicScenarioReq) Reset() { *x = PublicScenarioReq{} - mi := &file_main_proto_msgTypes[78] + mi := &file_main_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4175,7 +4716,7 @@ func (x *PublicScenarioReq) String() string { func (*PublicScenarioReq) ProtoMessage() {} func (x *PublicScenarioReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[78] + mi := &file_main_proto_msgTypes[87] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4188,7 +4729,7 @@ func (x *PublicScenarioReq) ProtoReflect() protoreflect.Message { // Deprecated: Use PublicScenarioReq.ProtoReflect.Descriptor instead. func (*PublicScenarioReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{78} + return file_main_proto_rawDescGZIP(), []int{87} } func (x *PublicScenarioReq) GetID() int32 { @@ -4206,7 +4747,7 @@ type PublicScenarioRsp struct { func (x *PublicScenarioRsp) Reset() { *x = PublicScenarioRsp{} - mi := &file_main_proto_msgTypes[79] + mi := &file_main_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4218,7 +4759,7 @@ func (x *PublicScenarioRsp) String() string { func (*PublicScenarioRsp) ProtoMessage() {} func (x *PublicScenarioRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[79] + mi := &file_main_proto_msgTypes[88] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4231,7 +4772,7 @@ func (x *PublicScenarioRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use PublicScenarioRsp.ProtoReflect.Descriptor instead. func (*PublicScenarioRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{79} + return file_main_proto_rawDescGZIP(), []int{88} } type DraftScenarioReq struct { @@ -4243,7 +4784,7 @@ type DraftScenarioReq struct { func (x *DraftScenarioReq) Reset() { *x = DraftScenarioReq{} - mi := &file_main_proto_msgTypes[80] + mi := &file_main_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4255,7 +4796,7 @@ func (x *DraftScenarioReq) String() string { func (*DraftScenarioReq) ProtoMessage() {} func (x *DraftScenarioReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[80] + mi := &file_main_proto_msgTypes[89] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4268,7 +4809,7 @@ func (x *DraftScenarioReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DraftScenarioReq.ProtoReflect.Descriptor instead. func (*DraftScenarioReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{80} + return file_main_proto_rawDescGZIP(), []int{89} } func (x *DraftScenarioReq) GetID() int32 { @@ -4286,7 +4827,7 @@ type DraftScenarioRsp struct { func (x *DraftScenarioRsp) Reset() { *x = DraftScenarioRsp{} - mi := &file_main_proto_msgTypes[81] + mi := &file_main_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4298,7 +4839,7 @@ func (x *DraftScenarioRsp) String() string { func (*DraftScenarioRsp) ProtoMessage() {} func (x *DraftScenarioRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[81] + mi := &file_main_proto_msgTypes[90] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4311,7 +4852,7 @@ func (x *DraftScenarioRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DraftScenarioRsp.ProtoReflect.Descriptor instead. func (*DraftScenarioRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{81} + return file_main_proto_rawDescGZIP(), []int{90} } type DeleteScenarioReq struct { @@ -4323,7 +4864,7 @@ type DeleteScenarioReq struct { func (x *DeleteScenarioReq) Reset() { *x = DeleteScenarioReq{} - mi := &file_main_proto_msgTypes[82] + mi := &file_main_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4335,7 +4876,7 @@ func (x *DeleteScenarioReq) String() string { func (*DeleteScenarioReq) ProtoMessage() {} func (x *DeleteScenarioReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[82] + mi := &file_main_proto_msgTypes[91] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4348,7 +4889,7 @@ func (x *DeleteScenarioReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteScenarioReq.ProtoReflect.Descriptor instead. func (*DeleteScenarioReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{82} + return file_main_proto_rawDescGZIP(), []int{91} } func (x *DeleteScenarioReq) GetID() int32 { @@ -4366,7 +4907,7 @@ type DeleteScenarioRsp struct { func (x *DeleteScenarioRsp) Reset() { *x = DeleteScenarioRsp{} - mi := &file_main_proto_msgTypes[83] + mi := &file_main_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4378,7 +4919,7 @@ func (x *DeleteScenarioRsp) String() string { func (*DeleteScenarioRsp) ProtoMessage() {} func (x *DeleteScenarioRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[83] + mi := &file_main_proto_msgTypes[92] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4391,7 +4932,7 @@ func (x *DeleteScenarioRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteScenarioRsp.ProtoReflect.Descriptor instead. func (*DeleteScenarioRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{83} + return file_main_proto_rawDescGZIP(), []int{92} } type AddScenarioPlaceReq struct { @@ -4404,7 +4945,7 @@ type AddScenarioPlaceReq struct { func (x *AddScenarioPlaceReq) Reset() { *x = AddScenarioPlaceReq{} - mi := &file_main_proto_msgTypes[84] + mi := &file_main_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4416,7 +4957,7 @@ func (x *AddScenarioPlaceReq) String() string { func (*AddScenarioPlaceReq) ProtoMessage() {} func (x *AddScenarioPlaceReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[84] + mi := &file_main_proto_msgTypes[93] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4429,7 +4970,7 @@ func (x *AddScenarioPlaceReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AddScenarioPlaceReq.ProtoReflect.Descriptor instead. func (*AddScenarioPlaceReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{84} + return file_main_proto_rawDescGZIP(), []int{93} } func (x *AddScenarioPlaceReq) GetID() int32 { @@ -4454,7 +4995,7 @@ type AddScenarioPlaceRsp struct { func (x *AddScenarioPlaceRsp) Reset() { *x = AddScenarioPlaceRsp{} - mi := &file_main_proto_msgTypes[85] + mi := &file_main_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4466,7 +5007,7 @@ func (x *AddScenarioPlaceRsp) String() string { func (*AddScenarioPlaceRsp) ProtoMessage() {} func (x *AddScenarioPlaceRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[85] + mi := &file_main_proto_msgTypes[94] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4479,7 +5020,7 @@ func (x *AddScenarioPlaceRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use AddScenarioPlaceRsp.ProtoReflect.Descriptor instead. func (*AddScenarioPlaceRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{85} + return file_main_proto_rawDescGZIP(), []int{94} } type UpdateScenarioPlaceReq struct { @@ -4493,7 +5034,7 @@ type UpdateScenarioPlaceReq struct { func (x *UpdateScenarioPlaceReq) Reset() { *x = UpdateScenarioPlaceReq{} - mi := &file_main_proto_msgTypes[86] + mi := &file_main_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4505,7 +5046,7 @@ func (x *UpdateScenarioPlaceReq) String() string { func (*UpdateScenarioPlaceReq) ProtoMessage() {} func (x *UpdateScenarioPlaceReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[86] + mi := &file_main_proto_msgTypes[95] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4518,7 +5059,7 @@ func (x *UpdateScenarioPlaceReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioPlaceReq.ProtoReflect.Descriptor instead. func (*UpdateScenarioPlaceReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{86} + return file_main_proto_rawDescGZIP(), []int{95} } func (x *UpdateScenarioPlaceReq) GetID() int32 { @@ -4550,7 +5091,7 @@ type UpdateScenarioPlaceRsp struct { func (x *UpdateScenarioPlaceRsp) Reset() { *x = UpdateScenarioPlaceRsp{} - mi := &file_main_proto_msgTypes[87] + mi := &file_main_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4562,7 +5103,7 @@ func (x *UpdateScenarioPlaceRsp) String() string { func (*UpdateScenarioPlaceRsp) ProtoMessage() {} func (x *UpdateScenarioPlaceRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[87] + mi := &file_main_proto_msgTypes[96] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4575,7 +5116,7 @@ func (x *UpdateScenarioPlaceRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioPlaceRsp.ProtoReflect.Descriptor instead. func (*UpdateScenarioPlaceRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{87} + return file_main_proto_rawDescGZIP(), []int{96} } type DeleteScenarioPlaceReq struct { @@ -4588,7 +5129,7 @@ type DeleteScenarioPlaceReq struct { func (x *DeleteScenarioPlaceReq) Reset() { *x = DeleteScenarioPlaceReq{} - mi := &file_main_proto_msgTypes[88] + mi := &file_main_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4600,7 +5141,7 @@ func (x *DeleteScenarioPlaceReq) String() string { func (*DeleteScenarioPlaceReq) ProtoMessage() {} func (x *DeleteScenarioPlaceReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[88] + mi := &file_main_proto_msgTypes[97] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4613,7 +5154,7 @@ func (x *DeleteScenarioPlaceReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteScenarioPlaceReq.ProtoReflect.Descriptor instead. func (*DeleteScenarioPlaceReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{88} + return file_main_proto_rawDescGZIP(), []int{97} } func (x *DeleteScenarioPlaceReq) GetID() int32 { @@ -4638,7 +5179,7 @@ type DeleteScenarioPlaceRsp struct { func (x *DeleteScenarioPlaceRsp) Reset() { *x = DeleteScenarioPlaceRsp{} - mi := &file_main_proto_msgTypes[89] + mi := &file_main_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4650,7 +5191,7 @@ func (x *DeleteScenarioPlaceRsp) String() string { func (*DeleteScenarioPlaceRsp) ProtoMessage() {} func (x *DeleteScenarioPlaceRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[89] + mi := &file_main_proto_msgTypes[98] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4663,7 +5204,7 @@ func (x *DeleteScenarioPlaceRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteScenarioPlaceRsp.ProtoReflect.Descriptor instead. func (*DeleteScenarioPlaceRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{89} + return file_main_proto_rawDescGZIP(), []int{98} } type UpdateScenarioConclusionReq struct { @@ -4676,7 +5217,7 @@ type UpdateScenarioConclusionReq struct { func (x *UpdateScenarioConclusionReq) Reset() { *x = UpdateScenarioConclusionReq{} - mi := &file_main_proto_msgTypes[90] + mi := &file_main_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4688,7 +5229,7 @@ func (x *UpdateScenarioConclusionReq) String() string { func (*UpdateScenarioConclusionReq) ProtoMessage() {} func (x *UpdateScenarioConclusionReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[90] + mi := &file_main_proto_msgTypes[99] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4701,7 +5242,7 @@ func (x *UpdateScenarioConclusionReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioConclusionReq.ProtoReflect.Descriptor instead. func (*UpdateScenarioConclusionReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{90} + return file_main_proto_rawDescGZIP(), []int{99} } func (x *UpdateScenarioConclusionReq) GetID() int32 { @@ -4726,7 +5267,7 @@ type UpdateScenarioConclusionRsp struct { func (x *UpdateScenarioConclusionRsp) Reset() { *x = UpdateScenarioConclusionRsp{} - mi := &file_main_proto_msgTypes[91] + mi := &file_main_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4738,7 +5279,7 @@ func (x *UpdateScenarioConclusionRsp) String() string { func (*UpdateScenarioConclusionRsp) ProtoMessage() {} func (x *UpdateScenarioConclusionRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[91] + mi := &file_main_proto_msgTypes[100] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4751,7 +5292,7 @@ func (x *UpdateScenarioConclusionRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioConclusionRsp.ProtoReflect.Descriptor instead. func (*UpdateScenarioConclusionRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{91} + return file_main_proto_rawDescGZIP(), []int{100} } type UpdateScenarioIntroReq struct { @@ -4764,7 +5305,7 @@ type UpdateScenarioIntroReq struct { func (x *UpdateScenarioIntroReq) Reset() { *x = UpdateScenarioIntroReq{} - mi := &file_main_proto_msgTypes[92] + mi := &file_main_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4776,7 +5317,7 @@ func (x *UpdateScenarioIntroReq) String() string { func (*UpdateScenarioIntroReq) ProtoMessage() {} func (x *UpdateScenarioIntroReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[92] + mi := &file_main_proto_msgTypes[101] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4789,7 +5330,7 @@ func (x *UpdateScenarioIntroReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioIntroReq.ProtoReflect.Descriptor instead. func (*UpdateScenarioIntroReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{92} + return file_main_proto_rawDescGZIP(), []int{101} } func (x *UpdateScenarioIntroReq) GetID() int32 { @@ -4814,7 +5355,7 @@ type UpdateScenarioIntroRsp struct { func (x *UpdateScenarioIntroRsp) Reset() { *x = UpdateScenarioIntroRsp{} - mi := &file_main_proto_msgTypes[93] + mi := &file_main_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4826,7 +5367,7 @@ func (x *UpdateScenarioIntroRsp) String() string { func (*UpdateScenarioIntroRsp) ProtoMessage() {} func (x *UpdateScenarioIntroRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[93] + mi := &file_main_proto_msgTypes[102] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4839,7 +5380,7 @@ func (x *UpdateScenarioIntroRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioIntroRsp.ProtoReflect.Descriptor instead. func (*UpdateScenarioIntroRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{93} + return file_main_proto_rawDescGZIP(), []int{102} } type AddScenarioQuestionReq struct { @@ -4852,7 +5393,7 @@ type AddScenarioQuestionReq struct { func (x *AddScenarioQuestionReq) Reset() { *x = AddScenarioQuestionReq{} - mi := &file_main_proto_msgTypes[94] + mi := &file_main_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4864,7 +5405,7 @@ func (x *AddScenarioQuestionReq) String() string { func (*AddScenarioQuestionReq) ProtoMessage() {} func (x *AddScenarioQuestionReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[94] + mi := &file_main_proto_msgTypes[103] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4877,7 +5418,7 @@ func (x *AddScenarioQuestionReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AddScenarioQuestionReq.ProtoReflect.Descriptor instead. func (*AddScenarioQuestionReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{94} + return file_main_proto_rawDescGZIP(), []int{103} } func (x *AddScenarioQuestionReq) GetID() int32 { @@ -4902,7 +5443,7 @@ type AddScenarioQuestionRsp struct { func (x *AddScenarioQuestionRsp) Reset() { *x = AddScenarioQuestionRsp{} - mi := &file_main_proto_msgTypes[95] + mi := &file_main_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4914,7 +5455,7 @@ func (x *AddScenarioQuestionRsp) String() string { func (*AddScenarioQuestionRsp) ProtoMessage() {} func (x *AddScenarioQuestionRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[95] + mi := &file_main_proto_msgTypes[104] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4927,7 +5468,7 @@ func (x *AddScenarioQuestionRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use AddScenarioQuestionRsp.ProtoReflect.Descriptor instead. func (*AddScenarioQuestionRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{95} + return file_main_proto_rawDescGZIP(), []int{104} } type UpdateScenarioQuestionReq struct { @@ -4941,7 +5482,7 @@ type UpdateScenarioQuestionReq struct { func (x *UpdateScenarioQuestionReq) Reset() { *x = UpdateScenarioQuestionReq{} - mi := &file_main_proto_msgTypes[96] + mi := &file_main_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4953,7 +5494,7 @@ func (x *UpdateScenarioQuestionReq) String() string { func (*UpdateScenarioQuestionReq) ProtoMessage() {} func (x *UpdateScenarioQuestionReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[96] + mi := &file_main_proto_msgTypes[105] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4966,7 +5507,7 @@ func (x *UpdateScenarioQuestionReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioQuestionReq.ProtoReflect.Descriptor instead. func (*UpdateScenarioQuestionReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{96} + return file_main_proto_rawDescGZIP(), []int{105} } func (x *UpdateScenarioQuestionReq) GetID() int32 { @@ -4998,7 +5539,7 @@ type UpdateScenarioQuestionRsp struct { func (x *UpdateScenarioQuestionRsp) Reset() { *x = UpdateScenarioQuestionRsp{} - mi := &file_main_proto_msgTypes[97] + mi := &file_main_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5010,7 +5551,7 @@ func (x *UpdateScenarioQuestionRsp) String() string { func (*UpdateScenarioQuestionRsp) ProtoMessage() {} func (x *UpdateScenarioQuestionRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[97] + mi := &file_main_proto_msgTypes[106] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5023,7 +5564,7 @@ func (x *UpdateScenarioQuestionRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioQuestionRsp.ProtoReflect.Descriptor instead. func (*UpdateScenarioQuestionRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{97} + return file_main_proto_rawDescGZIP(), []int{106} } type DeleteScenarioQuestionReq struct { @@ -5036,7 +5577,7 @@ type DeleteScenarioQuestionReq struct { func (x *DeleteScenarioQuestionReq) Reset() { *x = DeleteScenarioQuestionReq{} - mi := &file_main_proto_msgTypes[98] + mi := &file_main_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5048,7 +5589,7 @@ func (x *DeleteScenarioQuestionReq) String() string { func (*DeleteScenarioQuestionReq) ProtoMessage() {} func (x *DeleteScenarioQuestionReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[98] + mi := &file_main_proto_msgTypes[107] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5061,7 +5602,7 @@ func (x *DeleteScenarioQuestionReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteScenarioQuestionReq.ProtoReflect.Descriptor instead. func (*DeleteScenarioQuestionReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{98} + return file_main_proto_rawDescGZIP(), []int{107} } func (x *DeleteScenarioQuestionReq) GetID() int32 { @@ -5086,7 +5627,7 @@ type DeleteScenarioQuestionRsp struct { func (x *DeleteScenarioQuestionRsp) Reset() { *x = DeleteScenarioQuestionRsp{} - mi := &file_main_proto_msgTypes[99] + mi := &file_main_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5098,7 +5639,7 @@ func (x *DeleteScenarioQuestionRsp) String() string { func (*DeleteScenarioQuestionRsp) ProtoMessage() {} func (x *DeleteScenarioQuestionRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[99] + mi := &file_main_proto_msgTypes[108] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5111,7 +5652,7 @@ func (x *DeleteScenarioQuestionRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteScenarioQuestionRsp.ProtoReflect.Descriptor instead. func (*DeleteScenarioQuestionRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{99} + return file_main_proto_rawDescGZIP(), []int{108} } type DownloadScenarioArchiveReq struct { @@ -5123,7 +5664,7 @@ type DownloadScenarioArchiveReq struct { func (x *DownloadScenarioArchiveReq) Reset() { *x = DownloadScenarioArchiveReq{} - mi := &file_main_proto_msgTypes[100] + mi := &file_main_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5135,7 +5676,7 @@ func (x *DownloadScenarioArchiveReq) String() string { func (*DownloadScenarioArchiveReq) ProtoMessage() {} func (x *DownloadScenarioArchiveReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[100] + mi := &file_main_proto_msgTypes[109] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5148,7 +5689,7 @@ func (x *DownloadScenarioArchiveReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DownloadScenarioArchiveReq.ProtoReflect.Descriptor instead. func (*DownloadScenarioArchiveReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{100} + return file_main_proto_rawDescGZIP(), []int{109} } func (x *DownloadScenarioArchiveReq) GetID() int32 { @@ -5167,7 +5708,7 @@ type UploadScenarioArchiveRsp struct { func (x *UploadScenarioArchiveRsp) Reset() { *x = UploadScenarioArchiveRsp{} - mi := &file_main_proto_msgTypes[101] + mi := &file_main_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5179,7 +5720,7 @@ func (x *UploadScenarioArchiveRsp) String() string { func (*UploadScenarioArchiveRsp) ProtoMessage() {} func (x *UploadScenarioArchiveRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[101] + mi := &file_main_proto_msgTypes[110] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5192,7 +5733,7 @@ func (x *UploadScenarioArchiveRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UploadScenarioArchiveRsp.ProtoReflect.Descriptor instead. func (*UploadScenarioArchiveRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{101} + return file_main_proto_rawDescGZIP(), []int{110} } func (x *UploadScenarioArchiveRsp) GetID() int32 { @@ -5216,7 +5757,7 @@ type AddGameReq struct { func (x *AddGameReq) Reset() { *x = AddGameReq{} - mi := &file_main_proto_msgTypes[102] + mi := &file_main_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5228,7 +5769,7 @@ func (x *AddGameReq) String() string { func (*AddGameReq) ProtoMessage() {} func (x *AddGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[102] + mi := &file_main_proto_msgTypes[111] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5241,7 +5782,7 @@ func (x *AddGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AddGameReq.ProtoReflect.Descriptor instead. func (*AddGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{102} + return file_main_proto_rawDescGZIP(), []int{111} } func (x *AddGameReq) GetName() string { @@ -5295,7 +5836,7 @@ type AddGameRsp struct { func (x *AddGameRsp) Reset() { *x = AddGameRsp{} - mi := &file_main_proto_msgTypes[103] + mi := &file_main_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5307,7 +5848,7 @@ func (x *AddGameRsp) String() string { func (*AddGameRsp) ProtoMessage() {} func (x *AddGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[103] + mi := &file_main_proto_msgTypes[112] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5320,7 +5861,7 @@ func (x *AddGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use AddGameRsp.ProtoReflect.Descriptor instead. func (*AddGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{103} + return file_main_proto_rawDescGZIP(), []int{112} } func (x *AddGameRsp) GetID() int32 { @@ -5338,7 +5879,7 @@ type GetGamesReq struct { func (x *GetGamesReq) Reset() { *x = GetGamesReq{} - mi := &file_main_proto_msgTypes[104] + mi := &file_main_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5350,7 +5891,7 @@ func (x *GetGamesReq) String() string { func (*GetGamesReq) ProtoMessage() {} func (x *GetGamesReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[104] + mi := &file_main_proto_msgTypes[113] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5363,7 +5904,7 @@ func (x *GetGamesReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGamesReq.ProtoReflect.Descriptor instead. func (*GetGamesReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{104} + return file_main_proto_rawDescGZIP(), []int{113} } type GetGamesRsp struct { @@ -5375,7 +5916,7 @@ type GetGamesRsp struct { func (x *GetGamesRsp) Reset() { *x = GetGamesRsp{} - mi := &file_main_proto_msgTypes[105] + mi := &file_main_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5387,7 +5928,7 @@ func (x *GetGamesRsp) String() string { func (*GetGamesRsp) ProtoMessage() {} func (x *GetGamesRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[105] + mi := &file_main_proto_msgTypes[114] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5400,7 +5941,7 @@ func (x *GetGamesRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGamesRsp.ProtoReflect.Descriptor instead. func (*GetGamesRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{105} + return file_main_proto_rawDescGZIP(), []int{114} } func (x *GetGamesRsp) GetGames() []*Game { @@ -5432,7 +5973,7 @@ type Game struct { func (x *Game) Reset() { *x = Game{} - mi := &file_main_proto_msgTypes[106] + mi := &file_main_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5444,7 +5985,7 @@ func (x *Game) String() string { func (*Game) ProtoMessage() {} func (x *Game) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[106] + mi := &file_main_proto_msgTypes[115] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5457,7 +5998,7 @@ func (x *Game) ProtoReflect() protoreflect.Message { // Deprecated: Use Game.ProtoReflect.Descriptor instead. func (*Game) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{106} + return file_main_proto_rawDescGZIP(), []int{115} } func (x *Game) GetID() int32 { @@ -5574,7 +6115,7 @@ type GameExport struct { func (x *GameExport) Reset() { *x = GameExport{} - mi := &file_main_proto_msgTypes[107] + mi := &file_main_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5586,7 +6127,7 @@ func (x *GameExport) String() string { func (*GameExport) ProtoMessage() {} func (x *GameExport) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[107] + mi := &file_main_proto_msgTypes[116] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5599,7 +6140,7 @@ func (x *GameExport) ProtoReflect() protoreflect.Message { // Deprecated: Use GameExport.ProtoReflect.Descriptor instead. func (*GameExport) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{107} + return file_main_proto_rawDescGZIP(), []int{116} } func (x *GameExport) GetID() string { @@ -5655,7 +6196,7 @@ type GameImportRsp struct { func (x *GameImportRsp) Reset() { *x = GameImportRsp{} - mi := &file_main_proto_msgTypes[108] + mi := &file_main_proto_msgTypes[117] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5667,7 +6208,7 @@ func (x *GameImportRsp) String() string { func (*GameImportRsp) ProtoMessage() {} func (x *GameImportRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[108] + mi := &file_main_proto_msgTypes[117] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5680,7 +6221,7 @@ func (x *GameImportRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GameImportRsp.ProtoReflect.Descriptor instead. func (*GameImportRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{108} + return file_main_proto_rawDescGZIP(), []int{117} } func (x *GameImportRsp) GetGameID() int32 { @@ -5713,7 +6254,7 @@ type StartGameExportReq struct { func (x *StartGameExportReq) Reset() { *x = StartGameExportReq{} - mi := &file_main_proto_msgTypes[109] + mi := &file_main_proto_msgTypes[118] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5725,7 +6266,7 @@ func (x *StartGameExportReq) String() string { func (*StartGameExportReq) ProtoMessage() {} func (x *StartGameExportReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[109] + mi := &file_main_proto_msgTypes[118] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5738,7 +6279,7 @@ func (x *StartGameExportReq) ProtoReflect() protoreflect.Message { // Deprecated: Use StartGameExportReq.ProtoReflect.Descriptor instead. func (*StartGameExportReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{109} + return file_main_proto_rawDescGZIP(), []int{118} } func (x *StartGameExportReq) GetID() int32 { @@ -5757,7 +6298,7 @@ type GetGameExportReq struct { func (x *GetGameExportReq) Reset() { *x = GetGameExportReq{} - mi := &file_main_proto_msgTypes[110] + mi := &file_main_proto_msgTypes[119] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5769,7 +6310,7 @@ func (x *GetGameExportReq) String() string { func (*GetGameExportReq) ProtoMessage() {} func (x *GetGameExportReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[110] + mi := &file_main_proto_msgTypes[119] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5782,7 +6323,7 @@ func (x *GetGameExportReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameExportReq.ProtoReflect.Descriptor instead. func (*GetGameExportReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{110} + return file_main_proto_rawDescGZIP(), []int{119} } func (x *GetGameExportReq) GetID() int32 { @@ -5802,7 +6343,7 @@ type ResetGameLocalModeReq struct { func (x *ResetGameLocalModeReq) Reset() { *x = ResetGameLocalModeReq{} - mi := &file_main_proto_msgTypes[111] + mi := &file_main_proto_msgTypes[120] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5814,7 +6355,7 @@ func (x *ResetGameLocalModeReq) String() string { func (*ResetGameLocalModeReq) ProtoMessage() {} func (x *ResetGameLocalModeReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[111] + mi := &file_main_proto_msgTypes[120] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5827,7 +6368,7 @@ func (x *ResetGameLocalModeReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetGameLocalModeReq.ProtoReflect.Descriptor instead. func (*ResetGameLocalModeReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{111} + return file_main_proto_rawDescGZIP(), []int{120} } func (x *ResetGameLocalModeReq) GetID() int32 { @@ -5852,7 +6393,7 @@ type ResetGameLocalModeRsp struct { func (x *ResetGameLocalModeRsp) Reset() { *x = ResetGameLocalModeRsp{} - mi := &file_main_proto_msgTypes[112] + mi := &file_main_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5864,7 +6405,7 @@ func (x *ResetGameLocalModeRsp) String() string { func (*ResetGameLocalModeRsp) ProtoMessage() {} func (x *ResetGameLocalModeRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[112] + mi := &file_main_proto_msgTypes[121] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5877,7 +6418,7 @@ func (x *ResetGameLocalModeRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetGameLocalModeRsp.ProtoReflect.Descriptor instead. func (*ResetGameLocalModeRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{112} + return file_main_proto_rawDescGZIP(), []int{121} } type GameExportRsp struct { @@ -5889,7 +6430,7 @@ type GameExportRsp struct { func (x *GameExportRsp) Reset() { *x = GameExportRsp{} - mi := &file_main_proto_msgTypes[113] + mi := &file_main_proto_msgTypes[122] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5901,7 +6442,7 @@ func (x *GameExportRsp) String() string { func (*GameExportRsp) ProtoMessage() {} func (x *GameExportRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[113] + mi := &file_main_proto_msgTypes[122] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5914,7 +6455,7 @@ func (x *GameExportRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GameExportRsp.ProtoReflect.Descriptor instead. func (*GameExportRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{113} + return file_main_proto_rawDescGZIP(), []int{122} } func (x *GameExportRsp) GetExport() *GameExport { @@ -5955,7 +6496,7 @@ type ScreenState struct { func (x *ScreenState) Reset() { *x = ScreenState{} - mi := &file_main_proto_msgTypes[114] + mi := &file_main_proto_msgTypes[123] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5967,7 +6508,7 @@ func (x *ScreenState) String() string { func (*ScreenState) ProtoMessage() {} func (x *ScreenState) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[114] + mi := &file_main_proto_msgTypes[123] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5980,7 +6521,7 @@ func (x *ScreenState) ProtoReflect() protoreflect.Message { // Deprecated: Use ScreenState.ProtoReflect.Descriptor instead. func (*ScreenState) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{114} + return file_main_proto_rawDescGZIP(), []int{123} } func (x *ScreenState) GetID() string { @@ -6152,7 +6693,7 @@ type CreateScreenSessionReq struct { func (x *CreateScreenSessionReq) Reset() { *x = CreateScreenSessionReq{} - mi := &file_main_proto_msgTypes[115] + mi := &file_main_proto_msgTypes[124] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6164,7 +6705,7 @@ func (x *CreateScreenSessionReq) String() string { func (*CreateScreenSessionReq) ProtoMessage() {} func (x *CreateScreenSessionReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[115] + mi := &file_main_proto_msgTypes[124] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6177,7 +6718,7 @@ func (x *CreateScreenSessionReq) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateScreenSessionReq.ProtoReflect.Descriptor instead. func (*CreateScreenSessionReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{115} + return file_main_proto_rawDescGZIP(), []int{124} } type CreateScreenSessionRsp struct { @@ -6190,7 +6731,7 @@ type CreateScreenSessionRsp struct { func (x *CreateScreenSessionRsp) Reset() { *x = CreateScreenSessionRsp{} - mi := &file_main_proto_msgTypes[116] + mi := &file_main_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6202,7 +6743,7 @@ func (x *CreateScreenSessionRsp) String() string { func (*CreateScreenSessionRsp) ProtoMessage() {} func (x *CreateScreenSessionRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[116] + mi := &file_main_proto_msgTypes[125] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6215,7 +6756,7 @@ func (x *CreateScreenSessionRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateScreenSessionRsp.ProtoReflect.Descriptor instead. func (*CreateScreenSessionRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{116} + return file_main_proto_rawDescGZIP(), []int{125} } func (x *CreateScreenSessionRsp) GetScreenID() string { @@ -6242,7 +6783,7 @@ type GetScreenStateReq struct { func (x *GetScreenStateReq) Reset() { *x = GetScreenStateReq{} - mi := &file_main_proto_msgTypes[117] + mi := &file_main_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6254,7 +6795,7 @@ func (x *GetScreenStateReq) String() string { func (*GetScreenStateReq) ProtoMessage() {} func (x *GetScreenStateReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[117] + mi := &file_main_proto_msgTypes[126] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6267,7 +6808,7 @@ func (x *GetScreenStateReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScreenStateReq.ProtoReflect.Descriptor instead. func (*GetScreenStateReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{117} + return file_main_proto_rawDescGZIP(), []int{126} } func (x *GetScreenStateReq) GetScreenID() string { @@ -6293,7 +6834,7 @@ type GetScreenStateRsp struct { func (x *GetScreenStateRsp) Reset() { *x = GetScreenStateRsp{} - mi := &file_main_proto_msgTypes[118] + mi := &file_main_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6305,7 +6846,7 @@ func (x *GetScreenStateRsp) String() string { func (*GetScreenStateRsp) ProtoMessage() {} func (x *GetScreenStateRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[118] + mi := &file_main_proto_msgTypes[127] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6318,7 +6859,7 @@ func (x *GetScreenStateRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScreenStateRsp.ProtoReflect.Descriptor instead. func (*GetScreenStateRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{118} + return file_main_proto_rawDescGZIP(), []int{127} } func (x *GetScreenStateRsp) GetState() *ScreenState { @@ -6337,7 +6878,7 @@ type GetGameScreensReq struct { func (x *GetGameScreensReq) Reset() { *x = GetGameScreensReq{} - mi := &file_main_proto_msgTypes[119] + mi := &file_main_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6349,7 +6890,7 @@ func (x *GetGameScreensReq) String() string { func (*GetGameScreensReq) ProtoMessage() {} func (x *GetGameScreensReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[119] + mi := &file_main_proto_msgTypes[128] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6362,7 +6903,7 @@ func (x *GetGameScreensReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameScreensReq.ProtoReflect.Descriptor instead. func (*GetGameScreensReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{119} + return file_main_proto_rawDescGZIP(), []int{128} } func (x *GetGameScreensReq) GetGameID() int32 { @@ -6381,7 +6922,7 @@ type GetGameScreensRsp struct { func (x *GetGameScreensRsp) Reset() { *x = GetGameScreensRsp{} - mi := &file_main_proto_msgTypes[120] + mi := &file_main_proto_msgTypes[129] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6393,7 +6934,7 @@ func (x *GetGameScreensRsp) String() string { func (*GetGameScreensRsp) ProtoMessage() {} func (x *GetGameScreensRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[120] + mi := &file_main_proto_msgTypes[129] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6406,7 +6947,7 @@ func (x *GetGameScreensRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameScreensRsp.ProtoReflect.Descriptor instead. func (*GetGameScreensRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{120} + return file_main_proto_rawDescGZIP(), []int{129} } func (x *GetGameScreensRsp) GetScreens() []*ScreenState { @@ -6425,13 +6966,14 @@ type MusicState struct { Loop bool `protobuf:"varint,5,opt,name=loop,proto3" json:"loop,omitempty"` Playback MusicPlaybackState `protobuf:"varint,6,opt,name=playback,proto3,enum=crabs.evening_detective_server.MusicPlaybackState" json:"playback,omitempty"` StateVersion int64 `protobuf:"varint,7,opt,name=state_version,json=stateVersion,proto3" json:"state_version,omitempty"` + GroupId int32 `protobuf:"varint,8,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *MusicState) Reset() { *x = MusicState{} - mi := &file_main_proto_msgTypes[121] + mi := &file_main_proto_msgTypes[130] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6443,7 +6985,7 @@ func (x *MusicState) String() string { func (*MusicState) ProtoMessage() {} func (x *MusicState) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[121] + mi := &file_main_proto_msgTypes[130] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6456,7 +6998,7 @@ func (x *MusicState) ProtoReflect() protoreflect.Message { // Deprecated: Use MusicState.ProtoReflect.Descriptor instead. func (*MusicState) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{121} + return file_main_proto_rawDescGZIP(), []int{130} } func (x *MusicState) GetPlaylist() *Playlist { @@ -6508,6 +7050,13 @@ func (x *MusicState) GetStateVersion() int64 { return 0 } +func (x *MusicState) GetGroupId() int32 { + if x != nil { + return x.GroupId + } + return 0 +} + type GetGameMusicReq struct { state protoimpl.MessageState `protogen:"open.v1"` GameID int32 `protobuf:"varint,1,opt,name=gameID,proto3" json:"gameID,omitempty"` @@ -6517,7 +7066,7 @@ type GetGameMusicReq struct { func (x *GetGameMusicReq) Reset() { *x = GetGameMusicReq{} - mi := &file_main_proto_msgTypes[122] + mi := &file_main_proto_msgTypes[131] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6529,7 +7078,7 @@ func (x *GetGameMusicReq) String() string { func (*GetGameMusicReq) ProtoMessage() {} func (x *GetGameMusicReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[122] + mi := &file_main_proto_msgTypes[131] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6542,7 +7091,7 @@ func (x *GetGameMusicReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameMusicReq.ProtoReflect.Descriptor instead. func (*GetGameMusicReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{122} + return file_main_proto_rawDescGZIP(), []int{131} } func (x *GetGameMusicReq) GetGameID() int32 { @@ -6564,7 +7113,7 @@ type GetGameMusicRsp struct { func (x *GetGameMusicRsp) Reset() { *x = GetGameMusicRsp{} - mi := &file_main_proto_msgTypes[123] + mi := &file_main_proto_msgTypes[132] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6576,7 +7125,7 @@ func (x *GetGameMusicRsp) String() string { func (*GetGameMusicRsp) ProtoMessage() {} func (x *GetGameMusicRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[123] + mi := &file_main_proto_msgTypes[132] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6589,7 +7138,7 @@ func (x *GetGameMusicRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameMusicRsp.ProtoReflect.Descriptor instead. func (*GetGameMusicRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{123} + return file_main_proto_rawDescGZIP(), []int{132} } func (x *GetGameMusicRsp) GetPlaylists() []*Playlist { @@ -6629,13 +7178,14 @@ type SetGameMusicReq struct { Volume int32 `protobuf:"varint,5,opt,name=volume,proto3" json:"volume,omitempty"` Loop bool `protobuf:"varint,6,opt,name=loop,proto3" json:"loop,omitempty"` Playback MusicPlaybackState `protobuf:"varint,7,opt,name=playback,proto3,enum=crabs.evening_detective_server.MusicPlaybackState" json:"playback,omitempty"` + GroupId int32 `protobuf:"varint,8,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *SetGameMusicReq) Reset() { *x = SetGameMusicReq{} - mi := &file_main_proto_msgTypes[124] + mi := &file_main_proto_msgTypes[133] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6647,7 +7197,7 @@ func (x *SetGameMusicReq) String() string { func (*SetGameMusicReq) ProtoMessage() {} func (x *SetGameMusicReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[124] + mi := &file_main_proto_msgTypes[133] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6660,7 +7210,7 @@ func (x *SetGameMusicReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SetGameMusicReq.ProtoReflect.Descriptor instead. func (*SetGameMusicReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{124} + return file_main_proto_rawDescGZIP(), []int{133} } func (x *SetGameMusicReq) GetGameID() int32 { @@ -6712,6 +7262,13 @@ func (x *SetGameMusicReq) GetPlayback() MusicPlaybackState { return MusicPlaybackState_MUSIC_PLAYBACK_UNSPECIFIED } +func (x *SetGameMusicReq) GetGroupId() int32 { + if x != nil { + return x.GroupId + } + return 0 +} + type SetGameMusicRsp struct { state protoimpl.MessageState `protogen:"open.v1"` State *MusicState `protobuf:"bytes,1,opt,name=state,proto3" json:"state,omitempty"` @@ -6721,7 +7278,7 @@ type SetGameMusicRsp struct { func (x *SetGameMusicRsp) Reset() { *x = SetGameMusicRsp{} - mi := &file_main_proto_msgTypes[125] + mi := &file_main_proto_msgTypes[134] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6733,7 +7290,7 @@ func (x *SetGameMusicRsp) String() string { func (*SetGameMusicRsp) ProtoMessage() {} func (x *SetGameMusicRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[125] + mi := &file_main_proto_msgTypes[134] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6746,7 +7303,7 @@ func (x *SetGameMusicRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use SetGameMusicRsp.ProtoReflect.Descriptor instead. func (*SetGameMusicRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{125} + return file_main_proto_rawDescGZIP(), []int{134} } func (x *SetGameMusicRsp) GetState() *MusicState { @@ -6757,16 +7314,17 @@ func (x *SetGameMusicRsp) GetState() *MusicState { } type AdvanceScreenMusicReq struct { - state protoimpl.MessageState `protogen:"open.v1"` - ScreenID string `protobuf:"bytes,1,opt,name=screenID,proto3" json:"screenID,omitempty"` - AccessToken string `protobuf:"bytes,2,opt,name=accessToken,proto3" json:"accessToken,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ScreenID string `protobuf:"bytes,1,opt,name=screenID,proto3" json:"screenID,omitempty"` + AccessToken string `protobuf:"bytes,2,opt,name=accessToken,proto3" json:"accessToken,omitempty"` + ExpectedStateVersion string `protobuf:"bytes,3,opt,name=expected_state_version,json=expectedStateVersion,proto3" json:"expected_state_version,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AdvanceScreenMusicReq) Reset() { *x = AdvanceScreenMusicReq{} - mi := &file_main_proto_msgTypes[126] + mi := &file_main_proto_msgTypes[135] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6778,7 +7336,7 @@ func (x *AdvanceScreenMusicReq) String() string { func (*AdvanceScreenMusicReq) ProtoMessage() {} func (x *AdvanceScreenMusicReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[126] + mi := &file_main_proto_msgTypes[135] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6791,7 +7349,7 @@ func (x *AdvanceScreenMusicReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AdvanceScreenMusicReq.ProtoReflect.Descriptor instead. func (*AdvanceScreenMusicReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{126} + return file_main_proto_rawDescGZIP(), []int{135} } func (x *AdvanceScreenMusicReq) GetScreenID() string { @@ -6808,6 +7366,13 @@ func (x *AdvanceScreenMusicReq) GetAccessToken() string { return "" } +func (x *AdvanceScreenMusicReq) GetExpectedStateVersion() string { + if x != nil { + return x.ExpectedStateVersion + } + return "" +} + type AdvanceScreenMusicRsp struct { state protoimpl.MessageState `protogen:"open.v1"` State *MusicState `protobuf:"bytes,1,opt,name=state,proto3" json:"state,omitempty"` @@ -6817,7 +7382,7 @@ type AdvanceScreenMusicRsp struct { func (x *AdvanceScreenMusicRsp) Reset() { *x = AdvanceScreenMusicRsp{} - mi := &file_main_proto_msgTypes[127] + mi := &file_main_proto_msgTypes[136] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6829,7 +7394,7 @@ func (x *AdvanceScreenMusicRsp) String() string { func (*AdvanceScreenMusicRsp) ProtoMessage() {} func (x *AdvanceScreenMusicRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[127] + mi := &file_main_proto_msgTypes[136] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6842,7 +7407,7 @@ func (x *AdvanceScreenMusicRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use AdvanceScreenMusicRsp.ProtoReflect.Descriptor instead. func (*AdvanceScreenMusicRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{127} + return file_main_proto_rawDescGZIP(), []int{136} } func (x *AdvanceScreenMusicRsp) GetState() *MusicState { @@ -6864,7 +7429,7 @@ type BindScreenReq struct { func (x *BindScreenReq) Reset() { *x = BindScreenReq{} - mi := &file_main_proto_msgTypes[128] + mi := &file_main_proto_msgTypes[137] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6876,7 +7441,7 @@ func (x *BindScreenReq) String() string { func (*BindScreenReq) ProtoMessage() {} func (x *BindScreenReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[128] + mi := &file_main_proto_msgTypes[137] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6889,7 +7454,7 @@ func (x *BindScreenReq) ProtoReflect() protoreflect.Message { // Deprecated: Use BindScreenReq.ProtoReflect.Descriptor instead. func (*BindScreenReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{128} + return file_main_proto_rawDescGZIP(), []int{137} } func (x *BindScreenReq) GetScreenID() string { @@ -6929,7 +7494,7 @@ type BindScreenRsp struct { func (x *BindScreenRsp) Reset() { *x = BindScreenRsp{} - mi := &file_main_proto_msgTypes[129] + mi := &file_main_proto_msgTypes[138] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6941,7 +7506,7 @@ func (x *BindScreenRsp) String() string { func (*BindScreenRsp) ProtoMessage() {} func (x *BindScreenRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[129] + mi := &file_main_proto_msgTypes[138] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6954,7 +7519,7 @@ func (x *BindScreenRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use BindScreenRsp.ProtoReflect.Descriptor instead. func (*BindScreenRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{129} + return file_main_proto_rawDescGZIP(), []int{138} } func (x *BindScreenRsp) GetState() *ScreenState { @@ -6973,7 +7538,7 @@ type UnbindScreenReq struct { func (x *UnbindScreenReq) Reset() { *x = UnbindScreenReq{} - mi := &file_main_proto_msgTypes[130] + mi := &file_main_proto_msgTypes[139] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6985,7 +7550,7 @@ func (x *UnbindScreenReq) String() string { func (*UnbindScreenReq) ProtoMessage() {} func (x *UnbindScreenReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[130] + mi := &file_main_proto_msgTypes[139] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6998,7 +7563,7 @@ func (x *UnbindScreenReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UnbindScreenReq.ProtoReflect.Descriptor instead. func (*UnbindScreenReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{130} + return file_main_proto_rawDescGZIP(), []int{139} } func (x *UnbindScreenReq) GetScreenID() string { @@ -7016,7 +7581,7 @@ type UnbindScreenRsp struct { func (x *UnbindScreenRsp) Reset() { *x = UnbindScreenRsp{} - mi := &file_main_proto_msgTypes[131] + mi := &file_main_proto_msgTypes[140] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7028,7 +7593,7 @@ func (x *UnbindScreenRsp) String() string { func (*UnbindScreenRsp) ProtoMessage() {} func (x *UnbindScreenRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[131] + mi := &file_main_proto_msgTypes[140] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7041,7 +7606,7 @@ func (x *UnbindScreenRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UnbindScreenRsp.ProtoReflect.Descriptor instead. func (*UnbindScreenRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{131} + return file_main_proto_rawDescGZIP(), []int{140} } type SetScreenSoundReq struct { @@ -7054,7 +7619,7 @@ type SetScreenSoundReq struct { func (x *SetScreenSoundReq) Reset() { *x = SetScreenSoundReq{} - mi := &file_main_proto_msgTypes[132] + mi := &file_main_proto_msgTypes[141] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7066,7 +7631,7 @@ func (x *SetScreenSoundReq) String() string { func (*SetScreenSoundReq) ProtoMessage() {} func (x *SetScreenSoundReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[132] + mi := &file_main_proto_msgTypes[141] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7079,7 +7644,7 @@ func (x *SetScreenSoundReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SetScreenSoundReq.ProtoReflect.Descriptor instead. func (*SetScreenSoundReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{132} + return file_main_proto_rawDescGZIP(), []int{141} } func (x *SetScreenSoundReq) GetScreenID() string { @@ -7104,7 +7669,7 @@ type SetScreenSoundRsp struct { func (x *SetScreenSoundRsp) Reset() { *x = SetScreenSoundRsp{} - mi := &file_main_proto_msgTypes[133] + mi := &file_main_proto_msgTypes[142] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7116,7 +7681,7 @@ func (x *SetScreenSoundRsp) String() string { func (*SetScreenSoundRsp) ProtoMessage() {} func (x *SetScreenSoundRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[133] + mi := &file_main_proto_msgTypes[142] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7129,7 +7694,7 @@ func (x *SetScreenSoundRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use SetScreenSoundRsp.ProtoReflect.Descriptor instead. func (*SetScreenSoundRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{133} + return file_main_proto_rawDescGZIP(), []int{142} } type MapItem struct { @@ -7148,7 +7713,7 @@ type MapItem struct { func (x *MapItem) Reset() { *x = MapItem{} - mi := &file_main_proto_msgTypes[134] + mi := &file_main_proto_msgTypes[143] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7160,7 +7725,7 @@ func (x *MapItem) String() string { func (*MapItem) ProtoMessage() {} func (x *MapItem) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[134] + mi := &file_main_proto_msgTypes[143] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7173,7 +7738,7 @@ func (x *MapItem) ProtoReflect() protoreflect.Message { // Deprecated: Use MapItem.ProtoReflect.Descriptor instead. func (*MapItem) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{134} + return file_main_proto_rawDescGZIP(), []int{143} } func (x *MapItem) GetKind() string { @@ -7241,7 +7806,7 @@ type GetGameMapReq struct { func (x *GetGameMapReq) Reset() { *x = GetGameMapReq{} - mi := &file_main_proto_msgTypes[135] + mi := &file_main_proto_msgTypes[144] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7253,7 +7818,7 @@ func (x *GetGameMapReq) String() string { func (*GetGameMapReq) ProtoMessage() {} func (x *GetGameMapReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[135] + mi := &file_main_proto_msgTypes[144] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7266,7 +7831,7 @@ func (x *GetGameMapReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameMapReq.ProtoReflect.Descriptor instead. func (*GetGameMapReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{135} + return file_main_proto_rawDescGZIP(), []int{144} } func (x *GetGameMapReq) GetGameID() int32 { @@ -7285,7 +7850,7 @@ type GetGameMapRsp struct { func (x *GetGameMapRsp) Reset() { *x = GetGameMapRsp{} - mi := &file_main_proto_msgTypes[136] + mi := &file_main_proto_msgTypes[145] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7297,7 +7862,7 @@ func (x *GetGameMapRsp) String() string { func (*GetGameMapRsp) ProtoMessage() {} func (x *GetGameMapRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[136] + mi := &file_main_proto_msgTypes[145] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7310,7 +7875,7 @@ func (x *GetGameMapRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameMapRsp.ProtoReflect.Descriptor instead. func (*GetGameMapRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{136} + return file_main_proto_rawDescGZIP(), []int{145} } func (x *GetGameMapRsp) GetItems() []*MapItem { @@ -7334,7 +7899,7 @@ type UpdateGameMapItemReq struct { func (x *UpdateGameMapItemReq) Reset() { *x = UpdateGameMapItemReq{} - mi := &file_main_proto_msgTypes[137] + mi := &file_main_proto_msgTypes[146] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7346,7 +7911,7 @@ func (x *UpdateGameMapItemReq) String() string { func (*UpdateGameMapItemReq) ProtoMessage() {} func (x *UpdateGameMapItemReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[137] + mi := &file_main_proto_msgTypes[146] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7359,7 +7924,7 @@ func (x *UpdateGameMapItemReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGameMapItemReq.ProtoReflect.Descriptor instead. func (*UpdateGameMapItemReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{137} + return file_main_proto_rawDescGZIP(), []int{146} } func (x *UpdateGameMapItemReq) GetGameID() int32 { @@ -7412,7 +7977,7 @@ type UpdateGameMapItemRsp struct { func (x *UpdateGameMapItemRsp) Reset() { *x = UpdateGameMapItemRsp{} - mi := &file_main_proto_msgTypes[138] + mi := &file_main_proto_msgTypes[147] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7424,7 +7989,7 @@ func (x *UpdateGameMapItemRsp) String() string { func (*UpdateGameMapItemRsp) ProtoMessage() {} func (x *UpdateGameMapItemRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[138] + mi := &file_main_proto_msgTypes[147] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7437,7 +8002,7 @@ func (x *UpdateGameMapItemRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGameMapItemRsp.ProtoReflect.Descriptor instead. func (*UpdateGameMapItemRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{138} + return file_main_proto_rawDescGZIP(), []int{147} } type SetScreenModeReq struct { @@ -7452,7 +8017,7 @@ type SetScreenModeReq struct { func (x *SetScreenModeReq) Reset() { *x = SetScreenModeReq{} - mi := &file_main_proto_msgTypes[139] + mi := &file_main_proto_msgTypes[148] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7464,7 +8029,7 @@ func (x *SetScreenModeReq) String() string { func (*SetScreenModeReq) ProtoMessage() {} func (x *SetScreenModeReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[139] + mi := &file_main_proto_msgTypes[148] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7477,7 +8042,7 @@ func (x *SetScreenModeReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SetScreenModeReq.ProtoReflect.Descriptor instead. func (*SetScreenModeReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{139} + return file_main_proto_rawDescGZIP(), []int{148} } func (x *SetScreenModeReq) GetGameID() int32 { @@ -7516,7 +8081,7 @@ type SetScreenModeRsp struct { func (x *SetScreenModeRsp) Reset() { *x = SetScreenModeRsp{} - mi := &file_main_proto_msgTypes[140] + mi := &file_main_proto_msgTypes[149] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7528,7 +8093,7 @@ func (x *SetScreenModeRsp) String() string { func (*SetScreenModeRsp) ProtoMessage() {} func (x *SetScreenModeRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[140] + mi := &file_main_proto_msgTypes[149] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7541,7 +8106,7 @@ func (x *SetScreenModeRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use SetScreenModeRsp.ProtoReflect.Descriptor instead. func (*SetScreenModeRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{140} + return file_main_proto_rawDescGZIP(), []int{149} } type SetScreenTimerReq struct { @@ -7556,7 +8121,7 @@ type SetScreenTimerReq struct { func (x *SetScreenTimerReq) Reset() { *x = SetScreenTimerReq{} - mi := &file_main_proto_msgTypes[141] + mi := &file_main_proto_msgTypes[150] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7568,7 +8133,7 @@ func (x *SetScreenTimerReq) String() string { func (*SetScreenTimerReq) ProtoMessage() {} func (x *SetScreenTimerReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[141] + mi := &file_main_proto_msgTypes[150] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7581,7 +8146,7 @@ func (x *SetScreenTimerReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SetScreenTimerReq.ProtoReflect.Descriptor instead. func (*SetScreenTimerReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{141} + return file_main_proto_rawDescGZIP(), []int{150} } func (x *SetScreenTimerReq) GetGameID() int32 { @@ -7620,7 +8185,7 @@ type SetScreenTimerRsp struct { func (x *SetScreenTimerRsp) Reset() { *x = SetScreenTimerRsp{} - mi := &file_main_proto_msgTypes[142] + mi := &file_main_proto_msgTypes[151] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7632,7 +8197,7 @@ func (x *SetScreenTimerRsp) String() string { func (*SetScreenTimerRsp) ProtoMessage() {} func (x *SetScreenTimerRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[142] + mi := &file_main_proto_msgTypes[151] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7645,7 +8210,7 @@ func (x *SetScreenTimerRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use SetScreenTimerRsp.ProtoReflect.Descriptor instead. func (*SetScreenTimerRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{142} + return file_main_proto_rawDescGZIP(), []int{151} } type SendScreenCommandReq struct { @@ -7660,7 +8225,7 @@ type SendScreenCommandReq struct { func (x *SendScreenCommandReq) Reset() { *x = SendScreenCommandReq{} - mi := &file_main_proto_msgTypes[143] + mi := &file_main_proto_msgTypes[152] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7672,7 +8237,7 @@ func (x *SendScreenCommandReq) String() string { func (*SendScreenCommandReq) ProtoMessage() {} func (x *SendScreenCommandReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[143] + mi := &file_main_proto_msgTypes[152] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7685,7 +8250,7 @@ func (x *SendScreenCommandReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SendScreenCommandReq.ProtoReflect.Descriptor instead. func (*SendScreenCommandReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{143} + return file_main_proto_rawDescGZIP(), []int{152} } func (x *SendScreenCommandReq) GetGameID() int32 { @@ -7724,7 +8289,7 @@ type SendScreenCommandRsp struct { func (x *SendScreenCommandRsp) Reset() { *x = SendScreenCommandRsp{} - mi := &file_main_proto_msgTypes[144] + mi := &file_main_proto_msgTypes[153] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7736,7 +8301,7 @@ func (x *SendScreenCommandRsp) String() string { func (*SendScreenCommandRsp) ProtoMessage() {} func (x *SendScreenCommandRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[144] + mi := &file_main_proto_msgTypes[153] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7749,7 +8314,7 @@ func (x *SendScreenCommandRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use SendScreenCommandRsp.ProtoReflect.Descriptor instead. func (*SendScreenCommandRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{144} + return file_main_proto_rawDescGZIP(), []int{153} } type ScreenPlanStep struct { @@ -7766,7 +8331,7 @@ type ScreenPlanStep struct { func (x *ScreenPlanStep) Reset() { *x = ScreenPlanStep{} - mi := &file_main_proto_msgTypes[145] + mi := &file_main_proto_msgTypes[154] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7778,7 +8343,7 @@ func (x *ScreenPlanStep) String() string { func (*ScreenPlanStep) ProtoMessage() {} func (x *ScreenPlanStep) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[145] + mi := &file_main_proto_msgTypes[154] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7791,7 +8356,7 @@ func (x *ScreenPlanStep) ProtoReflect() protoreflect.Message { // Deprecated: Use ScreenPlanStep.ProtoReflect.Descriptor instead. func (*ScreenPlanStep) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{145} + return file_main_proto_rawDescGZIP(), []int{154} } func (x *ScreenPlanStep) GetMode() ScreenMode { @@ -7846,7 +8411,7 @@ type ScreenPlan struct { func (x *ScreenPlan) Reset() { *x = ScreenPlan{} - mi := &file_main_proto_msgTypes[146] + mi := &file_main_proto_msgTypes[155] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7858,7 +8423,7 @@ func (x *ScreenPlan) String() string { func (*ScreenPlan) ProtoMessage() {} func (x *ScreenPlan) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[146] + mi := &file_main_proto_msgTypes[155] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7871,7 +8436,7 @@ func (x *ScreenPlan) ProtoReflect() protoreflect.Message { // Deprecated: Use ScreenPlan.ProtoReflect.Descriptor instead. func (*ScreenPlan) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{146} + return file_main_proto_rawDescGZIP(), []int{155} } func (x *ScreenPlan) GetSteps() []*ScreenPlanStep { @@ -7897,7 +8462,7 @@ type GetScreenPlanReq struct { func (x *GetScreenPlanReq) Reset() { *x = GetScreenPlanReq{} - mi := &file_main_proto_msgTypes[147] + mi := &file_main_proto_msgTypes[156] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7909,7 +8474,7 @@ func (x *GetScreenPlanReq) String() string { func (*GetScreenPlanReq) ProtoMessage() {} func (x *GetScreenPlanReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[147] + mi := &file_main_proto_msgTypes[156] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7922,7 +8487,7 @@ func (x *GetScreenPlanReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScreenPlanReq.ProtoReflect.Descriptor instead. func (*GetScreenPlanReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{147} + return file_main_proto_rawDescGZIP(), []int{156} } func (x *GetScreenPlanReq) GetGameID() int32 { @@ -7941,7 +8506,7 @@ type GetScreenPlanRsp struct { func (x *GetScreenPlanRsp) Reset() { *x = GetScreenPlanRsp{} - mi := &file_main_proto_msgTypes[148] + mi := &file_main_proto_msgTypes[157] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7953,7 +8518,7 @@ func (x *GetScreenPlanRsp) String() string { func (*GetScreenPlanRsp) ProtoMessage() {} func (x *GetScreenPlanRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[148] + mi := &file_main_proto_msgTypes[157] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7966,7 +8531,7 @@ func (x *GetScreenPlanRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScreenPlanRsp.ProtoReflect.Descriptor instead. func (*GetScreenPlanRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{148} + return file_main_proto_rawDescGZIP(), []int{157} } func (x *GetScreenPlanRsp) GetPlan() *ScreenPlan { @@ -7987,7 +8552,7 @@ type SaveScreenPlanReq struct { func (x *SaveScreenPlanReq) Reset() { *x = SaveScreenPlanReq{} - mi := &file_main_proto_msgTypes[149] + mi := &file_main_proto_msgTypes[158] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7999,7 +8564,7 @@ func (x *SaveScreenPlanReq) String() string { func (*SaveScreenPlanReq) ProtoMessage() {} func (x *SaveScreenPlanReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[149] + mi := &file_main_proto_msgTypes[158] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8012,7 +8577,7 @@ func (x *SaveScreenPlanReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SaveScreenPlanReq.ProtoReflect.Descriptor instead. func (*SaveScreenPlanReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{149} + return file_main_proto_rawDescGZIP(), []int{158} } func (x *SaveScreenPlanReq) GetGameID() int32 { @@ -8045,7 +8610,7 @@ type SaveScreenPlanRsp struct { func (x *SaveScreenPlanRsp) Reset() { *x = SaveScreenPlanRsp{} - mi := &file_main_proto_msgTypes[150] + mi := &file_main_proto_msgTypes[159] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8057,7 +8622,7 @@ func (x *SaveScreenPlanRsp) String() string { func (*SaveScreenPlanRsp) ProtoMessage() {} func (x *SaveScreenPlanRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[150] + mi := &file_main_proto_msgTypes[159] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8070,7 +8635,7 @@ func (x *SaveScreenPlanRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use SaveScreenPlanRsp.ProtoReflect.Descriptor instead. func (*SaveScreenPlanRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{150} + return file_main_proto_rawDescGZIP(), []int{159} } func (x *SaveScreenPlanRsp) GetPlan() *ScreenPlan { @@ -8090,7 +8655,7 @@ type SetScreenPlanStepReq struct { func (x *SetScreenPlanStepReq) Reset() { *x = SetScreenPlanStepReq{} - mi := &file_main_proto_msgTypes[151] + mi := &file_main_proto_msgTypes[160] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8102,7 +8667,7 @@ func (x *SetScreenPlanStepReq) String() string { func (*SetScreenPlanStepReq) ProtoMessage() {} func (x *SetScreenPlanStepReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[151] + mi := &file_main_proto_msgTypes[160] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8115,7 +8680,7 @@ func (x *SetScreenPlanStepReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SetScreenPlanStepReq.ProtoReflect.Descriptor instead. func (*SetScreenPlanStepReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{151} + return file_main_proto_rawDescGZIP(), []int{160} } func (x *SetScreenPlanStepReq) GetGameID() int32 { @@ -8141,7 +8706,7 @@ type SetScreenPlanStepRsp struct { func (x *SetScreenPlanStepRsp) Reset() { *x = SetScreenPlanStepRsp{} - mi := &file_main_proto_msgTypes[152] + mi := &file_main_proto_msgTypes[161] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8153,7 +8718,7 @@ func (x *SetScreenPlanStepRsp) String() string { func (*SetScreenPlanStepRsp) ProtoMessage() {} func (x *SetScreenPlanStepRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[152] + mi := &file_main_proto_msgTypes[161] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8166,7 +8731,7 @@ func (x *SetScreenPlanStepRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use SetScreenPlanStepRsp.ProtoReflect.Descriptor instead. func (*SetScreenPlanStepRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{152} + return file_main_proto_rawDescGZIP(), []int{161} } func (x *SetScreenPlanStepRsp) GetPlan() *ScreenPlan { @@ -8186,7 +8751,7 @@ type ScreenTeam struct { func (x *ScreenTeam) Reset() { *x = ScreenTeam{} - mi := &file_main_proto_msgTypes[153] + mi := &file_main_proto_msgTypes[162] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8198,7 +8763,7 @@ func (x *ScreenTeam) String() string { func (*ScreenTeam) ProtoMessage() {} func (x *ScreenTeam) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[153] + mi := &file_main_proto_msgTypes[162] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8211,7 +8776,7 @@ func (x *ScreenTeam) ProtoReflect() protoreflect.Message { // Deprecated: Use ScreenTeam.ProtoReflect.Descriptor instead. func (*ScreenTeam) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{153} + return file_main_proto_rawDescGZIP(), []int{162} } func (x *ScreenTeam) GetID() string { @@ -8238,7 +8803,7 @@ type GetScreenTeamsReq struct { func (x *GetScreenTeamsReq) Reset() { *x = GetScreenTeamsReq{} - mi := &file_main_proto_msgTypes[154] + mi := &file_main_proto_msgTypes[163] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8250,7 +8815,7 @@ func (x *GetScreenTeamsReq) String() string { func (*GetScreenTeamsReq) ProtoMessage() {} func (x *GetScreenTeamsReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[154] + mi := &file_main_proto_msgTypes[163] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8263,7 +8828,7 @@ func (x *GetScreenTeamsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScreenTeamsReq.ProtoReflect.Descriptor instead. func (*GetScreenTeamsReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{154} + return file_main_proto_rawDescGZIP(), []int{163} } func (x *GetScreenTeamsReq) GetScreenID() string { @@ -8289,7 +8854,7 @@ type GetScreenTeamsRsp struct { func (x *GetScreenTeamsRsp) Reset() { *x = GetScreenTeamsRsp{} - mi := &file_main_proto_msgTypes[155] + mi := &file_main_proto_msgTypes[164] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8301,7 +8866,7 @@ func (x *GetScreenTeamsRsp) String() string { func (*GetScreenTeamsRsp) ProtoMessage() {} func (x *GetScreenTeamsRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[155] + mi := &file_main_proto_msgTypes[164] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8314,7 +8879,7 @@ func (x *GetScreenTeamsRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScreenTeamsRsp.ProtoReflect.Descriptor instead. func (*GetScreenTeamsRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{155} + return file_main_proto_rawDescGZIP(), []int{164} } func (x *GetScreenTeamsRsp) GetTeams() []*ScreenTeam { @@ -8334,7 +8899,7 @@ type GetScreenResultsReq struct { func (x *GetScreenResultsReq) Reset() { *x = GetScreenResultsReq{} - mi := &file_main_proto_msgTypes[156] + mi := &file_main_proto_msgTypes[165] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8346,7 +8911,7 @@ func (x *GetScreenResultsReq) String() string { func (*GetScreenResultsReq) ProtoMessage() {} func (x *GetScreenResultsReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[156] + mi := &file_main_proto_msgTypes[165] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8359,7 +8924,7 @@ func (x *GetScreenResultsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScreenResultsReq.ProtoReflect.Descriptor instead. func (*GetScreenResultsReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{156} + return file_main_proto_rawDescGZIP(), []int{165} } func (x *GetScreenResultsReq) GetScreenID() string { @@ -8386,7 +8951,7 @@ type GetScreenResultsRsp struct { func (x *GetScreenResultsRsp) Reset() { *x = GetScreenResultsRsp{} - mi := &file_main_proto_msgTypes[157] + mi := &file_main_proto_msgTypes[166] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8398,7 +8963,7 @@ func (x *GetScreenResultsRsp) String() string { func (*GetScreenResultsRsp) ProtoMessage() {} func (x *GetScreenResultsRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[157] + mi := &file_main_proto_msgTypes[166] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8411,7 +8976,7 @@ func (x *GetScreenResultsRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScreenResultsRsp.ProtoReflect.Descriptor instead. func (*GetScreenResultsRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{157} + return file_main_proto_rawDescGZIP(), []int{166} } func (x *GetScreenResultsRsp) GetQuestions() []*ResultsQuestion { @@ -8438,7 +9003,7 @@ type GetParticipationReq struct { func (x *GetParticipationReq) Reset() { *x = GetParticipationReq{} - mi := &file_main_proto_msgTypes[158] + mi := &file_main_proto_msgTypes[167] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8450,7 +9015,7 @@ func (x *GetParticipationReq) String() string { func (*GetParticipationReq) ProtoMessage() {} func (x *GetParticipationReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[158] + mi := &file_main_proto_msgTypes[167] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8463,7 +9028,7 @@ func (x *GetParticipationReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetParticipationReq.ProtoReflect.Descriptor instead. func (*GetParticipationReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{158} + return file_main_proto_rawDescGZIP(), []int{167} } func (x *GetParticipationReq) GetToken() string { @@ -8485,7 +9050,7 @@ type AnswerParticipationReq struct { func (x *AnswerParticipationReq) Reset() { *x = AnswerParticipationReq{} - mi := &file_main_proto_msgTypes[159] + mi := &file_main_proto_msgTypes[168] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8497,7 +9062,7 @@ func (x *AnswerParticipationReq) String() string { func (*AnswerParticipationReq) ProtoMessage() {} func (x *AnswerParticipationReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[159] + mi := &file_main_proto_msgTypes[168] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8510,7 +9075,7 @@ func (x *AnswerParticipationReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AnswerParticipationReq.ProtoReflect.Descriptor instead. func (*AnswerParticipationReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{159} + return file_main_proto_rawDescGZIP(), []int{168} } func (x *AnswerParticipationReq) GetToken() string { @@ -8548,7 +9113,7 @@ type ParticipationRsp struct { func (x *ParticipationRsp) Reset() { *x = ParticipationRsp{} - mi := &file_main_proto_msgTypes[160] + mi := &file_main_proto_msgTypes[169] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8560,7 +9125,7 @@ func (x *ParticipationRsp) String() string { func (*ParticipationRsp) ProtoMessage() {} func (x *ParticipationRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[160] + mi := &file_main_proto_msgTypes[169] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8573,7 +9138,7 @@ func (x *ParticipationRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use ParticipationRsp.ProtoReflect.Descriptor instead. func (*ParticipationRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{160} + return file_main_proto_rawDescGZIP(), []int{169} } func (x *ParticipationRsp) GetTeamName() string { @@ -8642,7 +9207,7 @@ type Team struct { func (x *Team) Reset() { *x = Team{} - mi := &file_main_proto_msgTypes[161] + mi := &file_main_proto_msgTypes[170] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8654,7 +9219,7 @@ func (x *Team) String() string { func (*Team) ProtoMessage() {} func (x *Team) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[161] + mi := &file_main_proto_msgTypes[170] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8667,7 +9232,7 @@ func (x *Team) ProtoReflect() protoreflect.Message { // Deprecated: Use Team.ProtoReflect.Descriptor instead. func (*Team) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{161} + return file_main_proto_rawDescGZIP(), []int{170} } func (x *Team) GetID() string { @@ -8763,7 +9328,7 @@ type GetGameReq struct { func (x *GetGameReq) Reset() { *x = GetGameReq{} - mi := &file_main_proto_msgTypes[162] + mi := &file_main_proto_msgTypes[171] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8775,7 +9340,7 @@ func (x *GetGameReq) String() string { func (*GetGameReq) ProtoMessage() {} func (x *GetGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[162] + mi := &file_main_proto_msgTypes[171] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8788,7 +9353,7 @@ func (x *GetGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameReq.ProtoReflect.Descriptor instead. func (*GetGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{162} + return file_main_proto_rawDescGZIP(), []int{171} } func (x *GetGameReq) GetID() int32 { @@ -8807,7 +9372,7 @@ type GetGameRsp struct { func (x *GetGameRsp) Reset() { *x = GetGameRsp{} - mi := &file_main_proto_msgTypes[163] + mi := &file_main_proto_msgTypes[172] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8819,7 +9384,7 @@ func (x *GetGameRsp) String() string { func (*GetGameRsp) ProtoMessage() {} func (x *GetGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[163] + mi := &file_main_proto_msgTypes[172] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8832,7 +9397,7 @@ func (x *GetGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameRsp.ProtoReflect.Descriptor instead. func (*GetGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{163} + return file_main_proto_rawDescGZIP(), []int{172} } func (x *GetGameRsp) GetGame() *Game { @@ -8851,7 +9416,7 @@ type GetGameAnswersReq struct { func (x *GetGameAnswersReq) Reset() { *x = GetGameAnswersReq{} - mi := &file_main_proto_msgTypes[164] + mi := &file_main_proto_msgTypes[173] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8863,7 +9428,7 @@ func (x *GetGameAnswersReq) String() string { func (*GetGameAnswersReq) ProtoMessage() {} func (x *GetGameAnswersReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[164] + mi := &file_main_proto_msgTypes[173] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8876,7 +9441,7 @@ func (x *GetGameAnswersReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameAnswersReq.ProtoReflect.Descriptor instead. func (*GetGameAnswersReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{164} + return file_main_proto_rawDescGZIP(), []int{173} } func (x *GetGameAnswersReq) GetGameID() int32 { @@ -8896,7 +9461,7 @@ type GetGameAnswersRsp struct { func (x *GetGameAnswersRsp) Reset() { *x = GetGameAnswersRsp{} - mi := &file_main_proto_msgTypes[165] + mi := &file_main_proto_msgTypes[174] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8908,7 +9473,7 @@ func (x *GetGameAnswersRsp) String() string { func (*GetGameAnswersRsp) ProtoMessage() {} func (x *GetGameAnswersRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[165] + mi := &file_main_proto_msgTypes[174] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8921,7 +9486,7 @@ func (x *GetGameAnswersRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameAnswersRsp.ProtoReflect.Descriptor instead. func (*GetGameAnswersRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{165} + return file_main_proto_rawDescGZIP(), []int{174} } func (x *GetGameAnswersRsp) GetQuestions() []*Question { @@ -8947,7 +9512,7 @@ type GetGameResultsReq struct { func (x *GetGameResultsReq) Reset() { *x = GetGameResultsReq{} - mi := &file_main_proto_msgTypes[166] + mi := &file_main_proto_msgTypes[175] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8959,7 +9524,7 @@ func (x *GetGameResultsReq) String() string { func (*GetGameResultsReq) ProtoMessage() {} func (x *GetGameResultsReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[166] + mi := &file_main_proto_msgTypes[175] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8972,7 +9537,7 @@ func (x *GetGameResultsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameResultsReq.ProtoReflect.Descriptor instead. func (*GetGameResultsReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{166} + return file_main_proto_rawDescGZIP(), []int{175} } func (x *GetGameResultsReq) GetGameID() int32 { @@ -8994,7 +9559,7 @@ type ResultsQuestion struct { func (x *ResultsQuestion) Reset() { *x = ResultsQuestion{} - mi := &file_main_proto_msgTypes[167] + mi := &file_main_proto_msgTypes[176] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9006,7 +9571,7 @@ func (x *ResultsQuestion) String() string { func (*ResultsQuestion) ProtoMessage() {} func (x *ResultsQuestion) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[167] + mi := &file_main_proto_msgTypes[176] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9019,7 +9584,7 @@ func (x *ResultsQuestion) ProtoReflect() protoreflect.Message { // Deprecated: Use ResultsQuestion.ProtoReflect.Descriptor instead. func (*ResultsQuestion) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{167} + return file_main_proto_rawDescGZIP(), []int{176} } func (x *ResultsQuestion) GetCode() string { @@ -9055,7 +9620,7 @@ type TeamResult struct { func (x *TeamResult) Reset() { *x = TeamResult{} - mi := &file_main_proto_msgTypes[168] + mi := &file_main_proto_msgTypes[177] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9067,7 +9632,7 @@ func (x *TeamResult) String() string { func (*TeamResult) ProtoMessage() {} func (x *TeamResult) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[168] + mi := &file_main_proto_msgTypes[177] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9080,7 +9645,7 @@ func (x *TeamResult) ProtoReflect() protoreflect.Message { // Deprecated: Use TeamResult.ProtoReflect.Descriptor instead. func (*TeamResult) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{168} + return file_main_proto_rawDescGZIP(), []int{177} } func (x *TeamResult) GetTeam() *Team { @@ -9128,7 +9693,7 @@ type GetGameResultsRsp struct { func (x *GetGameResultsRsp) Reset() { *x = GetGameResultsRsp{} - mi := &file_main_proto_msgTypes[169] + mi := &file_main_proto_msgTypes[178] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9140,7 +9705,7 @@ func (x *GetGameResultsRsp) String() string { func (*GetGameResultsRsp) ProtoMessage() {} func (x *GetGameResultsRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[169] + mi := &file_main_proto_msgTypes[178] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9153,7 +9718,7 @@ func (x *GetGameResultsRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameResultsRsp.ProtoReflect.Descriptor instead. func (*GetGameResultsRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{169} + return file_main_proto_rawDescGZIP(), []int{178} } func (x *GetGameResultsRsp) GetQuestions() []*ResultsQuestion { @@ -9188,7 +9753,7 @@ type GameReview struct { func (x *GameReview) Reset() { *x = GameReview{} - mi := &file_main_proto_msgTypes[170] + mi := &file_main_proto_msgTypes[179] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9200,7 +9765,7 @@ func (x *GameReview) String() string { func (*GameReview) ProtoMessage() {} func (x *GameReview) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[170] + mi := &file_main_proto_msgTypes[179] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9213,7 +9778,7 @@ func (x *GameReview) ProtoReflect() protoreflect.Message { // Deprecated: Use GameReview.ProtoReflect.Descriptor instead. func (*GameReview) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{170} + return file_main_proto_rawDescGZIP(), []int{179} } func (x *GameReview) GetID() int32 { @@ -9300,7 +9865,7 @@ type CreateGameReviewReq struct { func (x *CreateGameReviewReq) Reset() { *x = CreateGameReviewReq{} - mi := &file_main_proto_msgTypes[171] + mi := &file_main_proto_msgTypes[180] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9312,7 +9877,7 @@ func (x *CreateGameReviewReq) String() string { func (*CreateGameReviewReq) ProtoMessage() {} func (x *CreateGameReviewReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[171] + mi := &file_main_proto_msgTypes[180] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9325,7 +9890,7 @@ func (x *CreateGameReviewReq) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateGameReviewReq.ProtoReflect.Descriptor instead. func (*CreateGameReviewReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{171} + return file_main_proto_rawDescGZIP(), []int{180} } func (x *CreateGameReviewReq) GetGameID() int32 { @@ -9379,7 +9944,7 @@ type CreateGameReviewRsp struct { func (x *CreateGameReviewRsp) Reset() { *x = CreateGameReviewRsp{} - mi := &file_main_proto_msgTypes[172] + mi := &file_main_proto_msgTypes[181] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9391,7 +9956,7 @@ func (x *CreateGameReviewRsp) String() string { func (*CreateGameReviewRsp) ProtoMessage() {} func (x *CreateGameReviewRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[172] + mi := &file_main_proto_msgTypes[181] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9404,7 +9969,7 @@ func (x *CreateGameReviewRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateGameReviewRsp.ProtoReflect.Descriptor instead. func (*CreateGameReviewRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{172} + return file_main_proto_rawDescGZIP(), []int{181} } func (x *CreateGameReviewRsp) GetReview() *GameReview { @@ -9423,7 +9988,7 @@ type GetGameReviewsReq struct { func (x *GetGameReviewsReq) Reset() { *x = GetGameReviewsReq{} - mi := &file_main_proto_msgTypes[173] + mi := &file_main_proto_msgTypes[182] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9435,7 +10000,7 @@ func (x *GetGameReviewsReq) String() string { func (*GetGameReviewsReq) ProtoMessage() {} func (x *GetGameReviewsReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[173] + mi := &file_main_proto_msgTypes[182] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9448,7 +10013,7 @@ func (x *GetGameReviewsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameReviewsReq.ProtoReflect.Descriptor instead. func (*GetGameReviewsReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{173} + return file_main_proto_rawDescGZIP(), []int{182} } func (x *GetGameReviewsReq) GetGameID() int32 { @@ -9467,7 +10032,7 @@ type GetScenarioReviewsReq struct { func (x *GetScenarioReviewsReq) Reset() { *x = GetScenarioReviewsReq{} - mi := &file_main_proto_msgTypes[174] + mi := &file_main_proto_msgTypes[183] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9479,7 +10044,7 @@ func (x *GetScenarioReviewsReq) String() string { func (*GetScenarioReviewsReq) ProtoMessage() {} func (x *GetScenarioReviewsReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[174] + mi := &file_main_proto_msgTypes[183] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9492,7 +10057,7 @@ func (x *GetScenarioReviewsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetScenarioReviewsReq.ProtoReflect.Descriptor instead. func (*GetScenarioReviewsReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{174} + return file_main_proto_rawDescGZIP(), []int{183} } func (x *GetScenarioReviewsReq) GetScenarioID() int32 { @@ -9510,7 +10075,7 @@ type GetReviewsForModerationReq struct { func (x *GetReviewsForModerationReq) Reset() { *x = GetReviewsForModerationReq{} - mi := &file_main_proto_msgTypes[175] + mi := &file_main_proto_msgTypes[184] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9522,7 +10087,7 @@ func (x *GetReviewsForModerationReq) String() string { func (*GetReviewsForModerationReq) ProtoMessage() {} func (x *GetReviewsForModerationReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[175] + mi := &file_main_proto_msgTypes[184] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9535,7 +10100,7 @@ func (x *GetReviewsForModerationReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetReviewsForModerationReq.ProtoReflect.Descriptor instead. func (*GetReviewsForModerationReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{175} + return file_main_proto_rawDescGZIP(), []int{184} } type GetGameReviewsRsp struct { @@ -9549,7 +10114,7 @@ type GetGameReviewsRsp struct { func (x *GetGameReviewsRsp) Reset() { *x = GetGameReviewsRsp{} - mi := &file_main_proto_msgTypes[176] + mi := &file_main_proto_msgTypes[185] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9561,7 +10126,7 @@ func (x *GetGameReviewsRsp) String() string { func (*GetGameReviewsRsp) ProtoMessage() {} func (x *GetGameReviewsRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[176] + mi := &file_main_proto_msgTypes[185] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9574,7 +10139,7 @@ func (x *GetGameReviewsRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameReviewsRsp.ProtoReflect.Descriptor instead. func (*GetGameReviewsRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{176} + return file_main_proto_rawDescGZIP(), []int{185} } func (x *GetGameReviewsRsp) GetAverageRating() float64 { @@ -9608,7 +10173,7 @@ type ModerateGameReviewReq struct { func (x *ModerateGameReviewReq) Reset() { *x = ModerateGameReviewReq{} - mi := &file_main_proto_msgTypes[177] + mi := &file_main_proto_msgTypes[186] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9620,7 +10185,7 @@ func (x *ModerateGameReviewReq) String() string { func (*ModerateGameReviewReq) ProtoMessage() {} func (x *ModerateGameReviewReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[177] + mi := &file_main_proto_msgTypes[186] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9633,7 +10198,7 @@ func (x *ModerateGameReviewReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ModerateGameReviewReq.ProtoReflect.Descriptor instead. func (*ModerateGameReviewReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{177} + return file_main_proto_rawDescGZIP(), []int{186} } func (x *ModerateGameReviewReq) GetID() int32 { @@ -9659,7 +10224,7 @@ type ModerateGameReviewRsp struct { func (x *ModerateGameReviewRsp) Reset() { *x = ModerateGameReviewRsp{} - mi := &file_main_proto_msgTypes[178] + mi := &file_main_proto_msgTypes[187] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9671,7 +10236,7 @@ func (x *ModerateGameReviewRsp) String() string { func (*ModerateGameReviewRsp) ProtoMessage() {} func (x *ModerateGameReviewRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[178] + mi := &file_main_proto_msgTypes[187] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9684,7 +10249,7 @@ func (x *ModerateGameReviewRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use ModerateGameReviewRsp.ProtoReflect.Descriptor instead. func (*ModerateGameReviewRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{178} + return file_main_proto_rawDescGZIP(), []int{187} } func (x *ModerateGameReviewRsp) GetReview() *GameReview { @@ -9711,7 +10276,7 @@ type UpdateGameReq struct { func (x *UpdateGameReq) Reset() { *x = UpdateGameReq{} - mi := &file_main_proto_msgTypes[179] + mi := &file_main_proto_msgTypes[188] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9723,7 +10288,7 @@ func (x *UpdateGameReq) String() string { func (*UpdateGameReq) ProtoMessage() {} func (x *UpdateGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[179] + mi := &file_main_proto_msgTypes[188] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9736,7 +10301,7 @@ func (x *UpdateGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGameReq.ProtoReflect.Descriptor instead. func (*UpdateGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{179} + return file_main_proto_rawDescGZIP(), []int{188} } func (x *UpdateGameReq) GetID() int32 { @@ -9810,7 +10375,7 @@ type UpdateGameRsp struct { func (x *UpdateGameRsp) Reset() { *x = UpdateGameRsp{} - mi := &file_main_proto_msgTypes[180] + mi := &file_main_proto_msgTypes[189] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9822,7 +10387,7 @@ func (x *UpdateGameRsp) String() string { func (*UpdateGameRsp) ProtoMessage() {} func (x *UpdateGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[180] + mi := &file_main_proto_msgTypes[189] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9835,7 +10400,7 @@ func (x *UpdateGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGameRsp.ProtoReflect.Descriptor instead. func (*UpdateGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{180} + return file_main_proto_rawDescGZIP(), []int{189} } type StartGameReq struct { @@ -9847,7 +10412,7 @@ type StartGameReq struct { func (x *StartGameReq) Reset() { *x = StartGameReq{} - mi := &file_main_proto_msgTypes[181] + mi := &file_main_proto_msgTypes[190] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9859,7 +10424,7 @@ func (x *StartGameReq) String() string { func (*StartGameReq) ProtoMessage() {} func (x *StartGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[181] + mi := &file_main_proto_msgTypes[190] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9872,7 +10437,7 @@ func (x *StartGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use StartGameReq.ProtoReflect.Descriptor instead. func (*StartGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{181} + return file_main_proto_rawDescGZIP(), []int{190} } func (x *StartGameReq) GetID() int32 { @@ -9890,7 +10455,7 @@ type StartGameRsp struct { func (x *StartGameRsp) Reset() { *x = StartGameRsp{} - mi := &file_main_proto_msgTypes[182] + mi := &file_main_proto_msgTypes[191] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9902,7 +10467,7 @@ func (x *StartGameRsp) String() string { func (*StartGameRsp) ProtoMessage() {} func (x *StartGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[182] + mi := &file_main_proto_msgTypes[191] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9915,7 +10480,7 @@ func (x *StartGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use StartGameRsp.ProtoReflect.Descriptor instead. func (*StartGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{182} + return file_main_proto_rawDescGZIP(), []int{191} } type PauseGameReq struct { @@ -9927,7 +10492,7 @@ type PauseGameReq struct { func (x *PauseGameReq) Reset() { *x = PauseGameReq{} - mi := &file_main_proto_msgTypes[183] + mi := &file_main_proto_msgTypes[192] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9939,7 +10504,7 @@ func (x *PauseGameReq) String() string { func (*PauseGameReq) ProtoMessage() {} func (x *PauseGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[183] + mi := &file_main_proto_msgTypes[192] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9952,7 +10517,7 @@ func (x *PauseGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use PauseGameReq.ProtoReflect.Descriptor instead. func (*PauseGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{183} + return file_main_proto_rawDescGZIP(), []int{192} } func (x *PauseGameReq) GetID() int32 { @@ -9970,7 +10535,7 @@ type PauseGameRsp struct { func (x *PauseGameRsp) Reset() { *x = PauseGameRsp{} - mi := &file_main_proto_msgTypes[184] + mi := &file_main_proto_msgTypes[193] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9982,7 +10547,7 @@ func (x *PauseGameRsp) String() string { func (*PauseGameRsp) ProtoMessage() {} func (x *PauseGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[184] + mi := &file_main_proto_msgTypes[193] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9995,7 +10560,7 @@ func (x *PauseGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use PauseGameRsp.ProtoReflect.Descriptor instead. func (*PauseGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{184} + return file_main_proto_rawDescGZIP(), []int{193} } type PlayGameReq struct { @@ -10007,7 +10572,7 @@ type PlayGameReq struct { func (x *PlayGameReq) Reset() { *x = PlayGameReq{} - mi := &file_main_proto_msgTypes[185] + mi := &file_main_proto_msgTypes[194] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10019,7 +10584,7 @@ func (x *PlayGameReq) String() string { func (*PlayGameReq) ProtoMessage() {} func (x *PlayGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[185] + mi := &file_main_proto_msgTypes[194] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10032,7 +10597,7 @@ func (x *PlayGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayGameReq.ProtoReflect.Descriptor instead. func (*PlayGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{185} + return file_main_proto_rawDescGZIP(), []int{194} } func (x *PlayGameReq) GetID() int32 { @@ -10050,7 +10615,7 @@ type PlayGameRsp struct { func (x *PlayGameRsp) Reset() { *x = PlayGameRsp{} - mi := &file_main_proto_msgTypes[186] + mi := &file_main_proto_msgTypes[195] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10062,7 +10627,7 @@ func (x *PlayGameRsp) String() string { func (*PlayGameRsp) ProtoMessage() {} func (x *PlayGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[186] + mi := &file_main_proto_msgTypes[195] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10075,7 +10640,7 @@ func (x *PlayGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayGameRsp.ProtoReflect.Descriptor instead. func (*PlayGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{186} + return file_main_proto_rawDescGZIP(), []int{195} } type FinishGameReq struct { @@ -10087,7 +10652,7 @@ type FinishGameReq struct { func (x *FinishGameReq) Reset() { *x = FinishGameReq{} - mi := &file_main_proto_msgTypes[187] + mi := &file_main_proto_msgTypes[196] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10099,7 +10664,7 @@ func (x *FinishGameReq) String() string { func (*FinishGameReq) ProtoMessage() {} func (x *FinishGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[187] + mi := &file_main_proto_msgTypes[196] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10112,7 +10677,7 @@ func (x *FinishGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use FinishGameReq.ProtoReflect.Descriptor instead. func (*FinishGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{187} + return file_main_proto_rawDescGZIP(), []int{196} } func (x *FinishGameReq) GetID() int32 { @@ -10130,7 +10695,7 @@ type FinishGameRsp struct { func (x *FinishGameRsp) Reset() { *x = FinishGameRsp{} - mi := &file_main_proto_msgTypes[188] + mi := &file_main_proto_msgTypes[197] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10142,7 +10707,7 @@ func (x *FinishGameRsp) String() string { func (*FinishGameRsp) ProtoMessage() {} func (x *FinishGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[188] + mi := &file_main_proto_msgTypes[197] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10155,7 +10720,7 @@ func (x *FinishGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use FinishGameRsp.ProtoReflect.Descriptor instead. func (*FinishGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{188} + return file_main_proto_rawDescGZIP(), []int{197} } type ResetGameReq struct { @@ -10167,7 +10732,7 @@ type ResetGameReq struct { func (x *ResetGameReq) Reset() { *x = ResetGameReq{} - mi := &file_main_proto_msgTypes[189] + mi := &file_main_proto_msgTypes[198] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10179,7 +10744,7 @@ func (x *ResetGameReq) String() string { func (*ResetGameReq) ProtoMessage() {} func (x *ResetGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[189] + mi := &file_main_proto_msgTypes[198] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10192,7 +10757,7 @@ func (x *ResetGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetGameReq.ProtoReflect.Descriptor instead. func (*ResetGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{189} + return file_main_proto_rawDescGZIP(), []int{198} } func (x *ResetGameReq) GetID() int32 { @@ -10210,7 +10775,7 @@ type ResetGameRsp struct { func (x *ResetGameRsp) Reset() { *x = ResetGameRsp{} - mi := &file_main_proto_msgTypes[190] + mi := &file_main_proto_msgTypes[199] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10222,7 +10787,7 @@ func (x *ResetGameRsp) String() string { func (*ResetGameRsp) ProtoMessage() {} func (x *ResetGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[190] + mi := &file_main_proto_msgTypes[199] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10235,7 +10800,7 @@ func (x *ResetGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetGameRsp.ProtoReflect.Descriptor instead. func (*ResetGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{190} + return file_main_proto_rawDescGZIP(), []int{199} } type DeleteGameReq struct { @@ -10247,7 +10812,7 @@ type DeleteGameReq struct { func (x *DeleteGameReq) Reset() { *x = DeleteGameReq{} - mi := &file_main_proto_msgTypes[191] + mi := &file_main_proto_msgTypes[200] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10259,7 +10824,7 @@ func (x *DeleteGameReq) String() string { func (*DeleteGameReq) ProtoMessage() {} func (x *DeleteGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[191] + mi := &file_main_proto_msgTypes[200] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10272,7 +10837,7 @@ func (x *DeleteGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteGameReq.ProtoReflect.Descriptor instead. func (*DeleteGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{191} + return file_main_proto_rawDescGZIP(), []int{200} } func (x *DeleteGameReq) GetID() int32 { @@ -10290,7 +10855,7 @@ type DeleteGameRsp struct { func (x *DeleteGameRsp) Reset() { *x = DeleteGameRsp{} - mi := &file_main_proto_msgTypes[192] + mi := &file_main_proto_msgTypes[201] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10302,7 +10867,7 @@ func (x *DeleteGameRsp) String() string { func (*DeleteGameRsp) ProtoMessage() {} func (x *DeleteGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[192] + mi := &file_main_proto_msgTypes[201] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10315,7 +10880,7 @@ func (x *DeleteGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteGameRsp.ProtoReflect.Descriptor instead. func (*DeleteGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{192} + return file_main_proto_rawDescGZIP(), []int{201} } type AddTeamReq struct { @@ -10330,7 +10895,7 @@ type AddTeamReq struct { func (x *AddTeamReq) Reset() { *x = AddTeamReq{} - mi := &file_main_proto_msgTypes[193] + mi := &file_main_proto_msgTypes[202] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10342,7 +10907,7 @@ func (x *AddTeamReq) String() string { func (*AddTeamReq) ProtoMessage() {} func (x *AddTeamReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[193] + mi := &file_main_proto_msgTypes[202] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10355,7 +10920,7 @@ func (x *AddTeamReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AddTeamReq.ProtoReflect.Descriptor instead. func (*AddTeamReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{193} + return file_main_proto_rawDescGZIP(), []int{202} } func (x *AddTeamReq) GetGameID() int32 { @@ -10396,7 +10961,7 @@ type AddTeamRsp struct { func (x *AddTeamRsp) Reset() { *x = AddTeamRsp{} - mi := &file_main_proto_msgTypes[194] + mi := &file_main_proto_msgTypes[203] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10408,7 +10973,7 @@ func (x *AddTeamRsp) String() string { func (*AddTeamRsp) ProtoMessage() {} func (x *AddTeamRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[194] + mi := &file_main_proto_msgTypes[203] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10421,7 +10986,7 @@ func (x *AddTeamRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use AddTeamRsp.ProtoReflect.Descriptor instead. func (*AddTeamRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{194} + return file_main_proto_rawDescGZIP(), []int{203} } func (x *AddTeamRsp) GetID() string { @@ -10448,7 +11013,7 @@ type UpdateTeamReq struct { func (x *UpdateTeamReq) Reset() { *x = UpdateTeamReq{} - mi := &file_main_proto_msgTypes[195] + mi := &file_main_proto_msgTypes[204] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10460,7 +11025,7 @@ func (x *UpdateTeamReq) String() string { func (*UpdateTeamReq) ProtoMessage() {} func (x *UpdateTeamReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[195] + mi := &file_main_proto_msgTypes[204] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10473,7 +11038,7 @@ func (x *UpdateTeamReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateTeamReq.ProtoReflect.Descriptor instead. func (*UpdateTeamReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{195} + return file_main_proto_rawDescGZIP(), []int{204} } func (x *UpdateTeamReq) GetID() string { @@ -10498,7 +11063,7 @@ type UpdateTeamRsp struct { func (x *UpdateTeamRsp) Reset() { *x = UpdateTeamRsp{} - mi := &file_main_proto_msgTypes[196] + mi := &file_main_proto_msgTypes[205] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10510,7 +11075,7 @@ func (x *UpdateTeamRsp) String() string { func (*UpdateTeamRsp) ProtoMessage() {} func (x *UpdateTeamRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[196] + mi := &file_main_proto_msgTypes[205] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10523,7 +11088,7 @@ func (x *UpdateTeamRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateTeamRsp.ProtoReflect.Descriptor instead. func (*UpdateTeamRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{196} + return file_main_proto_rawDescGZIP(), []int{205} } type DeleteTeamReq struct { @@ -10535,7 +11100,7 @@ type DeleteTeamReq struct { func (x *DeleteTeamReq) Reset() { *x = DeleteTeamReq{} - mi := &file_main_proto_msgTypes[197] + mi := &file_main_proto_msgTypes[206] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10547,7 +11112,7 @@ func (x *DeleteTeamReq) String() string { func (*DeleteTeamReq) ProtoMessage() {} func (x *DeleteTeamReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[197] + mi := &file_main_proto_msgTypes[206] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10560,7 +11125,7 @@ func (x *DeleteTeamReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTeamReq.ProtoReflect.Descriptor instead. func (*DeleteTeamReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{197} + return file_main_proto_rawDescGZIP(), []int{206} } func (x *DeleteTeamReq) GetID() string { @@ -10578,7 +11143,7 @@ type DeleteTeamRsp struct { func (x *DeleteTeamRsp) Reset() { *x = DeleteTeamRsp{} - mi := &file_main_proto_msgTypes[198] + mi := &file_main_proto_msgTypes[207] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10590,7 +11155,7 @@ func (x *DeleteTeamRsp) String() string { func (*DeleteTeamRsp) ProtoMessage() {} func (x *DeleteTeamRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[198] + mi := &file_main_proto_msgTypes[207] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10603,7 +11168,7 @@ func (x *DeleteTeamRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTeamRsp.ProtoReflect.Descriptor instead. func (*DeleteTeamRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{198} + return file_main_proto_rawDescGZIP(), []int{207} } type GiveTeamApplicationsReq struct { @@ -10616,7 +11181,7 @@ type GiveTeamApplicationsReq struct { func (x *GiveTeamApplicationsReq) Reset() { *x = GiveTeamApplicationsReq{} - mi := &file_main_proto_msgTypes[199] + mi := &file_main_proto_msgTypes[208] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10628,7 +11193,7 @@ func (x *GiveTeamApplicationsReq) String() string { func (*GiveTeamApplicationsReq) ProtoMessage() {} func (x *GiveTeamApplicationsReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[199] + mi := &file_main_proto_msgTypes[208] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10641,7 +11206,7 @@ func (x *GiveTeamApplicationsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GiveTeamApplicationsReq.ProtoReflect.Descriptor instead. func (*GiveTeamApplicationsReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{199} + return file_main_proto_rawDescGZIP(), []int{208} } func (x *GiveTeamApplicationsReq) GetID() string { @@ -10666,7 +11231,7 @@ type GiveTeamApplicationsRsp struct { func (x *GiveTeamApplicationsRsp) Reset() { *x = GiveTeamApplicationsRsp{} - mi := &file_main_proto_msgTypes[200] + mi := &file_main_proto_msgTypes[209] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10678,7 +11243,7 @@ func (x *GiveTeamApplicationsRsp) String() string { func (*GiveTeamApplicationsRsp) ProtoMessage() {} func (x *GiveTeamApplicationsRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[200] + mi := &file_main_proto_msgTypes[209] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10691,7 +11256,7 @@ func (x *GiveTeamApplicationsRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GiveTeamApplicationsRsp.ProtoReflect.Descriptor instead. func (*GiveTeamApplicationsRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{200} + return file_main_proto_rawDescGZIP(), []int{209} } type GetTeamStoryReq struct { @@ -10704,7 +11269,7 @@ type GetTeamStoryReq struct { func (x *GetTeamStoryReq) Reset() { *x = GetTeamStoryReq{} - mi := &file_main_proto_msgTypes[201] + mi := &file_main_proto_msgTypes[210] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10716,7 +11281,7 @@ func (x *GetTeamStoryReq) String() string { func (*GetTeamStoryReq) ProtoMessage() {} func (x *GetTeamStoryReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[201] + mi := &file_main_proto_msgTypes[210] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10729,7 +11294,7 @@ func (x *GetTeamStoryReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTeamStoryReq.ProtoReflect.Descriptor instead. func (*GetTeamStoryReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{201} + return file_main_proto_rawDescGZIP(), []int{210} } func (x *GetTeamStoryReq) GetID() string { @@ -10757,7 +11322,7 @@ type GetTeamStoryRsp struct { func (x *GetTeamStoryRsp) Reset() { *x = GetTeamStoryRsp{} - mi := &file_main_proto_msgTypes[202] + mi := &file_main_proto_msgTypes[211] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10769,7 +11334,7 @@ func (x *GetTeamStoryRsp) String() string { func (*GetTeamStoryRsp) ProtoMessage() {} func (x *GetTeamStoryRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[202] + mi := &file_main_proto_msgTypes[211] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10782,7 +11347,7 @@ func (x *GetTeamStoryRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTeamStoryRsp.ProtoReflect.Descriptor instead. func (*GetTeamStoryRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{202} + return file_main_proto_rawDescGZIP(), []int{211} } func (x *GetTeamStoryRsp) GetStory() *Story { @@ -10816,7 +11381,7 @@ type TeamAction struct { func (x *TeamAction) Reset() { *x = TeamAction{} - mi := &file_main_proto_msgTypes[203] + mi := &file_main_proto_msgTypes[212] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10828,7 +11393,7 @@ func (x *TeamAction) String() string { func (*TeamAction) ProtoMessage() {} func (x *TeamAction) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[203] + mi := &file_main_proto_msgTypes[212] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10841,7 +11406,7 @@ func (x *TeamAction) ProtoReflect() protoreflect.Message { // Deprecated: Use TeamAction.ProtoReflect.Descriptor instead. func (*TeamAction) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{203} + return file_main_proto_rawDescGZIP(), []int{212} } func (x *TeamAction) GetCode() string { @@ -10869,7 +11434,7 @@ type AddTeamActionReq struct { func (x *AddTeamActionReq) Reset() { *x = AddTeamActionReq{} - mi := &file_main_proto_msgTypes[204] + mi := &file_main_proto_msgTypes[213] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10881,7 +11446,7 @@ func (x *AddTeamActionReq) String() string { func (*AddTeamActionReq) ProtoMessage() {} func (x *AddTeamActionReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[204] + mi := &file_main_proto_msgTypes[213] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10894,7 +11459,7 @@ func (x *AddTeamActionReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AddTeamActionReq.ProtoReflect.Descriptor instead. func (*AddTeamActionReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{204} + return file_main_proto_rawDescGZIP(), []int{213} } func (x *AddTeamActionReq) GetID() string { @@ -10926,7 +11491,7 @@ type AddTeamActionRsp struct { func (x *AddTeamActionRsp) Reset() { *x = AddTeamActionRsp{} - mi := &file_main_proto_msgTypes[205] + mi := &file_main_proto_msgTypes[214] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10938,7 +11503,7 @@ func (x *AddTeamActionRsp) String() string { func (*AddTeamActionRsp) ProtoMessage() {} func (x *AddTeamActionRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[205] + mi := &file_main_proto_msgTypes[214] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10951,7 +11516,7 @@ func (x *AddTeamActionRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use AddTeamActionRsp.ProtoReflect.Descriptor instead. func (*AddTeamActionRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{205} + return file_main_proto_rawDescGZIP(), []int{214} } type DeleteLastTeamActionReq struct { @@ -10963,7 +11528,7 @@ type DeleteLastTeamActionReq struct { func (x *DeleteLastTeamActionReq) Reset() { *x = DeleteLastTeamActionReq{} - mi := &file_main_proto_msgTypes[206] + mi := &file_main_proto_msgTypes[215] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10975,7 +11540,7 @@ func (x *DeleteLastTeamActionReq) String() string { func (*DeleteLastTeamActionReq) ProtoMessage() {} func (x *DeleteLastTeamActionReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[206] + mi := &file_main_proto_msgTypes[215] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10988,7 +11553,7 @@ func (x *DeleteLastTeamActionReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteLastTeamActionReq.ProtoReflect.Descriptor instead. func (*DeleteLastTeamActionReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{206} + return file_main_proto_rawDescGZIP(), []int{215} } func (x *DeleteLastTeamActionReq) GetID() string { @@ -11006,7 +11571,7 @@ type DeleteLastTeamActionRsp struct { func (x *DeleteLastTeamActionRsp) Reset() { *x = DeleteLastTeamActionRsp{} - mi := &file_main_proto_msgTypes[207] + mi := &file_main_proto_msgTypes[216] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11018,7 +11583,7 @@ func (x *DeleteLastTeamActionRsp) String() string { func (*DeleteLastTeamActionRsp) ProtoMessage() {} func (x *DeleteLastTeamActionRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[207] + mi := &file_main_proto_msgTypes[216] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11031,7 +11596,7 @@ func (x *DeleteLastTeamActionRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteLastTeamActionRsp.ProtoReflect.Descriptor instead. func (*DeleteLastTeamActionRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{207} + return file_main_proto_rawDescGZIP(), []int{216} } type GetTeamAnswersReq struct { @@ -11044,7 +11609,7 @@ type GetTeamAnswersReq struct { func (x *GetTeamAnswersReq) Reset() { *x = GetTeamAnswersReq{} - mi := &file_main_proto_msgTypes[208] + mi := &file_main_proto_msgTypes[217] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11056,7 +11621,7 @@ func (x *GetTeamAnswersReq) String() string { func (*GetTeamAnswersReq) ProtoMessage() {} func (x *GetTeamAnswersReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[208] + mi := &file_main_proto_msgTypes[217] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11069,7 +11634,7 @@ func (x *GetTeamAnswersReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTeamAnswersReq.ProtoReflect.Descriptor instead. func (*GetTeamAnswersReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{208} + return file_main_proto_rawDescGZIP(), []int{217} } func (x *GetTeamAnswersReq) GetID() string { @@ -11095,7 +11660,7 @@ type GetTeamAnswersRsp struct { func (x *GetTeamAnswersRsp) Reset() { *x = GetTeamAnswersRsp{} - mi := &file_main_proto_msgTypes[209] + mi := &file_main_proto_msgTypes[218] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11107,7 +11672,7 @@ func (x *GetTeamAnswersRsp) String() string { func (*GetTeamAnswersRsp) ProtoMessage() {} func (x *GetTeamAnswersRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[209] + mi := &file_main_proto_msgTypes[218] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11120,7 +11685,7 @@ func (x *GetTeamAnswersRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTeamAnswersRsp.ProtoReflect.Descriptor instead. func (*GetTeamAnswersRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{209} + return file_main_proto_rawDescGZIP(), []int{218} } func (x *GetTeamAnswersRsp) GetAnswers() []*Answer { @@ -11141,7 +11706,7 @@ type SubmitTeamAnswersReq struct { func (x *SubmitTeamAnswersReq) Reset() { *x = SubmitTeamAnswersReq{} - mi := &file_main_proto_msgTypes[210] + mi := &file_main_proto_msgTypes[219] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11153,7 +11718,7 @@ func (x *SubmitTeamAnswersReq) String() string { func (*SubmitTeamAnswersReq) ProtoMessage() {} func (x *SubmitTeamAnswersReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[210] + mi := &file_main_proto_msgTypes[219] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11166,7 +11731,7 @@ func (x *SubmitTeamAnswersReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitTeamAnswersReq.ProtoReflect.Descriptor instead. func (*SubmitTeamAnswersReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{210} + return file_main_proto_rawDescGZIP(), []int{219} } func (x *SubmitTeamAnswersReq) GetID() string { @@ -11198,7 +11763,7 @@ type SubmitTeamAnswersRsp struct { func (x *SubmitTeamAnswersRsp) Reset() { *x = SubmitTeamAnswersRsp{} - mi := &file_main_proto_msgTypes[211] + mi := &file_main_proto_msgTypes[220] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11210,7 +11775,7 @@ func (x *SubmitTeamAnswersRsp) String() string { func (*SubmitTeamAnswersRsp) ProtoMessage() {} func (x *SubmitTeamAnswersRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[211] + mi := &file_main_proto_msgTypes[220] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11223,7 +11788,7 @@ func (x *SubmitTeamAnswersRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitTeamAnswersRsp.ProtoReflect.Descriptor instead. func (*SubmitTeamAnswersRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{211} + return file_main_proto_rawDescGZIP(), []int{220} } type SetTeamAnswerScoreReq struct { @@ -11238,7 +11803,7 @@ type SetTeamAnswerScoreReq struct { func (x *SetTeamAnswerScoreReq) Reset() { *x = SetTeamAnswerScoreReq{} - mi := &file_main_proto_msgTypes[212] + mi := &file_main_proto_msgTypes[221] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11250,7 +11815,7 @@ func (x *SetTeamAnswerScoreReq) String() string { func (*SetTeamAnswerScoreReq) ProtoMessage() {} func (x *SetTeamAnswerScoreReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[212] + mi := &file_main_proto_msgTypes[221] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11263,7 +11828,7 @@ func (x *SetTeamAnswerScoreReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SetTeamAnswerScoreReq.ProtoReflect.Descriptor instead. func (*SetTeamAnswerScoreReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{212} + return file_main_proto_rawDescGZIP(), []int{221} } func (x *SetTeamAnswerScoreReq) GetID() string { @@ -11295,7 +11860,7 @@ type SetTeamAnswerScoreRsp struct { func (x *SetTeamAnswerScoreRsp) Reset() { *x = SetTeamAnswerScoreRsp{} - mi := &file_main_proto_msgTypes[213] + mi := &file_main_proto_msgTypes[222] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11307,7 +11872,7 @@ func (x *SetTeamAnswerScoreRsp) String() string { func (*SetTeamAnswerScoreRsp) ProtoMessage() {} func (x *SetTeamAnswerScoreRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[213] + mi := &file_main_proto_msgTypes[222] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11320,7 +11885,7 @@ func (x *SetTeamAnswerScoreRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use SetTeamAnswerScoreRsp.ProtoReflect.Descriptor instead. func (*SetTeamAnswerScoreRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{213} + return file_main_proto_rawDescGZIP(), []int{222} } type UpdateScenarioBackgroundReq struct { @@ -11333,7 +11898,7 @@ type UpdateScenarioBackgroundReq struct { func (x *UpdateScenarioBackgroundReq) Reset() { *x = UpdateScenarioBackgroundReq{} - mi := &file_main_proto_msgTypes[214] + mi := &file_main_proto_msgTypes[223] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11345,7 +11910,7 @@ func (x *UpdateScenarioBackgroundReq) String() string { func (*UpdateScenarioBackgroundReq) ProtoMessage() {} func (x *UpdateScenarioBackgroundReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[214] + mi := &file_main_proto_msgTypes[223] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11358,7 +11923,7 @@ func (x *UpdateScenarioBackgroundReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioBackgroundReq.ProtoReflect.Descriptor instead. func (*UpdateScenarioBackgroundReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{214} + return file_main_proto_rawDescGZIP(), []int{223} } func (x *UpdateScenarioBackgroundReq) GetID() int32 { @@ -11383,7 +11948,7 @@ type UpdateScenarioBackgroundRsp struct { func (x *UpdateScenarioBackgroundRsp) Reset() { *x = UpdateScenarioBackgroundRsp{} - mi := &file_main_proto_msgTypes[215] + mi := &file_main_proto_msgTypes[224] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11395,7 +11960,7 @@ func (x *UpdateScenarioBackgroundRsp) String() string { func (*UpdateScenarioBackgroundRsp) ProtoMessage() {} func (x *UpdateScenarioBackgroundRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[215] + mi := &file_main_proto_msgTypes[224] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11408,7 +11973,7 @@ func (x *UpdateScenarioBackgroundRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioBackgroundRsp.ProtoReflect.Descriptor instead. func (*UpdateScenarioBackgroundRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{215} + return file_main_proto_rawDescGZIP(), []int{224} } type IssueGameTicketsReq struct { @@ -11421,7 +11986,7 @@ type IssueGameTicketsReq struct { func (x *IssueGameTicketsReq) Reset() { *x = IssueGameTicketsReq{} - mi := &file_main_proto_msgTypes[216] + mi := &file_main_proto_msgTypes[225] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11433,7 +11998,7 @@ func (x *IssueGameTicketsReq) String() string { func (*IssueGameTicketsReq) ProtoMessage() {} func (x *IssueGameTicketsReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[216] + mi := &file_main_proto_msgTypes[225] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11446,7 +12011,7 @@ func (x *IssueGameTicketsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use IssueGameTicketsReq.ProtoReflect.Descriptor instead. func (*IssueGameTicketsReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{216} + return file_main_proto_rawDescGZIP(), []int{225} } func (x *IssueGameTicketsReq) GetGameID() int32 { @@ -11472,7 +12037,7 @@ type IssueGameTicketsRsp struct { func (x *IssueGameTicketsRsp) Reset() { *x = IssueGameTicketsRsp{} - mi := &file_main_proto_msgTypes[217] + mi := &file_main_proto_msgTypes[226] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11484,7 +12049,7 @@ func (x *IssueGameTicketsRsp) String() string { func (*IssueGameTicketsRsp) ProtoMessage() {} func (x *IssueGameTicketsRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[217] + mi := &file_main_proto_msgTypes[226] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11497,7 +12062,7 @@ func (x *IssueGameTicketsRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use IssueGameTicketsRsp.ProtoReflect.Descriptor instead. func (*IssueGameTicketsRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{217} + return file_main_proto_rawDescGZIP(), []int{226} } func (x *IssueGameTicketsRsp) GetTickets() []*Ticket { @@ -11517,7 +12082,7 @@ type Ticket struct { func (x *Ticket) Reset() { *x = Ticket{} - mi := &file_main_proto_msgTypes[218] + mi := &file_main_proto_msgTypes[227] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11529,7 +12094,7 @@ func (x *Ticket) String() string { func (*Ticket) ProtoMessage() {} func (x *Ticket) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[218] + mi := &file_main_proto_msgTypes[227] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11542,7 +12107,7 @@ func (x *Ticket) ProtoReflect() protoreflect.Message { // Deprecated: Use Ticket.ProtoReflect.Descriptor instead. func (*Ticket) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{218} + return file_main_proto_rawDescGZIP(), []int{227} } func (x *Ticket) GetID() int32 { @@ -11568,7 +12133,7 @@ type GetTicketReq struct { func (x *GetTicketReq) Reset() { *x = GetTicketReq{} - mi := &file_main_proto_msgTypes[219] + mi := &file_main_proto_msgTypes[228] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11580,7 +12145,7 @@ func (x *GetTicketReq) String() string { func (*GetTicketReq) ProtoMessage() {} func (x *GetTicketReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[219] + mi := &file_main_proto_msgTypes[228] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11593,7 +12158,7 @@ func (x *GetTicketReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTicketReq.ProtoReflect.Descriptor instead. func (*GetTicketReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{219} + return file_main_proto_rawDescGZIP(), []int{228} } func (x *GetTicketReq) GetToken() string { @@ -11612,7 +12177,7 @@ type GetTicketRsp struct { func (x *GetTicketRsp) Reset() { *x = GetTicketRsp{} - mi := &file_main_proto_msgTypes[220] + mi := &file_main_proto_msgTypes[229] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11624,7 +12189,7 @@ func (x *GetTicketRsp) String() string { func (*GetTicketRsp) ProtoMessage() {} func (x *GetTicketRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[220] + mi := &file_main_proto_msgTypes[229] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11637,7 +12202,7 @@ func (x *GetTicketRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTicketRsp.ProtoReflect.Descriptor instead. func (*GetTicketRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{220} + return file_main_proto_rawDescGZIP(), []int{229} } func (x *GetTicketRsp) GetTicket() *TicketPage { @@ -11656,7 +12221,7 @@ type AcceptTicketReq struct { func (x *AcceptTicketReq) Reset() { *x = AcceptTicketReq{} - mi := &file_main_proto_msgTypes[221] + mi := &file_main_proto_msgTypes[230] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11668,7 +12233,7 @@ func (x *AcceptTicketReq) String() string { func (*AcceptTicketReq) ProtoMessage() {} func (x *AcceptTicketReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[221] + mi := &file_main_proto_msgTypes[230] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11681,7 +12246,7 @@ func (x *AcceptTicketReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AcceptTicketReq.ProtoReflect.Descriptor instead. func (*AcceptTicketReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{221} + return file_main_proto_rawDescGZIP(), []int{230} } func (x *AcceptTicketReq) GetToken() string { @@ -11700,7 +12265,7 @@ type AcceptTicketRsp struct { func (x *AcceptTicketRsp) Reset() { *x = AcceptTicketRsp{} - mi := &file_main_proto_msgTypes[222] + mi := &file_main_proto_msgTypes[231] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11712,7 +12277,7 @@ func (x *AcceptTicketRsp) String() string { func (*AcceptTicketRsp) ProtoMessage() {} func (x *AcceptTicketRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[222] + mi := &file_main_proto_msgTypes[231] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11725,7 +12290,7 @@ func (x *AcceptTicketRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use AcceptTicketRsp.ProtoReflect.Descriptor instead. func (*AcceptTicketRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{222} + return file_main_proto_rawDescGZIP(), []int{231} } func (x *AcceptTicketRsp) GetTicket() *TicketPage { @@ -11751,7 +12316,7 @@ type TicketPage struct { func (x *TicketPage) Reset() { *x = TicketPage{} - mi := &file_main_proto_msgTypes[223] + mi := &file_main_proto_msgTypes[232] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11763,7 +12328,7 @@ func (x *TicketPage) String() string { func (*TicketPage) ProtoMessage() {} func (x *TicketPage) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[223] + mi := &file_main_proto_msgTypes[232] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11776,7 +12341,7 @@ func (x *TicketPage) ProtoReflect() protoreflect.Message { // Deprecated: Use TicketPage.ProtoReflect.Descriptor instead. func (*TicketPage) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{223} + return file_main_proto_rawDescGZIP(), []int{232} } func (x *TicketPage) GetID() int32 { @@ -11858,7 +12423,7 @@ type DeveloperTask struct { func (x *DeveloperTask) Reset() { *x = DeveloperTask{} - mi := &file_main_proto_msgTypes[224] + mi := &file_main_proto_msgTypes[233] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11870,7 +12435,7 @@ func (x *DeveloperTask) String() string { func (*DeveloperTask) ProtoMessage() {} func (x *DeveloperTask) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[224] + mi := &file_main_proto_msgTypes[233] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11883,7 +12448,7 @@ func (x *DeveloperTask) ProtoReflect() protoreflect.Message { // Deprecated: Use DeveloperTask.ProtoReflect.Descriptor instead. func (*DeveloperTask) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{224} + return file_main_proto_rawDescGZIP(), []int{233} } func (x *DeveloperTask) GetID() int32 { @@ -11973,7 +12538,7 @@ type TaskAssignee struct { func (x *TaskAssignee) Reset() { *x = TaskAssignee{} - mi := &file_main_proto_msgTypes[225] + mi := &file_main_proto_msgTypes[234] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11985,7 +12550,7 @@ func (x *TaskAssignee) String() string { func (*TaskAssignee) ProtoMessage() {} func (x *TaskAssignee) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[225] + mi := &file_main_proto_msgTypes[234] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11998,7 +12563,7 @@ func (x *TaskAssignee) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskAssignee.ProtoReflect.Descriptor instead. func (*TaskAssignee) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{225} + return file_main_proto_rawDescGZIP(), []int{234} } func (x *TaskAssignee) GetID() int32 { @@ -12023,7 +12588,7 @@ type GetTasksReq struct { func (x *GetTasksReq) Reset() { *x = GetTasksReq{} - mi := &file_main_proto_msgTypes[226] + mi := &file_main_proto_msgTypes[235] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12035,7 +12600,7 @@ func (x *GetTasksReq) String() string { func (*GetTasksReq) ProtoMessage() {} func (x *GetTasksReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[226] + mi := &file_main_proto_msgTypes[235] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12048,7 +12613,7 @@ func (x *GetTasksReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTasksReq.ProtoReflect.Descriptor instead. func (*GetTasksReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{226} + return file_main_proto_rawDescGZIP(), []int{235} } type GetTasksRsp struct { @@ -12060,7 +12625,7 @@ type GetTasksRsp struct { func (x *GetTasksRsp) Reset() { *x = GetTasksRsp{} - mi := &file_main_proto_msgTypes[227] + mi := &file_main_proto_msgTypes[236] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12072,7 +12637,7 @@ func (x *GetTasksRsp) String() string { func (*GetTasksRsp) ProtoMessage() {} func (x *GetTasksRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[227] + mi := &file_main_proto_msgTypes[236] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12085,7 +12650,7 @@ func (x *GetTasksRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTasksRsp.ProtoReflect.Descriptor instead. func (*GetTasksRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{227} + return file_main_proto_rawDescGZIP(), []int{236} } func (x *GetTasksRsp) GetTasks() []*DeveloperTask { @@ -12103,7 +12668,7 @@ type GetTaskAssigneesReq struct { func (x *GetTaskAssigneesReq) Reset() { *x = GetTaskAssigneesReq{} - mi := &file_main_proto_msgTypes[228] + mi := &file_main_proto_msgTypes[237] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12115,7 +12680,7 @@ func (x *GetTaskAssigneesReq) String() string { func (*GetTaskAssigneesReq) ProtoMessage() {} func (x *GetTaskAssigneesReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[228] + mi := &file_main_proto_msgTypes[237] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12128,7 +12693,7 @@ func (x *GetTaskAssigneesReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTaskAssigneesReq.ProtoReflect.Descriptor instead. func (*GetTaskAssigneesReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{228} + return file_main_proto_rawDescGZIP(), []int{237} } type GetTaskAssigneesRsp struct { @@ -12140,7 +12705,7 @@ type GetTaskAssigneesRsp struct { func (x *GetTaskAssigneesRsp) Reset() { *x = GetTaskAssigneesRsp{} - mi := &file_main_proto_msgTypes[229] + mi := &file_main_proto_msgTypes[238] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12152,7 +12717,7 @@ func (x *GetTaskAssigneesRsp) String() string { func (*GetTaskAssigneesRsp) ProtoMessage() {} func (x *GetTaskAssigneesRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[229] + mi := &file_main_proto_msgTypes[238] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12165,7 +12730,7 @@ func (x *GetTaskAssigneesRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTaskAssigneesRsp.ProtoReflect.Descriptor instead. func (*GetTaskAssigneesRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{229} + return file_main_proto_rawDescGZIP(), []int{238} } func (x *GetTaskAssigneesRsp) GetAssignees() []*TaskAssignee { @@ -12188,7 +12753,7 @@ type CreateTaskReq struct { func (x *CreateTaskReq) Reset() { *x = CreateTaskReq{} - mi := &file_main_proto_msgTypes[230] + mi := &file_main_proto_msgTypes[239] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12200,7 +12765,7 @@ func (x *CreateTaskReq) String() string { func (*CreateTaskReq) ProtoMessage() {} func (x *CreateTaskReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[230] + mi := &file_main_proto_msgTypes[239] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12213,7 +12778,7 @@ func (x *CreateTaskReq) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateTaskReq.ProtoReflect.Descriptor instead. func (*CreateTaskReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{230} + return file_main_proto_rawDescGZIP(), []int{239} } func (x *CreateTaskReq) GetTitle() string { @@ -12266,7 +12831,7 @@ type UpdateTaskReq struct { func (x *UpdateTaskReq) Reset() { *x = UpdateTaskReq{} - mi := &file_main_proto_msgTypes[231] + mi := &file_main_proto_msgTypes[240] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12278,7 +12843,7 @@ func (x *UpdateTaskReq) String() string { func (*UpdateTaskReq) ProtoMessage() {} func (x *UpdateTaskReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[231] + mi := &file_main_proto_msgTypes[240] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12291,7 +12856,7 @@ func (x *UpdateTaskReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateTaskReq.ProtoReflect.Descriptor instead. func (*UpdateTaskReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{231} + return file_main_proto_rawDescGZIP(), []int{240} } func (x *UpdateTaskReq) GetID() int32 { @@ -12354,7 +12919,7 @@ type SetTaskStatusReq struct { func (x *SetTaskStatusReq) Reset() { *x = SetTaskStatusReq{} - mi := &file_main_proto_msgTypes[232] + mi := &file_main_proto_msgTypes[241] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12366,7 +12931,7 @@ func (x *SetTaskStatusReq) String() string { func (*SetTaskStatusReq) ProtoMessage() {} func (x *SetTaskStatusReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[232] + mi := &file_main_proto_msgTypes[241] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12379,7 +12944,7 @@ func (x *SetTaskStatusReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SetTaskStatusReq.ProtoReflect.Descriptor instead. func (*SetTaskStatusReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{232} + return file_main_proto_rawDescGZIP(), []int{241} } func (x *SetTaskStatusReq) GetID() int32 { @@ -12413,7 +12978,7 @@ type DeleteTaskReq struct { func (x *DeleteTaskReq) Reset() { *x = DeleteTaskReq{} - mi := &file_main_proto_msgTypes[233] + mi := &file_main_proto_msgTypes[242] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12425,7 +12990,7 @@ func (x *DeleteTaskReq) String() string { func (*DeleteTaskReq) ProtoMessage() {} func (x *DeleteTaskReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[233] + mi := &file_main_proto_msgTypes[242] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12438,7 +13003,7 @@ func (x *DeleteTaskReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTaskReq.ProtoReflect.Descriptor instead. func (*DeleteTaskReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{233} + return file_main_proto_rawDescGZIP(), []int{242} } func (x *DeleteTaskReq) GetID() int32 { @@ -12464,7 +13029,7 @@ type TaskRsp struct { func (x *TaskRsp) Reset() { *x = TaskRsp{} - mi := &file_main_proto_msgTypes[234] + mi := &file_main_proto_msgTypes[243] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12476,7 +13041,7 @@ func (x *TaskRsp) String() string { func (*TaskRsp) ProtoMessage() {} func (x *TaskRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[234] + mi := &file_main_proto_msgTypes[243] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12489,7 +13054,7 @@ func (x *TaskRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskRsp.ProtoReflect.Descriptor instead. func (*TaskRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{234} + return file_main_proto_rawDescGZIP(), []int{243} } func (x *TaskRsp) GetTask() *DeveloperTask { @@ -12507,7 +13072,7 @@ type DeleteTaskRsp struct { func (x *DeleteTaskRsp) Reset() { *x = DeleteTaskRsp{} - mi := &file_main_proto_msgTypes[235] + mi := &file_main_proto_msgTypes[244] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12519,7 +13084,7 @@ func (x *DeleteTaskRsp) String() string { func (*DeleteTaskRsp) ProtoMessage() {} func (x *DeleteTaskRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[235] + mi := &file_main_proto_msgTypes[244] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12532,7 +13097,7 @@ func (x *DeleteTaskRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTaskRsp.ProtoReflect.Descriptor instead. func (*DeleteTaskRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{235} + return file_main_proto_rawDescGZIP(), []int{244} } type GameResultsPackageReq struct { @@ -12544,7 +13109,7 @@ type GameResultsPackageReq struct { func (x *GameResultsPackageReq) Reset() { *x = GameResultsPackageReq{} - mi := &file_main_proto_msgTypes[236] + mi := &file_main_proto_msgTypes[245] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12556,7 +13121,7 @@ func (x *GameResultsPackageReq) String() string { func (*GameResultsPackageReq) ProtoMessage() {} func (x *GameResultsPackageReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[236] + mi := &file_main_proto_msgTypes[245] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12569,7 +13134,7 @@ func (x *GameResultsPackageReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GameResultsPackageReq.ProtoReflect.Descriptor instead. func (*GameResultsPackageReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{236} + return file_main_proto_rawDescGZIP(), []int{245} } func (x *GameResultsPackageReq) GetID() int32 { @@ -12589,7 +13154,7 @@ type ApplyGameResultsPackageReq struct { func (x *ApplyGameResultsPackageReq) Reset() { *x = ApplyGameResultsPackageReq{} - mi := &file_main_proto_msgTypes[237] + mi := &file_main_proto_msgTypes[246] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12601,7 +13166,7 @@ func (x *ApplyGameResultsPackageReq) String() string { func (*ApplyGameResultsPackageReq) ProtoMessage() {} func (x *ApplyGameResultsPackageReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[237] + mi := &file_main_proto_msgTypes[246] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12614,7 +13179,7 @@ func (x *ApplyGameResultsPackageReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyGameResultsPackageReq.ProtoReflect.Descriptor instead. func (*ApplyGameResultsPackageReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{237} + return file_main_proto_rawDescGZIP(), []int{246} } func (x *ApplyGameResultsPackageReq) GetID() int32 { @@ -12642,7 +13207,7 @@ type GameResultsPackageRsp struct { func (x *GameResultsPackageRsp) Reset() { *x = GameResultsPackageRsp{} - mi := &file_main_proto_msgTypes[238] + mi := &file_main_proto_msgTypes[247] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12654,7 +13219,7 @@ func (x *GameResultsPackageRsp) String() string { func (*GameResultsPackageRsp) ProtoMessage() {} func (x *GameResultsPackageRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[238] + mi := &file_main_proto_msgTypes[247] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12667,7 +13232,7 @@ func (x *GameResultsPackageRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GameResultsPackageRsp.ProtoReflect.Descriptor instead. func (*GameResultsPackageRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{238} + return file_main_proto_rawDescGZIP(), []int{247} } func (x *GameResultsPackageRsp) GetGameID() int32 { @@ -12706,7 +13271,7 @@ type DeviceHeartbeatReq struct { func (x *DeviceHeartbeatReq) Reset() { *x = DeviceHeartbeatReq{} - mi := &file_main_proto_msgTypes[239] + mi := &file_main_proto_msgTypes[248] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12718,7 +13283,7 @@ func (x *DeviceHeartbeatReq) String() string { func (*DeviceHeartbeatReq) ProtoMessage() {} func (x *DeviceHeartbeatReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[239] + mi := &file_main_proto_msgTypes[248] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12731,7 +13296,7 @@ func (x *DeviceHeartbeatReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeviceHeartbeatReq.ProtoReflect.Descriptor instead. func (*DeviceHeartbeatReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{239} + return file_main_proto_rawDescGZIP(), []int{248} } func (x *DeviceHeartbeatReq) GetDeviceID() string { @@ -12793,7 +13358,7 @@ type DeviceHeartbeatRsp struct { func (x *DeviceHeartbeatRsp) Reset() { *x = DeviceHeartbeatRsp{} - mi := &file_main_proto_msgTypes[240] + mi := &file_main_proto_msgTypes[249] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12805,7 +13370,7 @@ func (x *DeviceHeartbeatRsp) String() string { func (*DeviceHeartbeatRsp) ProtoMessage() {} func (x *DeviceHeartbeatRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[240] + mi := &file_main_proto_msgTypes[249] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12818,7 +13383,7 @@ func (x *DeviceHeartbeatRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeviceHeartbeatRsp.ProtoReflect.Descriptor instead. func (*DeviceHeartbeatRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{240} + return file_main_proto_rawDescGZIP(), []int{249} } func (x *DeviceHeartbeatRsp) GetEnabled() bool { @@ -12844,7 +13409,7 @@ type GetDevicesReq struct { func (x *GetDevicesReq) Reset() { *x = GetDevicesReq{} - mi := &file_main_proto_msgTypes[241] + mi := &file_main_proto_msgTypes[250] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12856,7 +13421,7 @@ func (x *GetDevicesReq) String() string { func (*GetDevicesReq) ProtoMessage() {} func (x *GetDevicesReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[241] + mi := &file_main_proto_msgTypes[250] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12869,7 +13434,7 @@ func (x *GetDevicesReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDevicesReq.ProtoReflect.Descriptor instead. func (*GetDevicesReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{241} + return file_main_proto_rawDescGZIP(), []int{250} } func (x *GetDevicesReq) GetGameID() int32 { @@ -12890,7 +13455,7 @@ type GetDevicesRsp struct { func (x *GetDevicesRsp) Reset() { *x = GetDevicesRsp{} - mi := &file_main_proto_msgTypes[242] + mi := &file_main_proto_msgTypes[251] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12902,7 +13467,7 @@ func (x *GetDevicesRsp) String() string { func (*GetDevicesRsp) ProtoMessage() {} func (x *GetDevicesRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[242] + mi := &file_main_proto_msgTypes[251] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12915,7 +13480,7 @@ func (x *GetDevicesRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDevicesRsp.ProtoReflect.Descriptor instead. func (*GetDevicesRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{242} + return file_main_proto_rawDescGZIP(), []int{251} } func (x *GetDevicesRsp) GetDevices() []*VenueDevice { @@ -12952,7 +13517,7 @@ type VenueDevice struct { func (x *VenueDevice) Reset() { *x = VenueDevice{} - mi := &file_main_proto_msgTypes[243] + mi := &file_main_proto_msgTypes[252] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12964,7 +13529,7 @@ func (x *VenueDevice) String() string { func (*VenueDevice) ProtoMessage() {} func (x *VenueDevice) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[243] + mi := &file_main_proto_msgTypes[252] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12977,7 +13542,7 @@ func (x *VenueDevice) ProtoReflect() protoreflect.Message { // Deprecated: Use VenueDevice.ProtoReflect.Descriptor instead. func (*VenueDevice) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{243} + return file_main_proto_rawDescGZIP(), []int{252} } func (x *VenueDevice) GetID() string { @@ -13033,7 +13598,7 @@ type DeviceConnection struct { func (x *DeviceConnection) Reset() { *x = DeviceConnection{} - mi := &file_main_proto_msgTypes[244] + mi := &file_main_proto_msgTypes[253] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13045,7 +13610,7 @@ func (x *DeviceConnection) String() string { func (*DeviceConnection) ProtoMessage() {} func (x *DeviceConnection) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[244] + mi := &file_main_proto_msgTypes[253] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13058,7 +13623,7 @@ func (x *DeviceConnection) ProtoReflect() protoreflect.Message { // Deprecated: Use DeviceConnection.ProtoReflect.Descriptor instead. func (*DeviceConnection) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{244} + return file_main_proto_rawDescGZIP(), []int{253} } func (x *DeviceConnection) GetID() string { @@ -13144,7 +13709,7 @@ type VenueWiFi struct { func (x *VenueWiFi) Reset() { *x = VenueWiFi{} - mi := &file_main_proto_msgTypes[245] + mi := &file_main_proto_msgTypes[254] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13156,7 +13721,7 @@ func (x *VenueWiFi) String() string { func (*VenueWiFi) ProtoMessage() {} func (x *VenueWiFi) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[245] + mi := &file_main_proto_msgTypes[254] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13169,7 +13734,7 @@ func (x *VenueWiFi) ProtoReflect() protoreflect.Message { // Deprecated: Use VenueWiFi.ProtoReflect.Descriptor instead. func (*VenueWiFi) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{245} + return file_main_proto_rawDescGZIP(), []int{254} } func (x *VenueWiFi) GetEnabled() bool { @@ -13219,7 +13784,7 @@ type WiFiClient struct { func (x *WiFiClient) Reset() { *x = WiFiClient{} - mi := &file_main_proto_msgTypes[246] + mi := &file_main_proto_msgTypes[255] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13231,7 +13796,7 @@ func (x *WiFiClient) String() string { func (*WiFiClient) ProtoMessage() {} func (x *WiFiClient) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[246] + mi := &file_main_proto_msgTypes[255] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13244,7 +13809,7 @@ func (x *WiFiClient) ProtoReflect() protoreflect.Message { // Deprecated: Use WiFiClient.ProtoReflect.Descriptor instead. func (*WiFiClient) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{246} + return file_main_proto_rawDescGZIP(), []int{255} } func (x *WiFiClient) GetIP() string { @@ -13285,7 +13850,7 @@ type TeamReceiptReq struct { func (x *TeamReceiptReq) Reset() { *x = TeamReceiptReq{} - mi := &file_main_proto_msgTypes[247] + mi := &file_main_proto_msgTypes[256] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13297,7 +13862,7 @@ func (x *TeamReceiptReq) String() string { func (*TeamReceiptReq) ProtoMessage() {} func (x *TeamReceiptReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[247] + mi := &file_main_proto_msgTypes[256] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13310,7 +13875,7 @@ func (x *TeamReceiptReq) ProtoReflect() protoreflect.Message { // Deprecated: Use TeamReceiptReq.ProtoReflect.Descriptor instead. func (*TeamReceiptReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{247} + return file_main_proto_rawDescGZIP(), []int{256} } func (x *TeamReceiptReq) GetGameID() int32 { @@ -13335,7 +13900,7 @@ type PrintTeamReceiptRsp struct { func (x *PrintTeamReceiptRsp) Reset() { *x = PrintTeamReceiptRsp{} - mi := &file_main_proto_msgTypes[248] + mi := &file_main_proto_msgTypes[257] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -13347,7 +13912,7 @@ func (x *PrintTeamReceiptRsp) String() string { func (*PrintTeamReceiptRsp) ProtoMessage() {} func (x *PrintTeamReceiptRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[248] + mi := &file_main_proto_msgTypes[257] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -13360,7 +13925,7 @@ func (x *PrintTeamReceiptRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use PrintTeamReceiptRsp.ProtoReflect.Descriptor instead. func (*PrintTeamReceiptRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{248} + return file_main_proto_rawDescGZIP(), []int{257} } var File_main_proto protoreflect.FileDescriptor @@ -13450,16 +14015,54 @@ const file_main_proto_rawDesc = "" + "\bfilename\x18\x01 \x01(\tR\bfilename\x12\x1c\n" + "\tfile_type\x18\x02 \x01(\tR\tfile_type\"-\n" + "\x0fDownloadFileReq\x12\x1a\n" + - "\bfilename\x18\x01 \x01(\tR\bfilename\"k\n" + + "\bfilename\x18\x01 \x01(\tR\bfilename\"\xa0\x01\n" + + "\rPlaylistGroup\x12\x0e\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x1a\n" + + "\bposition\x18\x03 \x01(\x05R\bposition\x12O\n" + + "\bend_mode\x18\x04 \x01(\x0e24.crabs.evening_detective_server.PlaylistGroupEndModeR\aendMode\"\xb5\x01\n" + + "\x14SavePlaylistGroupReq\x12\x1e\n" + + "\n" + + "playlistID\x18\x01 \x01(\x05R\n" + + "playlistID\x12\x18\n" + + "\agroupID\x18\x02 \x01(\x05R\agroupID\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x12O\n" + + "\bend_mode\x18\x04 \x01(\x0e24.crabs.evening_detective_server.PlaylistGroupEndModeR\aendMode\"\\\n" + + "\x14SavePlaylistGroupRsp\x12D\n" + + "\bplaylist\x18\x01 \x01(\v2(.crabs.evening_detective_server.PlaylistR\bplaylist\"R\n" + + "\x16DeletePlaylistGroupReq\x12\x1e\n" + + "\n" + + "playlistID\x18\x01 \x01(\x05R\n" + + "playlistID\x12\x18\n" + + "\agroupID\x18\x02 \x01(\x05R\agroupID\"^\n" + + "\x16DeletePlaylistGroupRsp\x12D\n" + + "\bplaylist\x18\x01 \x01(\v2(.crabs.evening_detective_server.PlaylistR\bplaylist\"V\n" + + "\x18ReorderPlaylistGroupsReq\x12\x1e\n" + + "\n" + + "playlistID\x18\x01 \x01(\x05R\n" + + "playlistID\x12\x1a\n" + + "\bgroupIDs\x18\x02 \x03(\x05R\bgroupIDs\"`\n" + + "\x18ReorderPlaylistGroupsRsp\x12D\n" + + "\bplaylist\x18\x01 \x01(\v2(.crabs.evening_detective_server.PlaylistR\bplaylist\"n\n" + + "\x18SetPlaylistTrackGroupReq\x12\x1e\n" + + "\n" + + "playlistID\x18\x01 \x01(\x05R\n" + + "playlistID\x12\x18\n" + + "\atrackID\x18\x02 \x01(\x05R\atrackID\x12\x18\n" + + "\agroupID\x18\x03 \x01(\x05R\agroupID\"`\n" + + "\x18SetPlaylistTrackGroupRsp\x12D\n" + + "\bplaylist\x18\x01 \x01(\v2(.crabs.evening_detective_server.PlaylistR\bplaylist\"\x86\x01\n" + "\rPlaylistTrack\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x12\n" + "\x04name\x18\x02 \x01(\tR\x04name\x12\x1a\n" + "\bfilename\x18\x03 \x01(\tR\bfilename\x12\x1a\n" + - "\bposition\x18\x04 \x01(\x05R\bposition\"u\n" + + "\bposition\x18\x04 \x01(\x05R\bposition\x12\x19\n" + + "\bgroup_id\x18\x05 \x01(\x05R\agroupId\"\xbc\x01\n" + "\bPlaylist\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x12\n" + "\x04name\x18\x02 \x01(\tR\x04name\x12E\n" + - "\x06tracks\x18\x03 \x03(\v2-.crabs.evening_detective_server.PlaylistTrackR\x06tracks\"\x11\n" + + "\x06tracks\x18\x03 \x03(\v2-.crabs.evening_detective_server.PlaylistTrackR\x06tracks\x12E\n" + + "\x06groups\x18\x04 \x03(\v2-.crabs.evening_detective_server.PlaylistGroupR\x06groups\"\x11\n" + "\x0fGetPlaylistsReq\"Y\n" + "\x0fGetPlaylistsRsp\x12F\n" + "\tplaylists\x18\x01 \x03(\v2(.crabs.evening_detective_server.PlaylistR\tplaylists\"'\n" + @@ -13747,7 +14350,7 @@ const file_main_proto_rawDesc = "" + "\x11GetGameScreensReq\x12\x16\n" + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\"Z\n" + "\x11GetGameScreensRsp\x12E\n" + - "\ascreens\x18\x01 \x03(\v2+.crabs.evening_detective_server.ScreenStateR\ascreens\"\xb5\x02\n" + + "\ascreens\x18\x01 \x03(\v2+.crabs.evening_detective_server.ScreenStateR\ascreens\"\xd0\x02\n" + "\n" + "MusicState\x12D\n" + "\bplaylist\x18\x01 \x01(\v2(.crabs.evening_detective_server.PlaylistR\bplaylist\x12\x1f\n" + @@ -13758,14 +14361,15 @@ const file_main_proto_rawDesc = "" + "\x06volume\x18\x04 \x01(\x05R\x06volume\x12\x12\n" + "\x04loop\x18\x05 \x01(\bR\x04loop\x12N\n" + "\bplayback\x18\x06 \x01(\x0e22.crabs.evening_detective_server.MusicPlaybackStateR\bplayback\x12#\n" + - "\rstate_version\x18\a \x01(\x03R\fstateVersion\")\n" + + "\rstate_version\x18\a \x01(\x03R\fstateVersion\x12\x19\n" + + "\bgroup_id\x18\b \x01(\x05R\agroupId\")\n" + "\x0fGetGameMusicReq\x12\x16\n" + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\"\xf7\x01\n" + "\x0fGetGameMusicRsp\x12F\n" + "\tplaylists\x18\x01 \x03(\v2(.crabs.evening_detective_server.PlaylistR\tplaylists\x12@\n" + "\x05state\x18\x02 \x01(\v2*.crabs.evening_detective_server.MusicStateR\x05state\x120\n" + "\x14scenario_playlist_id\x18\x03 \x01(\x05R\x12scenarioPlaylistId\x12(\n" + - "\x10game_playlist_id\x18\x04 \x01(\x05R\x0egamePlaylistId\"\x87\x02\n" + + "\x10game_playlist_id\x18\x04 \x01(\x05R\x0egamePlaylistId\"\xa2\x02\n" + "\x0fSetGameMusicReq\x12\x16\n" + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\x12\x1e\n" + "\n" + @@ -13777,12 +14381,14 @@ const file_main_proto_rawDesc = "" + "positionMs\x12\x16\n" + "\x06volume\x18\x05 \x01(\x05R\x06volume\x12\x12\n" + "\x04loop\x18\x06 \x01(\bR\x04loop\x12N\n" + - "\bplayback\x18\a \x01(\x0e22.crabs.evening_detective_server.MusicPlaybackStateR\bplayback\"S\n" + + "\bplayback\x18\a \x01(\x0e22.crabs.evening_detective_server.MusicPlaybackStateR\bplayback\x12\x19\n" + + "\bgroup_id\x18\b \x01(\x05R\agroupId\"S\n" + "\x0fSetGameMusicRsp\x12@\n" + - "\x05state\x18\x01 \x01(\v2*.crabs.evening_detective_server.MusicStateR\x05state\"U\n" + + "\x05state\x18\x01 \x01(\v2*.crabs.evening_detective_server.MusicStateR\x05state\"\x8b\x01\n" + "\x15AdvanceScreenMusicReq\x12\x1a\n" + "\bscreenID\x18\x01 \x01(\tR\bscreenID\x12 \n" + - "\vaccessToken\x18\x02 \x01(\tR\vaccessToken\"Y\n" + + "\vaccessToken\x18\x02 \x01(\tR\vaccessToken\x124\n" + + "\x16expected_state_version\x18\x03 \x01(\tR\x14expectedStateVersion\"Y\n" + "\x15AdvanceScreenMusicRsp\x12@\n" + "\x05state\x18\x01 \x01(\v2*.crabs.evening_detective_server.MusicStateR\x05state\"\x8f\x01\n" + "\rBindScreenReq\x12\x1a\n" + @@ -14236,7 +14842,11 @@ const file_main_proto_rawDesc = "" + "\x0eTeamReceiptReq\x12\x16\n" + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\x12\x16\n" + "\x06teamID\x18\x02 \x01(\tR\x06teamID\"\x15\n" + - "\x13PrintTeamReceiptRsp*\xa5\x02\n" + + "\x13PrintTeamReceiptRsp*~\n" + + "\x14PlaylistGroupEndMode\x12\"\n" + + "\x1ePLAYLIST_GROUP_END_MODE_REPEAT\x10\x00\x12 \n" + + "\x1cPLAYLIST_GROUP_END_MODE_STOP\x10\x01\x12 \n" + + "\x1cPLAYLIST_GROUP_END_MODE_NEXT\x10\x02*\xa5\x02\n" + "\n" + "ScreenMode\x12\x1b\n" + "\x17SCREEN_MODE_UNSPECIFIED\x10\x00\x12\x15\n" + @@ -14277,7 +14887,7 @@ const file_main_proto_rawDesc = "" + "\x1aMUSIC_PLAYBACK_UNSPECIFIED\x10\x00\x12\x1a\n" + "\x16MUSIC_PLAYBACK_STOPPED\x10\x01\x12\x1a\n" + "\x16MUSIC_PLAYBACK_PLAYING\x10\x02\x12\x19\n" + - "\x15MUSIC_PLAYBACK_PAUSED\x10\x032\x9d\xe7\x01\n" + + "\x15MUSIC_PLAYBACK_PAUSED\x10\x032\xba\xef\x01\n" + "\x16EveningDetectiveServer\x12\xa9\x04\n" + "\x0fDeviceHeartbeat\x122.crabs.evening_detective_server.DeviceHeartbeatReq\x1a2.crabs.evening_detective_server.DeviceHeartbeatRsp\"\xad\x03\x92A\x88\x03\n" + "\x14Устройства\x12OОбновить присутствие подключения браузера\x1a\x9c\x02Публичный endpoint. Контексты взаимоисключающие и проверяются сервером. В prod enabled=false без регистрации. UUID обозначает браузерный профиль, не физический телефон.b\x00\x82\xd3\xe4\x93\x02\x1b:\x01*\"\x16/api/devices/heartbeat\x12\xa1\x04\n" + @@ -14359,7 +14969,15 @@ const file_main_proto_rawDesc = "" + "Файлы\x12\x1bЗагрузить файл\x82\xd3\xe4\x93\x02\x16:\x01*\"\x11/api/files/upload\x12\x9e\x01\n" + "\fDownloadFile\x12/.crabs.evening_detective_server.DownloadFileReq\x1a\x14.google.api.HttpBody\"G\x92A'\n" + "\n" + - "Файлы\x12\x19Получить файл\x82\xd3\xe4\x93\x02\x17\x12\x15/api/files/{filename}\x12\xbe\x01\n" + + "Файлы\x12\x19Получить файл\x82\xd3\xe4\x93\x02\x17\x12\x15/api/files/{filename}\x12\xf3\x01\n" + + "\x11SavePlaylistGroup\x124.crabs.evening_detective_server.SavePlaylistGroupReq\x1a4.crabs.evening_detective_server.SavePlaylistGroupRsp\"r\x92AB\n" + + "\fМузыка\x122Сохранить группу плейлиста\x82\xd3\xe4\x93\x02':\x01*\"\"/api/playlists/{playlistID}/groups\x12\x86\x02\n" + + "\x13DeletePlaylistGroup\x126.crabs.evening_detective_server.DeletePlaylistGroupReq\x1a6.crabs.evening_detective_server.DeletePlaylistGroupRsp\"\x7f\x92AH\n" + + "\fМузыка\x128Удалить группу, сохранив треки\x82\xd3\xe4\x93\x02.*,/api/playlists/{playlistID}/groups/{groupID}\x12\x91\x02\n" + + "\x15ReorderPlaylistGroups\x128.crabs.evening_detective_server.ReorderPlaylistGroupsReq\x1a8.crabs.evening_detective_server.ReorderPlaylistGroupsRsp\"\x83\x01\x92AM\n" + + "\fМузыка\x12=Изменить порядок групп плейлиста\x82\xd3\xe4\x93\x02-:\x01*\x1a(/api/playlists/{playlistID}/groups/order\x12\x87\x02\n" + + "\x15SetPlaylistTrackGroup\x128.crabs.evening_detective_server.SetPlaylistTrackGroupReq\x1a8.crabs.evening_detective_server.SetPlaylistTrackGroupRsp\"z\x92A:\n" + + "\fМузыка\x12*Назначить треку группу\x82\xd3\xe4\x93\x027:\x01*\x1a2/api/playlists/{playlistID}/tracks/{trackID}/group\x12\xbe\x01\n" + "\fGetPlaylists\x12/.crabs.evening_detective_server.GetPlaylistsReq\x1a/.crabs.evening_detective_server.GetPlaylistsRsp\"L\x92A3\n" + "\fМузыка\x12#Получить плейлисты\x82\xd3\xe4\x93\x02\x10\x12\x0e/api/playlists\x12\xc3\x01\n" + "\x0eCreatePlaylist\x121.crabs.evening_detective_server.CreatePlaylistReq\x1a1.crabs.evening_detective_server.CreatePlaylistRsp\"K\x92A/\n" + @@ -14586,619 +15204,644 @@ func file_main_proto_rawDescGZIP() []byte { return file_main_proto_rawDescData } -var file_main_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 249) +var file_main_proto_enumTypes = make([]protoimpl.EnumInfo, 6) +var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 258) var file_main_proto_goTypes = []any{ - (ScreenMode)(0), // 0: crabs.evening_detective_server.ScreenMode - (ScreenTimerType)(0), // 1: crabs.evening_detective_server.ScreenTimerType - (ScreenTimerState)(0), // 2: crabs.evening_detective_server.ScreenTimerState - (ScreenCommand)(0), // 3: crabs.evening_detective_server.ScreenCommand - (MusicPlaybackState)(0), // 4: crabs.evening_detective_server.MusicPlaybackState - (*PingReq)(nil), // 5: crabs.evening_detective_server.PingReq - (*PingRsp)(nil), // 6: crabs.evening_detective_server.PingRsp - (*EchoReq)(nil), // 7: crabs.evening_detective_server.EchoReq - (*EchoRsp)(nil), // 8: crabs.evening_detective_server.EchoRsp - (*SignupReq)(nil), // 9: crabs.evening_detective_server.SignupReq - (*SignupRsp)(nil), // 10: crabs.evening_detective_server.SignupRsp - (*RefreshPasswordReq)(nil), // 11: crabs.evening_detective_server.RefreshPasswordReq - (*RefreshPasswordRsp)(nil), // 12: crabs.evening_detective_server.RefreshPasswordRsp - (*LoginReq)(nil), // 13: crabs.evening_detective_server.LoginReq - (*LoginRsp)(nil), // 14: crabs.evening_detective_server.LoginRsp - (*RefreshReq)(nil), // 15: crabs.evening_detective_server.RefreshReq - (*RefreshRsp)(nil), // 16: crabs.evening_detective_server.RefreshRsp - (*DeleteAccountReq)(nil), // 17: crabs.evening_detective_server.DeleteAccountReq - (*DeleteAccountRsp)(nil), // 18: crabs.evening_detective_server.DeleteAccountRsp - (*GetTermsReq)(nil), // 19: crabs.evening_detective_server.GetTermsReq - (*GetTermsRsp)(nil), // 20: crabs.evening_detective_server.GetTermsRsp - (*GetPrivacyReq)(nil), // 21: crabs.evening_detective_server.GetPrivacyReq - (*GetPrivacyRsp)(nil), // 22: crabs.evening_detective_server.GetPrivacyRsp - (*GetConsentReq)(nil), // 23: crabs.evening_detective_server.GetConsentReq - (*GetConsentRsp)(nil), // 24: crabs.evening_detective_server.GetConsentRsp - (*GetUsersReq)(nil), // 25: crabs.evening_detective_server.GetUsersReq - (*GetUsersRsp)(nil), // 26: crabs.evening_detective_server.GetUsersRsp - (*User)(nil), // 27: crabs.evening_detective_server.User - (*GetUserByIDReq)(nil), // 28: crabs.evening_detective_server.GetUserByIDReq - (*GetUserByIDRsp)(nil), // 29: crabs.evening_detective_server.GetUserByIDRsp - (*GetMeReq)(nil), // 30: crabs.evening_detective_server.GetMeReq - (*GetMeRsp)(nil), // 31: crabs.evening_detective_server.GetMeRsp - (*ChangeUserPasswordReq)(nil), // 32: crabs.evening_detective_server.ChangeUserPasswordReq - (*ChangeUserPasswordRsp)(nil), // 33: crabs.evening_detective_server.ChangeUserPasswordRsp - (*AddUserRoleReq)(nil), // 34: crabs.evening_detective_server.AddUserRoleReq - (*AddUserRoleRsp)(nil), // 35: crabs.evening_detective_server.AddUserRoleRsp - (*DeleteUserRoleReq)(nil), // 36: crabs.evening_detective_server.DeleteUserRoleReq - (*DeleteUserRoleRsp)(nil), // 37: crabs.evening_detective_server.DeleteUserRoleRsp - (*GetPermissionsReq)(nil), // 38: crabs.evening_detective_server.GetPermissionsReq - (*GetPermissionsRsp)(nil), // 39: crabs.evening_detective_server.GetPermissionsRsp - (*UploadFileReq)(nil), // 40: crabs.evening_detective_server.UploadFileReq - (*UploadFileRsp)(nil), // 41: crabs.evening_detective_server.UploadFileRsp - (*DownloadFileReq)(nil), // 42: crabs.evening_detective_server.DownloadFileReq - (*PlaylistTrack)(nil), // 43: crabs.evening_detective_server.PlaylistTrack - (*Playlist)(nil), // 44: crabs.evening_detective_server.Playlist - (*GetPlaylistsReq)(nil), // 45: crabs.evening_detective_server.GetPlaylistsReq - (*GetPlaylistsRsp)(nil), // 46: crabs.evening_detective_server.GetPlaylistsRsp - (*CreatePlaylistReq)(nil), // 47: crabs.evening_detective_server.CreatePlaylistReq - (*CreatePlaylistRsp)(nil), // 48: crabs.evening_detective_server.CreatePlaylistRsp - (*UpdatePlaylistReq)(nil), // 49: crabs.evening_detective_server.UpdatePlaylistReq - (*UpdatePlaylistRsp)(nil), // 50: crabs.evening_detective_server.UpdatePlaylistRsp - (*DeletePlaylistReq)(nil), // 51: crabs.evening_detective_server.DeletePlaylistReq - (*DeletePlaylistRsp)(nil), // 52: crabs.evening_detective_server.DeletePlaylistRsp - (*UploadPlaylistTrackReq)(nil), // 53: crabs.evening_detective_server.UploadPlaylistTrackReq - (*UploadPlaylistTrackRsp)(nil), // 54: crabs.evening_detective_server.UploadPlaylistTrackRsp - (*ReorderPlaylistTracksReq)(nil), // 55: crabs.evening_detective_server.ReorderPlaylistTracksReq - (*ReorderPlaylistTracksRsp)(nil), // 56: crabs.evening_detective_server.ReorderPlaylistTracksRsp - (*DeletePlaylistTrackReq)(nil), // 57: crabs.evening_detective_server.DeletePlaylistTrackReq - (*DeletePlaylistTrackRsp)(nil), // 58: crabs.evening_detective_server.DeletePlaylistTrackRsp - (*SetScenarioPlaylistReq)(nil), // 59: crabs.evening_detective_server.SetScenarioPlaylistReq - (*SetScenarioPlaylistRsp)(nil), // 60: crabs.evening_detective_server.SetScenarioPlaylistRsp - (*AddScenarioReq)(nil), // 61: crabs.evening_detective_server.AddScenarioReq - (*AddScenarioRsp)(nil), // 62: crabs.evening_detective_server.AddScenarioRsp - (*GetMyScenariosReq)(nil), // 63: crabs.evening_detective_server.GetMyScenariosReq - (*GetMyScenariosRsp)(nil), // 64: crabs.evening_detective_server.GetMyScenariosRsp - (*GetScenariosCatalogReq)(nil), // 65: crabs.evening_detective_server.GetScenariosCatalogReq - (*GetScenariosCatalogRsp)(nil), // 66: crabs.evening_detective_server.GetScenariosCatalogRsp - (*GetScenarioReq)(nil), // 67: crabs.evening_detective_server.GetScenarioReq - (*GetScenarioRsp)(nil), // 68: crabs.evening_detective_server.GetScenarioRsp - (*Scenario)(nil), // 69: crabs.evening_detective_server.Scenario - (*Story)(nil), // 70: crabs.evening_detective_server.Story - (*Conclusion)(nil), // 71: crabs.evening_detective_server.Conclusion - (*Introduction)(nil), // 72: crabs.evening_detective_server.Introduction - (*Place)(nil), // 73: crabs.evening_detective_server.Place - (*Application)(nil), // 74: crabs.evening_detective_server.Application - (*Door)(nil), // 75: crabs.evening_detective_server.Door - (*Key)(nil), // 76: crabs.evening_detective_server.Key - (*Question)(nil), // 77: crabs.evening_detective_server.Question - (*Answer)(nil), // 78: crabs.evening_detective_server.Answer - (*AnswerScore)(nil), // 79: crabs.evening_detective_server.AnswerScore - (*TeamAnswers)(nil), // 80: crabs.evening_detective_server.TeamAnswers - (*UpdateScenarioReq)(nil), // 81: crabs.evening_detective_server.UpdateScenarioReq - (*UpdateScenarioRsp)(nil), // 82: crabs.evening_detective_server.UpdateScenarioRsp - (*PublicScenarioReq)(nil), // 83: crabs.evening_detective_server.PublicScenarioReq - (*PublicScenarioRsp)(nil), // 84: crabs.evening_detective_server.PublicScenarioRsp - (*DraftScenarioReq)(nil), // 85: crabs.evening_detective_server.DraftScenarioReq - (*DraftScenarioRsp)(nil), // 86: crabs.evening_detective_server.DraftScenarioRsp - (*DeleteScenarioReq)(nil), // 87: crabs.evening_detective_server.DeleteScenarioReq - (*DeleteScenarioRsp)(nil), // 88: crabs.evening_detective_server.DeleteScenarioRsp - (*AddScenarioPlaceReq)(nil), // 89: crabs.evening_detective_server.AddScenarioPlaceReq - (*AddScenarioPlaceRsp)(nil), // 90: crabs.evening_detective_server.AddScenarioPlaceRsp - (*UpdateScenarioPlaceReq)(nil), // 91: crabs.evening_detective_server.UpdateScenarioPlaceReq - (*UpdateScenarioPlaceRsp)(nil), // 92: crabs.evening_detective_server.UpdateScenarioPlaceRsp - (*DeleteScenarioPlaceReq)(nil), // 93: crabs.evening_detective_server.DeleteScenarioPlaceReq - (*DeleteScenarioPlaceRsp)(nil), // 94: crabs.evening_detective_server.DeleteScenarioPlaceRsp - (*UpdateScenarioConclusionReq)(nil), // 95: crabs.evening_detective_server.UpdateScenarioConclusionReq - (*UpdateScenarioConclusionRsp)(nil), // 96: crabs.evening_detective_server.UpdateScenarioConclusionRsp - (*UpdateScenarioIntroReq)(nil), // 97: crabs.evening_detective_server.UpdateScenarioIntroReq - (*UpdateScenarioIntroRsp)(nil), // 98: crabs.evening_detective_server.UpdateScenarioIntroRsp - (*AddScenarioQuestionReq)(nil), // 99: crabs.evening_detective_server.AddScenarioQuestionReq - (*AddScenarioQuestionRsp)(nil), // 100: crabs.evening_detective_server.AddScenarioQuestionRsp - (*UpdateScenarioQuestionReq)(nil), // 101: crabs.evening_detective_server.UpdateScenarioQuestionReq - (*UpdateScenarioQuestionRsp)(nil), // 102: crabs.evening_detective_server.UpdateScenarioQuestionRsp - (*DeleteScenarioQuestionReq)(nil), // 103: crabs.evening_detective_server.DeleteScenarioQuestionReq - (*DeleteScenarioQuestionRsp)(nil), // 104: crabs.evening_detective_server.DeleteScenarioQuestionRsp - (*DownloadScenarioArchiveReq)(nil), // 105: crabs.evening_detective_server.DownloadScenarioArchiveReq - (*UploadScenarioArchiveRsp)(nil), // 106: crabs.evening_detective_server.UploadScenarioArchiveRsp - (*AddGameReq)(nil), // 107: crabs.evening_detective_server.AddGameReq - (*AddGameRsp)(nil), // 108: crabs.evening_detective_server.AddGameRsp - (*GetGamesReq)(nil), // 109: crabs.evening_detective_server.GetGamesReq - (*GetGamesRsp)(nil), // 110: crabs.evening_detective_server.GetGamesRsp - (*Game)(nil), // 111: crabs.evening_detective_server.Game - (*GameExport)(nil), // 112: crabs.evening_detective_server.GameExport - (*GameImportRsp)(nil), // 113: crabs.evening_detective_server.GameImportRsp - (*StartGameExportReq)(nil), // 114: crabs.evening_detective_server.StartGameExportReq - (*GetGameExportReq)(nil), // 115: crabs.evening_detective_server.GetGameExportReq - (*ResetGameLocalModeReq)(nil), // 116: crabs.evening_detective_server.ResetGameLocalModeReq - (*ResetGameLocalModeRsp)(nil), // 117: crabs.evening_detective_server.ResetGameLocalModeRsp - (*GameExportRsp)(nil), // 118: crabs.evening_detective_server.GameExportRsp - (*ScreenState)(nil), // 119: crabs.evening_detective_server.ScreenState - (*CreateScreenSessionReq)(nil), // 120: crabs.evening_detective_server.CreateScreenSessionReq - (*CreateScreenSessionRsp)(nil), // 121: crabs.evening_detective_server.CreateScreenSessionRsp - (*GetScreenStateReq)(nil), // 122: crabs.evening_detective_server.GetScreenStateReq - (*GetScreenStateRsp)(nil), // 123: crabs.evening_detective_server.GetScreenStateRsp - (*GetGameScreensReq)(nil), // 124: crabs.evening_detective_server.GetGameScreensReq - (*GetGameScreensRsp)(nil), // 125: crabs.evening_detective_server.GetGameScreensRsp - (*MusicState)(nil), // 126: crabs.evening_detective_server.MusicState - (*GetGameMusicReq)(nil), // 127: crabs.evening_detective_server.GetGameMusicReq - (*GetGameMusicRsp)(nil), // 128: crabs.evening_detective_server.GetGameMusicRsp - (*SetGameMusicReq)(nil), // 129: crabs.evening_detective_server.SetGameMusicReq - (*SetGameMusicRsp)(nil), // 130: crabs.evening_detective_server.SetGameMusicRsp - (*AdvanceScreenMusicReq)(nil), // 131: crabs.evening_detective_server.AdvanceScreenMusicReq - (*AdvanceScreenMusicRsp)(nil), // 132: crabs.evening_detective_server.AdvanceScreenMusicRsp - (*BindScreenReq)(nil), // 133: crabs.evening_detective_server.BindScreenReq - (*BindScreenRsp)(nil), // 134: crabs.evening_detective_server.BindScreenRsp - (*UnbindScreenReq)(nil), // 135: crabs.evening_detective_server.UnbindScreenReq - (*UnbindScreenRsp)(nil), // 136: crabs.evening_detective_server.UnbindScreenRsp - (*SetScreenSoundReq)(nil), // 137: crabs.evening_detective_server.SetScreenSoundReq - (*SetScreenSoundRsp)(nil), // 138: crabs.evening_detective_server.SetScreenSoundRsp - (*MapItem)(nil), // 139: crabs.evening_detective_server.MapItem - (*GetGameMapReq)(nil), // 140: crabs.evening_detective_server.GetGameMapReq - (*GetGameMapRsp)(nil), // 141: crabs.evening_detective_server.GetGameMapRsp - (*UpdateGameMapItemReq)(nil), // 142: crabs.evening_detective_server.UpdateGameMapItemReq - (*UpdateGameMapItemRsp)(nil), // 143: crabs.evening_detective_server.UpdateGameMapItemRsp - (*SetScreenModeReq)(nil), // 144: crabs.evening_detective_server.SetScreenModeReq - (*SetScreenModeRsp)(nil), // 145: crabs.evening_detective_server.SetScreenModeRsp - (*SetScreenTimerReq)(nil), // 146: crabs.evening_detective_server.SetScreenTimerReq - (*SetScreenTimerRsp)(nil), // 147: crabs.evening_detective_server.SetScreenTimerRsp - (*SendScreenCommandReq)(nil), // 148: crabs.evening_detective_server.SendScreenCommandReq - (*SendScreenCommandRsp)(nil), // 149: crabs.evening_detective_server.SendScreenCommandRsp - (*ScreenPlanStep)(nil), // 150: crabs.evening_detective_server.ScreenPlanStep - (*ScreenPlan)(nil), // 151: crabs.evening_detective_server.ScreenPlan - (*GetScreenPlanReq)(nil), // 152: crabs.evening_detective_server.GetScreenPlanReq - (*GetScreenPlanRsp)(nil), // 153: crabs.evening_detective_server.GetScreenPlanRsp - (*SaveScreenPlanReq)(nil), // 154: crabs.evening_detective_server.SaveScreenPlanReq - (*SaveScreenPlanRsp)(nil), // 155: crabs.evening_detective_server.SaveScreenPlanRsp - (*SetScreenPlanStepReq)(nil), // 156: crabs.evening_detective_server.SetScreenPlanStepReq - (*SetScreenPlanStepRsp)(nil), // 157: crabs.evening_detective_server.SetScreenPlanStepRsp - (*ScreenTeam)(nil), // 158: crabs.evening_detective_server.ScreenTeam - (*GetScreenTeamsReq)(nil), // 159: crabs.evening_detective_server.GetScreenTeamsReq - (*GetScreenTeamsRsp)(nil), // 160: crabs.evening_detective_server.GetScreenTeamsRsp - (*GetScreenResultsReq)(nil), // 161: crabs.evening_detective_server.GetScreenResultsReq - (*GetScreenResultsRsp)(nil), // 162: crabs.evening_detective_server.GetScreenResultsRsp - (*GetParticipationReq)(nil), // 163: crabs.evening_detective_server.GetParticipationReq - (*AnswerParticipationReq)(nil), // 164: crabs.evening_detective_server.AnswerParticipationReq - (*ParticipationRsp)(nil), // 165: crabs.evening_detective_server.ParticipationRsp - (*Team)(nil), // 166: crabs.evening_detective_server.Team - (*GetGameReq)(nil), // 167: crabs.evening_detective_server.GetGameReq - (*GetGameRsp)(nil), // 168: crabs.evening_detective_server.GetGameRsp - (*GetGameAnswersReq)(nil), // 169: crabs.evening_detective_server.GetGameAnswersReq - (*GetGameAnswersRsp)(nil), // 170: crabs.evening_detective_server.GetGameAnswersRsp - (*GetGameResultsReq)(nil), // 171: crabs.evening_detective_server.GetGameResultsReq - (*ResultsQuestion)(nil), // 172: crabs.evening_detective_server.ResultsQuestion - (*TeamResult)(nil), // 173: crabs.evening_detective_server.TeamResult - (*GetGameResultsRsp)(nil), // 174: crabs.evening_detective_server.GetGameResultsRsp - (*GameReview)(nil), // 175: crabs.evening_detective_server.GameReview - (*CreateGameReviewReq)(nil), // 176: crabs.evening_detective_server.CreateGameReviewReq - (*CreateGameReviewRsp)(nil), // 177: crabs.evening_detective_server.CreateGameReviewRsp - (*GetGameReviewsReq)(nil), // 178: crabs.evening_detective_server.GetGameReviewsReq - (*GetScenarioReviewsReq)(nil), // 179: crabs.evening_detective_server.GetScenarioReviewsReq - (*GetReviewsForModerationReq)(nil), // 180: crabs.evening_detective_server.GetReviewsForModerationReq - (*GetGameReviewsRsp)(nil), // 181: crabs.evening_detective_server.GetGameReviewsRsp - (*ModerateGameReviewReq)(nil), // 182: crabs.evening_detective_server.ModerateGameReviewReq - (*ModerateGameReviewRsp)(nil), // 183: crabs.evening_detective_server.ModerateGameReviewRsp - (*UpdateGameReq)(nil), // 184: crabs.evening_detective_server.UpdateGameReq - (*UpdateGameRsp)(nil), // 185: crabs.evening_detective_server.UpdateGameRsp - (*StartGameReq)(nil), // 186: crabs.evening_detective_server.StartGameReq - (*StartGameRsp)(nil), // 187: crabs.evening_detective_server.StartGameRsp - (*PauseGameReq)(nil), // 188: crabs.evening_detective_server.PauseGameReq - (*PauseGameRsp)(nil), // 189: crabs.evening_detective_server.PauseGameRsp - (*PlayGameReq)(nil), // 190: crabs.evening_detective_server.PlayGameReq - (*PlayGameRsp)(nil), // 191: crabs.evening_detective_server.PlayGameRsp - (*FinishGameReq)(nil), // 192: crabs.evening_detective_server.FinishGameReq - (*FinishGameRsp)(nil), // 193: crabs.evening_detective_server.FinishGameRsp - (*ResetGameReq)(nil), // 194: crabs.evening_detective_server.ResetGameReq - (*ResetGameRsp)(nil), // 195: crabs.evening_detective_server.ResetGameRsp - (*DeleteGameReq)(nil), // 196: crabs.evening_detective_server.DeleteGameReq - (*DeleteGameRsp)(nil), // 197: crabs.evening_detective_server.DeleteGameRsp - (*AddTeamReq)(nil), // 198: crabs.evening_detective_server.AddTeamReq - (*AddTeamRsp)(nil), // 199: crabs.evening_detective_server.AddTeamRsp - (*UpdateTeamReq)(nil), // 200: crabs.evening_detective_server.UpdateTeamReq - (*UpdateTeamRsp)(nil), // 201: crabs.evening_detective_server.UpdateTeamRsp - (*DeleteTeamReq)(nil), // 202: crabs.evening_detective_server.DeleteTeamReq - (*DeleteTeamRsp)(nil), // 203: crabs.evening_detective_server.DeleteTeamRsp - (*GiveTeamApplicationsReq)(nil), // 204: crabs.evening_detective_server.GiveTeamApplicationsReq - (*GiveTeamApplicationsRsp)(nil), // 205: crabs.evening_detective_server.GiveTeamApplicationsRsp - (*GetTeamStoryReq)(nil), // 206: crabs.evening_detective_server.GetTeamStoryReq - (*GetTeamStoryRsp)(nil), // 207: crabs.evening_detective_server.GetTeamStoryRsp - (*TeamAction)(nil), // 208: crabs.evening_detective_server.TeamAction - (*AddTeamActionReq)(nil), // 209: crabs.evening_detective_server.AddTeamActionReq - (*AddTeamActionRsp)(nil), // 210: crabs.evening_detective_server.AddTeamActionRsp - (*DeleteLastTeamActionReq)(nil), // 211: crabs.evening_detective_server.DeleteLastTeamActionReq - (*DeleteLastTeamActionRsp)(nil), // 212: crabs.evening_detective_server.DeleteLastTeamActionRsp - (*GetTeamAnswersReq)(nil), // 213: crabs.evening_detective_server.GetTeamAnswersReq - (*GetTeamAnswersRsp)(nil), // 214: crabs.evening_detective_server.GetTeamAnswersRsp - (*SubmitTeamAnswersReq)(nil), // 215: crabs.evening_detective_server.SubmitTeamAnswersReq - (*SubmitTeamAnswersRsp)(nil), // 216: crabs.evening_detective_server.SubmitTeamAnswersRsp - (*SetTeamAnswerScoreReq)(nil), // 217: crabs.evening_detective_server.SetTeamAnswerScoreReq - (*SetTeamAnswerScoreRsp)(nil), // 218: crabs.evening_detective_server.SetTeamAnswerScoreRsp - (*UpdateScenarioBackgroundReq)(nil), // 219: crabs.evening_detective_server.UpdateScenarioBackgroundReq - (*UpdateScenarioBackgroundRsp)(nil), // 220: crabs.evening_detective_server.UpdateScenarioBackgroundRsp - (*IssueGameTicketsReq)(nil), // 221: crabs.evening_detective_server.IssueGameTicketsReq - (*IssueGameTicketsRsp)(nil), // 222: crabs.evening_detective_server.IssueGameTicketsRsp - (*Ticket)(nil), // 223: crabs.evening_detective_server.Ticket - (*GetTicketReq)(nil), // 224: crabs.evening_detective_server.GetTicketReq - (*GetTicketRsp)(nil), // 225: crabs.evening_detective_server.GetTicketRsp - (*AcceptTicketReq)(nil), // 226: crabs.evening_detective_server.AcceptTicketReq - (*AcceptTicketRsp)(nil), // 227: crabs.evening_detective_server.AcceptTicketRsp - (*TicketPage)(nil), // 228: crabs.evening_detective_server.TicketPage - (*DeveloperTask)(nil), // 229: crabs.evening_detective_server.DeveloperTask - (*TaskAssignee)(nil), // 230: crabs.evening_detective_server.TaskAssignee - (*GetTasksReq)(nil), // 231: crabs.evening_detective_server.GetTasksReq - (*GetTasksRsp)(nil), // 232: crabs.evening_detective_server.GetTasksRsp - (*GetTaskAssigneesReq)(nil), // 233: crabs.evening_detective_server.GetTaskAssigneesReq - (*GetTaskAssigneesRsp)(nil), // 234: crabs.evening_detective_server.GetTaskAssigneesRsp - (*CreateTaskReq)(nil), // 235: crabs.evening_detective_server.CreateTaskReq - (*UpdateTaskReq)(nil), // 236: crabs.evening_detective_server.UpdateTaskReq - (*SetTaskStatusReq)(nil), // 237: crabs.evening_detective_server.SetTaskStatusReq - (*DeleteTaskReq)(nil), // 238: crabs.evening_detective_server.DeleteTaskReq - (*TaskRsp)(nil), // 239: crabs.evening_detective_server.TaskRsp - (*DeleteTaskRsp)(nil), // 240: crabs.evening_detective_server.DeleteTaskRsp - (*GameResultsPackageReq)(nil), // 241: crabs.evening_detective_server.GameResultsPackageReq - (*ApplyGameResultsPackageReq)(nil), // 242: crabs.evening_detective_server.ApplyGameResultsPackageReq - (*GameResultsPackageRsp)(nil), // 243: crabs.evening_detective_server.GameResultsPackageRsp - (*DeviceHeartbeatReq)(nil), // 244: crabs.evening_detective_server.DeviceHeartbeatReq - (*DeviceHeartbeatRsp)(nil), // 245: crabs.evening_detective_server.DeviceHeartbeatRsp - (*GetDevicesReq)(nil), // 246: crabs.evening_detective_server.GetDevicesReq - (*GetDevicesRsp)(nil), // 247: crabs.evening_detective_server.GetDevicesRsp - (*VenueDevice)(nil), // 248: crabs.evening_detective_server.VenueDevice - (*DeviceConnection)(nil), // 249: crabs.evening_detective_server.DeviceConnection - (*VenueWiFi)(nil), // 250: crabs.evening_detective_server.VenueWiFi - (*WiFiClient)(nil), // 251: crabs.evening_detective_server.WiFiClient - (*TeamReceiptReq)(nil), // 252: crabs.evening_detective_server.TeamReceiptReq - (*PrintTeamReceiptRsp)(nil), // 253: crabs.evening_detective_server.PrintTeamReceiptRsp - (*timestamppb.Timestamp)(nil), // 254: google.protobuf.Timestamp - (*httpbody.HttpBody)(nil), // 255: google.api.HttpBody + (PlaylistGroupEndMode)(0), // 0: crabs.evening_detective_server.PlaylistGroupEndMode + (ScreenMode)(0), // 1: crabs.evening_detective_server.ScreenMode + (ScreenTimerType)(0), // 2: crabs.evening_detective_server.ScreenTimerType + (ScreenTimerState)(0), // 3: crabs.evening_detective_server.ScreenTimerState + (ScreenCommand)(0), // 4: crabs.evening_detective_server.ScreenCommand + (MusicPlaybackState)(0), // 5: crabs.evening_detective_server.MusicPlaybackState + (*PingReq)(nil), // 6: crabs.evening_detective_server.PingReq + (*PingRsp)(nil), // 7: crabs.evening_detective_server.PingRsp + (*EchoReq)(nil), // 8: crabs.evening_detective_server.EchoReq + (*EchoRsp)(nil), // 9: crabs.evening_detective_server.EchoRsp + (*SignupReq)(nil), // 10: crabs.evening_detective_server.SignupReq + (*SignupRsp)(nil), // 11: crabs.evening_detective_server.SignupRsp + (*RefreshPasswordReq)(nil), // 12: crabs.evening_detective_server.RefreshPasswordReq + (*RefreshPasswordRsp)(nil), // 13: crabs.evening_detective_server.RefreshPasswordRsp + (*LoginReq)(nil), // 14: crabs.evening_detective_server.LoginReq + (*LoginRsp)(nil), // 15: crabs.evening_detective_server.LoginRsp + (*RefreshReq)(nil), // 16: crabs.evening_detective_server.RefreshReq + (*RefreshRsp)(nil), // 17: crabs.evening_detective_server.RefreshRsp + (*DeleteAccountReq)(nil), // 18: crabs.evening_detective_server.DeleteAccountReq + (*DeleteAccountRsp)(nil), // 19: crabs.evening_detective_server.DeleteAccountRsp + (*GetTermsReq)(nil), // 20: crabs.evening_detective_server.GetTermsReq + (*GetTermsRsp)(nil), // 21: crabs.evening_detective_server.GetTermsRsp + (*GetPrivacyReq)(nil), // 22: crabs.evening_detective_server.GetPrivacyReq + (*GetPrivacyRsp)(nil), // 23: crabs.evening_detective_server.GetPrivacyRsp + (*GetConsentReq)(nil), // 24: crabs.evening_detective_server.GetConsentReq + (*GetConsentRsp)(nil), // 25: crabs.evening_detective_server.GetConsentRsp + (*GetUsersReq)(nil), // 26: crabs.evening_detective_server.GetUsersReq + (*GetUsersRsp)(nil), // 27: crabs.evening_detective_server.GetUsersRsp + (*User)(nil), // 28: crabs.evening_detective_server.User + (*GetUserByIDReq)(nil), // 29: crabs.evening_detective_server.GetUserByIDReq + (*GetUserByIDRsp)(nil), // 30: crabs.evening_detective_server.GetUserByIDRsp + (*GetMeReq)(nil), // 31: crabs.evening_detective_server.GetMeReq + (*GetMeRsp)(nil), // 32: crabs.evening_detective_server.GetMeRsp + (*ChangeUserPasswordReq)(nil), // 33: crabs.evening_detective_server.ChangeUserPasswordReq + (*ChangeUserPasswordRsp)(nil), // 34: crabs.evening_detective_server.ChangeUserPasswordRsp + (*AddUserRoleReq)(nil), // 35: crabs.evening_detective_server.AddUserRoleReq + (*AddUserRoleRsp)(nil), // 36: crabs.evening_detective_server.AddUserRoleRsp + (*DeleteUserRoleReq)(nil), // 37: crabs.evening_detective_server.DeleteUserRoleReq + (*DeleteUserRoleRsp)(nil), // 38: crabs.evening_detective_server.DeleteUserRoleRsp + (*GetPermissionsReq)(nil), // 39: crabs.evening_detective_server.GetPermissionsReq + (*GetPermissionsRsp)(nil), // 40: crabs.evening_detective_server.GetPermissionsRsp + (*UploadFileReq)(nil), // 41: crabs.evening_detective_server.UploadFileReq + (*UploadFileRsp)(nil), // 42: crabs.evening_detective_server.UploadFileRsp + (*DownloadFileReq)(nil), // 43: crabs.evening_detective_server.DownloadFileReq + (*PlaylistGroup)(nil), // 44: crabs.evening_detective_server.PlaylistGroup + (*SavePlaylistGroupReq)(nil), // 45: crabs.evening_detective_server.SavePlaylistGroupReq + (*SavePlaylistGroupRsp)(nil), // 46: crabs.evening_detective_server.SavePlaylistGroupRsp + (*DeletePlaylistGroupReq)(nil), // 47: crabs.evening_detective_server.DeletePlaylistGroupReq + (*DeletePlaylistGroupRsp)(nil), // 48: crabs.evening_detective_server.DeletePlaylistGroupRsp + (*ReorderPlaylistGroupsReq)(nil), // 49: crabs.evening_detective_server.ReorderPlaylistGroupsReq + (*ReorderPlaylistGroupsRsp)(nil), // 50: crabs.evening_detective_server.ReorderPlaylistGroupsRsp + (*SetPlaylistTrackGroupReq)(nil), // 51: crabs.evening_detective_server.SetPlaylistTrackGroupReq + (*SetPlaylistTrackGroupRsp)(nil), // 52: crabs.evening_detective_server.SetPlaylistTrackGroupRsp + (*PlaylistTrack)(nil), // 53: crabs.evening_detective_server.PlaylistTrack + (*Playlist)(nil), // 54: crabs.evening_detective_server.Playlist + (*GetPlaylistsReq)(nil), // 55: crabs.evening_detective_server.GetPlaylistsReq + (*GetPlaylistsRsp)(nil), // 56: crabs.evening_detective_server.GetPlaylistsRsp + (*CreatePlaylistReq)(nil), // 57: crabs.evening_detective_server.CreatePlaylistReq + (*CreatePlaylistRsp)(nil), // 58: crabs.evening_detective_server.CreatePlaylistRsp + (*UpdatePlaylistReq)(nil), // 59: crabs.evening_detective_server.UpdatePlaylistReq + (*UpdatePlaylistRsp)(nil), // 60: crabs.evening_detective_server.UpdatePlaylistRsp + (*DeletePlaylistReq)(nil), // 61: crabs.evening_detective_server.DeletePlaylistReq + (*DeletePlaylistRsp)(nil), // 62: crabs.evening_detective_server.DeletePlaylistRsp + (*UploadPlaylistTrackReq)(nil), // 63: crabs.evening_detective_server.UploadPlaylistTrackReq + (*UploadPlaylistTrackRsp)(nil), // 64: crabs.evening_detective_server.UploadPlaylistTrackRsp + (*ReorderPlaylistTracksReq)(nil), // 65: crabs.evening_detective_server.ReorderPlaylistTracksReq + (*ReorderPlaylistTracksRsp)(nil), // 66: crabs.evening_detective_server.ReorderPlaylistTracksRsp + (*DeletePlaylistTrackReq)(nil), // 67: crabs.evening_detective_server.DeletePlaylistTrackReq + (*DeletePlaylistTrackRsp)(nil), // 68: crabs.evening_detective_server.DeletePlaylistTrackRsp + (*SetScenarioPlaylistReq)(nil), // 69: crabs.evening_detective_server.SetScenarioPlaylistReq + (*SetScenarioPlaylistRsp)(nil), // 70: crabs.evening_detective_server.SetScenarioPlaylistRsp + (*AddScenarioReq)(nil), // 71: crabs.evening_detective_server.AddScenarioReq + (*AddScenarioRsp)(nil), // 72: crabs.evening_detective_server.AddScenarioRsp + (*GetMyScenariosReq)(nil), // 73: crabs.evening_detective_server.GetMyScenariosReq + (*GetMyScenariosRsp)(nil), // 74: crabs.evening_detective_server.GetMyScenariosRsp + (*GetScenariosCatalogReq)(nil), // 75: crabs.evening_detective_server.GetScenariosCatalogReq + (*GetScenariosCatalogRsp)(nil), // 76: crabs.evening_detective_server.GetScenariosCatalogRsp + (*GetScenarioReq)(nil), // 77: crabs.evening_detective_server.GetScenarioReq + (*GetScenarioRsp)(nil), // 78: crabs.evening_detective_server.GetScenarioRsp + (*Scenario)(nil), // 79: crabs.evening_detective_server.Scenario + (*Story)(nil), // 80: crabs.evening_detective_server.Story + (*Conclusion)(nil), // 81: crabs.evening_detective_server.Conclusion + (*Introduction)(nil), // 82: crabs.evening_detective_server.Introduction + (*Place)(nil), // 83: crabs.evening_detective_server.Place + (*Application)(nil), // 84: crabs.evening_detective_server.Application + (*Door)(nil), // 85: crabs.evening_detective_server.Door + (*Key)(nil), // 86: crabs.evening_detective_server.Key + (*Question)(nil), // 87: crabs.evening_detective_server.Question + (*Answer)(nil), // 88: crabs.evening_detective_server.Answer + (*AnswerScore)(nil), // 89: crabs.evening_detective_server.AnswerScore + (*TeamAnswers)(nil), // 90: crabs.evening_detective_server.TeamAnswers + (*UpdateScenarioReq)(nil), // 91: crabs.evening_detective_server.UpdateScenarioReq + (*UpdateScenarioRsp)(nil), // 92: crabs.evening_detective_server.UpdateScenarioRsp + (*PublicScenarioReq)(nil), // 93: crabs.evening_detective_server.PublicScenarioReq + (*PublicScenarioRsp)(nil), // 94: crabs.evening_detective_server.PublicScenarioRsp + (*DraftScenarioReq)(nil), // 95: crabs.evening_detective_server.DraftScenarioReq + (*DraftScenarioRsp)(nil), // 96: crabs.evening_detective_server.DraftScenarioRsp + (*DeleteScenarioReq)(nil), // 97: crabs.evening_detective_server.DeleteScenarioReq + (*DeleteScenarioRsp)(nil), // 98: crabs.evening_detective_server.DeleteScenarioRsp + (*AddScenarioPlaceReq)(nil), // 99: crabs.evening_detective_server.AddScenarioPlaceReq + (*AddScenarioPlaceRsp)(nil), // 100: crabs.evening_detective_server.AddScenarioPlaceRsp + (*UpdateScenarioPlaceReq)(nil), // 101: crabs.evening_detective_server.UpdateScenarioPlaceReq + (*UpdateScenarioPlaceRsp)(nil), // 102: crabs.evening_detective_server.UpdateScenarioPlaceRsp + (*DeleteScenarioPlaceReq)(nil), // 103: crabs.evening_detective_server.DeleteScenarioPlaceReq + (*DeleteScenarioPlaceRsp)(nil), // 104: crabs.evening_detective_server.DeleteScenarioPlaceRsp + (*UpdateScenarioConclusionReq)(nil), // 105: crabs.evening_detective_server.UpdateScenarioConclusionReq + (*UpdateScenarioConclusionRsp)(nil), // 106: crabs.evening_detective_server.UpdateScenarioConclusionRsp + (*UpdateScenarioIntroReq)(nil), // 107: crabs.evening_detective_server.UpdateScenarioIntroReq + (*UpdateScenarioIntroRsp)(nil), // 108: crabs.evening_detective_server.UpdateScenarioIntroRsp + (*AddScenarioQuestionReq)(nil), // 109: crabs.evening_detective_server.AddScenarioQuestionReq + (*AddScenarioQuestionRsp)(nil), // 110: crabs.evening_detective_server.AddScenarioQuestionRsp + (*UpdateScenarioQuestionReq)(nil), // 111: crabs.evening_detective_server.UpdateScenarioQuestionReq + (*UpdateScenarioQuestionRsp)(nil), // 112: crabs.evening_detective_server.UpdateScenarioQuestionRsp + (*DeleteScenarioQuestionReq)(nil), // 113: crabs.evening_detective_server.DeleteScenarioQuestionReq + (*DeleteScenarioQuestionRsp)(nil), // 114: crabs.evening_detective_server.DeleteScenarioQuestionRsp + (*DownloadScenarioArchiveReq)(nil), // 115: crabs.evening_detective_server.DownloadScenarioArchiveReq + (*UploadScenarioArchiveRsp)(nil), // 116: crabs.evening_detective_server.UploadScenarioArchiveRsp + (*AddGameReq)(nil), // 117: crabs.evening_detective_server.AddGameReq + (*AddGameRsp)(nil), // 118: crabs.evening_detective_server.AddGameRsp + (*GetGamesReq)(nil), // 119: crabs.evening_detective_server.GetGamesReq + (*GetGamesRsp)(nil), // 120: crabs.evening_detective_server.GetGamesRsp + (*Game)(nil), // 121: crabs.evening_detective_server.Game + (*GameExport)(nil), // 122: crabs.evening_detective_server.GameExport + (*GameImportRsp)(nil), // 123: crabs.evening_detective_server.GameImportRsp + (*StartGameExportReq)(nil), // 124: crabs.evening_detective_server.StartGameExportReq + (*GetGameExportReq)(nil), // 125: crabs.evening_detective_server.GetGameExportReq + (*ResetGameLocalModeReq)(nil), // 126: crabs.evening_detective_server.ResetGameLocalModeReq + (*ResetGameLocalModeRsp)(nil), // 127: crabs.evening_detective_server.ResetGameLocalModeRsp + (*GameExportRsp)(nil), // 128: crabs.evening_detective_server.GameExportRsp + (*ScreenState)(nil), // 129: crabs.evening_detective_server.ScreenState + (*CreateScreenSessionReq)(nil), // 130: crabs.evening_detective_server.CreateScreenSessionReq + (*CreateScreenSessionRsp)(nil), // 131: crabs.evening_detective_server.CreateScreenSessionRsp + (*GetScreenStateReq)(nil), // 132: crabs.evening_detective_server.GetScreenStateReq + (*GetScreenStateRsp)(nil), // 133: crabs.evening_detective_server.GetScreenStateRsp + (*GetGameScreensReq)(nil), // 134: crabs.evening_detective_server.GetGameScreensReq + (*GetGameScreensRsp)(nil), // 135: crabs.evening_detective_server.GetGameScreensRsp + (*MusicState)(nil), // 136: crabs.evening_detective_server.MusicState + (*GetGameMusicReq)(nil), // 137: crabs.evening_detective_server.GetGameMusicReq + (*GetGameMusicRsp)(nil), // 138: crabs.evening_detective_server.GetGameMusicRsp + (*SetGameMusicReq)(nil), // 139: crabs.evening_detective_server.SetGameMusicReq + (*SetGameMusicRsp)(nil), // 140: crabs.evening_detective_server.SetGameMusicRsp + (*AdvanceScreenMusicReq)(nil), // 141: crabs.evening_detective_server.AdvanceScreenMusicReq + (*AdvanceScreenMusicRsp)(nil), // 142: crabs.evening_detective_server.AdvanceScreenMusicRsp + (*BindScreenReq)(nil), // 143: crabs.evening_detective_server.BindScreenReq + (*BindScreenRsp)(nil), // 144: crabs.evening_detective_server.BindScreenRsp + (*UnbindScreenReq)(nil), // 145: crabs.evening_detective_server.UnbindScreenReq + (*UnbindScreenRsp)(nil), // 146: crabs.evening_detective_server.UnbindScreenRsp + (*SetScreenSoundReq)(nil), // 147: crabs.evening_detective_server.SetScreenSoundReq + (*SetScreenSoundRsp)(nil), // 148: crabs.evening_detective_server.SetScreenSoundRsp + (*MapItem)(nil), // 149: crabs.evening_detective_server.MapItem + (*GetGameMapReq)(nil), // 150: crabs.evening_detective_server.GetGameMapReq + (*GetGameMapRsp)(nil), // 151: crabs.evening_detective_server.GetGameMapRsp + (*UpdateGameMapItemReq)(nil), // 152: crabs.evening_detective_server.UpdateGameMapItemReq + (*UpdateGameMapItemRsp)(nil), // 153: crabs.evening_detective_server.UpdateGameMapItemRsp + (*SetScreenModeReq)(nil), // 154: crabs.evening_detective_server.SetScreenModeReq + (*SetScreenModeRsp)(nil), // 155: crabs.evening_detective_server.SetScreenModeRsp + (*SetScreenTimerReq)(nil), // 156: crabs.evening_detective_server.SetScreenTimerReq + (*SetScreenTimerRsp)(nil), // 157: crabs.evening_detective_server.SetScreenTimerRsp + (*SendScreenCommandReq)(nil), // 158: crabs.evening_detective_server.SendScreenCommandReq + (*SendScreenCommandRsp)(nil), // 159: crabs.evening_detective_server.SendScreenCommandRsp + (*ScreenPlanStep)(nil), // 160: crabs.evening_detective_server.ScreenPlanStep + (*ScreenPlan)(nil), // 161: crabs.evening_detective_server.ScreenPlan + (*GetScreenPlanReq)(nil), // 162: crabs.evening_detective_server.GetScreenPlanReq + (*GetScreenPlanRsp)(nil), // 163: crabs.evening_detective_server.GetScreenPlanRsp + (*SaveScreenPlanReq)(nil), // 164: crabs.evening_detective_server.SaveScreenPlanReq + (*SaveScreenPlanRsp)(nil), // 165: crabs.evening_detective_server.SaveScreenPlanRsp + (*SetScreenPlanStepReq)(nil), // 166: crabs.evening_detective_server.SetScreenPlanStepReq + (*SetScreenPlanStepRsp)(nil), // 167: crabs.evening_detective_server.SetScreenPlanStepRsp + (*ScreenTeam)(nil), // 168: crabs.evening_detective_server.ScreenTeam + (*GetScreenTeamsReq)(nil), // 169: crabs.evening_detective_server.GetScreenTeamsReq + (*GetScreenTeamsRsp)(nil), // 170: crabs.evening_detective_server.GetScreenTeamsRsp + (*GetScreenResultsReq)(nil), // 171: crabs.evening_detective_server.GetScreenResultsReq + (*GetScreenResultsRsp)(nil), // 172: crabs.evening_detective_server.GetScreenResultsRsp + (*GetParticipationReq)(nil), // 173: crabs.evening_detective_server.GetParticipationReq + (*AnswerParticipationReq)(nil), // 174: crabs.evening_detective_server.AnswerParticipationReq + (*ParticipationRsp)(nil), // 175: crabs.evening_detective_server.ParticipationRsp + (*Team)(nil), // 176: crabs.evening_detective_server.Team + (*GetGameReq)(nil), // 177: crabs.evening_detective_server.GetGameReq + (*GetGameRsp)(nil), // 178: crabs.evening_detective_server.GetGameRsp + (*GetGameAnswersReq)(nil), // 179: crabs.evening_detective_server.GetGameAnswersReq + (*GetGameAnswersRsp)(nil), // 180: crabs.evening_detective_server.GetGameAnswersRsp + (*GetGameResultsReq)(nil), // 181: crabs.evening_detective_server.GetGameResultsReq + (*ResultsQuestion)(nil), // 182: crabs.evening_detective_server.ResultsQuestion + (*TeamResult)(nil), // 183: crabs.evening_detective_server.TeamResult + (*GetGameResultsRsp)(nil), // 184: crabs.evening_detective_server.GetGameResultsRsp + (*GameReview)(nil), // 185: crabs.evening_detective_server.GameReview + (*CreateGameReviewReq)(nil), // 186: crabs.evening_detective_server.CreateGameReviewReq + (*CreateGameReviewRsp)(nil), // 187: crabs.evening_detective_server.CreateGameReviewRsp + (*GetGameReviewsReq)(nil), // 188: crabs.evening_detective_server.GetGameReviewsReq + (*GetScenarioReviewsReq)(nil), // 189: crabs.evening_detective_server.GetScenarioReviewsReq + (*GetReviewsForModerationReq)(nil), // 190: crabs.evening_detective_server.GetReviewsForModerationReq + (*GetGameReviewsRsp)(nil), // 191: crabs.evening_detective_server.GetGameReviewsRsp + (*ModerateGameReviewReq)(nil), // 192: crabs.evening_detective_server.ModerateGameReviewReq + (*ModerateGameReviewRsp)(nil), // 193: crabs.evening_detective_server.ModerateGameReviewRsp + (*UpdateGameReq)(nil), // 194: crabs.evening_detective_server.UpdateGameReq + (*UpdateGameRsp)(nil), // 195: crabs.evening_detective_server.UpdateGameRsp + (*StartGameReq)(nil), // 196: crabs.evening_detective_server.StartGameReq + (*StartGameRsp)(nil), // 197: crabs.evening_detective_server.StartGameRsp + (*PauseGameReq)(nil), // 198: crabs.evening_detective_server.PauseGameReq + (*PauseGameRsp)(nil), // 199: crabs.evening_detective_server.PauseGameRsp + (*PlayGameReq)(nil), // 200: crabs.evening_detective_server.PlayGameReq + (*PlayGameRsp)(nil), // 201: crabs.evening_detective_server.PlayGameRsp + (*FinishGameReq)(nil), // 202: crabs.evening_detective_server.FinishGameReq + (*FinishGameRsp)(nil), // 203: crabs.evening_detective_server.FinishGameRsp + (*ResetGameReq)(nil), // 204: crabs.evening_detective_server.ResetGameReq + (*ResetGameRsp)(nil), // 205: crabs.evening_detective_server.ResetGameRsp + (*DeleteGameReq)(nil), // 206: crabs.evening_detective_server.DeleteGameReq + (*DeleteGameRsp)(nil), // 207: crabs.evening_detective_server.DeleteGameRsp + (*AddTeamReq)(nil), // 208: crabs.evening_detective_server.AddTeamReq + (*AddTeamRsp)(nil), // 209: crabs.evening_detective_server.AddTeamRsp + (*UpdateTeamReq)(nil), // 210: crabs.evening_detective_server.UpdateTeamReq + (*UpdateTeamRsp)(nil), // 211: crabs.evening_detective_server.UpdateTeamRsp + (*DeleteTeamReq)(nil), // 212: crabs.evening_detective_server.DeleteTeamReq + (*DeleteTeamRsp)(nil), // 213: crabs.evening_detective_server.DeleteTeamRsp + (*GiveTeamApplicationsReq)(nil), // 214: crabs.evening_detective_server.GiveTeamApplicationsReq + (*GiveTeamApplicationsRsp)(nil), // 215: crabs.evening_detective_server.GiveTeamApplicationsRsp + (*GetTeamStoryReq)(nil), // 216: crabs.evening_detective_server.GetTeamStoryReq + (*GetTeamStoryRsp)(nil), // 217: crabs.evening_detective_server.GetTeamStoryRsp + (*TeamAction)(nil), // 218: crabs.evening_detective_server.TeamAction + (*AddTeamActionReq)(nil), // 219: crabs.evening_detective_server.AddTeamActionReq + (*AddTeamActionRsp)(nil), // 220: crabs.evening_detective_server.AddTeamActionRsp + (*DeleteLastTeamActionReq)(nil), // 221: crabs.evening_detective_server.DeleteLastTeamActionReq + (*DeleteLastTeamActionRsp)(nil), // 222: crabs.evening_detective_server.DeleteLastTeamActionRsp + (*GetTeamAnswersReq)(nil), // 223: crabs.evening_detective_server.GetTeamAnswersReq + (*GetTeamAnswersRsp)(nil), // 224: crabs.evening_detective_server.GetTeamAnswersRsp + (*SubmitTeamAnswersReq)(nil), // 225: crabs.evening_detective_server.SubmitTeamAnswersReq + (*SubmitTeamAnswersRsp)(nil), // 226: crabs.evening_detective_server.SubmitTeamAnswersRsp + (*SetTeamAnswerScoreReq)(nil), // 227: crabs.evening_detective_server.SetTeamAnswerScoreReq + (*SetTeamAnswerScoreRsp)(nil), // 228: crabs.evening_detective_server.SetTeamAnswerScoreRsp + (*UpdateScenarioBackgroundReq)(nil), // 229: crabs.evening_detective_server.UpdateScenarioBackgroundReq + (*UpdateScenarioBackgroundRsp)(nil), // 230: crabs.evening_detective_server.UpdateScenarioBackgroundRsp + (*IssueGameTicketsReq)(nil), // 231: crabs.evening_detective_server.IssueGameTicketsReq + (*IssueGameTicketsRsp)(nil), // 232: crabs.evening_detective_server.IssueGameTicketsRsp + (*Ticket)(nil), // 233: crabs.evening_detective_server.Ticket + (*GetTicketReq)(nil), // 234: crabs.evening_detective_server.GetTicketReq + (*GetTicketRsp)(nil), // 235: crabs.evening_detective_server.GetTicketRsp + (*AcceptTicketReq)(nil), // 236: crabs.evening_detective_server.AcceptTicketReq + (*AcceptTicketRsp)(nil), // 237: crabs.evening_detective_server.AcceptTicketRsp + (*TicketPage)(nil), // 238: crabs.evening_detective_server.TicketPage + (*DeveloperTask)(nil), // 239: crabs.evening_detective_server.DeveloperTask + (*TaskAssignee)(nil), // 240: crabs.evening_detective_server.TaskAssignee + (*GetTasksReq)(nil), // 241: crabs.evening_detective_server.GetTasksReq + (*GetTasksRsp)(nil), // 242: crabs.evening_detective_server.GetTasksRsp + (*GetTaskAssigneesReq)(nil), // 243: crabs.evening_detective_server.GetTaskAssigneesReq + (*GetTaskAssigneesRsp)(nil), // 244: crabs.evening_detective_server.GetTaskAssigneesRsp + (*CreateTaskReq)(nil), // 245: crabs.evening_detective_server.CreateTaskReq + (*UpdateTaskReq)(nil), // 246: crabs.evening_detective_server.UpdateTaskReq + (*SetTaskStatusReq)(nil), // 247: crabs.evening_detective_server.SetTaskStatusReq + (*DeleteTaskReq)(nil), // 248: crabs.evening_detective_server.DeleteTaskReq + (*TaskRsp)(nil), // 249: crabs.evening_detective_server.TaskRsp + (*DeleteTaskRsp)(nil), // 250: crabs.evening_detective_server.DeleteTaskRsp + (*GameResultsPackageReq)(nil), // 251: crabs.evening_detective_server.GameResultsPackageReq + (*ApplyGameResultsPackageReq)(nil), // 252: crabs.evening_detective_server.ApplyGameResultsPackageReq + (*GameResultsPackageRsp)(nil), // 253: crabs.evening_detective_server.GameResultsPackageRsp + (*DeviceHeartbeatReq)(nil), // 254: crabs.evening_detective_server.DeviceHeartbeatReq + (*DeviceHeartbeatRsp)(nil), // 255: crabs.evening_detective_server.DeviceHeartbeatRsp + (*GetDevicesReq)(nil), // 256: crabs.evening_detective_server.GetDevicesReq + (*GetDevicesRsp)(nil), // 257: crabs.evening_detective_server.GetDevicesRsp + (*VenueDevice)(nil), // 258: crabs.evening_detective_server.VenueDevice + (*DeviceConnection)(nil), // 259: crabs.evening_detective_server.DeviceConnection + (*VenueWiFi)(nil), // 260: crabs.evening_detective_server.VenueWiFi + (*WiFiClient)(nil), // 261: crabs.evening_detective_server.WiFiClient + (*TeamReceiptReq)(nil), // 262: crabs.evening_detective_server.TeamReceiptReq + (*PrintTeamReceiptRsp)(nil), // 263: crabs.evening_detective_server.PrintTeamReceiptRsp + (*timestamppb.Timestamp)(nil), // 264: google.protobuf.Timestamp + (*httpbody.HttpBody)(nil), // 265: google.api.HttpBody } var file_main_proto_depIdxs = []int32{ - 27, // 0: crabs.evening_detective_server.GetUsersRsp.users:type_name -> crabs.evening_detective_server.User - 254, // 1: crabs.evening_detective_server.User.created_at:type_name -> google.protobuf.Timestamp - 27, // 2: crabs.evening_detective_server.GetUserByIDRsp.user:type_name -> crabs.evening_detective_server.User - 27, // 3: crabs.evening_detective_server.GetMeRsp.user:type_name -> crabs.evening_detective_server.User - 43, // 4: crabs.evening_detective_server.Playlist.tracks:type_name -> crabs.evening_detective_server.PlaylistTrack - 44, // 5: crabs.evening_detective_server.GetPlaylistsRsp.playlists:type_name -> crabs.evening_detective_server.Playlist - 44, // 6: crabs.evening_detective_server.CreatePlaylistRsp.playlist:type_name -> crabs.evening_detective_server.Playlist - 44, // 7: crabs.evening_detective_server.UpdatePlaylistRsp.playlist:type_name -> crabs.evening_detective_server.Playlist - 44, // 8: crabs.evening_detective_server.UploadPlaylistTrackRsp.playlist:type_name -> crabs.evening_detective_server.Playlist - 44, // 9: crabs.evening_detective_server.ReorderPlaylistTracksRsp.playlist:type_name -> crabs.evening_detective_server.Playlist - 69, // 10: crabs.evening_detective_server.GetMyScenariosRsp.scenarios:type_name -> crabs.evening_detective_server.Scenario - 69, // 11: crabs.evening_detective_server.GetScenariosCatalogRsp.scenarios:type_name -> crabs.evening_detective_server.Scenario - 69, // 12: crabs.evening_detective_server.GetScenarioRsp.scenario:type_name -> crabs.evening_detective_server.Scenario - 70, // 13: crabs.evening_detective_server.Scenario.story:type_name -> crabs.evening_detective_server.Story - 27, // 14: crabs.evening_detective_server.Scenario.author:type_name -> crabs.evening_detective_server.User - 254, // 15: crabs.evening_detective_server.Scenario.updated_at:type_name -> google.protobuf.Timestamp - 254, // 16: crabs.evening_detective_server.Scenario.created_at:type_name -> google.protobuf.Timestamp - 254, // 17: crabs.evening_detective_server.Scenario.published_at:type_name -> google.protobuf.Timestamp - 73, // 18: crabs.evening_detective_server.Story.places:type_name -> crabs.evening_detective_server.Place - 72, // 19: crabs.evening_detective_server.Story.introduction:type_name -> crabs.evening_detective_server.Introduction - 77, // 20: crabs.evening_detective_server.Story.questions:type_name -> crabs.evening_detective_server.Question - 71, // 21: crabs.evening_detective_server.Story.conclusion:type_name -> crabs.evening_detective_server.Conclusion - 74, // 22: crabs.evening_detective_server.Place.applications:type_name -> crabs.evening_detective_server.Application - 75, // 23: crabs.evening_detective_server.Place.doors:type_name -> crabs.evening_detective_server.Door - 76, // 24: crabs.evening_detective_server.Place.keys:type_name -> crabs.evening_detective_server.Key - 76, // 25: crabs.evening_detective_server.Door.keys:type_name -> crabs.evening_detective_server.Key - 166, // 26: crabs.evening_detective_server.TeamAnswers.team:type_name -> crabs.evening_detective_server.Team - 79, // 27: crabs.evening_detective_server.TeamAnswers.answers:type_name -> crabs.evening_detective_server.AnswerScore - 73, // 28: crabs.evening_detective_server.AddScenarioPlaceReq.place:type_name -> crabs.evening_detective_server.Place - 73, // 29: crabs.evening_detective_server.UpdateScenarioPlaceReq.place:type_name -> crabs.evening_detective_server.Place - 71, // 30: crabs.evening_detective_server.UpdateScenarioConclusionReq.conclusion:type_name -> crabs.evening_detective_server.Conclusion - 72, // 31: crabs.evening_detective_server.UpdateScenarioIntroReq.introduction:type_name -> crabs.evening_detective_server.Introduction - 77, // 32: crabs.evening_detective_server.AddScenarioQuestionReq.question:type_name -> crabs.evening_detective_server.Question - 77, // 33: crabs.evening_detective_server.UpdateScenarioQuestionReq.question:type_name -> crabs.evening_detective_server.Question - 254, // 34: crabs.evening_detective_server.AddGameReq.start_at:type_name -> google.protobuf.Timestamp - 111, // 35: crabs.evening_detective_server.GetGamesRsp.games:type_name -> crabs.evening_detective_server.Game - 254, // 36: crabs.evening_detective_server.Game.start_at:type_name -> google.protobuf.Timestamp - 69, // 37: crabs.evening_detective_server.Game.scenario:type_name -> crabs.evening_detective_server.Scenario - 166, // 38: crabs.evening_detective_server.Game.teams:type_name -> crabs.evening_detective_server.Team - 254, // 39: crabs.evening_detective_server.Game.started_at:type_name -> google.protobuf.Timestamp - 254, // 40: crabs.evening_detective_server.Game.ended_at:type_name -> google.protobuf.Timestamp - 112, // 41: crabs.evening_detective_server.Game.export:type_name -> crabs.evening_detective_server.GameExport - 112, // 42: crabs.evening_detective_server.GameExportRsp.export:type_name -> crabs.evening_detective_server.GameExport - 0, // 43: crabs.evening_detective_server.ScreenState.mode:type_name -> crabs.evening_detective_server.ScreenMode - 3, // 44: crabs.evening_detective_server.ScreenState.command:type_name -> crabs.evening_detective_server.ScreenCommand - 2, // 45: crabs.evening_detective_server.ScreenState.timer_state:type_name -> crabs.evening_detective_server.ScreenTimerState - 126, // 46: crabs.evening_detective_server.ScreenState.music:type_name -> crabs.evening_detective_server.MusicState - 1, // 47: crabs.evening_detective_server.ScreenState.timer_type:type_name -> crabs.evening_detective_server.ScreenTimerType - 119, // 48: crabs.evening_detective_server.GetScreenStateRsp.state:type_name -> crabs.evening_detective_server.ScreenState - 119, // 49: crabs.evening_detective_server.GetGameScreensRsp.screens:type_name -> crabs.evening_detective_server.ScreenState - 44, // 50: crabs.evening_detective_server.MusicState.playlist:type_name -> crabs.evening_detective_server.Playlist - 4, // 51: crabs.evening_detective_server.MusicState.playback:type_name -> crabs.evening_detective_server.MusicPlaybackState - 44, // 52: crabs.evening_detective_server.GetGameMusicRsp.playlists:type_name -> crabs.evening_detective_server.Playlist - 126, // 53: crabs.evening_detective_server.GetGameMusicRsp.state:type_name -> crabs.evening_detective_server.MusicState - 4, // 54: crabs.evening_detective_server.SetGameMusicReq.playback:type_name -> crabs.evening_detective_server.MusicPlaybackState - 126, // 55: crabs.evening_detective_server.SetGameMusicRsp.state:type_name -> crabs.evening_detective_server.MusicState - 126, // 56: crabs.evening_detective_server.AdvanceScreenMusicRsp.state:type_name -> crabs.evening_detective_server.MusicState - 119, // 57: crabs.evening_detective_server.BindScreenRsp.state:type_name -> crabs.evening_detective_server.ScreenState - 139, // 58: crabs.evening_detective_server.GetGameMapRsp.items:type_name -> crabs.evening_detective_server.MapItem - 0, // 59: crabs.evening_detective_server.SetScreenModeReq.mode:type_name -> crabs.evening_detective_server.ScreenMode - 1, // 60: crabs.evening_detective_server.SetScreenTimerReq.timer_type:type_name -> crabs.evening_detective_server.ScreenTimerType - 3, // 61: crabs.evening_detective_server.SendScreenCommandReq.command:type_name -> crabs.evening_detective_server.ScreenCommand - 0, // 62: crabs.evening_detective_server.ScreenPlanStep.mode:type_name -> crabs.evening_detective_server.ScreenMode - 1, // 63: crabs.evening_detective_server.ScreenPlanStep.timer_type:type_name -> crabs.evening_detective_server.ScreenTimerType - 150, // 64: crabs.evening_detective_server.ScreenPlan.steps:type_name -> crabs.evening_detective_server.ScreenPlanStep - 151, // 65: crabs.evening_detective_server.GetScreenPlanRsp.plan:type_name -> crabs.evening_detective_server.ScreenPlan - 150, // 66: crabs.evening_detective_server.SaveScreenPlanReq.steps:type_name -> crabs.evening_detective_server.ScreenPlanStep - 151, // 67: crabs.evening_detective_server.SaveScreenPlanRsp.plan:type_name -> crabs.evening_detective_server.ScreenPlan - 151, // 68: crabs.evening_detective_server.SetScreenPlanStepRsp.plan:type_name -> crabs.evening_detective_server.ScreenPlan - 158, // 69: crabs.evening_detective_server.GetScreenTeamsRsp.teams:type_name -> crabs.evening_detective_server.ScreenTeam - 172, // 70: crabs.evening_detective_server.GetScreenResultsRsp.questions:type_name -> crabs.evening_detective_server.ResultsQuestion - 173, // 71: crabs.evening_detective_server.GetScreenResultsRsp.teams:type_name -> crabs.evening_detective_server.TeamResult - 254, // 72: crabs.evening_detective_server.ParticipationRsp.start_at:type_name -> google.protobuf.Timestamp - 74, // 73: crabs.evening_detective_server.Team.applications:type_name -> crabs.evening_detective_server.Application - 111, // 74: crabs.evening_detective_server.GetGameRsp.game:type_name -> crabs.evening_detective_server.Game - 77, // 75: crabs.evening_detective_server.GetGameAnswersRsp.questions:type_name -> crabs.evening_detective_server.Question - 80, // 76: crabs.evening_detective_server.GetGameAnswersRsp.teams:type_name -> crabs.evening_detective_server.TeamAnswers - 166, // 77: crabs.evening_detective_server.TeamResult.team:type_name -> crabs.evening_detective_server.Team - 79, // 78: crabs.evening_detective_server.TeamResult.answers:type_name -> crabs.evening_detective_server.AnswerScore - 172, // 79: crabs.evening_detective_server.GetGameResultsRsp.questions:type_name -> crabs.evening_detective_server.ResultsQuestion - 173, // 80: crabs.evening_detective_server.GetGameResultsRsp.teams:type_name -> crabs.evening_detective_server.TeamResult - 254, // 81: crabs.evening_detective_server.GameReview.created_at:type_name -> google.protobuf.Timestamp - 175, // 82: crabs.evening_detective_server.CreateGameReviewRsp.review:type_name -> crabs.evening_detective_server.GameReview - 175, // 83: crabs.evening_detective_server.GetGameReviewsRsp.reviews:type_name -> crabs.evening_detective_server.GameReview - 175, // 84: crabs.evening_detective_server.ModerateGameReviewRsp.review:type_name -> crabs.evening_detective_server.GameReview - 254, // 85: crabs.evening_detective_server.UpdateGameReq.start_at:type_name -> google.protobuf.Timestamp - 70, // 86: crabs.evening_detective_server.GetTeamStoryRsp.story:type_name -> crabs.evening_detective_server.Story - 111, // 87: crabs.evening_detective_server.GetTeamStoryRsp.game:type_name -> crabs.evening_detective_server.Game - 208, // 88: crabs.evening_detective_server.GetTeamStoryRsp.actions:type_name -> crabs.evening_detective_server.TeamAction - 78, // 89: crabs.evening_detective_server.GetTeamAnswersRsp.answers:type_name -> crabs.evening_detective_server.Answer - 78, // 90: crabs.evening_detective_server.SubmitTeamAnswersReq.answers:type_name -> crabs.evening_detective_server.Answer - 223, // 91: crabs.evening_detective_server.IssueGameTicketsRsp.tickets:type_name -> crabs.evening_detective_server.Ticket - 228, // 92: crabs.evening_detective_server.GetTicketRsp.ticket:type_name -> crabs.evening_detective_server.TicketPage - 228, // 93: crabs.evening_detective_server.AcceptTicketRsp.ticket:type_name -> crabs.evening_detective_server.TicketPage - 254, // 94: crabs.evening_detective_server.TicketPage.start_at:type_name -> google.protobuf.Timestamp - 254, // 95: crabs.evening_detective_server.TicketPage.used_at:type_name -> google.protobuf.Timestamp - 254, // 96: crabs.evening_detective_server.DeveloperTask.createdAt:type_name -> google.protobuf.Timestamp - 254, // 97: crabs.evening_detective_server.DeveloperTask.updatedAt:type_name -> google.protobuf.Timestamp - 229, // 98: crabs.evening_detective_server.GetTasksRsp.tasks:type_name -> crabs.evening_detective_server.DeveloperTask - 230, // 99: crabs.evening_detective_server.GetTaskAssigneesRsp.assignees:type_name -> crabs.evening_detective_server.TaskAssignee - 229, // 100: crabs.evening_detective_server.TaskRsp.task:type_name -> crabs.evening_detective_server.DeveloperTask - 255, // 101: crabs.evening_detective_server.ApplyGameResultsPackageReq.package:type_name -> google.api.HttpBody - 254, // 102: crabs.evening_detective_server.DeviceHeartbeatRsp.serverTime:type_name -> google.protobuf.Timestamp - 248, // 103: crabs.evening_detective_server.GetDevicesRsp.devices:type_name -> crabs.evening_detective_server.VenueDevice - 254, // 104: crabs.evening_detective_server.GetDevicesRsp.serverTime:type_name -> google.protobuf.Timestamp - 250, // 105: crabs.evening_detective_server.GetDevicesRsp.wifi:type_name -> crabs.evening_detective_server.VenueWiFi - 254, // 106: crabs.evening_detective_server.VenueDevice.firstSeenAt:type_name -> google.protobuf.Timestamp - 254, // 107: crabs.evening_detective_server.VenueDevice.lastSeenAt:type_name -> google.protobuf.Timestamp - 249, // 108: crabs.evening_detective_server.VenueDevice.connections:type_name -> crabs.evening_detective_server.DeviceConnection - 254, // 109: crabs.evening_detective_server.DeviceConnection.firstSeenAt:type_name -> google.protobuf.Timestamp - 254, // 110: crabs.evening_detective_server.DeviceConnection.lastSeenAt:type_name -> google.protobuf.Timestamp - 254, // 111: crabs.evening_detective_server.VenueWiFi.collectedAt:type_name -> google.protobuf.Timestamp - 251, // 112: crabs.evening_detective_server.VenueWiFi.clients:type_name -> crabs.evening_detective_server.WiFiClient - 244, // 113: crabs.evening_detective_server.EveningDetectiveServer.DeviceHeartbeat:input_type -> crabs.evening_detective_server.DeviceHeartbeatReq - 246, // 114: crabs.evening_detective_server.EveningDetectiveServer.GetDevices:input_type -> crabs.evening_detective_server.GetDevicesReq - 231, // 115: crabs.evening_detective_server.EveningDetectiveServer.GetTasks:input_type -> crabs.evening_detective_server.GetTasksReq - 233, // 116: crabs.evening_detective_server.EveningDetectiveServer.GetTaskAssignees:input_type -> crabs.evening_detective_server.GetTaskAssigneesReq - 235, // 117: crabs.evening_detective_server.EveningDetectiveServer.CreateTask:input_type -> crabs.evening_detective_server.CreateTaskReq - 236, // 118: crabs.evening_detective_server.EveningDetectiveServer.UpdateTask:input_type -> crabs.evening_detective_server.UpdateTaskReq - 237, // 119: crabs.evening_detective_server.EveningDetectiveServer.SetTaskStatus:input_type -> crabs.evening_detective_server.SetTaskStatusReq - 238, // 120: crabs.evening_detective_server.EveningDetectiveServer.DeleteTask:input_type -> crabs.evening_detective_server.DeleteTaskReq - 163, // 121: crabs.evening_detective_server.EveningDetectiveServer.GetParticipation:input_type -> crabs.evening_detective_server.GetParticipationReq - 164, // 122: crabs.evening_detective_server.EveningDetectiveServer.AnswerParticipation:input_type -> crabs.evening_detective_server.AnswerParticipationReq - 5, // 123: crabs.evening_detective_server.EveningDetectiveServer.Ping:input_type -> crabs.evening_detective_server.PingReq - 7, // 124: crabs.evening_detective_server.EveningDetectiveServer.Echo:input_type -> crabs.evening_detective_server.EchoReq - 9, // 125: crabs.evening_detective_server.EveningDetectiveServer.Signup:input_type -> crabs.evening_detective_server.SignupReq - 11, // 126: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:input_type -> crabs.evening_detective_server.RefreshPasswordReq - 13, // 127: crabs.evening_detective_server.EveningDetectiveServer.Login:input_type -> crabs.evening_detective_server.LoginReq - 15, // 128: crabs.evening_detective_server.EveningDetectiveServer.Refresh:input_type -> crabs.evening_detective_server.RefreshReq - 17, // 129: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:input_type -> crabs.evening_detective_server.DeleteAccountReq - 19, // 130: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:input_type -> crabs.evening_detective_server.GetTermsReq - 21, // 131: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:input_type -> crabs.evening_detective_server.GetPrivacyReq - 23, // 132: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:input_type -> crabs.evening_detective_server.GetConsentReq - 25, // 133: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:input_type -> crabs.evening_detective_server.GetUsersReq - 28, // 134: crabs.evening_detective_server.EveningDetectiveServer.GetUserByID:input_type -> crabs.evening_detective_server.GetUserByIDReq - 30, // 135: crabs.evening_detective_server.EveningDetectiveServer.GetMe:input_type -> crabs.evening_detective_server.GetMeReq - 32, // 136: crabs.evening_detective_server.EveningDetectiveServer.ChangeUserPassword:input_type -> crabs.evening_detective_server.ChangeUserPasswordReq - 34, // 137: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:input_type -> crabs.evening_detective_server.AddUserRoleReq - 36, // 138: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:input_type -> crabs.evening_detective_server.DeleteUserRoleReq - 38, // 139: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:input_type -> crabs.evening_detective_server.GetPermissionsReq - 40, // 140: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:input_type -> crabs.evening_detective_server.UploadFileReq - 42, // 141: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:input_type -> crabs.evening_detective_server.DownloadFileReq - 45, // 142: crabs.evening_detective_server.EveningDetectiveServer.GetPlaylists:input_type -> crabs.evening_detective_server.GetPlaylistsReq - 47, // 143: crabs.evening_detective_server.EveningDetectiveServer.CreatePlaylist:input_type -> crabs.evening_detective_server.CreatePlaylistReq - 49, // 144: crabs.evening_detective_server.EveningDetectiveServer.UpdatePlaylist:input_type -> crabs.evening_detective_server.UpdatePlaylistReq - 51, // 145: crabs.evening_detective_server.EveningDetectiveServer.DeletePlaylist:input_type -> crabs.evening_detective_server.DeletePlaylistReq - 53, // 146: crabs.evening_detective_server.EveningDetectiveServer.UploadPlaylistTrack:input_type -> crabs.evening_detective_server.UploadPlaylistTrackReq - 55, // 147: crabs.evening_detective_server.EveningDetectiveServer.ReorderPlaylistTracks:input_type -> crabs.evening_detective_server.ReorderPlaylistTracksReq - 57, // 148: crabs.evening_detective_server.EveningDetectiveServer.DeletePlaylistTrack:input_type -> crabs.evening_detective_server.DeletePlaylistTrackReq - 59, // 149: crabs.evening_detective_server.EveningDetectiveServer.SetScenarioPlaylist:input_type -> crabs.evening_detective_server.SetScenarioPlaylistReq - 61, // 150: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:input_type -> crabs.evening_detective_server.AddScenarioReq - 63, // 151: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:input_type -> crabs.evening_detective_server.GetMyScenariosReq - 65, // 152: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:input_type -> crabs.evening_detective_server.GetScenariosCatalogReq - 67, // 153: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:input_type -> crabs.evening_detective_server.GetScenarioReq - 67, // 154: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:input_type -> crabs.evening_detective_server.GetScenarioReq - 81, // 155: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:input_type -> crabs.evening_detective_server.UpdateScenarioReq - 83, // 156: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:input_type -> crabs.evening_detective_server.PublicScenarioReq - 85, // 157: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:input_type -> crabs.evening_detective_server.DraftScenarioReq - 87, // 158: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:input_type -> crabs.evening_detective_server.DeleteScenarioReq - 89, // 159: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:input_type -> crabs.evening_detective_server.AddScenarioPlaceReq - 91, // 160: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:input_type -> crabs.evening_detective_server.UpdateScenarioPlaceReq - 93, // 161: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:input_type -> crabs.evening_detective_server.DeleteScenarioPlaceReq - 99, // 162: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:input_type -> crabs.evening_detective_server.AddScenarioQuestionReq - 101, // 163: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:input_type -> crabs.evening_detective_server.UpdateScenarioQuestionReq - 103, // 164: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:input_type -> crabs.evening_detective_server.DeleteScenarioQuestionReq - 219, // 165: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioBackground:input_type -> crabs.evening_detective_server.UpdateScenarioBackgroundReq - 97, // 166: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:input_type -> crabs.evening_detective_server.UpdateScenarioIntroReq - 95, // 167: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioConclusion:input_type -> crabs.evening_detective_server.UpdateScenarioConclusionReq - 105, // 168: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:input_type -> crabs.evening_detective_server.DownloadScenarioArchiveReq - 255, // 169: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:input_type -> google.api.HttpBody - 107, // 170: crabs.evening_detective_server.EveningDetectiveServer.AddGame:input_type -> crabs.evening_detective_server.AddGameReq - 109, // 171: crabs.evening_detective_server.EveningDetectiveServer.GetGames:input_type -> crabs.evening_detective_server.GetGamesReq - 167, // 172: crabs.evening_detective_server.EveningDetectiveServer.GetGame:input_type -> crabs.evening_detective_server.GetGameReq - 255, // 173: crabs.evening_detective_server.EveningDetectiveServer.ImportGame:input_type -> google.api.HttpBody - 241, // 174: crabs.evening_detective_server.EveningDetectiveServer.DownloadGameResultsPackage:input_type -> crabs.evening_detective_server.GameResultsPackageReq - 242, // 175: crabs.evening_detective_server.EveningDetectiveServer.ApplyGameResultsPackage:input_type -> crabs.evening_detective_server.ApplyGameResultsPackageReq - 114, // 176: crabs.evening_detective_server.EveningDetectiveServer.StartGameExport:input_type -> crabs.evening_detective_server.StartGameExportReq - 116, // 177: crabs.evening_detective_server.EveningDetectiveServer.ResetGameLocalMode:input_type -> crabs.evening_detective_server.ResetGameLocalModeReq - 115, // 178: crabs.evening_detective_server.EveningDetectiveServer.GetGameExport:input_type -> crabs.evening_detective_server.GetGameExportReq - 221, // 179: crabs.evening_detective_server.EveningDetectiveServer.IssueGameTickets:input_type -> crabs.evening_detective_server.IssueGameTicketsReq - 224, // 180: crabs.evening_detective_server.EveningDetectiveServer.GetTicket:input_type -> crabs.evening_detective_server.GetTicketReq - 226, // 181: crabs.evening_detective_server.EveningDetectiveServer.AcceptTicket:input_type -> crabs.evening_detective_server.AcceptTicketReq - 120, // 182: crabs.evening_detective_server.EveningDetectiveServer.CreateScreenSession:input_type -> crabs.evening_detective_server.CreateScreenSessionReq - 122, // 183: crabs.evening_detective_server.EveningDetectiveServer.GetScreenState:input_type -> crabs.evening_detective_server.GetScreenStateReq - 124, // 184: crabs.evening_detective_server.EveningDetectiveServer.GetGameScreens:input_type -> crabs.evening_detective_server.GetGameScreensReq - 127, // 185: crabs.evening_detective_server.EveningDetectiveServer.GetGameMusic:input_type -> crabs.evening_detective_server.GetGameMusicReq - 129, // 186: crabs.evening_detective_server.EveningDetectiveServer.SetGameMusic:input_type -> crabs.evening_detective_server.SetGameMusicReq - 131, // 187: crabs.evening_detective_server.EveningDetectiveServer.AdvanceScreenMusic:input_type -> crabs.evening_detective_server.AdvanceScreenMusicReq - 133, // 188: crabs.evening_detective_server.EveningDetectiveServer.BindScreen:input_type -> crabs.evening_detective_server.BindScreenReq - 135, // 189: crabs.evening_detective_server.EveningDetectiveServer.UnbindScreen:input_type -> crabs.evening_detective_server.UnbindScreenReq - 137, // 190: crabs.evening_detective_server.EveningDetectiveServer.SetScreenSound:input_type -> crabs.evening_detective_server.SetScreenSoundReq - 140, // 191: crabs.evening_detective_server.EveningDetectiveServer.GetGameMap:input_type -> crabs.evening_detective_server.GetGameMapReq - 142, // 192: crabs.evening_detective_server.EveningDetectiveServer.UpdateGameMapItem:input_type -> crabs.evening_detective_server.UpdateGameMapItemReq - 144, // 193: crabs.evening_detective_server.EveningDetectiveServer.SetScreenMode:input_type -> crabs.evening_detective_server.SetScreenModeReq - 146, // 194: crabs.evening_detective_server.EveningDetectiveServer.SetScreenTimer:input_type -> crabs.evening_detective_server.SetScreenTimerReq - 148, // 195: crabs.evening_detective_server.EveningDetectiveServer.SendScreenCommand:input_type -> crabs.evening_detective_server.SendScreenCommandReq - 152, // 196: crabs.evening_detective_server.EveningDetectiveServer.GetScreenPlan:input_type -> crabs.evening_detective_server.GetScreenPlanReq - 154, // 197: crabs.evening_detective_server.EveningDetectiveServer.SaveScreenPlan:input_type -> crabs.evening_detective_server.SaveScreenPlanReq - 156, // 198: crabs.evening_detective_server.EveningDetectiveServer.SetScreenPlanStep:input_type -> crabs.evening_detective_server.SetScreenPlanStepReq - 159, // 199: crabs.evening_detective_server.EveningDetectiveServer.GetScreenTeams:input_type -> crabs.evening_detective_server.GetScreenTeamsReq - 161, // 200: crabs.evening_detective_server.EveningDetectiveServer.GetScreenResults:input_type -> crabs.evening_detective_server.GetScreenResultsReq - 167, // 201: crabs.evening_detective_server.EveningDetectiveServer.DownloadGamePrintMaterials:input_type -> crabs.evening_detective_server.GetGameReq - 252, // 202: crabs.evening_detective_server.EveningDetectiveServer.PreviewTeamReceipt:input_type -> crabs.evening_detective_server.TeamReceiptReq - 252, // 203: crabs.evening_detective_server.EveningDetectiveServer.PrintTeamReceipt:input_type -> crabs.evening_detective_server.TeamReceiptReq - 167, // 204: crabs.evening_detective_server.EveningDetectiveServer.DownloadTeamQR:input_type -> crabs.evening_detective_server.GetGameReq - 169, // 205: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:input_type -> crabs.evening_detective_server.GetGameAnswersReq - 171, // 206: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:input_type -> crabs.evening_detective_server.GetGameResultsReq - 176, // 207: crabs.evening_detective_server.EveningDetectiveServer.CreateGameReview:input_type -> crabs.evening_detective_server.CreateGameReviewReq - 178, // 208: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviews:input_type -> crabs.evening_detective_server.GetGameReviewsReq - 179, // 209: crabs.evening_detective_server.EveningDetectiveServer.GetScenarioReviews:input_type -> crabs.evening_detective_server.GetScenarioReviewsReq - 178, // 210: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviewsForModeration:input_type -> crabs.evening_detective_server.GetGameReviewsReq - 180, // 211: crabs.evening_detective_server.EveningDetectiveServer.GetReviewsForModeration:input_type -> crabs.evening_detective_server.GetReviewsForModerationReq - 182, // 212: crabs.evening_detective_server.EveningDetectiveServer.ModerateGameReview:input_type -> crabs.evening_detective_server.ModerateGameReviewReq - 184, // 213: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:input_type -> crabs.evening_detective_server.UpdateGameReq - 186, // 214: crabs.evening_detective_server.EveningDetectiveServer.StartGame:input_type -> crabs.evening_detective_server.StartGameReq - 188, // 215: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:input_type -> crabs.evening_detective_server.PauseGameReq - 190, // 216: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:input_type -> crabs.evening_detective_server.PlayGameReq - 192, // 217: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:input_type -> crabs.evening_detective_server.FinishGameReq - 194, // 218: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:input_type -> crabs.evening_detective_server.ResetGameReq - 196, // 219: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:input_type -> crabs.evening_detective_server.DeleteGameReq - 198, // 220: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:input_type -> crabs.evening_detective_server.AddTeamReq - 200, // 221: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:input_type -> crabs.evening_detective_server.UpdateTeamReq - 202, // 222: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:input_type -> crabs.evening_detective_server.DeleteTeamReq - 204, // 223: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:input_type -> crabs.evening_detective_server.GiveTeamApplicationsReq - 206, // 224: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:input_type -> crabs.evening_detective_server.GetTeamStoryReq - 209, // 225: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:input_type -> crabs.evening_detective_server.AddTeamActionReq - 211, // 226: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:input_type -> crabs.evening_detective_server.DeleteLastTeamActionReq - 213, // 227: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:input_type -> crabs.evening_detective_server.GetTeamAnswersReq - 215, // 228: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:input_type -> crabs.evening_detective_server.SubmitTeamAnswersReq - 217, // 229: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:input_type -> crabs.evening_detective_server.SetTeamAnswerScoreReq - 245, // 230: crabs.evening_detective_server.EveningDetectiveServer.DeviceHeartbeat:output_type -> crabs.evening_detective_server.DeviceHeartbeatRsp - 247, // 231: crabs.evening_detective_server.EveningDetectiveServer.GetDevices:output_type -> crabs.evening_detective_server.GetDevicesRsp - 232, // 232: crabs.evening_detective_server.EveningDetectiveServer.GetTasks:output_type -> crabs.evening_detective_server.GetTasksRsp - 234, // 233: crabs.evening_detective_server.EveningDetectiveServer.GetTaskAssignees:output_type -> crabs.evening_detective_server.GetTaskAssigneesRsp - 239, // 234: crabs.evening_detective_server.EveningDetectiveServer.CreateTask:output_type -> crabs.evening_detective_server.TaskRsp - 239, // 235: crabs.evening_detective_server.EveningDetectiveServer.UpdateTask:output_type -> crabs.evening_detective_server.TaskRsp - 239, // 236: crabs.evening_detective_server.EveningDetectiveServer.SetTaskStatus:output_type -> crabs.evening_detective_server.TaskRsp - 240, // 237: crabs.evening_detective_server.EveningDetectiveServer.DeleteTask:output_type -> crabs.evening_detective_server.DeleteTaskRsp - 165, // 238: crabs.evening_detective_server.EveningDetectiveServer.GetParticipation:output_type -> crabs.evening_detective_server.ParticipationRsp - 165, // 239: crabs.evening_detective_server.EveningDetectiveServer.AnswerParticipation:output_type -> crabs.evening_detective_server.ParticipationRsp - 6, // 240: crabs.evening_detective_server.EveningDetectiveServer.Ping:output_type -> crabs.evening_detective_server.PingRsp - 8, // 241: crabs.evening_detective_server.EveningDetectiveServer.Echo:output_type -> crabs.evening_detective_server.EchoRsp - 10, // 242: crabs.evening_detective_server.EveningDetectiveServer.Signup:output_type -> crabs.evening_detective_server.SignupRsp - 12, // 243: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:output_type -> crabs.evening_detective_server.RefreshPasswordRsp - 14, // 244: crabs.evening_detective_server.EveningDetectiveServer.Login:output_type -> crabs.evening_detective_server.LoginRsp - 16, // 245: crabs.evening_detective_server.EveningDetectiveServer.Refresh:output_type -> crabs.evening_detective_server.RefreshRsp - 18, // 246: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:output_type -> crabs.evening_detective_server.DeleteAccountRsp - 20, // 247: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:output_type -> crabs.evening_detective_server.GetTermsRsp - 22, // 248: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:output_type -> crabs.evening_detective_server.GetPrivacyRsp - 24, // 249: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:output_type -> crabs.evening_detective_server.GetConsentRsp - 26, // 250: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:output_type -> crabs.evening_detective_server.GetUsersRsp - 29, // 251: crabs.evening_detective_server.EveningDetectiveServer.GetUserByID:output_type -> crabs.evening_detective_server.GetUserByIDRsp - 31, // 252: crabs.evening_detective_server.EveningDetectiveServer.GetMe:output_type -> crabs.evening_detective_server.GetMeRsp - 33, // 253: crabs.evening_detective_server.EveningDetectiveServer.ChangeUserPassword:output_type -> crabs.evening_detective_server.ChangeUserPasswordRsp - 35, // 254: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:output_type -> crabs.evening_detective_server.AddUserRoleRsp - 37, // 255: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:output_type -> crabs.evening_detective_server.DeleteUserRoleRsp - 39, // 256: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:output_type -> crabs.evening_detective_server.GetPermissionsRsp - 41, // 257: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:output_type -> crabs.evening_detective_server.UploadFileRsp - 255, // 258: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:output_type -> google.api.HttpBody - 46, // 259: crabs.evening_detective_server.EveningDetectiveServer.GetPlaylists:output_type -> crabs.evening_detective_server.GetPlaylistsRsp - 48, // 260: crabs.evening_detective_server.EveningDetectiveServer.CreatePlaylist:output_type -> crabs.evening_detective_server.CreatePlaylistRsp - 50, // 261: crabs.evening_detective_server.EveningDetectiveServer.UpdatePlaylist:output_type -> crabs.evening_detective_server.UpdatePlaylistRsp - 52, // 262: crabs.evening_detective_server.EveningDetectiveServer.DeletePlaylist:output_type -> crabs.evening_detective_server.DeletePlaylistRsp - 54, // 263: crabs.evening_detective_server.EveningDetectiveServer.UploadPlaylistTrack:output_type -> crabs.evening_detective_server.UploadPlaylistTrackRsp - 56, // 264: crabs.evening_detective_server.EveningDetectiveServer.ReorderPlaylistTracks:output_type -> crabs.evening_detective_server.ReorderPlaylistTracksRsp - 58, // 265: crabs.evening_detective_server.EveningDetectiveServer.DeletePlaylistTrack:output_type -> crabs.evening_detective_server.DeletePlaylistTrackRsp - 60, // 266: crabs.evening_detective_server.EveningDetectiveServer.SetScenarioPlaylist:output_type -> crabs.evening_detective_server.SetScenarioPlaylistRsp - 62, // 267: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:output_type -> crabs.evening_detective_server.AddScenarioRsp - 64, // 268: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:output_type -> crabs.evening_detective_server.GetMyScenariosRsp - 66, // 269: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:output_type -> crabs.evening_detective_server.GetScenariosCatalogRsp - 68, // 270: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp - 68, // 271: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp - 82, // 272: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:output_type -> crabs.evening_detective_server.UpdateScenarioRsp - 84, // 273: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:output_type -> crabs.evening_detective_server.PublicScenarioRsp - 86, // 274: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:output_type -> crabs.evening_detective_server.DraftScenarioRsp - 88, // 275: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:output_type -> crabs.evening_detective_server.DeleteScenarioRsp - 90, // 276: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:output_type -> crabs.evening_detective_server.AddScenarioPlaceRsp - 92, // 277: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:output_type -> crabs.evening_detective_server.UpdateScenarioPlaceRsp - 94, // 278: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:output_type -> crabs.evening_detective_server.DeleteScenarioPlaceRsp - 100, // 279: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:output_type -> crabs.evening_detective_server.AddScenarioQuestionRsp - 102, // 280: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:output_type -> crabs.evening_detective_server.UpdateScenarioQuestionRsp - 104, // 281: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:output_type -> crabs.evening_detective_server.DeleteScenarioQuestionRsp - 220, // 282: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioBackground:output_type -> crabs.evening_detective_server.UpdateScenarioBackgroundRsp - 98, // 283: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:output_type -> crabs.evening_detective_server.UpdateScenarioIntroRsp - 96, // 284: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioConclusion:output_type -> crabs.evening_detective_server.UpdateScenarioConclusionRsp - 255, // 285: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:output_type -> google.api.HttpBody - 106, // 286: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:output_type -> crabs.evening_detective_server.UploadScenarioArchiveRsp - 108, // 287: crabs.evening_detective_server.EveningDetectiveServer.AddGame:output_type -> crabs.evening_detective_server.AddGameRsp - 110, // 288: crabs.evening_detective_server.EveningDetectiveServer.GetGames:output_type -> crabs.evening_detective_server.GetGamesRsp - 168, // 289: crabs.evening_detective_server.EveningDetectiveServer.GetGame:output_type -> crabs.evening_detective_server.GetGameRsp - 113, // 290: crabs.evening_detective_server.EveningDetectiveServer.ImportGame:output_type -> crabs.evening_detective_server.GameImportRsp - 255, // 291: crabs.evening_detective_server.EveningDetectiveServer.DownloadGameResultsPackage:output_type -> google.api.HttpBody - 243, // 292: crabs.evening_detective_server.EveningDetectiveServer.ApplyGameResultsPackage:output_type -> crabs.evening_detective_server.GameResultsPackageRsp - 118, // 293: crabs.evening_detective_server.EveningDetectiveServer.StartGameExport:output_type -> crabs.evening_detective_server.GameExportRsp - 117, // 294: crabs.evening_detective_server.EveningDetectiveServer.ResetGameLocalMode:output_type -> crabs.evening_detective_server.ResetGameLocalModeRsp - 118, // 295: crabs.evening_detective_server.EveningDetectiveServer.GetGameExport:output_type -> crabs.evening_detective_server.GameExportRsp - 222, // 296: crabs.evening_detective_server.EveningDetectiveServer.IssueGameTickets:output_type -> crabs.evening_detective_server.IssueGameTicketsRsp - 225, // 297: crabs.evening_detective_server.EveningDetectiveServer.GetTicket:output_type -> crabs.evening_detective_server.GetTicketRsp - 227, // 298: crabs.evening_detective_server.EveningDetectiveServer.AcceptTicket:output_type -> crabs.evening_detective_server.AcceptTicketRsp - 121, // 299: crabs.evening_detective_server.EveningDetectiveServer.CreateScreenSession:output_type -> crabs.evening_detective_server.CreateScreenSessionRsp - 123, // 300: crabs.evening_detective_server.EveningDetectiveServer.GetScreenState:output_type -> crabs.evening_detective_server.GetScreenStateRsp - 125, // 301: crabs.evening_detective_server.EveningDetectiveServer.GetGameScreens:output_type -> crabs.evening_detective_server.GetGameScreensRsp - 128, // 302: crabs.evening_detective_server.EveningDetectiveServer.GetGameMusic:output_type -> crabs.evening_detective_server.GetGameMusicRsp - 130, // 303: crabs.evening_detective_server.EveningDetectiveServer.SetGameMusic:output_type -> crabs.evening_detective_server.SetGameMusicRsp - 132, // 304: crabs.evening_detective_server.EveningDetectiveServer.AdvanceScreenMusic:output_type -> crabs.evening_detective_server.AdvanceScreenMusicRsp - 134, // 305: crabs.evening_detective_server.EveningDetectiveServer.BindScreen:output_type -> crabs.evening_detective_server.BindScreenRsp - 136, // 306: crabs.evening_detective_server.EveningDetectiveServer.UnbindScreen:output_type -> crabs.evening_detective_server.UnbindScreenRsp - 138, // 307: crabs.evening_detective_server.EveningDetectiveServer.SetScreenSound:output_type -> crabs.evening_detective_server.SetScreenSoundRsp - 141, // 308: crabs.evening_detective_server.EveningDetectiveServer.GetGameMap:output_type -> crabs.evening_detective_server.GetGameMapRsp - 143, // 309: crabs.evening_detective_server.EveningDetectiveServer.UpdateGameMapItem:output_type -> crabs.evening_detective_server.UpdateGameMapItemRsp - 145, // 310: crabs.evening_detective_server.EveningDetectiveServer.SetScreenMode:output_type -> crabs.evening_detective_server.SetScreenModeRsp - 147, // 311: crabs.evening_detective_server.EveningDetectiveServer.SetScreenTimer:output_type -> crabs.evening_detective_server.SetScreenTimerRsp - 149, // 312: crabs.evening_detective_server.EveningDetectiveServer.SendScreenCommand:output_type -> crabs.evening_detective_server.SendScreenCommandRsp - 153, // 313: crabs.evening_detective_server.EveningDetectiveServer.GetScreenPlan:output_type -> crabs.evening_detective_server.GetScreenPlanRsp - 155, // 314: crabs.evening_detective_server.EveningDetectiveServer.SaveScreenPlan:output_type -> crabs.evening_detective_server.SaveScreenPlanRsp - 157, // 315: crabs.evening_detective_server.EveningDetectiveServer.SetScreenPlanStep:output_type -> crabs.evening_detective_server.SetScreenPlanStepRsp - 160, // 316: crabs.evening_detective_server.EveningDetectiveServer.GetScreenTeams:output_type -> crabs.evening_detective_server.GetScreenTeamsRsp - 162, // 317: crabs.evening_detective_server.EveningDetectiveServer.GetScreenResults:output_type -> crabs.evening_detective_server.GetScreenResultsRsp - 255, // 318: crabs.evening_detective_server.EveningDetectiveServer.DownloadGamePrintMaterials:output_type -> google.api.HttpBody - 255, // 319: crabs.evening_detective_server.EveningDetectiveServer.PreviewTeamReceipt:output_type -> google.api.HttpBody - 253, // 320: crabs.evening_detective_server.EveningDetectiveServer.PrintTeamReceipt:output_type -> crabs.evening_detective_server.PrintTeamReceiptRsp - 255, // 321: crabs.evening_detective_server.EveningDetectiveServer.DownloadTeamQR:output_type -> google.api.HttpBody - 170, // 322: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:output_type -> crabs.evening_detective_server.GetGameAnswersRsp - 174, // 323: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:output_type -> crabs.evening_detective_server.GetGameResultsRsp - 177, // 324: crabs.evening_detective_server.EveningDetectiveServer.CreateGameReview:output_type -> crabs.evening_detective_server.CreateGameReviewRsp - 181, // 325: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviews:output_type -> crabs.evening_detective_server.GetGameReviewsRsp - 181, // 326: crabs.evening_detective_server.EveningDetectiveServer.GetScenarioReviews:output_type -> crabs.evening_detective_server.GetGameReviewsRsp - 181, // 327: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviewsForModeration:output_type -> crabs.evening_detective_server.GetGameReviewsRsp - 181, // 328: crabs.evening_detective_server.EveningDetectiveServer.GetReviewsForModeration:output_type -> crabs.evening_detective_server.GetGameReviewsRsp - 183, // 329: crabs.evening_detective_server.EveningDetectiveServer.ModerateGameReview:output_type -> crabs.evening_detective_server.ModerateGameReviewRsp - 185, // 330: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:output_type -> crabs.evening_detective_server.UpdateGameRsp - 187, // 331: crabs.evening_detective_server.EveningDetectiveServer.StartGame:output_type -> crabs.evening_detective_server.StartGameRsp - 189, // 332: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:output_type -> crabs.evening_detective_server.PauseGameRsp - 191, // 333: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:output_type -> crabs.evening_detective_server.PlayGameRsp - 193, // 334: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:output_type -> crabs.evening_detective_server.FinishGameRsp - 195, // 335: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:output_type -> crabs.evening_detective_server.ResetGameRsp - 197, // 336: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:output_type -> crabs.evening_detective_server.DeleteGameRsp - 199, // 337: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:output_type -> crabs.evening_detective_server.AddTeamRsp - 201, // 338: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:output_type -> crabs.evening_detective_server.UpdateTeamRsp - 203, // 339: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:output_type -> crabs.evening_detective_server.DeleteTeamRsp - 205, // 340: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:output_type -> crabs.evening_detective_server.GiveTeamApplicationsRsp - 207, // 341: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:output_type -> crabs.evening_detective_server.GetTeamStoryRsp - 210, // 342: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:output_type -> crabs.evening_detective_server.AddTeamActionRsp - 212, // 343: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:output_type -> crabs.evening_detective_server.DeleteLastTeamActionRsp - 214, // 344: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:output_type -> crabs.evening_detective_server.GetTeamAnswersRsp - 216, // 345: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:output_type -> crabs.evening_detective_server.SubmitTeamAnswersRsp - 218, // 346: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:output_type -> crabs.evening_detective_server.SetTeamAnswerScoreRsp - 230, // [230:347] is the sub-list for method output_type - 113, // [113:230] is the sub-list for method input_type - 113, // [113:113] is the sub-list for extension type_name - 113, // [113:113] is the sub-list for extension extendee - 0, // [0:113] is the sub-list for field type_name + 28, // 0: crabs.evening_detective_server.GetUsersRsp.users:type_name -> crabs.evening_detective_server.User + 264, // 1: crabs.evening_detective_server.User.created_at:type_name -> google.protobuf.Timestamp + 28, // 2: crabs.evening_detective_server.GetUserByIDRsp.user:type_name -> crabs.evening_detective_server.User + 28, // 3: crabs.evening_detective_server.GetMeRsp.user:type_name -> crabs.evening_detective_server.User + 0, // 4: crabs.evening_detective_server.PlaylistGroup.end_mode:type_name -> crabs.evening_detective_server.PlaylistGroupEndMode + 0, // 5: crabs.evening_detective_server.SavePlaylistGroupReq.end_mode:type_name -> crabs.evening_detective_server.PlaylistGroupEndMode + 54, // 6: crabs.evening_detective_server.SavePlaylistGroupRsp.playlist:type_name -> crabs.evening_detective_server.Playlist + 54, // 7: crabs.evening_detective_server.DeletePlaylistGroupRsp.playlist:type_name -> crabs.evening_detective_server.Playlist + 54, // 8: crabs.evening_detective_server.ReorderPlaylistGroupsRsp.playlist:type_name -> crabs.evening_detective_server.Playlist + 54, // 9: crabs.evening_detective_server.SetPlaylistTrackGroupRsp.playlist:type_name -> crabs.evening_detective_server.Playlist + 53, // 10: crabs.evening_detective_server.Playlist.tracks:type_name -> crabs.evening_detective_server.PlaylistTrack + 44, // 11: crabs.evening_detective_server.Playlist.groups:type_name -> crabs.evening_detective_server.PlaylistGroup + 54, // 12: crabs.evening_detective_server.GetPlaylistsRsp.playlists:type_name -> crabs.evening_detective_server.Playlist + 54, // 13: crabs.evening_detective_server.CreatePlaylistRsp.playlist:type_name -> crabs.evening_detective_server.Playlist + 54, // 14: crabs.evening_detective_server.UpdatePlaylistRsp.playlist:type_name -> crabs.evening_detective_server.Playlist + 54, // 15: crabs.evening_detective_server.UploadPlaylistTrackRsp.playlist:type_name -> crabs.evening_detective_server.Playlist + 54, // 16: crabs.evening_detective_server.ReorderPlaylistTracksRsp.playlist:type_name -> crabs.evening_detective_server.Playlist + 79, // 17: crabs.evening_detective_server.GetMyScenariosRsp.scenarios:type_name -> crabs.evening_detective_server.Scenario + 79, // 18: crabs.evening_detective_server.GetScenariosCatalogRsp.scenarios:type_name -> crabs.evening_detective_server.Scenario + 79, // 19: crabs.evening_detective_server.GetScenarioRsp.scenario:type_name -> crabs.evening_detective_server.Scenario + 80, // 20: crabs.evening_detective_server.Scenario.story:type_name -> crabs.evening_detective_server.Story + 28, // 21: crabs.evening_detective_server.Scenario.author:type_name -> crabs.evening_detective_server.User + 264, // 22: crabs.evening_detective_server.Scenario.updated_at:type_name -> google.protobuf.Timestamp + 264, // 23: crabs.evening_detective_server.Scenario.created_at:type_name -> google.protobuf.Timestamp + 264, // 24: crabs.evening_detective_server.Scenario.published_at:type_name -> google.protobuf.Timestamp + 83, // 25: crabs.evening_detective_server.Story.places:type_name -> crabs.evening_detective_server.Place + 82, // 26: crabs.evening_detective_server.Story.introduction:type_name -> crabs.evening_detective_server.Introduction + 87, // 27: crabs.evening_detective_server.Story.questions:type_name -> crabs.evening_detective_server.Question + 81, // 28: crabs.evening_detective_server.Story.conclusion:type_name -> crabs.evening_detective_server.Conclusion + 84, // 29: crabs.evening_detective_server.Place.applications:type_name -> crabs.evening_detective_server.Application + 85, // 30: crabs.evening_detective_server.Place.doors:type_name -> crabs.evening_detective_server.Door + 86, // 31: crabs.evening_detective_server.Place.keys:type_name -> crabs.evening_detective_server.Key + 86, // 32: crabs.evening_detective_server.Door.keys:type_name -> crabs.evening_detective_server.Key + 176, // 33: crabs.evening_detective_server.TeamAnswers.team:type_name -> crabs.evening_detective_server.Team + 89, // 34: crabs.evening_detective_server.TeamAnswers.answers:type_name -> crabs.evening_detective_server.AnswerScore + 83, // 35: crabs.evening_detective_server.AddScenarioPlaceReq.place:type_name -> crabs.evening_detective_server.Place + 83, // 36: crabs.evening_detective_server.UpdateScenarioPlaceReq.place:type_name -> crabs.evening_detective_server.Place + 81, // 37: crabs.evening_detective_server.UpdateScenarioConclusionReq.conclusion:type_name -> crabs.evening_detective_server.Conclusion + 82, // 38: crabs.evening_detective_server.UpdateScenarioIntroReq.introduction:type_name -> crabs.evening_detective_server.Introduction + 87, // 39: crabs.evening_detective_server.AddScenarioQuestionReq.question:type_name -> crabs.evening_detective_server.Question + 87, // 40: crabs.evening_detective_server.UpdateScenarioQuestionReq.question:type_name -> crabs.evening_detective_server.Question + 264, // 41: crabs.evening_detective_server.AddGameReq.start_at:type_name -> google.protobuf.Timestamp + 121, // 42: crabs.evening_detective_server.GetGamesRsp.games:type_name -> crabs.evening_detective_server.Game + 264, // 43: crabs.evening_detective_server.Game.start_at:type_name -> google.protobuf.Timestamp + 79, // 44: crabs.evening_detective_server.Game.scenario:type_name -> crabs.evening_detective_server.Scenario + 176, // 45: crabs.evening_detective_server.Game.teams:type_name -> crabs.evening_detective_server.Team + 264, // 46: crabs.evening_detective_server.Game.started_at:type_name -> google.protobuf.Timestamp + 264, // 47: crabs.evening_detective_server.Game.ended_at:type_name -> google.protobuf.Timestamp + 122, // 48: crabs.evening_detective_server.Game.export:type_name -> crabs.evening_detective_server.GameExport + 122, // 49: crabs.evening_detective_server.GameExportRsp.export:type_name -> crabs.evening_detective_server.GameExport + 1, // 50: crabs.evening_detective_server.ScreenState.mode:type_name -> crabs.evening_detective_server.ScreenMode + 4, // 51: crabs.evening_detective_server.ScreenState.command:type_name -> crabs.evening_detective_server.ScreenCommand + 3, // 52: crabs.evening_detective_server.ScreenState.timer_state:type_name -> crabs.evening_detective_server.ScreenTimerState + 136, // 53: crabs.evening_detective_server.ScreenState.music:type_name -> crabs.evening_detective_server.MusicState + 2, // 54: crabs.evening_detective_server.ScreenState.timer_type:type_name -> crabs.evening_detective_server.ScreenTimerType + 129, // 55: crabs.evening_detective_server.GetScreenStateRsp.state:type_name -> crabs.evening_detective_server.ScreenState + 129, // 56: crabs.evening_detective_server.GetGameScreensRsp.screens:type_name -> crabs.evening_detective_server.ScreenState + 54, // 57: crabs.evening_detective_server.MusicState.playlist:type_name -> crabs.evening_detective_server.Playlist + 5, // 58: crabs.evening_detective_server.MusicState.playback:type_name -> crabs.evening_detective_server.MusicPlaybackState + 54, // 59: crabs.evening_detective_server.GetGameMusicRsp.playlists:type_name -> crabs.evening_detective_server.Playlist + 136, // 60: crabs.evening_detective_server.GetGameMusicRsp.state:type_name -> crabs.evening_detective_server.MusicState + 5, // 61: crabs.evening_detective_server.SetGameMusicReq.playback:type_name -> crabs.evening_detective_server.MusicPlaybackState + 136, // 62: crabs.evening_detective_server.SetGameMusicRsp.state:type_name -> crabs.evening_detective_server.MusicState + 136, // 63: crabs.evening_detective_server.AdvanceScreenMusicRsp.state:type_name -> crabs.evening_detective_server.MusicState + 129, // 64: crabs.evening_detective_server.BindScreenRsp.state:type_name -> crabs.evening_detective_server.ScreenState + 149, // 65: crabs.evening_detective_server.GetGameMapRsp.items:type_name -> crabs.evening_detective_server.MapItem + 1, // 66: crabs.evening_detective_server.SetScreenModeReq.mode:type_name -> crabs.evening_detective_server.ScreenMode + 2, // 67: crabs.evening_detective_server.SetScreenTimerReq.timer_type:type_name -> crabs.evening_detective_server.ScreenTimerType + 4, // 68: crabs.evening_detective_server.SendScreenCommandReq.command:type_name -> crabs.evening_detective_server.ScreenCommand + 1, // 69: crabs.evening_detective_server.ScreenPlanStep.mode:type_name -> crabs.evening_detective_server.ScreenMode + 2, // 70: crabs.evening_detective_server.ScreenPlanStep.timer_type:type_name -> crabs.evening_detective_server.ScreenTimerType + 160, // 71: crabs.evening_detective_server.ScreenPlan.steps:type_name -> crabs.evening_detective_server.ScreenPlanStep + 161, // 72: crabs.evening_detective_server.GetScreenPlanRsp.plan:type_name -> crabs.evening_detective_server.ScreenPlan + 160, // 73: crabs.evening_detective_server.SaveScreenPlanReq.steps:type_name -> crabs.evening_detective_server.ScreenPlanStep + 161, // 74: crabs.evening_detective_server.SaveScreenPlanRsp.plan:type_name -> crabs.evening_detective_server.ScreenPlan + 161, // 75: crabs.evening_detective_server.SetScreenPlanStepRsp.plan:type_name -> crabs.evening_detective_server.ScreenPlan + 168, // 76: crabs.evening_detective_server.GetScreenTeamsRsp.teams:type_name -> crabs.evening_detective_server.ScreenTeam + 182, // 77: crabs.evening_detective_server.GetScreenResultsRsp.questions:type_name -> crabs.evening_detective_server.ResultsQuestion + 183, // 78: crabs.evening_detective_server.GetScreenResultsRsp.teams:type_name -> crabs.evening_detective_server.TeamResult + 264, // 79: crabs.evening_detective_server.ParticipationRsp.start_at:type_name -> google.protobuf.Timestamp + 84, // 80: crabs.evening_detective_server.Team.applications:type_name -> crabs.evening_detective_server.Application + 121, // 81: crabs.evening_detective_server.GetGameRsp.game:type_name -> crabs.evening_detective_server.Game + 87, // 82: crabs.evening_detective_server.GetGameAnswersRsp.questions:type_name -> crabs.evening_detective_server.Question + 90, // 83: crabs.evening_detective_server.GetGameAnswersRsp.teams:type_name -> crabs.evening_detective_server.TeamAnswers + 176, // 84: crabs.evening_detective_server.TeamResult.team:type_name -> crabs.evening_detective_server.Team + 89, // 85: crabs.evening_detective_server.TeamResult.answers:type_name -> crabs.evening_detective_server.AnswerScore + 182, // 86: crabs.evening_detective_server.GetGameResultsRsp.questions:type_name -> crabs.evening_detective_server.ResultsQuestion + 183, // 87: crabs.evening_detective_server.GetGameResultsRsp.teams:type_name -> crabs.evening_detective_server.TeamResult + 264, // 88: crabs.evening_detective_server.GameReview.created_at:type_name -> google.protobuf.Timestamp + 185, // 89: crabs.evening_detective_server.CreateGameReviewRsp.review:type_name -> crabs.evening_detective_server.GameReview + 185, // 90: crabs.evening_detective_server.GetGameReviewsRsp.reviews:type_name -> crabs.evening_detective_server.GameReview + 185, // 91: crabs.evening_detective_server.ModerateGameReviewRsp.review:type_name -> crabs.evening_detective_server.GameReview + 264, // 92: crabs.evening_detective_server.UpdateGameReq.start_at:type_name -> google.protobuf.Timestamp + 80, // 93: crabs.evening_detective_server.GetTeamStoryRsp.story:type_name -> crabs.evening_detective_server.Story + 121, // 94: crabs.evening_detective_server.GetTeamStoryRsp.game:type_name -> crabs.evening_detective_server.Game + 218, // 95: crabs.evening_detective_server.GetTeamStoryRsp.actions:type_name -> crabs.evening_detective_server.TeamAction + 88, // 96: crabs.evening_detective_server.GetTeamAnswersRsp.answers:type_name -> crabs.evening_detective_server.Answer + 88, // 97: crabs.evening_detective_server.SubmitTeamAnswersReq.answers:type_name -> crabs.evening_detective_server.Answer + 233, // 98: crabs.evening_detective_server.IssueGameTicketsRsp.tickets:type_name -> crabs.evening_detective_server.Ticket + 238, // 99: crabs.evening_detective_server.GetTicketRsp.ticket:type_name -> crabs.evening_detective_server.TicketPage + 238, // 100: crabs.evening_detective_server.AcceptTicketRsp.ticket:type_name -> crabs.evening_detective_server.TicketPage + 264, // 101: crabs.evening_detective_server.TicketPage.start_at:type_name -> google.protobuf.Timestamp + 264, // 102: crabs.evening_detective_server.TicketPage.used_at:type_name -> google.protobuf.Timestamp + 264, // 103: crabs.evening_detective_server.DeveloperTask.createdAt:type_name -> google.protobuf.Timestamp + 264, // 104: crabs.evening_detective_server.DeveloperTask.updatedAt:type_name -> google.protobuf.Timestamp + 239, // 105: crabs.evening_detective_server.GetTasksRsp.tasks:type_name -> crabs.evening_detective_server.DeveloperTask + 240, // 106: crabs.evening_detective_server.GetTaskAssigneesRsp.assignees:type_name -> crabs.evening_detective_server.TaskAssignee + 239, // 107: crabs.evening_detective_server.TaskRsp.task:type_name -> crabs.evening_detective_server.DeveloperTask + 265, // 108: crabs.evening_detective_server.ApplyGameResultsPackageReq.package:type_name -> google.api.HttpBody + 264, // 109: crabs.evening_detective_server.DeviceHeartbeatRsp.serverTime:type_name -> google.protobuf.Timestamp + 258, // 110: crabs.evening_detective_server.GetDevicesRsp.devices:type_name -> crabs.evening_detective_server.VenueDevice + 264, // 111: crabs.evening_detective_server.GetDevicesRsp.serverTime:type_name -> google.protobuf.Timestamp + 260, // 112: crabs.evening_detective_server.GetDevicesRsp.wifi:type_name -> crabs.evening_detective_server.VenueWiFi + 264, // 113: crabs.evening_detective_server.VenueDevice.firstSeenAt:type_name -> google.protobuf.Timestamp + 264, // 114: crabs.evening_detective_server.VenueDevice.lastSeenAt:type_name -> google.protobuf.Timestamp + 259, // 115: crabs.evening_detective_server.VenueDevice.connections:type_name -> crabs.evening_detective_server.DeviceConnection + 264, // 116: crabs.evening_detective_server.DeviceConnection.firstSeenAt:type_name -> google.protobuf.Timestamp + 264, // 117: crabs.evening_detective_server.DeviceConnection.lastSeenAt:type_name -> google.protobuf.Timestamp + 264, // 118: crabs.evening_detective_server.VenueWiFi.collectedAt:type_name -> google.protobuf.Timestamp + 261, // 119: crabs.evening_detective_server.VenueWiFi.clients:type_name -> crabs.evening_detective_server.WiFiClient + 254, // 120: crabs.evening_detective_server.EveningDetectiveServer.DeviceHeartbeat:input_type -> crabs.evening_detective_server.DeviceHeartbeatReq + 256, // 121: crabs.evening_detective_server.EveningDetectiveServer.GetDevices:input_type -> crabs.evening_detective_server.GetDevicesReq + 241, // 122: crabs.evening_detective_server.EveningDetectiveServer.GetTasks:input_type -> crabs.evening_detective_server.GetTasksReq + 243, // 123: crabs.evening_detective_server.EveningDetectiveServer.GetTaskAssignees:input_type -> crabs.evening_detective_server.GetTaskAssigneesReq + 245, // 124: crabs.evening_detective_server.EveningDetectiveServer.CreateTask:input_type -> crabs.evening_detective_server.CreateTaskReq + 246, // 125: crabs.evening_detective_server.EveningDetectiveServer.UpdateTask:input_type -> crabs.evening_detective_server.UpdateTaskReq + 247, // 126: crabs.evening_detective_server.EveningDetectiveServer.SetTaskStatus:input_type -> crabs.evening_detective_server.SetTaskStatusReq + 248, // 127: crabs.evening_detective_server.EveningDetectiveServer.DeleteTask:input_type -> crabs.evening_detective_server.DeleteTaskReq + 173, // 128: crabs.evening_detective_server.EveningDetectiveServer.GetParticipation:input_type -> crabs.evening_detective_server.GetParticipationReq + 174, // 129: crabs.evening_detective_server.EveningDetectiveServer.AnswerParticipation:input_type -> crabs.evening_detective_server.AnswerParticipationReq + 6, // 130: crabs.evening_detective_server.EveningDetectiveServer.Ping:input_type -> crabs.evening_detective_server.PingReq + 8, // 131: crabs.evening_detective_server.EveningDetectiveServer.Echo:input_type -> crabs.evening_detective_server.EchoReq + 10, // 132: crabs.evening_detective_server.EveningDetectiveServer.Signup:input_type -> crabs.evening_detective_server.SignupReq + 12, // 133: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:input_type -> crabs.evening_detective_server.RefreshPasswordReq + 14, // 134: crabs.evening_detective_server.EveningDetectiveServer.Login:input_type -> crabs.evening_detective_server.LoginReq + 16, // 135: crabs.evening_detective_server.EveningDetectiveServer.Refresh:input_type -> crabs.evening_detective_server.RefreshReq + 18, // 136: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:input_type -> crabs.evening_detective_server.DeleteAccountReq + 20, // 137: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:input_type -> crabs.evening_detective_server.GetTermsReq + 22, // 138: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:input_type -> crabs.evening_detective_server.GetPrivacyReq + 24, // 139: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:input_type -> crabs.evening_detective_server.GetConsentReq + 26, // 140: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:input_type -> crabs.evening_detective_server.GetUsersReq + 29, // 141: crabs.evening_detective_server.EveningDetectiveServer.GetUserByID:input_type -> crabs.evening_detective_server.GetUserByIDReq + 31, // 142: crabs.evening_detective_server.EveningDetectiveServer.GetMe:input_type -> crabs.evening_detective_server.GetMeReq + 33, // 143: crabs.evening_detective_server.EveningDetectiveServer.ChangeUserPassword:input_type -> crabs.evening_detective_server.ChangeUserPasswordReq + 35, // 144: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:input_type -> crabs.evening_detective_server.AddUserRoleReq + 37, // 145: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:input_type -> crabs.evening_detective_server.DeleteUserRoleReq + 39, // 146: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:input_type -> crabs.evening_detective_server.GetPermissionsReq + 41, // 147: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:input_type -> crabs.evening_detective_server.UploadFileReq + 43, // 148: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:input_type -> crabs.evening_detective_server.DownloadFileReq + 45, // 149: crabs.evening_detective_server.EveningDetectiveServer.SavePlaylistGroup:input_type -> crabs.evening_detective_server.SavePlaylistGroupReq + 47, // 150: crabs.evening_detective_server.EveningDetectiveServer.DeletePlaylistGroup:input_type -> crabs.evening_detective_server.DeletePlaylistGroupReq + 49, // 151: crabs.evening_detective_server.EveningDetectiveServer.ReorderPlaylistGroups:input_type -> crabs.evening_detective_server.ReorderPlaylistGroupsReq + 51, // 152: crabs.evening_detective_server.EveningDetectiveServer.SetPlaylistTrackGroup:input_type -> crabs.evening_detective_server.SetPlaylistTrackGroupReq + 55, // 153: crabs.evening_detective_server.EveningDetectiveServer.GetPlaylists:input_type -> crabs.evening_detective_server.GetPlaylistsReq + 57, // 154: crabs.evening_detective_server.EveningDetectiveServer.CreatePlaylist:input_type -> crabs.evening_detective_server.CreatePlaylistReq + 59, // 155: crabs.evening_detective_server.EveningDetectiveServer.UpdatePlaylist:input_type -> crabs.evening_detective_server.UpdatePlaylistReq + 61, // 156: crabs.evening_detective_server.EveningDetectiveServer.DeletePlaylist:input_type -> crabs.evening_detective_server.DeletePlaylistReq + 63, // 157: crabs.evening_detective_server.EveningDetectiveServer.UploadPlaylistTrack:input_type -> crabs.evening_detective_server.UploadPlaylistTrackReq + 65, // 158: crabs.evening_detective_server.EveningDetectiveServer.ReorderPlaylistTracks:input_type -> crabs.evening_detective_server.ReorderPlaylistTracksReq + 67, // 159: crabs.evening_detective_server.EveningDetectiveServer.DeletePlaylistTrack:input_type -> crabs.evening_detective_server.DeletePlaylistTrackReq + 69, // 160: crabs.evening_detective_server.EveningDetectiveServer.SetScenarioPlaylist:input_type -> crabs.evening_detective_server.SetScenarioPlaylistReq + 71, // 161: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:input_type -> crabs.evening_detective_server.AddScenarioReq + 73, // 162: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:input_type -> crabs.evening_detective_server.GetMyScenariosReq + 75, // 163: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:input_type -> crabs.evening_detective_server.GetScenariosCatalogReq + 77, // 164: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:input_type -> crabs.evening_detective_server.GetScenarioReq + 77, // 165: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:input_type -> crabs.evening_detective_server.GetScenarioReq + 91, // 166: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:input_type -> crabs.evening_detective_server.UpdateScenarioReq + 93, // 167: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:input_type -> crabs.evening_detective_server.PublicScenarioReq + 95, // 168: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:input_type -> crabs.evening_detective_server.DraftScenarioReq + 97, // 169: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:input_type -> crabs.evening_detective_server.DeleteScenarioReq + 99, // 170: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:input_type -> crabs.evening_detective_server.AddScenarioPlaceReq + 101, // 171: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:input_type -> crabs.evening_detective_server.UpdateScenarioPlaceReq + 103, // 172: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:input_type -> crabs.evening_detective_server.DeleteScenarioPlaceReq + 109, // 173: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:input_type -> crabs.evening_detective_server.AddScenarioQuestionReq + 111, // 174: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:input_type -> crabs.evening_detective_server.UpdateScenarioQuestionReq + 113, // 175: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:input_type -> crabs.evening_detective_server.DeleteScenarioQuestionReq + 229, // 176: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioBackground:input_type -> crabs.evening_detective_server.UpdateScenarioBackgroundReq + 107, // 177: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:input_type -> crabs.evening_detective_server.UpdateScenarioIntroReq + 105, // 178: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioConclusion:input_type -> crabs.evening_detective_server.UpdateScenarioConclusionReq + 115, // 179: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:input_type -> crabs.evening_detective_server.DownloadScenarioArchiveReq + 265, // 180: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:input_type -> google.api.HttpBody + 117, // 181: crabs.evening_detective_server.EveningDetectiveServer.AddGame:input_type -> crabs.evening_detective_server.AddGameReq + 119, // 182: crabs.evening_detective_server.EveningDetectiveServer.GetGames:input_type -> crabs.evening_detective_server.GetGamesReq + 177, // 183: crabs.evening_detective_server.EveningDetectiveServer.GetGame:input_type -> crabs.evening_detective_server.GetGameReq + 265, // 184: crabs.evening_detective_server.EveningDetectiveServer.ImportGame:input_type -> google.api.HttpBody + 251, // 185: crabs.evening_detective_server.EveningDetectiveServer.DownloadGameResultsPackage:input_type -> crabs.evening_detective_server.GameResultsPackageReq + 252, // 186: crabs.evening_detective_server.EveningDetectiveServer.ApplyGameResultsPackage:input_type -> crabs.evening_detective_server.ApplyGameResultsPackageReq + 124, // 187: crabs.evening_detective_server.EveningDetectiveServer.StartGameExport:input_type -> crabs.evening_detective_server.StartGameExportReq + 126, // 188: crabs.evening_detective_server.EveningDetectiveServer.ResetGameLocalMode:input_type -> crabs.evening_detective_server.ResetGameLocalModeReq + 125, // 189: crabs.evening_detective_server.EveningDetectiveServer.GetGameExport:input_type -> crabs.evening_detective_server.GetGameExportReq + 231, // 190: crabs.evening_detective_server.EveningDetectiveServer.IssueGameTickets:input_type -> crabs.evening_detective_server.IssueGameTicketsReq + 234, // 191: crabs.evening_detective_server.EveningDetectiveServer.GetTicket:input_type -> crabs.evening_detective_server.GetTicketReq + 236, // 192: crabs.evening_detective_server.EveningDetectiveServer.AcceptTicket:input_type -> crabs.evening_detective_server.AcceptTicketReq + 130, // 193: crabs.evening_detective_server.EveningDetectiveServer.CreateScreenSession:input_type -> crabs.evening_detective_server.CreateScreenSessionReq + 132, // 194: crabs.evening_detective_server.EveningDetectiveServer.GetScreenState:input_type -> crabs.evening_detective_server.GetScreenStateReq + 134, // 195: crabs.evening_detective_server.EveningDetectiveServer.GetGameScreens:input_type -> crabs.evening_detective_server.GetGameScreensReq + 137, // 196: crabs.evening_detective_server.EveningDetectiveServer.GetGameMusic:input_type -> crabs.evening_detective_server.GetGameMusicReq + 139, // 197: crabs.evening_detective_server.EveningDetectiveServer.SetGameMusic:input_type -> crabs.evening_detective_server.SetGameMusicReq + 141, // 198: crabs.evening_detective_server.EveningDetectiveServer.AdvanceScreenMusic:input_type -> crabs.evening_detective_server.AdvanceScreenMusicReq + 143, // 199: crabs.evening_detective_server.EveningDetectiveServer.BindScreen:input_type -> crabs.evening_detective_server.BindScreenReq + 145, // 200: crabs.evening_detective_server.EveningDetectiveServer.UnbindScreen:input_type -> crabs.evening_detective_server.UnbindScreenReq + 147, // 201: crabs.evening_detective_server.EveningDetectiveServer.SetScreenSound:input_type -> crabs.evening_detective_server.SetScreenSoundReq + 150, // 202: crabs.evening_detective_server.EveningDetectiveServer.GetGameMap:input_type -> crabs.evening_detective_server.GetGameMapReq + 152, // 203: crabs.evening_detective_server.EveningDetectiveServer.UpdateGameMapItem:input_type -> crabs.evening_detective_server.UpdateGameMapItemReq + 154, // 204: crabs.evening_detective_server.EveningDetectiveServer.SetScreenMode:input_type -> crabs.evening_detective_server.SetScreenModeReq + 156, // 205: crabs.evening_detective_server.EveningDetectiveServer.SetScreenTimer:input_type -> crabs.evening_detective_server.SetScreenTimerReq + 158, // 206: crabs.evening_detective_server.EveningDetectiveServer.SendScreenCommand:input_type -> crabs.evening_detective_server.SendScreenCommandReq + 162, // 207: crabs.evening_detective_server.EveningDetectiveServer.GetScreenPlan:input_type -> crabs.evening_detective_server.GetScreenPlanReq + 164, // 208: crabs.evening_detective_server.EveningDetectiveServer.SaveScreenPlan:input_type -> crabs.evening_detective_server.SaveScreenPlanReq + 166, // 209: crabs.evening_detective_server.EveningDetectiveServer.SetScreenPlanStep:input_type -> crabs.evening_detective_server.SetScreenPlanStepReq + 169, // 210: crabs.evening_detective_server.EveningDetectiveServer.GetScreenTeams:input_type -> crabs.evening_detective_server.GetScreenTeamsReq + 171, // 211: crabs.evening_detective_server.EveningDetectiveServer.GetScreenResults:input_type -> crabs.evening_detective_server.GetScreenResultsReq + 177, // 212: crabs.evening_detective_server.EveningDetectiveServer.DownloadGamePrintMaterials:input_type -> crabs.evening_detective_server.GetGameReq + 262, // 213: crabs.evening_detective_server.EveningDetectiveServer.PreviewTeamReceipt:input_type -> crabs.evening_detective_server.TeamReceiptReq + 262, // 214: crabs.evening_detective_server.EveningDetectiveServer.PrintTeamReceipt:input_type -> crabs.evening_detective_server.TeamReceiptReq + 177, // 215: crabs.evening_detective_server.EveningDetectiveServer.DownloadTeamQR:input_type -> crabs.evening_detective_server.GetGameReq + 179, // 216: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:input_type -> crabs.evening_detective_server.GetGameAnswersReq + 181, // 217: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:input_type -> crabs.evening_detective_server.GetGameResultsReq + 186, // 218: crabs.evening_detective_server.EveningDetectiveServer.CreateGameReview:input_type -> crabs.evening_detective_server.CreateGameReviewReq + 188, // 219: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviews:input_type -> crabs.evening_detective_server.GetGameReviewsReq + 189, // 220: crabs.evening_detective_server.EveningDetectiveServer.GetScenarioReviews:input_type -> crabs.evening_detective_server.GetScenarioReviewsReq + 188, // 221: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviewsForModeration:input_type -> crabs.evening_detective_server.GetGameReviewsReq + 190, // 222: crabs.evening_detective_server.EveningDetectiveServer.GetReviewsForModeration:input_type -> crabs.evening_detective_server.GetReviewsForModerationReq + 192, // 223: crabs.evening_detective_server.EveningDetectiveServer.ModerateGameReview:input_type -> crabs.evening_detective_server.ModerateGameReviewReq + 194, // 224: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:input_type -> crabs.evening_detective_server.UpdateGameReq + 196, // 225: crabs.evening_detective_server.EveningDetectiveServer.StartGame:input_type -> crabs.evening_detective_server.StartGameReq + 198, // 226: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:input_type -> crabs.evening_detective_server.PauseGameReq + 200, // 227: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:input_type -> crabs.evening_detective_server.PlayGameReq + 202, // 228: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:input_type -> crabs.evening_detective_server.FinishGameReq + 204, // 229: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:input_type -> crabs.evening_detective_server.ResetGameReq + 206, // 230: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:input_type -> crabs.evening_detective_server.DeleteGameReq + 208, // 231: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:input_type -> crabs.evening_detective_server.AddTeamReq + 210, // 232: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:input_type -> crabs.evening_detective_server.UpdateTeamReq + 212, // 233: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:input_type -> crabs.evening_detective_server.DeleteTeamReq + 214, // 234: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:input_type -> crabs.evening_detective_server.GiveTeamApplicationsReq + 216, // 235: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:input_type -> crabs.evening_detective_server.GetTeamStoryReq + 219, // 236: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:input_type -> crabs.evening_detective_server.AddTeamActionReq + 221, // 237: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:input_type -> crabs.evening_detective_server.DeleteLastTeamActionReq + 223, // 238: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:input_type -> crabs.evening_detective_server.GetTeamAnswersReq + 225, // 239: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:input_type -> crabs.evening_detective_server.SubmitTeamAnswersReq + 227, // 240: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:input_type -> crabs.evening_detective_server.SetTeamAnswerScoreReq + 255, // 241: crabs.evening_detective_server.EveningDetectiveServer.DeviceHeartbeat:output_type -> crabs.evening_detective_server.DeviceHeartbeatRsp + 257, // 242: crabs.evening_detective_server.EveningDetectiveServer.GetDevices:output_type -> crabs.evening_detective_server.GetDevicesRsp + 242, // 243: crabs.evening_detective_server.EveningDetectiveServer.GetTasks:output_type -> crabs.evening_detective_server.GetTasksRsp + 244, // 244: crabs.evening_detective_server.EveningDetectiveServer.GetTaskAssignees:output_type -> crabs.evening_detective_server.GetTaskAssigneesRsp + 249, // 245: crabs.evening_detective_server.EveningDetectiveServer.CreateTask:output_type -> crabs.evening_detective_server.TaskRsp + 249, // 246: crabs.evening_detective_server.EveningDetectiveServer.UpdateTask:output_type -> crabs.evening_detective_server.TaskRsp + 249, // 247: crabs.evening_detective_server.EveningDetectiveServer.SetTaskStatus:output_type -> crabs.evening_detective_server.TaskRsp + 250, // 248: crabs.evening_detective_server.EveningDetectiveServer.DeleteTask:output_type -> crabs.evening_detective_server.DeleteTaskRsp + 175, // 249: crabs.evening_detective_server.EveningDetectiveServer.GetParticipation:output_type -> crabs.evening_detective_server.ParticipationRsp + 175, // 250: crabs.evening_detective_server.EveningDetectiveServer.AnswerParticipation:output_type -> crabs.evening_detective_server.ParticipationRsp + 7, // 251: crabs.evening_detective_server.EveningDetectiveServer.Ping:output_type -> crabs.evening_detective_server.PingRsp + 9, // 252: crabs.evening_detective_server.EveningDetectiveServer.Echo:output_type -> crabs.evening_detective_server.EchoRsp + 11, // 253: crabs.evening_detective_server.EveningDetectiveServer.Signup:output_type -> crabs.evening_detective_server.SignupRsp + 13, // 254: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:output_type -> crabs.evening_detective_server.RefreshPasswordRsp + 15, // 255: crabs.evening_detective_server.EveningDetectiveServer.Login:output_type -> crabs.evening_detective_server.LoginRsp + 17, // 256: crabs.evening_detective_server.EveningDetectiveServer.Refresh:output_type -> crabs.evening_detective_server.RefreshRsp + 19, // 257: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:output_type -> crabs.evening_detective_server.DeleteAccountRsp + 21, // 258: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:output_type -> crabs.evening_detective_server.GetTermsRsp + 23, // 259: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:output_type -> crabs.evening_detective_server.GetPrivacyRsp + 25, // 260: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:output_type -> crabs.evening_detective_server.GetConsentRsp + 27, // 261: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:output_type -> crabs.evening_detective_server.GetUsersRsp + 30, // 262: crabs.evening_detective_server.EveningDetectiveServer.GetUserByID:output_type -> crabs.evening_detective_server.GetUserByIDRsp + 32, // 263: crabs.evening_detective_server.EveningDetectiveServer.GetMe:output_type -> crabs.evening_detective_server.GetMeRsp + 34, // 264: crabs.evening_detective_server.EveningDetectiveServer.ChangeUserPassword:output_type -> crabs.evening_detective_server.ChangeUserPasswordRsp + 36, // 265: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:output_type -> crabs.evening_detective_server.AddUserRoleRsp + 38, // 266: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:output_type -> crabs.evening_detective_server.DeleteUserRoleRsp + 40, // 267: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:output_type -> crabs.evening_detective_server.GetPermissionsRsp + 42, // 268: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:output_type -> crabs.evening_detective_server.UploadFileRsp + 265, // 269: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:output_type -> google.api.HttpBody + 46, // 270: crabs.evening_detective_server.EveningDetectiveServer.SavePlaylistGroup:output_type -> crabs.evening_detective_server.SavePlaylistGroupRsp + 48, // 271: crabs.evening_detective_server.EveningDetectiveServer.DeletePlaylistGroup:output_type -> crabs.evening_detective_server.DeletePlaylistGroupRsp + 50, // 272: crabs.evening_detective_server.EveningDetectiveServer.ReorderPlaylistGroups:output_type -> crabs.evening_detective_server.ReorderPlaylistGroupsRsp + 52, // 273: crabs.evening_detective_server.EveningDetectiveServer.SetPlaylistTrackGroup:output_type -> crabs.evening_detective_server.SetPlaylistTrackGroupRsp + 56, // 274: crabs.evening_detective_server.EveningDetectiveServer.GetPlaylists:output_type -> crabs.evening_detective_server.GetPlaylistsRsp + 58, // 275: crabs.evening_detective_server.EveningDetectiveServer.CreatePlaylist:output_type -> crabs.evening_detective_server.CreatePlaylistRsp + 60, // 276: crabs.evening_detective_server.EveningDetectiveServer.UpdatePlaylist:output_type -> crabs.evening_detective_server.UpdatePlaylistRsp + 62, // 277: crabs.evening_detective_server.EveningDetectiveServer.DeletePlaylist:output_type -> crabs.evening_detective_server.DeletePlaylistRsp + 64, // 278: crabs.evening_detective_server.EveningDetectiveServer.UploadPlaylistTrack:output_type -> crabs.evening_detective_server.UploadPlaylistTrackRsp + 66, // 279: crabs.evening_detective_server.EveningDetectiveServer.ReorderPlaylistTracks:output_type -> crabs.evening_detective_server.ReorderPlaylistTracksRsp + 68, // 280: crabs.evening_detective_server.EveningDetectiveServer.DeletePlaylistTrack:output_type -> crabs.evening_detective_server.DeletePlaylistTrackRsp + 70, // 281: crabs.evening_detective_server.EveningDetectiveServer.SetScenarioPlaylist:output_type -> crabs.evening_detective_server.SetScenarioPlaylistRsp + 72, // 282: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:output_type -> crabs.evening_detective_server.AddScenarioRsp + 74, // 283: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:output_type -> crabs.evening_detective_server.GetMyScenariosRsp + 76, // 284: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:output_type -> crabs.evening_detective_server.GetScenariosCatalogRsp + 78, // 285: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp + 78, // 286: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp + 92, // 287: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:output_type -> crabs.evening_detective_server.UpdateScenarioRsp + 94, // 288: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:output_type -> crabs.evening_detective_server.PublicScenarioRsp + 96, // 289: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:output_type -> crabs.evening_detective_server.DraftScenarioRsp + 98, // 290: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:output_type -> crabs.evening_detective_server.DeleteScenarioRsp + 100, // 291: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:output_type -> crabs.evening_detective_server.AddScenarioPlaceRsp + 102, // 292: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:output_type -> crabs.evening_detective_server.UpdateScenarioPlaceRsp + 104, // 293: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:output_type -> crabs.evening_detective_server.DeleteScenarioPlaceRsp + 110, // 294: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:output_type -> crabs.evening_detective_server.AddScenarioQuestionRsp + 112, // 295: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:output_type -> crabs.evening_detective_server.UpdateScenarioQuestionRsp + 114, // 296: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:output_type -> crabs.evening_detective_server.DeleteScenarioQuestionRsp + 230, // 297: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioBackground:output_type -> crabs.evening_detective_server.UpdateScenarioBackgroundRsp + 108, // 298: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:output_type -> crabs.evening_detective_server.UpdateScenarioIntroRsp + 106, // 299: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioConclusion:output_type -> crabs.evening_detective_server.UpdateScenarioConclusionRsp + 265, // 300: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:output_type -> google.api.HttpBody + 116, // 301: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:output_type -> crabs.evening_detective_server.UploadScenarioArchiveRsp + 118, // 302: crabs.evening_detective_server.EveningDetectiveServer.AddGame:output_type -> crabs.evening_detective_server.AddGameRsp + 120, // 303: crabs.evening_detective_server.EveningDetectiveServer.GetGames:output_type -> crabs.evening_detective_server.GetGamesRsp + 178, // 304: crabs.evening_detective_server.EveningDetectiveServer.GetGame:output_type -> crabs.evening_detective_server.GetGameRsp + 123, // 305: crabs.evening_detective_server.EveningDetectiveServer.ImportGame:output_type -> crabs.evening_detective_server.GameImportRsp + 265, // 306: crabs.evening_detective_server.EveningDetectiveServer.DownloadGameResultsPackage:output_type -> google.api.HttpBody + 253, // 307: crabs.evening_detective_server.EveningDetectiveServer.ApplyGameResultsPackage:output_type -> crabs.evening_detective_server.GameResultsPackageRsp + 128, // 308: crabs.evening_detective_server.EveningDetectiveServer.StartGameExport:output_type -> crabs.evening_detective_server.GameExportRsp + 127, // 309: crabs.evening_detective_server.EveningDetectiveServer.ResetGameLocalMode:output_type -> crabs.evening_detective_server.ResetGameLocalModeRsp + 128, // 310: crabs.evening_detective_server.EveningDetectiveServer.GetGameExport:output_type -> crabs.evening_detective_server.GameExportRsp + 232, // 311: crabs.evening_detective_server.EveningDetectiveServer.IssueGameTickets:output_type -> crabs.evening_detective_server.IssueGameTicketsRsp + 235, // 312: crabs.evening_detective_server.EveningDetectiveServer.GetTicket:output_type -> crabs.evening_detective_server.GetTicketRsp + 237, // 313: crabs.evening_detective_server.EveningDetectiveServer.AcceptTicket:output_type -> crabs.evening_detective_server.AcceptTicketRsp + 131, // 314: crabs.evening_detective_server.EveningDetectiveServer.CreateScreenSession:output_type -> crabs.evening_detective_server.CreateScreenSessionRsp + 133, // 315: crabs.evening_detective_server.EveningDetectiveServer.GetScreenState:output_type -> crabs.evening_detective_server.GetScreenStateRsp + 135, // 316: crabs.evening_detective_server.EveningDetectiveServer.GetGameScreens:output_type -> crabs.evening_detective_server.GetGameScreensRsp + 138, // 317: crabs.evening_detective_server.EveningDetectiveServer.GetGameMusic:output_type -> crabs.evening_detective_server.GetGameMusicRsp + 140, // 318: crabs.evening_detective_server.EveningDetectiveServer.SetGameMusic:output_type -> crabs.evening_detective_server.SetGameMusicRsp + 142, // 319: crabs.evening_detective_server.EveningDetectiveServer.AdvanceScreenMusic:output_type -> crabs.evening_detective_server.AdvanceScreenMusicRsp + 144, // 320: crabs.evening_detective_server.EveningDetectiveServer.BindScreen:output_type -> crabs.evening_detective_server.BindScreenRsp + 146, // 321: crabs.evening_detective_server.EveningDetectiveServer.UnbindScreen:output_type -> crabs.evening_detective_server.UnbindScreenRsp + 148, // 322: crabs.evening_detective_server.EveningDetectiveServer.SetScreenSound:output_type -> crabs.evening_detective_server.SetScreenSoundRsp + 151, // 323: crabs.evening_detective_server.EveningDetectiveServer.GetGameMap:output_type -> crabs.evening_detective_server.GetGameMapRsp + 153, // 324: crabs.evening_detective_server.EveningDetectiveServer.UpdateGameMapItem:output_type -> crabs.evening_detective_server.UpdateGameMapItemRsp + 155, // 325: crabs.evening_detective_server.EveningDetectiveServer.SetScreenMode:output_type -> crabs.evening_detective_server.SetScreenModeRsp + 157, // 326: crabs.evening_detective_server.EveningDetectiveServer.SetScreenTimer:output_type -> crabs.evening_detective_server.SetScreenTimerRsp + 159, // 327: crabs.evening_detective_server.EveningDetectiveServer.SendScreenCommand:output_type -> crabs.evening_detective_server.SendScreenCommandRsp + 163, // 328: crabs.evening_detective_server.EveningDetectiveServer.GetScreenPlan:output_type -> crabs.evening_detective_server.GetScreenPlanRsp + 165, // 329: crabs.evening_detective_server.EveningDetectiveServer.SaveScreenPlan:output_type -> crabs.evening_detective_server.SaveScreenPlanRsp + 167, // 330: crabs.evening_detective_server.EveningDetectiveServer.SetScreenPlanStep:output_type -> crabs.evening_detective_server.SetScreenPlanStepRsp + 170, // 331: crabs.evening_detective_server.EveningDetectiveServer.GetScreenTeams:output_type -> crabs.evening_detective_server.GetScreenTeamsRsp + 172, // 332: crabs.evening_detective_server.EveningDetectiveServer.GetScreenResults:output_type -> crabs.evening_detective_server.GetScreenResultsRsp + 265, // 333: crabs.evening_detective_server.EveningDetectiveServer.DownloadGamePrintMaterials:output_type -> google.api.HttpBody + 265, // 334: crabs.evening_detective_server.EveningDetectiveServer.PreviewTeamReceipt:output_type -> google.api.HttpBody + 263, // 335: crabs.evening_detective_server.EveningDetectiveServer.PrintTeamReceipt:output_type -> crabs.evening_detective_server.PrintTeamReceiptRsp + 265, // 336: crabs.evening_detective_server.EveningDetectiveServer.DownloadTeamQR:output_type -> google.api.HttpBody + 180, // 337: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:output_type -> crabs.evening_detective_server.GetGameAnswersRsp + 184, // 338: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:output_type -> crabs.evening_detective_server.GetGameResultsRsp + 187, // 339: crabs.evening_detective_server.EveningDetectiveServer.CreateGameReview:output_type -> crabs.evening_detective_server.CreateGameReviewRsp + 191, // 340: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviews:output_type -> crabs.evening_detective_server.GetGameReviewsRsp + 191, // 341: crabs.evening_detective_server.EveningDetectiveServer.GetScenarioReviews:output_type -> crabs.evening_detective_server.GetGameReviewsRsp + 191, // 342: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviewsForModeration:output_type -> crabs.evening_detective_server.GetGameReviewsRsp + 191, // 343: crabs.evening_detective_server.EveningDetectiveServer.GetReviewsForModeration:output_type -> crabs.evening_detective_server.GetGameReviewsRsp + 193, // 344: crabs.evening_detective_server.EveningDetectiveServer.ModerateGameReview:output_type -> crabs.evening_detective_server.ModerateGameReviewRsp + 195, // 345: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:output_type -> crabs.evening_detective_server.UpdateGameRsp + 197, // 346: crabs.evening_detective_server.EveningDetectiveServer.StartGame:output_type -> crabs.evening_detective_server.StartGameRsp + 199, // 347: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:output_type -> crabs.evening_detective_server.PauseGameRsp + 201, // 348: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:output_type -> crabs.evening_detective_server.PlayGameRsp + 203, // 349: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:output_type -> crabs.evening_detective_server.FinishGameRsp + 205, // 350: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:output_type -> crabs.evening_detective_server.ResetGameRsp + 207, // 351: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:output_type -> crabs.evening_detective_server.DeleteGameRsp + 209, // 352: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:output_type -> crabs.evening_detective_server.AddTeamRsp + 211, // 353: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:output_type -> crabs.evening_detective_server.UpdateTeamRsp + 213, // 354: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:output_type -> crabs.evening_detective_server.DeleteTeamRsp + 215, // 355: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:output_type -> crabs.evening_detective_server.GiveTeamApplicationsRsp + 217, // 356: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:output_type -> crabs.evening_detective_server.GetTeamStoryRsp + 220, // 357: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:output_type -> crabs.evening_detective_server.AddTeamActionRsp + 222, // 358: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:output_type -> crabs.evening_detective_server.DeleteLastTeamActionRsp + 224, // 359: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:output_type -> crabs.evening_detective_server.GetTeamAnswersRsp + 226, // 360: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:output_type -> crabs.evening_detective_server.SubmitTeamAnswersRsp + 228, // 361: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:output_type -> crabs.evening_detective_server.SetTeamAnswerScoreRsp + 241, // [241:362] is the sub-list for method output_type + 120, // [120:241] is the sub-list for method input_type + 120, // [120:120] is the sub-list for extension type_name + 120, // [120:120] is the sub-list for extension extendee + 0, // [0:120] is the sub-list for field type_name } func init() { file_main_proto_init() } @@ -15206,28 +15849,28 @@ func file_main_proto_init() { if File_main_proto != nil { return } - file_main_proto_msgTypes[64].OneofWrappers = []any{} - file_main_proto_msgTypes[74].OneofWrappers = []any{} - file_main_proto_msgTypes[106].OneofWrappers = []any{} - file_main_proto_msgTypes[114].OneofWrappers = []any{} - file_main_proto_msgTypes[179].OneofWrappers = []any{} - file_main_proto_msgTypes[212].OneofWrappers = []any{} - file_main_proto_msgTypes[223].OneofWrappers = []any{} - file_main_proto_msgTypes[224].OneofWrappers = []any{} - file_main_proto_msgTypes[230].OneofWrappers = []any{} - file_main_proto_msgTypes[231].OneofWrappers = []any{} + file_main_proto_msgTypes[73].OneofWrappers = []any{} + file_main_proto_msgTypes[83].OneofWrappers = []any{} + file_main_proto_msgTypes[115].OneofWrappers = []any{} + file_main_proto_msgTypes[123].OneofWrappers = []any{} + file_main_proto_msgTypes[188].OneofWrappers = []any{} + file_main_proto_msgTypes[221].OneofWrappers = []any{} + file_main_proto_msgTypes[232].OneofWrappers = []any{} + file_main_proto_msgTypes[233].OneofWrappers = []any{} file_main_proto_msgTypes[239].OneofWrappers = []any{} file_main_proto_msgTypes[240].OneofWrappers = []any{} - file_main_proto_msgTypes[241].OneofWrappers = []any{} - file_main_proto_msgTypes[244].OneofWrappers = []any{} - file_main_proto_msgTypes[246].OneofWrappers = []any{} + file_main_proto_msgTypes[248].OneofWrappers = []any{} + file_main_proto_msgTypes[249].OneofWrappers = []any{} + file_main_proto_msgTypes[250].OneofWrappers = []any{} + file_main_proto_msgTypes[253].OneofWrappers = []any{} + file_main_proto_msgTypes[255].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_main_proto_rawDesc), len(file_main_proto_rawDesc)), - NumEnums: 5, - NumMessages: 249, + NumEnums: 6, + NumMessages: 258, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/main.pb.gw.go b/proto/main.pb.gw.go index e193bb2..2e73b1e 100644 --- a/proto/main.pb.gw.go +++ b/proto/main.pb.gw.go @@ -907,6 +907,212 @@ func local_request_EveningDetectiveServer_DownloadFile_0(ctx context.Context, ma return msg, metadata, err } +func request_EveningDetectiveServer_SavePlaylistGroup_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq SavePlaylistGroupReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["playlistID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "playlistID") + } + protoReq.PlaylistID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "playlistID", err) + } + msg, err := client.SavePlaylistGroup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_EveningDetectiveServer_SavePlaylistGroup_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq SavePlaylistGroupReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["playlistID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "playlistID") + } + protoReq.PlaylistID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "playlistID", err) + } + msg, err := server.SavePlaylistGroup(ctx, &protoReq) + return msg, metadata, err +} + +func request_EveningDetectiveServer_DeletePlaylistGroup_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq DeletePlaylistGroupReq + metadata runtime.ServerMetadata + err error + ) + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["playlistID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "playlistID") + } + protoReq.PlaylistID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "playlistID", err) + } + val, ok = pathParams["groupID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "groupID") + } + protoReq.GroupID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "groupID", err) + } + msg, err := client.DeletePlaylistGroup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_EveningDetectiveServer_DeletePlaylistGroup_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq DeletePlaylistGroupReq + metadata runtime.ServerMetadata + err error + ) + val, ok := pathParams["playlistID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "playlistID") + } + protoReq.PlaylistID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "playlistID", err) + } + val, ok = pathParams["groupID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "groupID") + } + protoReq.GroupID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "groupID", err) + } + msg, err := server.DeletePlaylistGroup(ctx, &protoReq) + return msg, metadata, err +} + +func request_EveningDetectiveServer_ReorderPlaylistGroups_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq ReorderPlaylistGroupsReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["playlistID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "playlistID") + } + protoReq.PlaylistID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "playlistID", err) + } + msg, err := client.ReorderPlaylistGroups(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_EveningDetectiveServer_ReorderPlaylistGroups_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq ReorderPlaylistGroupsReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["playlistID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "playlistID") + } + protoReq.PlaylistID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "playlistID", err) + } + msg, err := server.ReorderPlaylistGroups(ctx, &protoReq) + return msg, metadata, err +} + +func request_EveningDetectiveServer_SetPlaylistTrackGroup_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq SetPlaylistTrackGroupReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["playlistID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "playlistID") + } + protoReq.PlaylistID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "playlistID", err) + } + val, ok = pathParams["trackID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "trackID") + } + protoReq.TrackID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "trackID", err) + } + msg, err := client.SetPlaylistTrackGroup(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_EveningDetectiveServer_SetPlaylistTrackGroup_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq SetPlaylistTrackGroupReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["playlistID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "playlistID") + } + protoReq.PlaylistID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "playlistID", err) + } + val, ok = pathParams["trackID"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "trackID") + } + protoReq.TrackID, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "trackID", err) + } + msg, err := server.SetPlaylistTrackGroup(ctx, &protoReq) + return msg, metadata, err +} + func request_EveningDetectiveServer_GetPlaylists_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var ( protoReq GetPlaylistsReq @@ -5149,6 +5355,86 @@ func RegisterEveningDetectiveServerHandlerServer(ctx context.Context, mux *runti } forward_EveningDetectiveServer_DownloadFile_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_SavePlaylistGroup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/SavePlaylistGroup", runtime.WithHTTPPathPattern("/api/playlists/{playlistID}/groups")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EveningDetectiveServer_SavePlaylistGroup_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_SavePlaylistGroup_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodDelete, pattern_EveningDetectiveServer_DeletePlaylistGroup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/DeletePlaylistGroup", runtime.WithHTTPPathPattern("/api/playlists/{playlistID}/groups/{groupID}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EveningDetectiveServer_DeletePlaylistGroup_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_DeletePlaylistGroup_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPut, pattern_EveningDetectiveServer_ReorderPlaylistGroups_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/ReorderPlaylistGroups", runtime.WithHTTPPathPattern("/api/playlists/{playlistID}/groups/order")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EveningDetectiveServer_ReorderPlaylistGroups_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_ReorderPlaylistGroups_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPut, pattern_EveningDetectiveServer_SetPlaylistTrackGroup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/SetPlaylistTrackGroup", runtime.WithHTTPPathPattern("/api/playlists/{playlistID}/tracks/{trackID}/group")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EveningDetectiveServer_SetPlaylistTrackGroup_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_SetPlaylistTrackGroup_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle(http.MethodGet, pattern_EveningDetectiveServer_GetPlaylists_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -7442,6 +7728,74 @@ func RegisterEveningDetectiveServerHandlerClient(ctx context.Context, mux *runti } forward_EveningDetectiveServer_DownloadFile_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_SavePlaylistGroup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/SavePlaylistGroup", runtime.WithHTTPPathPattern("/api/playlists/{playlistID}/groups")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EveningDetectiveServer_SavePlaylistGroup_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_SavePlaylistGroup_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodDelete, pattern_EveningDetectiveServer_DeletePlaylistGroup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/DeletePlaylistGroup", runtime.WithHTTPPathPattern("/api/playlists/{playlistID}/groups/{groupID}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EveningDetectiveServer_DeletePlaylistGroup_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_DeletePlaylistGroup_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPut, pattern_EveningDetectiveServer_ReorderPlaylistGroups_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/ReorderPlaylistGroups", runtime.WithHTTPPathPattern("/api/playlists/{playlistID}/groups/order")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EveningDetectiveServer_ReorderPlaylistGroups_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_ReorderPlaylistGroups_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPut, pattern_EveningDetectiveServer_SetPlaylistTrackGroup_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/SetPlaylistTrackGroup", runtime.WithHTTPPathPattern("/api/playlists/{playlistID}/tracks/{trackID}/group")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EveningDetectiveServer_SetPlaylistTrackGroup_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_SetPlaylistTrackGroup_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle(http.MethodGet, pattern_EveningDetectiveServer_GetPlaylists_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -8971,6 +9325,10 @@ var ( pattern_EveningDetectiveServer_GetPermissions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "ui", "permissions"}, "")) pattern_EveningDetectiveServer_UploadFile_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "files", "upload"}, "")) pattern_EveningDetectiveServer_DownloadFile_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"api", "files", "filename"}, "")) + pattern_EveningDetectiveServer_SavePlaylistGroup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "playlists", "playlistID", "groups"}, "")) + pattern_EveningDetectiveServer_DeletePlaylistGroup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "playlists", "playlistID", "groups", "groupID"}, "")) + pattern_EveningDetectiveServer_ReorderPlaylistGroups_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 2, 4}, []string{"api", "playlists", "playlistID", "groups", "order"}, "")) + pattern_EveningDetectiveServer_SetPlaylistTrackGroup_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"api", "playlists", "playlistID", "tracks", "trackID", "group"}, "")) pattern_EveningDetectiveServer_GetPlaylists_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"api", "playlists"}, "")) pattern_EveningDetectiveServer_CreatePlaylist_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"api", "playlists"}, "")) pattern_EveningDetectiveServer_UpdatePlaylist_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"api", "playlists", "ID"}, "")) @@ -9091,6 +9449,10 @@ var ( forward_EveningDetectiveServer_GetPermissions_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_UploadFile_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_DownloadFile_0 = runtime.ForwardResponseMessage + forward_EveningDetectiveServer_SavePlaylistGroup_0 = runtime.ForwardResponseMessage + forward_EveningDetectiveServer_DeletePlaylistGroup_0 = runtime.ForwardResponseMessage + forward_EveningDetectiveServer_ReorderPlaylistGroups_0 = runtime.ForwardResponseMessage + forward_EveningDetectiveServer_SetPlaylistTrackGroup_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_GetPlaylists_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_CreatePlaylist_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_UpdatePlaylist_0 = runtime.ForwardResponseMessage diff --git a/proto/main_grpc.pb.go b/proto/main_grpc.pb.go index c655f92..be26fae 100644 --- a/proto/main_grpc.pb.go +++ b/proto/main_grpc.pb.go @@ -55,6 +55,10 @@ const ( EveningDetectiveServer_GetPermissions_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetPermissions" EveningDetectiveServer_UploadFile_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/UploadFile" EveningDetectiveServer_DownloadFile_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/DownloadFile" + EveningDetectiveServer_SavePlaylistGroup_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/SavePlaylistGroup" + EveningDetectiveServer_DeletePlaylistGroup_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/DeletePlaylistGroup" + EveningDetectiveServer_ReorderPlaylistGroups_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/ReorderPlaylistGroups" + EveningDetectiveServer_SetPlaylistTrackGroup_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/SetPlaylistTrackGroup" EveningDetectiveServer_GetPlaylists_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetPlaylists" EveningDetectiveServer_CreatePlaylist_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/CreatePlaylist" EveningDetectiveServer_UpdatePlaylist_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/UpdatePlaylist" @@ -180,6 +184,10 @@ type EveningDetectiveServerClient interface { GetPermissions(ctx context.Context, in *GetPermissionsReq, opts ...grpc.CallOption) (*GetPermissionsRsp, error) UploadFile(ctx context.Context, in *UploadFileReq, opts ...grpc.CallOption) (*UploadFileRsp, error) DownloadFile(ctx context.Context, in *DownloadFileReq, opts ...grpc.CallOption) (*httpbody.HttpBody, error) + SavePlaylistGroup(ctx context.Context, in *SavePlaylistGroupReq, opts ...grpc.CallOption) (*SavePlaylistGroupRsp, error) + DeletePlaylistGroup(ctx context.Context, in *DeletePlaylistGroupReq, opts ...grpc.CallOption) (*DeletePlaylistGroupRsp, error) + ReorderPlaylistGroups(ctx context.Context, in *ReorderPlaylistGroupsReq, opts ...grpc.CallOption) (*ReorderPlaylistGroupsRsp, error) + SetPlaylistTrackGroup(ctx context.Context, in *SetPlaylistTrackGroupReq, opts ...grpc.CallOption) (*SetPlaylistTrackGroupRsp, error) GetPlaylists(ctx context.Context, in *GetPlaylistsReq, opts ...grpc.CallOption) (*GetPlaylistsRsp, error) CreatePlaylist(ctx context.Context, in *CreatePlaylistReq, opts ...grpc.CallOption) (*CreatePlaylistRsp, error) UpdatePlaylist(ctx context.Context, in *UpdatePlaylistReq, opts ...grpc.CallOption) (*UpdatePlaylistRsp, error) @@ -580,6 +588,46 @@ func (c *eveningDetectiveServerClient) DownloadFile(ctx context.Context, in *Dow return out, nil } +func (c *eveningDetectiveServerClient) SavePlaylistGroup(ctx context.Context, in *SavePlaylistGroupReq, opts ...grpc.CallOption) (*SavePlaylistGroupRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(SavePlaylistGroupRsp) + err := c.cc.Invoke(ctx, EveningDetectiveServer_SavePlaylistGroup_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eveningDetectiveServerClient) DeletePlaylistGroup(ctx context.Context, in *DeletePlaylistGroupReq, opts ...grpc.CallOption) (*DeletePlaylistGroupRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(DeletePlaylistGroupRsp) + err := c.cc.Invoke(ctx, EveningDetectiveServer_DeletePlaylistGroup_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eveningDetectiveServerClient) ReorderPlaylistGroups(ctx context.Context, in *ReorderPlaylistGroupsReq, opts ...grpc.CallOption) (*ReorderPlaylistGroupsRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ReorderPlaylistGroupsRsp) + err := c.cc.Invoke(ctx, EveningDetectiveServer_ReorderPlaylistGroups_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eveningDetectiveServerClient) SetPlaylistTrackGroup(ctx context.Context, in *SetPlaylistTrackGroupReq, opts ...grpc.CallOption) (*SetPlaylistTrackGroupRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(SetPlaylistTrackGroupRsp) + err := c.cc.Invoke(ctx, EveningDetectiveServer_SetPlaylistTrackGroup_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *eveningDetectiveServerClient) GetPlaylists(ctx context.Context, in *GetPlaylistsReq, opts ...grpc.CallOption) (*GetPlaylistsRsp, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetPlaylistsRsp) @@ -1495,6 +1543,10 @@ type EveningDetectiveServerServer interface { GetPermissions(context.Context, *GetPermissionsReq) (*GetPermissionsRsp, error) UploadFile(context.Context, *UploadFileReq) (*UploadFileRsp, error) DownloadFile(context.Context, *DownloadFileReq) (*httpbody.HttpBody, error) + SavePlaylistGroup(context.Context, *SavePlaylistGroupReq) (*SavePlaylistGroupRsp, error) + DeletePlaylistGroup(context.Context, *DeletePlaylistGroupReq) (*DeletePlaylistGroupRsp, error) + ReorderPlaylistGroups(context.Context, *ReorderPlaylistGroupsReq) (*ReorderPlaylistGroupsRsp, error) + SetPlaylistTrackGroup(context.Context, *SetPlaylistTrackGroupReq) (*SetPlaylistTrackGroupRsp, error) GetPlaylists(context.Context, *GetPlaylistsReq) (*GetPlaylistsRsp, error) CreatePlaylist(context.Context, *CreatePlaylistReq) (*CreatePlaylistRsp, error) UpdatePlaylist(context.Context, *UpdatePlaylistReq) (*UpdatePlaylistRsp, error) @@ -1692,6 +1744,18 @@ func (UnimplementedEveningDetectiveServerServer) UploadFile(context.Context, *Up func (UnimplementedEveningDetectiveServerServer) DownloadFile(context.Context, *DownloadFileReq) (*httpbody.HttpBody, error) { return nil, status.Error(codes.Unimplemented, "method DownloadFile not implemented") } +func (UnimplementedEveningDetectiveServerServer) SavePlaylistGroup(context.Context, *SavePlaylistGroupReq) (*SavePlaylistGroupRsp, error) { + return nil, status.Error(codes.Unimplemented, "method SavePlaylistGroup not implemented") +} +func (UnimplementedEveningDetectiveServerServer) DeletePlaylistGroup(context.Context, *DeletePlaylistGroupReq) (*DeletePlaylistGroupRsp, error) { + return nil, status.Error(codes.Unimplemented, "method DeletePlaylistGroup not implemented") +} +func (UnimplementedEveningDetectiveServerServer) ReorderPlaylistGroups(context.Context, *ReorderPlaylistGroupsReq) (*ReorderPlaylistGroupsRsp, error) { + return nil, status.Error(codes.Unimplemented, "method ReorderPlaylistGroups not implemented") +} +func (UnimplementedEveningDetectiveServerServer) SetPlaylistTrackGroup(context.Context, *SetPlaylistTrackGroupReq) (*SetPlaylistTrackGroupRsp, error) { + return nil, status.Error(codes.Unimplemented, "method SetPlaylistTrackGroup not implemented") +} func (UnimplementedEveningDetectiveServerServer) GetPlaylists(context.Context, *GetPlaylistsReq) (*GetPlaylistsRsp, error) { return nil, status.Error(codes.Unimplemented, "method GetPlaylists not implemented") } @@ -2500,6 +2564,78 @@ func _EveningDetectiveServer_DownloadFile_Handler(srv interface{}, ctx context.C return interceptor(ctx, in, info, handler) } +func _EveningDetectiveServer_SavePlaylistGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SavePlaylistGroupReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EveningDetectiveServerServer).SavePlaylistGroup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EveningDetectiveServer_SavePlaylistGroup_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EveningDetectiveServerServer).SavePlaylistGroup(ctx, req.(*SavePlaylistGroupReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _EveningDetectiveServer_DeletePlaylistGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeletePlaylistGroupReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EveningDetectiveServerServer).DeletePlaylistGroup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EveningDetectiveServer_DeletePlaylistGroup_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EveningDetectiveServerServer).DeletePlaylistGroup(ctx, req.(*DeletePlaylistGroupReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _EveningDetectiveServer_ReorderPlaylistGroups_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReorderPlaylistGroupsReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EveningDetectiveServerServer).ReorderPlaylistGroups(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EveningDetectiveServer_ReorderPlaylistGroups_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EveningDetectiveServerServer).ReorderPlaylistGroups(ctx, req.(*ReorderPlaylistGroupsReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _EveningDetectiveServer_SetPlaylistTrackGroup_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetPlaylistTrackGroupReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EveningDetectiveServerServer).SetPlaylistTrackGroup(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EveningDetectiveServer_SetPlaylistTrackGroup_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EveningDetectiveServerServer).SetPlaylistTrackGroup(ctx, req.(*SetPlaylistTrackGroupReq)) + } + return interceptor(ctx, in, info, handler) +} + func _EveningDetectiveServer_GetPlaylists_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetPlaylistsReq) if err := dec(in); err != nil { @@ -4207,6 +4343,22 @@ var EveningDetectiveServer_ServiceDesc = grpc.ServiceDesc{ MethodName: "DownloadFile", Handler: _EveningDetectiveServer_DownloadFile_Handler, }, + { + MethodName: "SavePlaylistGroup", + Handler: _EveningDetectiveServer_SavePlaylistGroup_Handler, + }, + { + MethodName: "DeletePlaylistGroup", + Handler: _EveningDetectiveServer_DeletePlaylistGroup_Handler, + }, + { + MethodName: "ReorderPlaylistGroups", + Handler: _EveningDetectiveServer_ReorderPlaylistGroups_Handler, + }, + { + MethodName: "SetPlaylistTrackGroup", + Handler: _EveningDetectiveServer_SetPlaylistTrackGroup_Handler, + }, { MethodName: "GetPlaylists", Handler: _EveningDetectiveServer_GetPlaylists_Handler,