diff --git a/kernel/model/bazzar.go b/kernel/model/bazzar.go index 6ab5191ca..2d9036936 100644 --- a/kernel/model/bazzar.go +++ b/kernel/model/bazzar.go @@ -51,23 +51,12 @@ func BazaarPlugins(frontend, keyword string) (plugins []*bazaar.Plugin) { return } -func filterPlugins(packages []*bazaar.Plugin, keyword string) (ret []*bazaar.Plugin) { +func filterPlugins(plugins []*bazaar.Plugin, keyword string) (ret []*bazaar.Plugin) { ret = []*bazaar.Plugin{} - keyword = strings.TrimSpace(keyword) - if "" == keyword { - return packages - } - - for _, pkg := range packages { - if strings.Contains(pkg.DisplayName.Default, keyword) || - strings.Contains(pkg.DisplayName.ZhCN, keyword) || - strings.Contains(pkg.DisplayName.ZhCHT, keyword) || - strings.Contains(pkg.DisplayName.EnUS, keyword) || - strings.Contains(pkg.Description.Default, keyword) || - strings.Contains(pkg.Description.ZhCN, keyword) || - strings.Contains(pkg.Description.ZhCHT, keyword) || - strings.Contains(pkg.Description.EnUS, keyword) { - ret = append(ret, pkg) + keywords := getSearchKeywords(keyword) + for _, plugin := range plugins { + if matchPackage(keywords, plugin.Package) { + ret = append(ret, plugin) } } return @@ -135,23 +124,12 @@ func BazaarWidgets(keyword string) (widgets []*bazaar.Widget) { return } -func filterWidgets(packages []*bazaar.Widget, keyword string) (ret []*bazaar.Widget) { +func filterWidgets(widgets []*bazaar.Widget, keyword string) (ret []*bazaar.Widget) { ret = []*bazaar.Widget{} - keyword = strings.TrimSpace(keyword) - if "" == keyword { - return packages - } - - for _, pkg := range packages { - if strings.Contains(pkg.DisplayName.Default, keyword) || - strings.Contains(pkg.DisplayName.ZhCN, keyword) || - strings.Contains(pkg.DisplayName.ZhCHT, keyword) || - strings.Contains(pkg.DisplayName.EnUS, keyword) || - strings.Contains(pkg.Description.Default, keyword) || - strings.Contains(pkg.Description.ZhCN, keyword) || - strings.Contains(pkg.Description.ZhCHT, keyword) || - strings.Contains(pkg.Description.EnUS, keyword) { - ret = append(ret, pkg) + keywords := getSearchKeywords(keyword) + for _, w := range widgets { + if matchPackage(keywords, w.Package) { + ret = append(ret, w) } } return @@ -199,23 +177,12 @@ func BazaarIcons(keyword string) (icons []*bazaar.Icon) { return } -func filterIcons(packages []*bazaar.Icon, keyword string) (ret []*bazaar.Icon) { +func filterIcons(icons []*bazaar.Icon, keyword string) (ret []*bazaar.Icon) { ret = []*bazaar.Icon{} - keyword = strings.TrimSpace(keyword) - if "" == keyword { - return packages - } - - for _, pkg := range packages { - if strings.Contains(pkg.DisplayName.Default, keyword) || - strings.Contains(pkg.DisplayName.ZhCN, keyword) || - strings.Contains(pkg.DisplayName.ZhCHT, keyword) || - strings.Contains(pkg.DisplayName.EnUS, keyword) || - strings.Contains(pkg.Description.Default, keyword) || - strings.Contains(pkg.Description.ZhCN, keyword) || - strings.Contains(pkg.Description.ZhCHT, keyword) || - strings.Contains(pkg.Description.EnUS, keyword) { - ret = append(ret, pkg) + keywords := getSearchKeywords(keyword) + for _, i := range icons { + if matchPackage(keywords, i.Package) { + ret = append(ret, i) } } return @@ -271,23 +238,12 @@ func BazaarThemes(keyword string) (ret []*bazaar.Theme) { return } -func filterThemes(packages []*bazaar.Theme, keyword string) (ret []*bazaar.Theme) { +func filterThemes(themes []*bazaar.Theme, keyword string) (ret []*bazaar.Theme) { ret = []*bazaar.Theme{} - keyword = strings.TrimSpace(keyword) - if "" == keyword { - return packages - } - - for _, pkg := range packages { - if strings.Contains(pkg.DisplayName.Default, keyword) || - strings.Contains(pkg.DisplayName.ZhCN, keyword) || - strings.Contains(pkg.DisplayName.ZhCHT, keyword) || - strings.Contains(pkg.DisplayName.EnUS, keyword) || - strings.Contains(pkg.Description.Default, keyword) || - strings.Contains(pkg.Description.ZhCN, keyword) || - strings.Contains(pkg.Description.ZhCHT, keyword) || - strings.Contains(pkg.Description.EnUS, keyword) { - ret = append(ret, pkg) + keywords := getSearchKeywords(keyword) + for _, t := range themes { + if matchPackage(keywords, t.Package) { + ret = append(ret, t) } } return @@ -355,23 +311,12 @@ func BazaarTemplates(keyword string) (templates []*bazaar.Template) { return } -func filterTemplates(packages []*bazaar.Template, keyword string) (ret []*bazaar.Template) { +func filterTemplates(templates []*bazaar.Template, keyword string) (ret []*bazaar.Template) { ret = []*bazaar.Template{} - keyword = strings.TrimSpace(keyword) - if "" == keyword { - return packages - } - - for _, pkg := range packages { - if strings.Contains(pkg.DisplayName.Default, keyword) || - strings.Contains(pkg.DisplayName.ZhCN, keyword) || - strings.Contains(pkg.DisplayName.ZhCHT, keyword) || - strings.Contains(pkg.DisplayName.EnUS, keyword) || - strings.Contains(pkg.Description.Default, keyword) || - strings.Contains(pkg.Description.ZhCN, keyword) || - strings.Contains(pkg.Description.ZhCHT, keyword) || - strings.Contains(pkg.Description.EnUS, keyword) { - ret = append(ret, pkg) + keywords := getSearchKeywords(keyword) + for _, t := range templates { + if matchPackage(keywords, t.Package) { + ret = append(ret, t) } } return @@ -399,3 +344,34 @@ func UninstallBazaarTemplate(templateName string) error { } return nil } + +func matchPackage(keywords []string, pkg *bazaar.Package) bool { + for _, keyword := range keywords { + if strings.Contains(strings.ToLower(pkg.DisplayName.Default), keyword) || + strings.Contains(strings.ToLower(pkg.DisplayName.ZhCN), keyword) || + strings.Contains(strings.ToLower(pkg.DisplayName.ZhCHT), keyword) || + strings.Contains(strings.ToLower(pkg.DisplayName.EnUS), keyword) || + strings.Contains(strings.ToLower(pkg.Description.Default), keyword) || + strings.Contains(strings.ToLower(pkg.Description.ZhCN), keyword) || + strings.Contains(strings.ToLower(pkg.Description.ZhCHT), keyword) || + strings.Contains(strings.ToLower(pkg.Description.EnUS), keyword) { + return true + } + } + return false +} + +func getSearchKeywords(query string) (ret []string) { + query = strings.TrimSpace(query) + if "" == query { + return + } + + keywords := strings.Split(query, " ") + for _, k := range keywords { + if "" != k { + ret = append(ret, strings.ToLower(k)) + } + } + return +}