mirror of
https://codeberg.org/june64/mrvc.git
synced 2026-01-09 23:52:54 +01:00
move room ID resolution and given alias information to roomInfoTree
Move room ID resolution into roomInfoTree and therefore store given alias information in RoomInfoTree as well.
This commit is contained in:
parent
7a444ccc7a
commit
f805786ae0
2 changed files with 55 additions and 34 deletions
36
main.go
36
main.go
|
|
@ -73,43 +73,15 @@ func main() {
|
|||
fclient.WithTimeout(config.HomeserverVersionInfoTimeout),
|
||||
)
|
||||
|
||||
roomIDSet := make(map[id.RoomID]bool)
|
||||
aliasSetByRoomID := make(map[id.RoomID](map[string]bool))
|
||||
for _, room := range config.Rooms {
|
||||
// Check, if given room is an alias and try to resolve it into a room id.
|
||||
if strings.HasPrefix(room, "#") {
|
||||
resolvedAlias, err := client.ResolveAlias(context.Background(), id.RoomAlias(room))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
roomIDSet[resolvedAlias.RoomID] = true
|
||||
|
||||
aliasSet, ok := aliasSetByRoomID[resolvedAlias.RoomID]
|
||||
if !ok {
|
||||
aliasSet = make(map[string]bool)
|
||||
aliasSetByRoomID[resolvedAlias.RoomID] = aliasSet
|
||||
}
|
||||
aliasSet[room] = true
|
||||
} else {
|
||||
roomIDSet[id.RoomID(room)] = true
|
||||
}
|
||||
}
|
||||
|
||||
roomIDs := make([]id.RoomID, 0, len(roomIDSet))
|
||||
for roomID := range roomIDSet {
|
||||
roomIDs = append(roomIDs, roomID)
|
||||
}
|
||||
|
||||
roomInfoTree := roominfotree.Get(roomIDs, client, federationClient)
|
||||
roomInfoTree := roominfotree.Get(config.Rooms, client, federationClient)
|
||||
|
||||
for roomID, roomInfo := range roomInfoTree {
|
||||
fmt.Println("Room:")
|
||||
fmt.Printf(" %s -> %d\n", roomID, roomInfo.MemberCount)
|
||||
aliasSet, ok := aliasSetByRoomID[roomID]
|
||||
if ok {
|
||||
aliases := roomInfo.GivenAliases
|
||||
if len(aliases) > 0 {
|
||||
fmt.Println("Given Aliases:")
|
||||
for alias := range aliasSet {
|
||||
for _, alias := range aliases {
|
||||
fmt.Printf(" %s\n", alias)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package roominfotree
|
|||
import (
|
||||
"context"
|
||||
"log"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/matrix-org/gomatrixserverlib/fclient"
|
||||
|
|
@ -20,6 +21,7 @@ type RoomInfoTree map[id.RoomID](*RoomInfo)
|
|||
|
||||
type RoomInfo struct {
|
||||
MemberCount uint
|
||||
GivenAliases []string
|
||||
MaxRoomVersions map[string](*MaxRoomVersionInfo)
|
||||
}
|
||||
|
||||
|
|
@ -52,6 +54,49 @@ var unknownServerVersionInfo = fclient.Version{
|
|||
},
|
||||
}
|
||||
|
||||
// Resolves the given list of rooms to a list of room IDs and a map of given aliases by room ID.
|
||||
func resolveRooms(rooms []string, client *mautrix.Client) ([]id.RoomID, map[id.RoomID]([]string)) {
|
||||
roomIDSet := make(map[id.RoomID]bool)
|
||||
aliasSetByRoomID := make(map[id.RoomID](map[string]bool))
|
||||
for _, room := range rooms {
|
||||
// Check, if given room is an alias and try to resolve it into a room id.
|
||||
if strings.HasPrefix(room, "#") {
|
||||
resolvedAlias, err := client.ResolveAlias(context.Background(), id.RoomAlias(room))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
roomIDSet[resolvedAlias.RoomID] = true
|
||||
|
||||
aliasSet, ok := aliasSetByRoomID[resolvedAlias.RoomID]
|
||||
if !ok {
|
||||
aliasSet = make(map[string]bool)
|
||||
aliasSetByRoomID[resolvedAlias.RoomID] = aliasSet
|
||||
}
|
||||
aliasSet[room] = true
|
||||
} else {
|
||||
roomIDSet[id.RoomID(room)] = true
|
||||
}
|
||||
}
|
||||
|
||||
roomIDs := make([]id.RoomID, 0, len(roomIDSet))
|
||||
for roomID := range roomIDSet {
|
||||
roomIDs = append(roomIDs, roomID)
|
||||
}
|
||||
|
||||
aliasesByRoomID := make(map[id.RoomID]([]string))
|
||||
for roomID, aliasSet := range aliasSetByRoomID {
|
||||
aliases := make([]string, 0, len(aliasSet))
|
||||
for alias := range aliasSet {
|
||||
aliases = append(aliases, alias)
|
||||
}
|
||||
|
||||
aliasesByRoomID[roomID] = aliases
|
||||
}
|
||||
|
||||
return roomIDs, aliasesByRoomID
|
||||
}
|
||||
|
||||
func getMembersByHomeserverByRoomID(roomIDs []id.RoomID, client *mautrix.Client) map[id.RoomID](map[string]uint) {
|
||||
joinedMembersByRoomID := make(map[id.RoomID]*mautrix.RespJoinedMembers)
|
||||
for _, roomID := range roomIDs {
|
||||
|
|
@ -129,7 +174,8 @@ func getServerVersionInfoByHomeserver(homeservers []string, federationClient *fc
|
|||
return serverVersionInfoByHomeserver
|
||||
}
|
||||
|
||||
func Get(roomIDs []id.RoomID, client *mautrix.Client, federationClient *fclient.Client) RoomInfoTree {
|
||||
func Get(rooms []string, client *mautrix.Client, federationClient *fclient.Client) RoomInfoTree {
|
||||
roomIDs, aliasesByRoomID := resolveRooms(rooms, client)
|
||||
membersByHomeserverByRoomID := getMembersByHomeserverByRoomID(roomIDs, client)
|
||||
homeservers := getHomeservers(membersByHomeserverByRoomID)
|
||||
serverVersionInfoByHomeserver := getServerVersionInfoByHomeserver(homeservers, federationClient)
|
||||
|
|
@ -139,7 +185,10 @@ func Get(roomIDs []id.RoomID, client *mautrix.Client, federationClient *fclient.
|
|||
for roomID, membersByHomeserver := range membersByHomeserverByRoomID {
|
||||
roomInfo, ok := roomInfoTree[roomID]
|
||||
if !ok {
|
||||
roomInfo = &RoomInfo{MaxRoomVersions: make(map[string]*MaxRoomVersionInfo)}
|
||||
roomInfo = &RoomInfo{
|
||||
GivenAliases: aliasesByRoomID[roomID],
|
||||
MaxRoomVersions: make(map[string]*MaxRoomVersionInfo),
|
||||
}
|
||||
roomInfoTree[roomID] = roomInfo
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue