feat: separate 'speaker controls'
specifically for 'i have finished speaking' and not allowing to change the state
This commit is contained in:
@@ -41,6 +41,8 @@ func registerPageRoutes(
|
||||
http.StripPrefix(subscribeRoomPath, streamingRoomStates(templateFs, roomsM))))
|
||||
|
||||
http.HandleFunc("/rooms/preview-templates", roomTemplatesPreview(templateFs))
|
||||
|
||||
http.HandleFunc("/rooms/speakerControls", speakerControlsRoute(templateFs))
|
||||
}
|
||||
|
||||
func streamingRoomStates(
|
||||
@@ -77,7 +79,7 @@ func streamingRoomStates(
|
||||
roomStream := roomsM.Subscribe(r.Context(), roomName)
|
||||
for room := range roomStream {
|
||||
// log.Printf("/rooms/streamingRoom iterating with %+v", room)
|
||||
fmt.Fprint(w, "data: ")
|
||||
fmt.Fprint(w, "event: roomTableUpdate\ndata: ")
|
||||
|
||||
var buffer bytes.Buffer
|
||||
|
||||
@@ -96,6 +98,11 @@ func streamingRoomStates(
|
||||
|
||||
fmt.Fprint(w, "\n\n")
|
||||
w.(http.Flusher).Flush()
|
||||
if session.PersonId == room.CurrentSpeaker {
|
||||
log.Printf("/rooms/subscribe sending 'become-speaker' to %s", session.PersonId)
|
||||
fmt.Fprint(w, "event: become-speaker\ndata:yo\n\n")
|
||||
w.(http.Flusher).Flush()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -119,8 +126,10 @@ func raiseGestureHandRoute(
|
||||
// TODO return error i guess
|
||||
return
|
||||
}
|
||||
var room rooms.Room
|
||||
err = roomsM.Update(r.Context(), session.RoomId, func(fromRoom rooms.Room) (toRoom rooms.Room) {
|
||||
toRoom = fromRoom.RaiseHand(session.PersonId, selectedGesture)
|
||||
room = toRoom
|
||||
return toRoom
|
||||
})
|
||||
if err != nil {
|
||||
@@ -132,19 +141,24 @@ func raiseGestureHandRoute(
|
||||
tmpl := template.Must(
|
||||
template.New("").ParseFS(templateFs, tableTemplates))
|
||||
|
||||
var gesturesData []GestureData
|
||||
for _, gesture := range rooms.GesturesHighToLow {
|
||||
gesturesData = append(gesturesData, GestureData{
|
||||
Url: fmt.Sprintf("%s%d", raiseHandPath, gesture),
|
||||
Gesture: gesture,
|
||||
IsSelected: selectedGesture == gesture,
|
||||
})
|
||||
}
|
||||
err = tmpl.ExecuteTemplate(w, "controls", &gesturesData)
|
||||
if err != nil {
|
||||
log.Printf("/rooms/releaseHand error saving hand: %s\n", err)
|
||||
if session.PersonId == room.CurrentSpeaker {
|
||||
tmpl.ExecuteTemplate(w, "speakerControls", nil)
|
||||
return
|
||||
// TODO return error i guess
|
||||
} else {
|
||||
var gesturesData []GestureData
|
||||
for _, gesture := range rooms.GesturesHighToLow {
|
||||
gesturesData = append(gesturesData, GestureData{
|
||||
Url: fmt.Sprintf("%s%d", raiseHandPath, gesture),
|
||||
Gesture: gesture,
|
||||
IsSelected: selectedGesture == gesture,
|
||||
})
|
||||
}
|
||||
err = tmpl.ExecuteTemplate(w, "controls", &gesturesData)
|
||||
if err != nil {
|
||||
log.Printf("/rooms/releaseHand error saving hand: %s\n", err)
|
||||
return
|
||||
// TODO return error i guess
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -178,8 +192,8 @@ func releaseHandRoute(
|
||||
var gesturesData []GestureData
|
||||
for _, gesture := range rooms.GesturesHighToLow {
|
||||
gesturesData = append(gesturesData, GestureData{
|
||||
Url: fmt.Sprintf("%s%d", raiseHandPath, gesture),
|
||||
Gesture: gesture,
|
||||
Url: fmt.Sprintf("%s%d", raiseHandPath, gesture),
|
||||
Gesture: gesture,
|
||||
IsSelected: false,
|
||||
})
|
||||
}
|
||||
@@ -192,7 +206,6 @@ func releaseHandRoute(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func roomPageRoute(
|
||||
templateFs *embed.FS,
|
||||
roomsM rooms.RoomManager,
|
||||
@@ -236,8 +249,8 @@ func roomPageRoute(
|
||||
selectedGesture, isSelected := room.ParticipantHands[session.PersonId]
|
||||
for _, gesture := range rooms.GesturesHighToLow {
|
||||
gesturesData = append(gesturesData, GestureData{
|
||||
Url: fmt.Sprintf("%s%d", raiseHandPath, gesture),
|
||||
Gesture: gesture,
|
||||
Url: fmt.Sprintf("%s%d", raiseHandPath, gesture),
|
||||
Gesture: gesture,
|
||||
IsSelected: isSelected && selectedGesture == gesture,
|
||||
})
|
||||
}
|
||||
@@ -269,8 +282,18 @@ func roomPageRoute(
|
||||
}
|
||||
}
|
||||
|
||||
func speakerControlsRoute(
|
||||
templateFs *embed.FS,
|
||||
) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
templateFile := "templates/room.gohtml"
|
||||
tmpl := template.Must(template.ParseFS(templateFs, templateFile))
|
||||
tmpl.ExecuteTemplate(w, "speakerControls", nil)
|
||||
}
|
||||
}
|
||||
|
||||
type GestureData struct {
|
||||
Url string
|
||||
Gesture rooms.HandGesture
|
||||
Url string
|
||||
Gesture rooms.HandGesture
|
||||
IsSelected bool
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user