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 IsSigned bool
IsBasicAuth bool IsBasicAuth bool


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


@@ -347,9 +347,9 @@ func Contexter() macaron.Handler {
ctx.Data["EnableSwagger"] = setting.API.EnableSwagger ctx.Data["EnableSwagger"] = setting.API.EnableSwagger
ctx.Data["EnableOpenIDSignIn"] = setting.Service.EnableOpenIDSignIn 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) c.Map(ctx)
} }


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

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


type Notice struct { 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 CommitId string
} }


var lock int32 = 0 var lock int32 = 0


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


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


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


func getNewestNoticeFromDisk() (*Notice, error) {
func getNewestNoticesFromDisk() (*NoticeResponse, error) {
log.Debug("Get notice from disk") 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 { if err != nil {
log.Error("GetNewestNotice failed, error=%v", err) log.Error("GetNewestNotice failed, error=%v", err)
return nil, 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 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) v, success := noticeCache.Get(NOTICE_CACHE_KEY)
if success { if success {
log.Debug("Get notice from cache,value = %v", v) log.Debug("Get notice from cache,value = %v", v)
if v == nil { if v == nil {
return nil, nil return nil, nil
} }
n := v.(*Notice)
n := v.(*NoticeResponse)
return n, nil return n, nil
} }


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


Loading…
Cancel
Save