mirror of
https://github.com/anotherhadi/spilltea.git
synced 2026-05-20 17:52:33 +02:00
4eb9dd53f5
Signed-off-by: Hadi <112569860+anotherhadi@users.noreply.github.com>
46 lines
992 B
Go
46 lines
992 B
Go
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
|
|
}
|