diff --git a/modules/context/context.go b/modules/context/context.go index 6cb6c267a..25897d068 100755 --- a/modules/context/context.go +++ b/modules/context/context.go @@ -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) } diff --git a/routers/notice/notice.go b/routers/notice/notice.go index f1e996e2d..5a39ee684 100644 --- a/routers/notice/notice.go +++ b/routers/notice/notice.go @@ -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)