|
|
@@ -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) |
|
|
|