From 2d98fcffdf895a6a23a34e2bfc0b1430488f2e0e Mon Sep 17 00:00:00 2001 From: Max Magorsch Date: Fri, 19 Jun 2020 18:33:21 +0200 Subject: Speed up the /lists page Signed-off-by: Max Magorsch --- pkg/app/list/browse.go | 52 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 15 deletions(-) (limited to 'pkg/app/list/browse.go') diff --git a/pkg/app/list/browse.go b/pkg/app/list/browse.go index 7d046e6..fdc3ab1 100644 --- a/pkg/app/list/browse.go +++ b/pkg/app/list/browse.go @@ -2,30 +2,42 @@ package list import ( "archives/pkg/config" + "archives/pkg/database" "archives/pkg/models" "net/http" ) func Browse(w http.ResponseWriter, r *http.Request) { - // Count number of messages in the current mailing lists - var currentMailingLists []models.MailingList - for _, listName := range config.CurrentMailingLists() { - messageCount, _ := countMessages(listName) - currentMailingLists = append(currentMailingLists, models.MailingList{ - Name: listName, - MessageCount: messageCount, - }) + var res []struct { + Name string + MessageCount int + } + err := database.DBCon.Model((*models.Message)(nil)). + ColumnExpr("list as name, count(*) as message_count"). + Group("list"). + Select(&res) + + if err != nil { + http.NotFound(w,r) + return } - // Count number of messages in the frozen archives + var currentMailingLists []models.MailingList var frozenArchives []models.MailingList - for _, listName := range config.FrozenArchives() { - messageCount, _ := countMessages(listName) - frozenArchives = append(frozenArchives, models.MailingList{ - Name: listName, - MessageCount: messageCount, - }) + + for _, list := range res { + if contains(config.CurrentMailingLists(), list.Name) { + currentMailingLists = append(currentMailingLists, models.MailingList{ + Name: list.Name, + MessageCount: list.MessageCount, + }) + }else if contains(config.FrozenArchives(), list.Name) { + frozenArchives = append(frozenArchives, models.MailingList{ + Name: list.Name, + MessageCount: list.MessageCount, + }) + } } browseData := struct { @@ -38,3 +50,13 @@ func Browse(w http.ResponseWriter, r *http.Request) { renderBrowseTemplate(w, browseData) } + + +func contains(s []string, e string) bool { + for _, a := range s { + if a == e { + return true + } + } + return false +} -- cgit v1.2.3-18-g5258