( ctx context.Context, rsAPI roomserverAPI.ClientRoomserverAPI, extRoomsProvider api.ExtraPublicRoomsProvider, )
| 230 | } |
| 231 | |
| 232 | func refreshPublicRoomCache( |
| 233 | ctx context.Context, rsAPI roomserverAPI.ClientRoomserverAPI, extRoomsProvider api.ExtraPublicRoomsProvider, |
| 234 | ) []gomatrixserverlib.PublicRoom { |
| 235 | cacheMu.Lock() |
| 236 | defer cacheMu.Unlock() |
| 237 | var extraRooms []gomatrixserverlib.PublicRoom |
| 238 | if extRoomsProvider != nil { |
| 239 | extraRooms = extRoomsProvider.Rooms() |
| 240 | } |
| 241 | |
| 242 | var queryRes roomserverAPI.QueryPublishedRoomsResponse |
| 243 | err := rsAPI.QueryPublishedRooms(ctx, &roomserverAPI.QueryPublishedRoomsRequest{}, &queryRes) |
| 244 | if err != nil { |
| 245 | util.GetLogger(ctx).WithError(err).Error("QueryPublishedRooms failed") |
| 246 | return publicRoomsCache |
| 247 | } |
| 248 | pubRooms, err := roomserverAPI.PopulatePublicRooms(ctx, queryRes.RoomIDs, rsAPI) |
| 249 | if err != nil { |
| 250 | util.GetLogger(ctx).WithError(err).Error("PopulatePublicRooms failed") |
| 251 | return publicRoomsCache |
| 252 | } |
| 253 | publicRoomsCache = []gomatrixserverlib.PublicRoom{} |
| 254 | publicRoomsCache = append(publicRoomsCache, pubRooms...) |
| 255 | publicRoomsCache = append(publicRoomsCache, extraRooms...) |
| 256 | publicRoomsCache = dedupeAndShuffle(publicRoomsCache) |
| 257 | |
| 258 | // sort by total joined member count (big to small) |
| 259 | sort.SliceStable(publicRoomsCache, func(i, j int) bool { |
| 260 | return publicRoomsCache[i].JoinedMembersCount > publicRoomsCache[j].JoinedMembersCount |
| 261 | }) |
| 262 | return publicRoomsCache |
| 263 | } |
| 264 | |
| 265 | func getPublicRoomsFromCache() []gomatrixserverlib.PublicRoom { |
| 266 | cacheMu.Lock() |
no test coverage detected