mirror of
https://github.com/jech/galene.git
synced 2024-11-22 16:45:58 +01:00
Implement /subgroups.
This commit is contained in:
parent
43047fc00e
commit
27a2e45500
3 changed files with 53 additions and 0 deletions
|
@ -259,6 +259,30 @@ func GetNames() []string {
|
||||||
return names
|
return names
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SubGroup struct {
|
||||||
|
Name string
|
||||||
|
Clients int
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetSubGroups(parent string) []SubGroup {
|
||||||
|
prefix := parent + "/"
|
||||||
|
subgroups := make([]SubGroup, 0)
|
||||||
|
|
||||||
|
Range(func(g *Group) bool {
|
||||||
|
if strings.HasPrefix(g.name, prefix) {
|
||||||
|
g.mu.Lock()
|
||||||
|
count := len(g.clients)
|
||||||
|
g.mu.Unlock()
|
||||||
|
if count > 0 {
|
||||||
|
subgroups = append(subgroups,
|
||||||
|
SubGroup{g.name, count})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
return subgroups
|
||||||
|
}
|
||||||
|
|
||||||
func Get(name string) *Group {
|
func Get(name string) *Group {
|
||||||
groups.mu.Lock()
|
groups.mu.Lock()
|
||||||
defer groups.mu.Unlock()
|
defer groups.mu.Unlock()
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
"github.com/pion/webrtc/v3"
|
"github.com/pion/webrtc/v3"
|
||||||
|
@ -1218,6 +1219,26 @@ func handleClientMessage(c *webClient, m clientMessage) error {
|
||||||
group.DelClient(disk)
|
group.DelClient(disk)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
case "subgroups":
|
||||||
|
if !c.permissions.Op {
|
||||||
|
return c.error(group.UserError("not authorised"))
|
||||||
|
}
|
||||||
|
s := ""
|
||||||
|
for _, sg := range group.GetSubGroups(g.Name()) {
|
||||||
|
plural := ""
|
||||||
|
if sg.Clients > 1 {
|
||||||
|
plural = "s"
|
||||||
|
}
|
||||||
|
s = s + fmt.Sprintf("%v (%v client%v)",
|
||||||
|
sg.Name, sg.Clients, plural)
|
||||||
|
}
|
||||||
|
c.write(clientMessage{
|
||||||
|
Type: "chat",
|
||||||
|
Dest: c.id,
|
||||||
|
Username: "Server",
|
||||||
|
Time: group.ToJSTime(time.Now()),
|
||||||
|
Value: &s,
|
||||||
|
})
|
||||||
default:
|
default:
|
||||||
return group.ProtocolError("unknown group action")
|
return group.ProtocolError("unknown group action")
|
||||||
}
|
}
|
||||||
|
|
|
@ -1759,6 +1759,14 @@ commands.unrecord = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
commands.subgroups = {
|
||||||
|
predicate: operatorPredicate,
|
||||||
|
description: 'list subgroups',
|
||||||
|
f: (c, r) => {
|
||||||
|
serverConnection.groupAction(getUsername(), 'subgroups');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* parseCommand splits a string into two space-separated parts. The first
|
* parseCommand splits a string into two space-separated parts. The first
|
||||||
* part may be quoted and may include backslash escapes.
|
* part may be quoted and may include backslash escapes.
|
||||||
|
|
Loading…
Reference in a new issue