123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- // SiYuan - Refactor your thinking
- // Copyright (c) 2020-present, b3log.org
- //
- // This program is free software: you can redistribute it and/or modify
- // it under the terms of the GNU Affero General Public License as published by
- // the Free Software Foundation, either version 3 of the License, or
- // (at your option) any later version.
- //
- // This program is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU Affero General Public License for more details.
- //
- // You should have received a copy of the GNU Affero General Public License
- // along with this program. If not, see <https://www.gnu.org/licenses/>.
- package model
- import (
- "errors"
- "fmt"
- "path/filepath"
- "github.com/88250/gulu"
- "github.com/siyuan-note/siyuan/kernel/util"
- "github.com/siyuan-note/siyuan/kernel/bazaar"
- )
- func GetPackageREADME(repoURL, repoHash, packageType string) (ret string) {
- ret = bazaar.GetPackageREADME(repoURL, repoHash, packageType)
- return
- }
- func BazaarPlugins(frontend string) (plugins []*bazaar.Plugin) {
- plugins = bazaar.Plugins(frontend)
- for _, plugin := range plugins {
- plugin.Installed = util.IsPathRegularDirOrSymlinkDir(filepath.Join(util.DataDir, "plugins", plugin.Name))
- if plugin.Installed {
- if plugin.Installed {
- if pluginConf, err := bazaar.PluginJSON(plugin.Name); nil == err && nil != plugin {
- if plugin.Version != pluginConf.Version {
- plugin.Outdated = true
- }
- }
- }
- }
- }
- return
- }
- func InstalledPlugins(frontend string) (plugins []*bazaar.Plugin) {
- plugins = bazaar.InstalledPlugins(frontend, true)
- petals := getPetals()
- for _, plugin := range plugins {
- petal := getPetalByName(plugin.Name, petals)
- if nil != petal {
- plugin.Enabled = petal.Enabled
- }
- }
- return
- }
- func InstallBazaarPlugin(repoURL, repoHash, pluginName string) error {
- installPath := filepath.Join(util.DataDir, "plugins", pluginName)
- err := bazaar.InstallPlugin(repoURL, repoHash, installPath, Conf.System.ID)
- if nil != err {
- return errors.New(fmt.Sprintf(Conf.Language(46), pluginName, err))
- }
- return nil
- }
- func UninstallBazaarPlugin(pluginName, frontend string) error {
- installPath := filepath.Join(util.DataDir, "plugins", pluginName)
- err := bazaar.UninstallPlugin(installPath)
- if nil != err {
- return errors.New(fmt.Sprintf(Conf.Language(47), err.Error()))
- }
- petals := getPetals()
- var tmp []*Petal
- for i, petal := range petals {
- if petal.Name != pluginName {
- tmp = append(tmp, petals[i])
- }
- }
- petals = tmp
- if 1 > len(petals) {
- petals = []*Petal{}
- }
- savePetals(petals)
- return nil
- }
- func BazaarWidgets() (widgets []*bazaar.Widget) {
- widgets = bazaar.Widgets()
- for _, widget := range widgets {
- widget.Installed = util.IsPathRegularDirOrSymlinkDir(filepath.Join(util.DataDir, "widgets", widget.Name))
- if widget.Installed {
- if widget.Installed {
- if widgetConf, err := bazaar.WidgetJSON(widget.Name); nil == err && nil != widget {
- if widget.Version != widgetConf.Version {
- widget.Outdated = true
- }
- }
- }
- }
- }
- return
- }
- func InstalledWidgets() (widgets []*bazaar.Widget) {
- widgets = bazaar.InstalledWidgets()
- return
- }
- func InstallBazaarWidget(repoURL, repoHash, widgetName string) error {
- installPath := filepath.Join(util.DataDir, "widgets", widgetName)
- err := bazaar.InstallWidget(repoURL, repoHash, installPath, Conf.System.ID)
- if nil != err {
- return errors.New(fmt.Sprintf(Conf.Language(46), widgetName, err))
- }
- return nil
- }
- func UninstallBazaarWidget(widgetName string) error {
- installPath := filepath.Join(util.DataDir, "widgets", widgetName)
- err := bazaar.UninstallWidget(installPath)
- if nil != err {
- return errors.New(fmt.Sprintf(Conf.Language(47), err.Error()))
- }
- return nil
- }
- func BazaarIcons() (icons []*bazaar.Icon) {
- icons = bazaar.Icons()
- for _, installed := range Conf.Appearance.Icons {
- for _, icon := range icons {
- if installed == icon.Name {
- icon.Installed = true
- if themeConf, err := bazaar.IconJSON(icon.Name); nil == err {
- if icon.Version != themeConf.Version {
- icon.Outdated = true
- }
- }
- }
- icon.Current = icon.Name == Conf.Appearance.Icon
- }
- }
- return
- }
- func InstalledIcons() (icons []*bazaar.Icon) {
- icons = bazaar.InstalledIcons()
- for _, icon := range icons {
- icon.Current = icon.Name == Conf.Appearance.Icon
- }
- return
- }
- func InstallBazaarIcon(repoURL, repoHash, iconName string) error {
- installPath := filepath.Join(util.IconsPath, iconName)
- err := bazaar.InstallIcon(repoURL, repoHash, installPath, Conf.System.ID)
- if nil != err {
- return errors.New(fmt.Sprintf(Conf.Language(46), iconName, err))
- }
- Conf.Appearance.Icon = iconName
- Conf.Save()
- InitAppearance()
- return nil
- }
- func UninstallBazaarIcon(iconName string) error {
- installPath := filepath.Join(util.IconsPath, iconName)
- err := bazaar.UninstallIcon(installPath)
- if nil != err {
- return errors.New(fmt.Sprintf(Conf.Language(47), err.Error()))
- }
- InitAppearance()
- return nil
- }
- func BazaarThemes() (ret []*bazaar.Theme) {
- ret = bazaar.Themes()
- installs := Conf.Appearance.DarkThemes
- installs = append(installs, Conf.Appearance.LightThemes...)
- for _, installed := range installs {
- for _, theme := range ret {
- if installed == theme.Name {
- theme.Installed = true
- if themeConf, err := bazaar.ThemeJSON(theme.Name); nil == err {
- theme.Outdated = theme.Version != themeConf.Version
- }
- theme.Current = theme.Name == Conf.Appearance.ThemeDark || theme.Name == Conf.Appearance.ThemeLight
- }
- }
- }
- return
- }
- func InstalledThemes() (ret []*bazaar.Theme) {
- ret = bazaar.InstalledThemes()
- for _, theme := range ret {
- theme.Current = theme.Name == Conf.Appearance.ThemeDark || theme.Name == Conf.Appearance.ThemeLight
- }
- return
- }
- func InstallBazaarTheme(repoURL, repoHash, themeName string, mode int, update bool) error {
- closeThemeWatchers()
- installPath := filepath.Join(util.ThemesPath, themeName)
- err := bazaar.InstallTheme(repoURL, repoHash, installPath, Conf.System.ID)
- if nil != err {
- return errors.New(fmt.Sprintf(Conf.Language(46), themeName, err))
- }
- if !update {
- // 更新主题后不需要对该主题进行切换 https://github.com/siyuan-note/siyuan/issues/4966
- if 0 == mode {
- Conf.Appearance.ThemeLight = themeName
- } else {
- Conf.Appearance.ThemeDark = themeName
- }
- Conf.Appearance.Mode = mode
- Conf.Appearance.ThemeJS = gulu.File.IsExist(filepath.Join(installPath, "theme.js"))
- Conf.Save()
- }
- InitAppearance()
- return nil
- }
- func UninstallBazaarTheme(themeName string) error {
- closeThemeWatchers()
- installPath := filepath.Join(util.ThemesPath, themeName)
- err := bazaar.UninstallTheme(installPath)
- if nil != err {
- return errors.New(fmt.Sprintf(Conf.Language(47), err.Error()))
- }
- InitAppearance()
- return nil
- }
- func BazaarTemplates() (templates []*bazaar.Template) {
- templates = bazaar.Templates()
- for _, template := range templates {
- template.Installed = util.IsPathRegularDirOrSymlinkDir(filepath.Join(util.DataDir, "templates", template.Name))
- if template.Installed {
- if themeConf, err := bazaar.TemplateJSON(template.Name); nil == err && nil != themeConf {
- if template.Version != themeConf.Version {
- template.Outdated = true
- }
- }
- }
- }
- return
- }
- func InstalledTemplates() (templates []*bazaar.Template) {
- templates = bazaar.InstalledTemplates()
- return
- }
- func InstallBazaarTemplate(repoURL, repoHash, templateName string) error {
- installPath := filepath.Join(util.DataDir, "templates", templateName)
- err := bazaar.InstallTemplate(repoURL, repoHash, installPath, Conf.System.ID)
- if nil != err {
- return errors.New(fmt.Sprintf(Conf.Language(46), templateName, err))
- }
- return nil
- }
- func UninstallBazaarTemplate(templateName string) error {
- installPath := filepath.Join(util.DataDir, "templates", templateName)
- err := bazaar.UninstallTemplate(installPath)
- if nil != err {
- return errors.New(fmt.Sprintf(Conf.Language(47), err.Error()))
- }
- return nil
- }
|