From 66ab75eb6907f3a96e692f1cd0103511c651bb1b Mon Sep 17 00:00:00 2001 From: rxdn <29165304+rxdn@users.noreply.github.com> Date: Sun, 24 Jan 2021 20:42:40 +0000 Subject: [PATCH] Increase panel limit --- app/http/endpoints/api/guilds.go | 63 +++++++++++++++------ app/http/endpoints/api/panel/panelcreate.go | 4 +- go.mod | 2 +- public/templates/views/panels.tmpl | 2 +- 4 files changed, 52 insertions(+), 19 deletions(-) diff --git a/app/http/endpoints/api/guilds.go b/app/http/endpoints/api/guilds.go index 968c65d..0604556 100644 --- a/app/http/endpoints/api/guilds.go +++ b/app/http/endpoints/api/guilds.go @@ -2,16 +2,17 @@ package api import ( "context" + "fmt" "github.com/TicketsBot/GoPanel/database" "github.com/TicketsBot/GoPanel/rpc/cache" "github.com/TicketsBot/GoPanel/utils" "github.com/TicketsBot/common/permission" + syncutils "github.com/TicketsBot/common/utils" "github.com/gin-gonic/gin" "github.com/rxdn/gdl/objects/guild" "github.com/rxdn/gdl/rest/request" "golang.org/x/sync/errgroup" - "sort" - "sync" + "strings" ) type wrappedGuild struct { @@ -32,21 +33,23 @@ func GetGuilds(ctx *gin.Context) { return } + wg := syncutils.NewChannelWaitGroup() + wg.Add(len(guilds)) + group, _ := errgroup.WithContext(context.Background()) - - adminGuilds := make([]wrappedGuild, 0) - var lock sync.Mutex - + ch := make(chan wrappedGuild) for _, g := range guilds { g := g group.Go(func() error { + defer wg.Done() + // verify bot is in guild _, ok := cache.Instance.GetGuild(g.GuildId, false) if !ok { return nil } - + fakeGuild := guild.Guild{ Id: g.GuildId, Owner: g.Owner, @@ -66,19 +69,52 @@ func GetGuilds(ctx *gin.Context) { } if permLevel >= permission.Support { - lock.Lock() - adminGuilds = append(adminGuilds, wrappedGuild{ + wrapped := wrappedGuild{ Id: g.GuildId, Name: g.Name, Icon: g.Icon, - }) - lock.Unlock() + } + + ch <- wrapped } return nil }) } + adminGuilds := make([]wrappedGuild, 0) + group.Go(func() error { + adminGuilds := make([]wrappedGuild, 0) + loop: + for { + select { + case <-wg.Wait(): + break loop + case guild := <-ch: + // Sort by name + var index int + for i, el := range adminGuilds { + fmt.Printf("%s %s %v\n", guild.Name, el.Name, guild.Name < el.Name) + if strings.ToLower(guild.Name) < strings.ToLower(el.Name) { + index = i + } else { + break + } + } + + if index >= len(adminGuilds) { + adminGuilds = append(adminGuilds, guild) + } else { + adminGuilds = append(adminGuilds, wrappedGuild{}) // create extra capacity with zero value + copy(adminGuilds[index+1:], adminGuilds[index:]) + adminGuilds[index] = guild + } + + } + } + return nil + }) + // not possible anyway but eh if err := group.Wait(); err != nil { ctx.JSON(500, gin.H{ @@ -88,11 +124,6 @@ func GetGuilds(ctx *gin.Context) { return } - // sort guilds - sort.Slice(adminGuilds, func(i, j int) bool { - return adminGuilds[i].Name < adminGuilds[j].Name - }) - ctx.JSON(200, adminGuilds) } diff --git a/app/http/endpoints/api/panel/panelcreate.go b/app/http/endpoints/api/panel/panelcreate.go index e753d62..a94bb34 100644 --- a/app/http/endpoints/api/panel/panelcreate.go +++ b/app/http/endpoints/api/panel/panelcreate.go @@ -19,6 +19,8 @@ import ( "strings" ) +const freePanelLimit = 3 + func CreatePanel(ctx *gin.Context) { guildId := ctx.Keys["guildid"].(uint64) @@ -55,7 +57,7 @@ func CreatePanel(ctx *gin.Context) { }) } - if len(panels) > 0 { + if len(panels) >= freePanelLimit { ctx.AbortWithStatusJSON(402, gin.H{ "success": false, "error": "You have exceeded your panel quota. Purchase premium to unlock more panels.", diff --git a/go.mod b/go.mod index eded039..83b80d6 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.14 require ( github.com/BurntSushi/toml v0.3.1 github.com/TicketsBot/archiverclient v0.0.0-20200704164621-09d42dd941e0 - github.com/TicketsBot/common v0.0.0-20201222195753-3dd751ebabf8 + github.com/TicketsBot/common v0.0.0-20210118171457-d5362b26aa6f github.com/TicketsBot/database v0.0.0-20201224193659-c89391f44b57 github.com/TicketsBot/worker v0.0.0-20201224203453-0c8f9a415306 github.com/apex/log v1.1.2 diff --git a/public/templates/views/panels.tmpl b/public/templates/views/panels.tmpl index 65a7725..d0ec9b5 100644 --- a/public/templates/views/panels.tmpl +++ b/public/templates/views/panels.tmpl @@ -361,7 +361,7 @@ if (res.data.premium) { el.appendChild(document.createTextNode('∞')); } else { - el.appendChild(document.createTextNode('1')); + el.appendChild(document.createTextNode('3')); document.getElementById('premium-ad').style.display = 'block'; }