diff --git a/kernel/api/bazaar.go b/kernel/api/bazaar.go index b8c7273d8..a5055840d 100644 --- a/kernel/api/bazaar.go +++ b/kernel/api/bazaar.go @@ -52,9 +52,13 @@ func getBazaarPlugin(c *gin.Context) { } frontend := arg["frontend"].(string) + var keyword string + if keywordArg := arg["keyword"]; nil != keywordArg { + keyword = keywordArg.(string) + } ret.Data = map[string]interface{}{ - "packages": model.BazaarPlugins(frontend), + "packages": model.BazaarPlugins(frontend, keyword), } } @@ -97,7 +101,7 @@ func installBazaarPlugin(c *gin.Context) { util.PushMsg(model.Conf.Language(69), 3000) ret.Data = map[string]interface{}{ - "packages": model.BazaarPlugins(frontend), + "packages": model.BazaarPlugins(frontend, ""), } } @@ -120,7 +124,7 @@ func uninstallBazaarPlugin(c *gin.Context) { } ret.Data = map[string]interface{}{ - "packages": model.BazaarPlugins(frontend), + "packages": model.BazaarPlugins(frontend, ""), } } @@ -128,8 +132,18 @@ func getBazaarWidget(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + var keyword string + if keywordArg := arg["keyword"]; nil != keywordArg { + keyword = keywordArg.(string) + } + ret.Data = map[string]interface{}{ - "packages": model.BazaarWidgets(), + "packages": model.BazaarWidgets(keyword), } } @@ -163,7 +177,7 @@ func installBazaarWidget(c *gin.Context) { util.PushMsg(model.Conf.Language(69), 3000) ret.Data = map[string]interface{}{ - "packages": model.BazaarWidgets(), + "packages": model.BazaarWidgets(""), } } @@ -185,7 +199,7 @@ func uninstallBazaarWidget(c *gin.Context) { } ret.Data = map[string]interface{}{ - "packages": model.BazaarWidgets(), + "packages": model.BazaarWidgets(""), } } @@ -193,8 +207,18 @@ func getBazaarIcon(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + var keyword string + if keywordArg := arg["keyword"]; nil != keywordArg { + keyword = keywordArg.(string) + } + ret.Data = map[string]interface{}{ - "packages": model.BazaarIcons(), + "packages": model.BazaarIcons(keyword), } } @@ -228,7 +252,7 @@ func installBazaarIcon(c *gin.Context) { util.PushMsg(model.Conf.Language(69), 3000) ret.Data = map[string]interface{}{ - "packages": model.BazaarIcons(), + "packages": model.BazaarIcons(""), "appearance": model.Conf.Appearance, } } @@ -251,7 +275,7 @@ func uninstallBazaarIcon(c *gin.Context) { } ret.Data = map[string]interface{}{ - "packages": model.BazaarIcons(), + "packages": model.BazaarIcons(""), "appearance": model.Conf.Appearance, } } @@ -260,8 +284,18 @@ func getBazaarTemplate(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + var keyword string + if keywordArg := arg["keyword"]; nil != keywordArg { + keyword = keywordArg.(string) + } + ret.Data = map[string]interface{}{ - "packages": model.BazaarTemplates(), + "packages": model.BazaarTemplates(keyword), } } @@ -294,7 +328,7 @@ func installBazaarTemplate(c *gin.Context) { } ret.Data = map[string]interface{}{ - "packages": model.BazaarTemplates(), + "packages": model.BazaarTemplates(""), } util.PushMsg(model.Conf.Language(69), 3000) @@ -318,7 +352,7 @@ func uninstallBazaarTemplate(c *gin.Context) { } ret.Data = map[string]interface{}{ - "packages": model.BazaarTemplates(), + "packages": model.BazaarTemplates(""), } } @@ -326,8 +360,18 @@ func getBazaarTheme(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + var keyword string + if keywordArg := arg["keyword"]; nil != keywordArg { + keyword = keywordArg.(string) + } + ret.Data = map[string]interface{}{ - "packages": model.BazaarThemes(), + "packages": model.BazaarThemes(keyword), } } @@ -370,7 +414,7 @@ func installBazaarTheme(c *gin.Context) { util.PushMsg(model.Conf.Language(69), 3000) ret.Data = map[string]interface{}{ - "packages": model.BazaarThemes(), + "packages": model.BazaarThemes(""), "appearance": model.Conf.Appearance, } } @@ -393,7 +437,7 @@ func uninstallBazaarTheme(c *gin.Context) { } ret.Data = map[string]interface{}{ - "packages": model.BazaarThemes(), + "packages": model.BazaarThemes(""), "appearance": model.Conf.Appearance, } } diff --git a/kernel/model/bazzar.go b/kernel/model/bazzar.go index c12ba4cad..34f057405 100644 --- a/kernel/model/bazzar.go +++ b/kernel/model/bazzar.go @@ -20,6 +20,7 @@ import ( "errors" "fmt" "path/filepath" + "strings" "github.com/88250/gulu" "github.com/siyuan-note/siyuan/kernel/util" @@ -32,8 +33,9 @@ func GetPackageREADME(repoURL, repoHash, packageType string) (ret string) { return } -func BazaarPlugins(frontend string) (plugins []*bazaar.Plugin) { +func BazaarPlugins(frontend, keyword string) (plugins []*bazaar.Plugin) { plugins = bazaar.Plugins(frontend) + plugins = filterPlugins(plugins, keyword) for _, plugin := range plugins { plugin.Installed = util.IsPathRegularDirOrSymlinkDir(filepath.Join(util.DataDir, "plugins", plugin.Name)) if plugin.Installed { @@ -49,6 +51,29 @@ func BazaarPlugins(frontend string) (plugins []*bazaar.Plugin) { return } +func filterPlugins(packages []*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) { + continue + } + ret = append(ret, pkg) + } + return +} + func InstalledPlugins(frontend string) (plugins []*bazaar.Plugin) { plugins = bazaar.InstalledPlugins(frontend, true) @@ -93,8 +118,9 @@ func UninstallBazaarPlugin(pluginName, frontend string) error { return nil } -func BazaarWidgets() (widgets []*bazaar.Widget) { +func BazaarWidgets(keyword string) (widgets []*bazaar.Widget) { widgets = bazaar.Widgets() + widgets = filterWidgets(widgets, keyword) for _, widget := range widgets { widget.Installed = util.IsPathRegularDirOrSymlinkDir(filepath.Join(util.DataDir, "widgets", widget.Name)) if widget.Installed { @@ -110,6 +136,29 @@ func BazaarWidgets() (widgets []*bazaar.Widget) { return } +func filterWidgets(packages []*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) { + continue + } + ret = append(ret, pkg) + } + return +} + func InstalledWidgets() (widgets []*bazaar.Widget) { widgets = bazaar.InstalledWidgets() return @@ -133,8 +182,9 @@ func UninstallBazaarWidget(widgetName string) error { return nil } -func BazaarIcons() (icons []*bazaar.Icon) { +func BazaarIcons(keyword string) (icons []*bazaar.Icon) { icons = bazaar.Icons() + icons = filterIcons(icons, keyword) for _, installed := range Conf.Appearance.Icons { for _, icon := range icons { if installed == icon.Name { @@ -151,6 +201,29 @@ func BazaarIcons() (icons []*bazaar.Icon) { return } +func filterIcons(packages []*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) { + continue + } + ret = append(ret, pkg) + } + return +} + func InstalledIcons() (icons []*bazaar.Icon) { icons = bazaar.InstalledIcons() for _, icon := range icons { @@ -182,8 +255,9 @@ func UninstallBazaarIcon(iconName string) error { return nil } -func BazaarThemes() (ret []*bazaar.Theme) { +func BazaarThemes(keyword string) (ret []*bazaar.Theme) { ret = bazaar.Themes() + ret = filterThemes(ret, keyword) installs := Conf.Appearance.DarkThemes installs = append(installs, Conf.Appearance.LightThemes...) for _, installed := range installs { @@ -200,6 +274,29 @@ func BazaarThemes() (ret []*bazaar.Theme) { return } +func filterThemes(packages []*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) { + continue + } + ret = append(ret, pkg) + } + return +} + func InstalledThemes() (ret []*bazaar.Theme) { ret = bazaar.InstalledThemes() for _, theme := range ret { @@ -246,8 +343,9 @@ func UninstallBazaarTheme(themeName string) error { return nil } -func BazaarTemplates() (templates []*bazaar.Template) { +func BazaarTemplates(keyword string) (templates []*bazaar.Template) { templates = bazaar.Templates() + templates = filterTemplates(templates, keyword) for _, template := range templates { template.Installed = util.IsPathRegularDirOrSymlinkDir(filepath.Join(util.DataDir, "templates", template.Name)) if template.Installed { @@ -261,6 +359,29 @@ func BazaarTemplates() (templates []*bazaar.Template) { return } +func filterTemplates(packages []*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) { + continue + } + ret = append(ret, pkg) + } + return +} + func InstalledTemplates() (templates []*bazaar.Template) { templates = bazaar.InstalledTemplates() return