Browse Source

:art: Kernel API supports load plugins https://github.com/siyuan-note/siyuan/issues/8044

Liang Ding 2 năm trước cách đây
mục cha
commit
6e864a2718

+ 8 - 1
kernel/bazaar/plugin.go

@@ -24,6 +24,7 @@ import (
 	"strings"
 	"sync"
 
+	"github.com/88250/gulu"
 	"github.com/dustin/go-humanize"
 	ants "github.com/panjf2000/ants/v2"
 	"github.com/siyuan-note/httpclient"
@@ -98,7 +99,13 @@ func Plugins() (plugins []*Plugin) {
 
 func InstalledPlugins() (ret []*Plugin) {
 	ret = []*Plugin{}
-	pluginDirs, err := os.ReadDir(filepath.Join(util.DataDir, "plugins"))
+
+	pluginsPath := filepath.Join(util.DataDir, "plugins")
+	if !gulu.File.IsDir(pluginsPath) {
+		return
+	}
+
+	pluginDirs, err := os.ReadDir(pluginsPath)
 	if nil != err {
 		logging.LogWarnf("read plugins folder failed: %s", err)
 		return

+ 8 - 1
kernel/bazaar/template.go

@@ -25,6 +25,7 @@ import (
 	"sync"
 	"time"
 
+	"github.com/88250/gulu"
 	"github.com/dustin/go-humanize"
 	"github.com/panjf2000/ants/v2"
 	"github.com/siyuan-note/httpclient"
@@ -100,7 +101,13 @@ func Templates() (templates []*Template) {
 
 func InstalledTemplates() (ret []*Template) {
 	ret = []*Template{}
-	templateDirs, err := os.ReadDir(filepath.Join(util.DataDir, "templates"))
+
+	templatesPath := filepath.Join(util.DataDir, "templates")
+	if !gulu.File.IsDir(templatesPath) {
+		return
+	}
+
+	templateDirs, err := os.ReadDir(templatesPath)
 	if nil != err {
 		logging.LogWarnf("read templates folder failed: %s", err)
 		return

+ 6 - 0
kernel/bazaar/theme.go

@@ -24,6 +24,7 @@ import (
 	"strings"
 	"sync"
 
+	"github.com/88250/gulu"
 	"github.com/dustin/go-humanize"
 	ants "github.com/panjf2000/ants/v2"
 	"github.com/siyuan-note/httpclient"
@@ -99,6 +100,11 @@ func Themes() (ret []*Theme) {
 
 func InstalledThemes() (ret []*Theme) {
 	ret = []*Theme{}
+
+	if !gulu.File.IsDir(util.ThemesPath) {
+		return
+	}
+
 	themeDirs, err := os.ReadDir(util.ThemesPath)
 	if nil != err {
 		logging.LogWarnf("read appearance themes folder failed: %s", err)

+ 8 - 1
kernel/bazaar/widget.go

@@ -24,6 +24,7 @@ import (
 	"strings"
 	"sync"
 
+	"github.com/88250/gulu"
 	"github.com/dustin/go-humanize"
 	ants "github.com/panjf2000/ants/v2"
 	"github.com/siyuan-note/httpclient"
@@ -98,7 +99,13 @@ func Widgets() (widgets []*Widget) {
 
 func InstalledWidgets() (ret []*Widget) {
 	ret = []*Widget{}
-	widgetDirs, err := os.ReadDir(filepath.Join(util.DataDir, "widgets"))
+
+	widgetsPath := filepath.Join(util.DataDir, "widgets")
+	if !gulu.File.IsDir(widgetsPath) {
+		return
+	}
+
+	widgetDirs, err := os.ReadDir(widgetsPath)
 	if nil != err {
 		logging.LogWarnf("read widgets folder failed: %s", err)
 		return

+ 6 - 0
kernel/model/plugin.go

@@ -19,6 +19,7 @@ package model
 import (
 	"crypto/sha1"
 	"fmt"
+	"os"
 	"path/filepath"
 
 	"github.com/88250/gulu"
@@ -41,6 +42,11 @@ type Petal struct {
 
 func LoadPetals() (ret []*Petal) {
 	petalDir := filepath.Join(util.DataDir, "storage", "petal")
+	if err := os.MkdirAll(petalDir, 0755); nil != err {
+		logging.LogErrorf("create petal dir [%s] failed: %s", petalDir, err)
+		return
+	}
+
 	confPath := filepath.Join(petalDir, "petals.json")
 
 	ret = []*Petal{}