diff --git a/kernel/bazaar/icon.go b/kernel/bazaar/icon.go index 80a156071..395f6be81 100644 --- a/kernel/bazaar/icon.go +++ b/kernel/bazaar/icon.go @@ -57,26 +57,13 @@ type Icon struct { func Icons() (icons []*Icon) { icons = []*Icon{} - result, err := util.GetRhyResult(false) - if nil != err { - return - } - bazaarIndex := getBazaarIndex() - bazaarHash := result["bazaar"].(string) - result = map[string]interface{}{} - request := httpclient.NewBrowserRequest() - u := util.BazaarOSSServer + "/bazaar@" + bazaarHash + "/stage/icons.json" - resp, err := request.SetResult(&result).Get(u) + pkgIndex, err := getPkgIndex("icons") if nil != err { - logging.LogErrorf("get community stage index [%s] failed: %s", u, err) return } - if 200 != resp.StatusCode { - logging.LogErrorf("get community stage index [%s] failed: %d", u, resp.StatusCode) - return - } - repos := result["repos"].([]interface{}) + bazaarIndex := getBazaarIndex() + repos := pkgIndex["repos"].([]interface{}) waitGroup := &sync.WaitGroup{} lock := &sync.Mutex{} p, _ := ants.NewPoolWithFunc(2, func(arg interface{}) { diff --git a/kernel/bazaar/package.go b/kernel/bazaar/package.go index 329b65370..965b04c72 100644 --- a/kernel/bazaar/package.go +++ b/kernel/bazaar/package.go @@ -81,6 +81,46 @@ func ThemeJSON(themeDirName string) (ret map[string]interface{}, err error) { return } +func getPkgIndex(pkgType string) (ret map[string]interface{}, err error) { + ret, err = util.GetRhyResult(false) + if nil != err { + return + } + + bazaarHash := ret["bazaar"].(string) + ret = map[string]interface{}{} + request := httpclient.NewBrowserRequest() + u := util.BazaarOSSServer + "/bazaar@" + bazaarHash + "/stage/" + pkgType + ".json" + resp, reqErr := request.SetResult(&ret).Get(u) + if nil != reqErr { + logging.LogErrorf("get community stage index [%s] failed: %s", u, reqErr) + return + } + if 200 != resp.StatusCode { + logging.LogErrorf("get community stage index [%s] failed: %d", u, resp.StatusCode) + return + } + return +} + +func isOutdatedPkg(fullURL, version string, pkgIndex map[string]interface{}) bool { + if !strings.HasPrefix(fullURL, "https://github.com/") { + return false + } + + url := strings.TrimPrefix(fullURL, "https://github.com/") + repos := pkgIndex["repos"].([]interface{}) + for _, repo := range repos { + r := repo.(map[string]interface{}) + repoURL := r["url"].(string) + repoVer := r["version"].(string) + if url == repoURL && version != repoVer { + return true + } + } + return false +} + func GetPackageREADME(repoURL, repoHash string, systemID string) (ret string) { repoURLHash := repoURL + "@" + repoHash data, err := downloadPackage(repoURLHash+"/README.md", false, systemID) diff --git a/kernel/bazaar/template.go b/kernel/bazaar/template.go index 72c43e4de..bd151e624 100644 --- a/kernel/bazaar/template.go +++ b/kernel/bazaar/template.go @@ -59,27 +59,13 @@ type Template struct { func Templates() (templates []*Template) { templates = []*Template{} - result, err := util.GetRhyResult(false) + + pkgIndex, err := getPkgIndex("templates") if nil != err { return } - bazaarIndex := getBazaarIndex() - bazaarHash := result["bazaar"].(string) - result = map[string]interface{}{} - request := httpclient.NewBrowserRequest() - u := util.BazaarOSSServer + "/bazaar@" + bazaarHash + "/stage/templates.json" - resp, reqErr := request.SetResult(&result).Get(u) - if nil != reqErr { - logging.LogErrorf("get community stage index [%s] failed: %s", u, reqErr) - return - } - if 200 != resp.StatusCode { - logging.LogErrorf("get community stage index [%s] failed: %d", u, resp.StatusCode) - return - } - - repos := result["repos"].([]interface{}) + repos := pkgIndex["repos"].([]interface{}) waitGroup := &sync.WaitGroup{} lock := &sync.Mutex{} p, _ := ants.NewPoolWithFunc(2, func(arg interface{}) { diff --git a/kernel/bazaar/theme.go b/kernel/bazaar/theme.go index 2bb5257a4..c0cb1a49c 100644 --- a/kernel/bazaar/theme.go +++ b/kernel/bazaar/theme.go @@ -60,27 +60,13 @@ type Theme struct { func Themes() (ret []*Theme) { ret = []*Theme{} - result, err := util.GetRhyResult(false) + + pkgIndex, err := getPkgIndex("themes") if nil != err { return } - bazaarIndex := getBazaarIndex() - bazaarHash := result["bazaar"].(string) - result = map[string]interface{}{} - request := httpclient.NewBrowserRequest() - u := util.BazaarOSSServer + "/bazaar@" + bazaarHash + "/stage/themes.json" - resp, reqErr := request.SetResult(&result).Get(u) - if nil != reqErr { - logging.LogErrorf("get community stage index [%s] failed: %s", u, reqErr) - return - } - if 200 != resp.StatusCode { - logging.LogErrorf("get community stage index [%s] failed: %d", u, resp.StatusCode) - return - } - - repos := result["repos"].([]interface{}) + repos := pkgIndex["repos"].([]interface{}) waitGroup := &sync.WaitGroup{} lock := &sync.Mutex{} p, _ := ants.NewPoolWithFunc(8, func(arg interface{}) { @@ -97,7 +83,7 @@ func Themes() (ret []*Theme) { return } if 200 != innerResp.StatusCode { - logging.LogErrorf("get bazaar package [%s] failed: %d", innerU, resp.StatusCode) + logging.LogErrorf("get bazaar package [%s] failed: %d", innerU, innerResp.StatusCode) return } @@ -144,6 +130,11 @@ func InstalledThemes() (ret []*Theme) { } dir.Close() + pkgIndex, err := getPkgIndex("themes") + if nil != err { + return + } + for _, themeDir := range themeDirs { if !themeDir.IsDir() { continue @@ -177,7 +168,7 @@ func InstalledThemes() (ret []*Theme) { continue } theme.README = gulu.Str.FromBytes(readme) - + theme.Outdated = isOutdatedPkg(theme.URL, theme.Version, pkgIndex) ret = append(ret, theme) } return diff --git a/kernel/bazaar/widget.go b/kernel/bazaar/widget.go index db5742e34..42f48ac3d 100644 --- a/kernel/bazaar/widget.go +++ b/kernel/bazaar/widget.go @@ -57,27 +57,14 @@ type Widget struct { func Widgets() (widgets []*Widget) { widgets = []*Widget{} - result, err := util.GetRhyResult(false) + + pkgIndex, err := getPkgIndex("widgets") if nil != err { return } - bazaarIndex := getBazaarIndex() - bazaarHash := result["bazaar"].(string) - result = map[string]interface{}{} - request := httpclient.NewBrowserRequest() - u := util.BazaarOSSServer + "/bazaar@" + bazaarHash + "/stage/widgets.json" - resp, err := request.SetResult(&result).Get(u) - if nil != err { - logging.LogErrorf("get community stage index [%s] failed: %s", u, err) - return - } - if 200 != resp.StatusCode { - logging.LogErrorf("get community stage index [%s] failed: %d", u, resp.StatusCode) - return - } - repos := result["repos"].([]interface{}) + repos := pkgIndex["repos"].([]interface{}) waitGroup := &sync.WaitGroup{} lock := &sync.Mutex{} p, _ := ants.NewPoolWithFunc(8, func(arg interface{}) {