forked from Cliffbreak/tsviewer
fixed channels route
This commit is contained in:
parent
036d6f604c
commit
c3fb6ce53b
4 changed files with 31 additions and 22 deletions
|
@ -7,8 +7,8 @@ type Service interface {
|
||||||
|
|
||||||
type Channel struct {
|
type Channel struct {
|
||||||
ID int `json:"id"`
|
ID int `json:"id"`
|
||||||
Subchannels []Channel `json:"subchannels,omitempty"`
|
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
|
Subchannels []Channel `json:"subchannels,omitempty"`
|
||||||
TotalClients int `json:"totalClients"`
|
TotalClients int `json:"totalClients"`
|
||||||
NeededSubscribePower int `json:"neededSubscribePower"`
|
NeededSubscribePower int `json:"neededSubscribePower"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ func IndexGUIHandler(s Service, t template.Template) http.HandlerFunc {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
channels, err := s.Channels()
|
channels, err := s.ChannelsRaw()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
weberror.NewPage(err, http.StatusNotFound).Send(w, t)
|
weberror.NewPage(err, http.StatusNotFound).Send(w, t)
|
||||||
return
|
return
|
||||||
|
|
|
@ -13,6 +13,7 @@ type Service interface {
|
||||||
ServerInfo() (*server.Server, error)
|
ServerInfo() (*server.Server, error)
|
||||||
Clients() ([]*client.Client, error)
|
Clients() ([]*client.Client, error)
|
||||||
Channels() ([]*channel.Channel, error)
|
Channels() ([]*channel.Channel, error)
|
||||||
|
ChannelsRaw() ([]*channel.Channel, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type IndexPage struct {
|
type IndexPage struct {
|
||||||
|
|
|
@ -43,13 +43,32 @@ func (s Service) Channels() ([]*channel.Channel, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if channel.ParentID == 0 {
|
if channel.ParentID == 0 {
|
||||||
|
channels[i] = nil
|
||||||
cc = append(cc, convertChannel(channel))
|
cc = append(cc, convertChannel(channel))
|
||||||
removeItem(&channels, i)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, c := range cc {
|
for _, c := range cc {
|
||||||
addSubChannels(c, &channels)
|
addSubChannels(c, channels)
|
||||||
|
}
|
||||||
|
|
||||||
|
return cc, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s Service) ChannelsRaw() ([]*channel.Channel, error) {
|
||||||
|
channels, err := s.TSClient.Server.ChannelList()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var cc []*channel.Channel
|
||||||
|
|
||||||
|
for _, channel := range channels {
|
||||||
|
if channel == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
cc = append(cc, convertChannel(channel))
|
||||||
}
|
}
|
||||||
|
|
||||||
return cc, nil
|
return cc, nil
|
||||||
|
@ -58,32 +77,21 @@ func (s Service) Channels() ([]*channel.Channel, error) {
|
||||||
func convertChannel(c *ts3.Channel) *channel.Channel {
|
func convertChannel(c *ts3.Channel) *channel.Channel {
|
||||||
return &channel.Channel{
|
return &channel.Channel{
|
||||||
ID: c.ID,
|
ID: c.ID,
|
||||||
Subchannels: []channel.Channel{},
|
|
||||||
Name: c.ChannelName,
|
Name: c.ChannelName,
|
||||||
|
Subchannels: []channel.Channel{},
|
||||||
TotalClients: c.TotalClients,
|
TotalClients: c.TotalClients,
|
||||||
NeededSubscribePower: c.NeededSubscribePower,
|
NeededSubscribePower: c.NeededSubscribePower,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func removeItem(slice *[]*ts3.Channel, id int) {
|
func addSubChannels(c *channel.Channel, channels []*ts3.Channel) {
|
||||||
ss := *slice
|
for i, channel := range channels {
|
||||||
length := len(ss)
|
if channel == nil {
|
||||||
|
continue
|
||||||
if length < id+1 {
|
|
||||||
ss = nil
|
|
||||||
} else if length == id+1 {
|
|
||||||
ss = ss[:id]
|
|
||||||
} else if length > id+1 {
|
|
||||||
ss = append(ss[:id], ss[id+1:]...)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
*slice = ss
|
|
||||||
}
|
|
||||||
|
|
||||||
func addSubChannels(c *channel.Channel, channels *[]*ts3.Channel) {
|
|
||||||
for i, channel := range *channels {
|
|
||||||
if c.ID == channel.ParentID {
|
if c.ID == channel.ParentID {
|
||||||
removeItem(channels, i)
|
channels[i] = nil
|
||||||
subChannel := convertChannel(channel)
|
subChannel := convertChannel(channel)
|
||||||
addSubChannels(subChannel, channels)
|
addSubChannels(subChannel, channels)
|
||||||
c.Subchannels = append(c.Subchannels, *subChannel)
|
c.Subchannels = append(c.Subchannels, *subChannel)
|
||||||
|
|
Loading…
Reference in a new issue