Browse Source

#1447

update notice
tags/v1.22.1.4^2
chenyifan01 3 years ago
parent
commit
24f16ee66a
2 changed files with 31 additions and 22 deletions
  1. +5
    -5
      modules/context/context.go
  2. +26
    -17
      routers/notice/notice.go

+ 5
- 5
modules/context/context.go View File

@@ -45,8 +45,8 @@ type Context struct {
IsSigned bool
IsBasicAuth bool

Repo *Repository
Org *Organization
Repo *Repository
Org *Organization
Cloudbrain *models.Cloudbrain
}

@@ -347,9 +347,9 @@ func Contexter() macaron.Handler {
ctx.Data["EnableSwagger"] = setting.API.EnableSwagger
ctx.Data["EnableOpenIDSignIn"] = setting.Service.EnableOpenIDSignIn

notice, _ := notice.GetNewestNotice()
if notice != nil {
ctx.Data["notice"] = *notice
notices, _ := notice.GetNewestNotice()
if notices != nil {
ctx.Data["notices"] = notices
}
c.Map(ctx)
}


+ 26
- 17
routers/notice/notice.go View File

@@ -16,27 +16,31 @@ const (
)

type Notice struct {
Title string
Link string
Visible int //0 invisible, 1 visible
Title string
Link string
Visible int //0 invisible, 1 visible
}

type NoticeResponse struct {
Notices []*Notice
CommitId string
}

var lock int32 = 0

func GetNewestNotice() (*Notice, error) {
func GetNewestNotice() (*NoticeResponse, error) {
defer func() {
if err := recover(); err != nil {
log.Error("recover error", err)
}
}()

var notice *Notice
var notice *NoticeResponse
var err error
if setting.CacheOn {
notice, err = getNewestNoticeFromCacheAndDisk()
notice, err = getNewestNoticesFromCacheAndDisk()
} else {
notice, err = getNewestNoticeFromDisk()
notice, err = getNewestNoticesFromDisk()
}

if err != nil {
@@ -49,34 +53,39 @@ func getNoticeTimeout() time.Duration {
return time.Duration(setting.CacheTimeOutSecond) * time.Second
}

func getNewestNoticeFromDisk() (*Notice, error) {
func getNewestNoticesFromDisk() (*NoticeResponse, error) {
log.Debug("Get notice from disk")
repoFile, err := models.ReadLatestFileInRepo(setting.UserNameOfNoticeRepo, setting.RepoNameOfNoticeRepo, setting.RefNameOfNoticeRepo, setting.TreePathOfNoticeRepo)
repo, err := models.GetRepositoryByOwnerAndAlias(setting.UserNameOfNoticeRepo, setting.RepoNameOfNoticeRepo)
if err != nil {
log.Error("get notice repo failed, error=%v", err)
return nil, err
}
repoFile, err := models.ReadLatestFileInRepo(repo.OwnerName, repo.Name, setting.RefNameOfNoticeRepo, setting.TreePathOfNoticeRepo)
if err != nil {
log.Error("GetNewestNotice failed, error=%v", err)
return nil, err
}
notice := &Notice{}
json.Unmarshal(repoFile.Content, notice)
if notice.Title == "" {
res := &NoticeResponse{}
json.Unmarshal(repoFile.Content, res)
if res == nil || len(res.Notices) == 0 {
return nil, err
}
notice.CommitId = repoFile.CommitId
return notice, nil
res.CommitId = repoFile.CommitId
return res, nil
}

func getNewestNoticeFromCacheAndDisk() (*Notice, error) {
func getNewestNoticesFromCacheAndDisk() (*NoticeResponse, error) {
v, success := noticeCache.Get(NOTICE_CACHE_KEY)
if success {
log.Debug("Get notice from cache,value = %v", v)
if v == nil {
return nil, nil
}
n := v.(*Notice)
n := v.(*NoticeResponse)
return n, nil
}

notice, err := getNewestNoticeFromDisk()
notice, err := getNewestNoticesFromDisk()
if err != nil {
log.Error("GetNewestNotice failed, error=%v", err)
noticeCache.Set(NOTICE_CACHE_KEY, nil, 30*time.Second)


Loading…
Cancel
Save