diff --git a/audon-fe/src/stores/mastodon.js b/audon-fe/src/stores/mastodon.js index 83bc837..16d01d1 100644 --- a/audon-fe/src/stores/mastodon.js +++ b/audon-fe/src/stores/mastodon.js @@ -30,7 +30,7 @@ export const useMastodonStore = defineStore("mastodon", { return `${url.origin}/u/@${this.oauth.audon.webfinger}`; } return ""; - } + }, }, actions: { async fetchToken() { @@ -56,7 +56,11 @@ export const useMastodonStore = defineStore("mastodon", { async revertAvatar() { const token = await axios.get("/api/token"); const rooms = await axios.get("/api/room"); - if (token.data.audon.avatar && rooms.data.length < 1) { + if ( + token.data.audon.avatar && + (rooms.data.length === 0 || + (rooms.data.length === 1 && rooms.data[0].role === "host")) + ) { if (this.avatar) { await this.updateAvatar(this.avatar, token.data.audon.avatar); } diff --git a/room.go b/room.go index 78ab6e2..6cb137c 100644 --- a/room.go +++ b/room.go @@ -257,14 +257,6 @@ func joinRoomHandler(c echo.Context) (err error) { return ErrAlreadyEnded } - lkRoom, _ := getRoomInLivekit(c.Request().Context(), room.RoomID) // lkRoom will be nil if it doesn't exist - if lkRoom == nil { - return ErrRoomNotFound - } - - roomMetadata, _ := getRoomMetadataFromLivekitRoom(lkRoom) - room = roomMetadata.Room - canTalk := room.IsHost(user) || room.IsCoHost(user) // host and cohost can talk from the beginning // check room restriction @@ -302,6 +294,12 @@ func joinRoomHandler(c echo.Context) (err error) { } } + lkRoom, _ := getRoomInLivekit(c.Request().Context(), room.RoomID) // lkRoom will be nil if it doesn't exist + if lkRoom == nil { + return ErrRoomNotFound + } + roomMetadata, _ := getRoomMetadataFromLivekitRoom(lkRoom) + // return 403 if one has been kicked for _, kicked := range roomMetadata.Kicked { if kicked.Equal(user) { diff --git a/schema.go b/schema.go index 9b3a8b4..8eb6d39 100644 --- a/schema.go +++ b/schema.go @@ -90,11 +90,6 @@ func (a *AudonUser) GetCurrentLivekitRooms(ctx context.Context) ([]*livekit.Room break } } - // check host - room, _ := getRoomMetadataFromLivekitRoom(r) - if room.IsHost(a) { - current = append(current, r) - } } return current, nil } diff --git a/user.go b/user.go index e5b9480..45e3c7f 100644 --- a/user.go +++ b/user.go @@ -8,6 +8,7 @@ import ( "time" "github.com/labstack/echo/v4" + "github.com/livekit/protocol/livekit" mastodon "github.com/mattn/go-mastodon" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo/options" @@ -155,8 +156,9 @@ func (a *AudonUser) GetCurrentRoomStatus(ctx context.Context) ([]UserStatus, err if err != nil { return nil, err } + roomList := make([]UserStatus, len(rooms)) - for i, r := range rooms { + for _, r := range rooms { meta, _ := getRoomMetadataFromLivekitRoom(r) role := "listener" if meta.Room.IsHost(a) { @@ -166,10 +168,31 @@ func (a *AudonUser) GetCurrentRoomStatus(ctx context.Context) ([]UserStatus, err } else if meta.IsSpeaker(a) { role = "speaker" } - roomList[i] = UserStatus{ + roomList = append(roomList, UserStatus{ RoomID: r.GetName(), Role: role, + }) + } + + for _, s := range roomList { + if s.Role == "host" { + return roomList, nil } } + + allRooms, err := lkRoomServiceClient.ListRooms(ctx, &livekit.ListRoomsRequest{}) + if err != nil { + return nil, err + } + for _, r := range allRooms.GetRooms() { + meta, _ := getRoomMetadataFromLivekitRoom(r) + if meta.IsHost(a) { + roomList = append(roomList, UserStatus{ + RoomID: r.GetName(), + Role: "host", + }) + } + } + return roomList, nil }