mirror of
https://codeberg.org/june64/mrvc.git
synced 2026-01-10 16:06:33 +01:00
refactor output into separate package for better organization
This commit is contained in:
parent
11e59fd750
commit
1e9f23d7a9
2 changed files with 113 additions and 101 deletions
103
main.go
103
main.go
|
|
@ -2,49 +2,17 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
"log"
|
"log"
|
||||||
"slices"
|
|
||||||
"sort"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/hashicorp/go-version"
|
|
||||||
"github.com/matrix-org/gomatrixserverlib/fclient"
|
"github.com/matrix-org/gomatrixserverlib/fclient"
|
||||||
"maunium.net/go/mautrix"
|
"maunium.net/go/mautrix"
|
||||||
"maunium.net/go/mautrix/id"
|
"maunium.net/go/mautrix/id"
|
||||||
|
|
||||||
"codeberg.org/june64/mrvc/config"
|
"codeberg.org/june64/mrvc/config"
|
||||||
|
"codeberg.org/june64/mrvc/output"
|
||||||
"codeberg.org/june64/mrvc/roominfotree"
|
"codeberg.org/june64/mrvc/roominfotree"
|
||||||
)
|
)
|
||||||
|
|
||||||
func compareVersionStrings(a, b string) int {
|
|
||||||
// Try to parse a and b as versions.
|
|
||||||
// Use only the first part of the version string as sometimes there are suffixes after a space, like " (<commit>)", which then can't be parsed.
|
|
||||||
aStart := strings.Split(a, " ")[0]
|
|
||||||
bStart := strings.Split(b, " ")[0]
|
|
||||||
aVersion, aErr := version.NewVersion(aStart)
|
|
||||||
bVersion, bErr := version.NewVersion(bStart)
|
|
||||||
// An input, which can't be parsed as a version, should be interpreted as being smaller than an input, which can be parsed as a version.
|
|
||||||
switch {
|
|
||||||
case aErr != nil && bErr == nil:
|
|
||||||
return -1
|
|
||||||
case aErr == nil && bErr != nil:
|
|
||||||
return 1
|
|
||||||
case aErr != nil && bErr != nil:
|
|
||||||
return strings.Compare(a, b)
|
|
||||||
}
|
|
||||||
|
|
||||||
if cmpResult := aVersion.Compare(bVersion); cmpResult != 0 {
|
|
||||||
return cmpResult
|
|
||||||
} else {
|
|
||||||
// When the versions are equal, look at the potential suffixes in the version string.
|
|
||||||
aEnd := strings.TrimPrefix(a, aStart)
|
|
||||||
bEnd := strings.TrimPrefix(b, bStart)
|
|
||||||
|
|
||||||
return strings.Compare(aEnd, bEnd)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
config := config.Get()
|
config := config.Get()
|
||||||
|
|
||||||
|
|
@ -75,72 +43,5 @@ func main() {
|
||||||
|
|
||||||
roomInfoTree := roominfotree.Get(config.Rooms, config.Recursive, config.RecursionMaxDepth, config.RecursionSuggestedOnly, client, federationClient)
|
roomInfoTree := roominfotree.Get(config.Rooms, config.Recursive, config.RecursionMaxDepth, config.RecursionSuggestedOnly, client, federationClient)
|
||||||
|
|
||||||
for roomID, roomInfo := range roomInfoTree {
|
output.Print(roomInfoTree, config.PrintHomeserverMemberCount)
|
||||||
fmt.Println("Room:")
|
|
||||||
fmt.Printf(" %s -> %d\n", roomID, roomInfo.MemberCount)
|
|
||||||
givenAliases := roomInfo.GivenAliases
|
|
||||||
if len(givenAliases) > 0 {
|
|
||||||
fmt.Println("Given Aliases:")
|
|
||||||
for _, alias := range givenAliases {
|
|
||||||
fmt.Printf(" %s\n", alias)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
aliases := roomInfo.Aliases
|
|
||||||
if len(aliases) > 0 {
|
|
||||||
fmt.Println("Aliases:")
|
|
||||||
for _, alias := range aliases {
|
|
||||||
fmt.Printf(" %s\n", alias)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println("Version Support:")
|
|
||||||
|
|
||||||
maxRoomVersionKeys := make([]string, 0, len(roomInfo.MaxRoomVersions))
|
|
||||||
for key := range roomInfo.MaxRoomVersions {
|
|
||||||
maxRoomVersionKeys = append(maxRoomVersionKeys, key)
|
|
||||||
}
|
|
||||||
slices.SortFunc(maxRoomVersionKeys, compareVersionStrings)
|
|
||||||
for _, maxRoomVersionKey := range maxRoomVersionKeys {
|
|
||||||
maxRoomVersionInfo := roomInfo.MaxRoomVersions[maxRoomVersionKey]
|
|
||||||
|
|
||||||
fmt.Printf(" %s -> %d\n", maxRoomVersionKey, maxRoomVersionInfo.MemberCount)
|
|
||||||
|
|
||||||
serverKeys := make([]string, 0, len(maxRoomVersionInfo.Servers))
|
|
||||||
for key := range maxRoomVersionInfo.Servers {
|
|
||||||
serverKeys = append(serverKeys, key)
|
|
||||||
}
|
|
||||||
sort.Strings(serverKeys)
|
|
||||||
for _, serverKey := range serverKeys {
|
|
||||||
serverInfo := maxRoomVersionInfo.Servers[serverKey]
|
|
||||||
|
|
||||||
fmt.Printf(" %s -> %d\n", serverKey, serverInfo.MemberCount)
|
|
||||||
|
|
||||||
versionKeys := make([]string, 0, len(serverInfo.Versions))
|
|
||||||
for key := range serverInfo.Versions {
|
|
||||||
versionKeys = append(versionKeys, key)
|
|
||||||
}
|
|
||||||
slices.SortFunc(versionKeys, compareVersionStrings)
|
|
||||||
for _, versionKey := range versionKeys {
|
|
||||||
versionInfo := serverInfo.Versions[versionKey]
|
|
||||||
|
|
||||||
fmt.Printf(" %s -> %d\n", versionKey, versionInfo.MemberCount)
|
|
||||||
|
|
||||||
if config.PrintHomeserverMemberCount {
|
|
||||||
homeserverKeys := make([]string, 0, len(versionInfo.Homeservers))
|
|
||||||
for key := range versionInfo.Homeservers {
|
|
||||||
homeserverKeys = append(homeserverKeys, key)
|
|
||||||
}
|
|
||||||
sort.Strings(homeserverKeys)
|
|
||||||
for _, homeserverKey := range homeserverKeys {
|
|
||||||
homeserverInfo := versionInfo.Homeservers[homeserverKey]
|
|
||||||
|
|
||||||
fmt.Printf(" %s -> %d\n", homeserverKey, homeserverInfo.MemberCount)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
111
output/print.go
Normal file
111
output/print.go
Normal file
|
|
@ -0,0 +1,111 @@
|
||||||
|
package output
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"slices"
|
||||||
|
"sort"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/hashicorp/go-version"
|
||||||
|
|
||||||
|
"codeberg.org/june64/mrvc/roominfotree"
|
||||||
|
)
|
||||||
|
|
||||||
|
func compareVersionStrings(a, b string) int {
|
||||||
|
// Try to parse a and b as versions.
|
||||||
|
// Use only the first part of the version string as sometimes there are suffixes after a space, like " (<commit>)", which then can't be parsed.
|
||||||
|
aStart := strings.Split(a, " ")[0]
|
||||||
|
bStart := strings.Split(b, " ")[0]
|
||||||
|
aVersion, aErr := version.NewVersion(aStart)
|
||||||
|
bVersion, bErr := version.NewVersion(bStart)
|
||||||
|
// An input, which can't be parsed as a version, should be interpreted as being smaller than an input, which can be parsed as a version.
|
||||||
|
switch {
|
||||||
|
case aErr != nil && bErr == nil:
|
||||||
|
return -1
|
||||||
|
case aErr == nil && bErr != nil:
|
||||||
|
return 1
|
||||||
|
case aErr != nil && bErr != nil:
|
||||||
|
return strings.Compare(a, b)
|
||||||
|
}
|
||||||
|
|
||||||
|
if cmpResult := aVersion.Compare(bVersion); cmpResult != 0 {
|
||||||
|
return cmpResult
|
||||||
|
} else {
|
||||||
|
// When the versions are equal, look at the potential suffixes in the version string.
|
||||||
|
aEnd := strings.TrimPrefix(a, aStart)
|
||||||
|
bEnd := strings.TrimPrefix(b, bStart)
|
||||||
|
|
||||||
|
return strings.Compare(aEnd, bEnd)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Print(roomInfoTree roominfotree.RoomInfoTree, printHomeserverMemberCount bool) {
|
||||||
|
for roomID, roomInfo := range roomInfoTree {
|
||||||
|
fmt.Println("Room:")
|
||||||
|
fmt.Printf(" %s -> %d\n", roomID, roomInfo.MemberCount)
|
||||||
|
givenAliases := roomInfo.GivenAliases
|
||||||
|
if len(givenAliases) > 0 {
|
||||||
|
fmt.Println("Given Aliases:")
|
||||||
|
for _, alias := range givenAliases {
|
||||||
|
fmt.Printf(" %s\n", alias)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
aliases := roomInfo.Aliases
|
||||||
|
if len(aliases) > 0 {
|
||||||
|
fmt.Println("Aliases:")
|
||||||
|
for _, alias := range aliases {
|
||||||
|
fmt.Printf(" %s\n", alias)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Version Support:")
|
||||||
|
|
||||||
|
maxRoomVersionKeys := make([]string, 0, len(roomInfo.MaxRoomVersions))
|
||||||
|
for key := range roomInfo.MaxRoomVersions {
|
||||||
|
maxRoomVersionKeys = append(maxRoomVersionKeys, key)
|
||||||
|
}
|
||||||
|
slices.SortFunc(maxRoomVersionKeys, compareVersionStrings)
|
||||||
|
for _, maxRoomVersionKey := range maxRoomVersionKeys {
|
||||||
|
maxRoomVersionInfo := roomInfo.MaxRoomVersions[maxRoomVersionKey]
|
||||||
|
|
||||||
|
fmt.Printf(" %s -> %d\n", maxRoomVersionKey, maxRoomVersionInfo.MemberCount)
|
||||||
|
|
||||||
|
serverKeys := make([]string, 0, len(maxRoomVersionInfo.Servers))
|
||||||
|
for key := range maxRoomVersionInfo.Servers {
|
||||||
|
serverKeys = append(serverKeys, key)
|
||||||
|
}
|
||||||
|
sort.Strings(serverKeys)
|
||||||
|
for _, serverKey := range serverKeys {
|
||||||
|
serverInfo := maxRoomVersionInfo.Servers[serverKey]
|
||||||
|
|
||||||
|
fmt.Printf(" %s -> %d\n", serverKey, serverInfo.MemberCount)
|
||||||
|
|
||||||
|
versionKeys := make([]string, 0, len(serverInfo.Versions))
|
||||||
|
for key := range serverInfo.Versions {
|
||||||
|
versionKeys = append(versionKeys, key)
|
||||||
|
}
|
||||||
|
slices.SortFunc(versionKeys, compareVersionStrings)
|
||||||
|
for _, versionKey := range versionKeys {
|
||||||
|
versionInfo := serverInfo.Versions[versionKey]
|
||||||
|
|
||||||
|
fmt.Printf(" %s -> %d\n", versionKey, versionInfo.MemberCount)
|
||||||
|
|
||||||
|
if printHomeserverMemberCount {
|
||||||
|
homeserverKeys := make([]string, 0, len(versionInfo.Homeservers))
|
||||||
|
for key := range versionInfo.Homeservers {
|
||||||
|
homeserverKeys = append(homeserverKeys, key)
|
||||||
|
}
|
||||||
|
sort.Strings(homeserverKeys)
|
||||||
|
for _, homeserverKey := range homeserverKeys {
|
||||||
|
homeserverInfo := versionInfo.Homeservers[homeserverKey]
|
||||||
|
|
||||||
|
fmt.Printf(" %s -> %d\n", homeserverKey, homeserverInfo.MemberCount)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println()
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue