mirror of
https://github.com/anotherhadi/spilltea.git
synced 2026-05-20 01:32:33 +02:00
Change plugins behavior
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
This commit is contained in:
+45
@@ -0,0 +1,45 @@
|
||||
package spilltea
|
||||
|
||||
import (
|
||||
"embed"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"os"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
//go:embed plugins/*.lua
|
||||
var PluginsFS embed.FS
|
||||
|
||||
// InstallDefaultPlugins copies embedded default plugins into dir, skipping
|
||||
// files that already exist. Returns the number of files written.
|
||||
func InstallDefaultPlugins(dir string) (int, error) {
|
||||
if err := os.MkdirAll(dir, 0o755); err != nil {
|
||||
return 0, fmt.Errorf("create plugins dir: %w", err)
|
||||
}
|
||||
|
||||
entries, err := fs.ReadDir(PluginsFS, "plugins")
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
written := 0
|
||||
for _, e := range entries {
|
||||
if e.IsDir() {
|
||||
continue
|
||||
}
|
||||
dst := filepath.Join(dir, e.Name())
|
||||
if _, err := os.Stat(dst); err == nil {
|
||||
continue
|
||||
}
|
||||
data, err := PluginsFS.ReadFile("plugins/" + e.Name())
|
||||
if err != nil {
|
||||
return written, fmt.Errorf("read embedded %s: %w", e.Name(), err)
|
||||
}
|
||||
if err := os.WriteFile(dst, data, 0o644); err != nil {
|
||||
return written, fmt.Errorf("write %s: %w", dst, err)
|
||||
}
|
||||
written++
|
||||
}
|
||||
return written, nil
|
||||
}
|
||||
Reference in New Issue
Block a user