aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/app/home/home.go')
-rw-r--r--pkg/app/home/home.go71
1 files changed, 71 insertions, 0 deletions
diff --git a/pkg/app/home/home.go b/pkg/app/home/home.go
new file mode 100644
index 0000000..e2d3955
--- /dev/null
+++ b/pkg/app/home/home.go
@@ -0,0 +1,71 @@
+// Used to show the landing page of the application
+
+package home
+
+import (
+ "archives/pkg/app/popular"
+ "archives/pkg/config"
+ "archives/pkg/database"
+ "archives/pkg/models"
+ "github.com/go-pg/pg/v10/orm"
+ "net/http"
+ "time"
+)
+
+// Show renders a template to show the landing page of the application
+func Show(w http.ResponseWriter, r *http.Request) {
+
+ var mailingLists []models.MailingList
+
+ for _, mailingList := range config.IndexMailingLists() {
+ var messages []*models.Message
+ database.DBCon.Model(&messages).
+ WhereGroup(func(q *orm.Query) (*orm.Query, error) {
+ q = q.WhereOr(`(headers::jsonb->>'Subject')::jsonb->>0 LIKE '[` + mailingList[0] + `]%'`).
+ WhereOr(`(headers::jsonb->>'Subject')::jsonb->>0 LIKE 'Re: [` + mailingList[0] + `]%'`)
+ return q, nil
+ }).
+ WhereGroup(func(q *orm.Query) (*orm.Query, error) {
+ q = q.WhereOr(`headers::jsonb->>'To' LIKE '%` + mailingList[0] + `@lists.gentoo.org%'`).
+ WhereOr(`headers::jsonb->>'Cc' LIKE '%` + mailingList[0] + `@lists.gentoo.org%'`).
+ WhereOr(`headers::jsonb->>'To' LIKE '%` + mailingList[0] + `@gentoo.org%'`).
+ WhereOr(`headers::jsonb->>'Cc' LIKE '%` + mailingList[0] + `@gentoo.org%'`)
+ return q, nil
+ }).
+ Order("date DESC").
+ Limit(5).
+ Select()
+
+ mailingLists = append(mailingLists, models.MailingList{
+ Name: mailingList[0],
+ Description: mailingList[1],
+ Messages: messages,
+ })
+ }
+
+ //
+ // Get popular threads
+ //
+ popularThreads, err := popular.GetPopularThreads(10, "2020-06-01")
+ if err != nil {
+ http.NotFound(w, r)
+ return
+ }
+ if len(popularThreads) > 5 {
+ popularThreads = popularThreads[:5]
+ }
+
+ templateData := struct {
+ MailingLists []models.MailingList
+ PopularThreads models.Threads
+ MessageCount string
+ CurrentMonth string
+ }{
+ MailingLists: mailingLists,
+ PopularThreads: popularThreads,
+ MessageCount: formatMessageCount(getAllMessagesCount()),
+ CurrentMonth: time.Now().Format("2006-01"),
+ }
+
+ renderIndexTemplate(w, templateData)
+}