Skip to content

Commit

Permalink
Remind users to get new kjudge version (gitea-104)
Browse files Browse the repository at this point in the history
Refactor admin/home a bit

fix typo and error handler

add lastUpdate to avoid getting too frequently

implement a message for admin to get the newest kjudge version

Co-authored-by: Natsu Kagami <[email protected]>
Co-authored-by: Thang Pham <[email protected]>
  • Loading branch information
aome510 and natsukagami committed Apr 13, 2020
1 parent 07c819c commit 1057b55
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 6 deletions.
7 changes: 7 additions & 0 deletions frontend/html/admin/home.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@

{{ define "admin-content" }}
<div class="py-4 mx-auto text-4xl">Home</div>
{{ with .NewVersionMessage }}
<a href="https://git.nkagami.me/natsukagami/kjudge/wiki/Updating" target="_blank">
<div
class="p-4 border-orange-800 bg-orange-200 text-orange-600 hover:bg-orange-300 rounded mx-auto text-4xl text-center">
{{ . }}</div>
</a>
{{ end }}
{{/* Contests overview */}}
<div id="contests" class="p-2">
<div class="text-2xl mx-2 my-4 font-bold">Active Contests</div>
Expand Down
34 changes: 28 additions & 6 deletions server/admin/home.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package admin

import (
"log"
"net/http"

"git.nkagami.me/natsukagami/kjudge/db"
"git.nkagami.me/natsukagami/kjudge/models"
"github.com/labstack/echo/v4"
)
Expand All @@ -11,17 +13,37 @@ import (
type HomeCtx struct {
Contests []*models.Contest
Queue *models.QueueOverview

NewVersionMessage string
}

// Home renders the home page.
func (g *Group) Home(c echo.Context) error {
contests, err := models.GetContestsUnfinished(g.db)
func getHomeCtx(db db.DBContext, c echo.Context) (*HomeCtx, error) {
contests, err := models.GetContestsUnfinished(db)
if err != nil {
return err
return nil, err
}
queue, err := models.GetQueueOverview(db)
if err != nil {
return nil, err
}
message, err := NewVersionMessageGet()
if err != nil {
log.Printf("Falied to get kjudge's release version: %+v", err)
message = ""
}
queue, err := models.GetQueueOverview(g.db)
return &HomeCtx{Contests: contests, Queue: queue, NewVersionMessage: message}, nil
}

// Render renders the context.
func (h *HomeCtx) Render(c echo.Context) error {
return c.Render(http.StatusOK, "admin/home", h)
}

// Home renders the home page.
func (g *Group) Home(c echo.Context) error {
ctx, err := getHomeCtx(g.db, c)
if err != nil {
return err
}
return c.Render(http.StatusOK, "admin/home", &HomeCtx{Contests: contests, Queue: queue})
return ctx.Render(c)
}
8 changes: 8 additions & 0 deletions server/admin/message_dev.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// +build !production

package admin

// NewVersionMessageGet checks if there is a new version of kjudge
func NewVersionMessageGet() (string, error) {
return "", nil
}
50 changes: 50 additions & 0 deletions server/admin/message_prod.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// +build production

package admin

import (
"encoding/json"
"fmt"
"net/http"
"time"

"git.nkagami.me/natsukagami/kjudge"
"github.com/pkg/errors"
)

type jsonRelease struct {
TagName string `json:"tag_name"`
}

type version struct {
TagName string
LastUpdate time.Time
}

var currentVersion version

// NewVersionMessageGet checks if there is a new version of kjudge
func NewVersionMessageGet() (string, error) {
if currentVersion.TagName == "" || time.Now().After(currentVersion.LastUpdate.Add(time.Hour)) {
response, err := http.Get("https://git.nkagami.me/api/v1/repos/natsukagami/kjudge/releases?page=1&per_page=1")
if err != nil {
return "", errors.WithStack(err)
}
defer response.Body.Close()
var x []jsonRelease
decode := json.NewDecoder(response.Body)
if err := decode.Decode(&x); err != nil {
return "", errors.WithStack(err)
}
if len(x) == 0 {
return "", errors.New("Found no relase")
}
currentVersion.TagName = x[0].TagName[1:]
currentVersion.LastUpdate = time.Now()
}
if kjudge.Version != currentVersion.TagName {
return fmt.Sprintf("Please update kjudge to the newest version (%s)", currentVersion.TagName), nil
} else {
return "", nil
}
}

0 comments on commit 1057b55

Please sign in to comment.