All checks were successful
Build Multi-Platform Binaries / build-frontend (push) Successful in 30s
Build Multi-Platform Binaries / build-binaries (amd64, darwin, server, false) (push) Successful in 47s
Build Multi-Platform Binaries / build-binaries (amd64, linux, client, true) (push) Successful in 47s
Build Multi-Platform Binaries / build-binaries (amd64, linux, server, true) (push) Successful in 1m3s
Build Multi-Platform Binaries / build-binaries (amd64, windows, client, true) (push) Successful in 45s
Build Multi-Platform Binaries / build-binaries (amd64, windows, server, true) (push) Successful in 58s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, client, true) (push) Successful in 51s
Build Multi-Platform Binaries / build-binaries (arm, 7, linux, server, true) (push) Successful in 1m6s
Build Multi-Platform Binaries / build-binaries (arm64, darwin, server, false) (push) Successful in 50s
Build Multi-Platform Binaries / build-binaries (arm64, linux, client, true) (push) Successful in 45s
Build Multi-Platform Binaries / build-binaries (arm64, linux, server, true) (push) Successful in 59s
Build Multi-Platform Binaries / build-binaries (arm64, windows, server, false) (push) Successful in 51s
68 lines
1.4 KiB
Go
68 lines
1.4 KiB
Go
package tunnel
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
"sync"
|
|
)
|
|
|
|
// PluginVersionStore 插件版本存储
|
|
type PluginVersionStore struct {
|
|
path string
|
|
versions map[string]string // pluginName -> version
|
|
mu sync.RWMutex
|
|
}
|
|
|
|
// NewPluginVersionStore 创建版本存储
|
|
func NewPluginVersionStore(dataDir string) (*PluginVersionStore, error) {
|
|
store := &PluginVersionStore{
|
|
path: filepath.Join(dataDir, "plugin_versions.json"),
|
|
versions: make(map[string]string),
|
|
}
|
|
if err := store.load(); err != nil {
|
|
return nil, err
|
|
}
|
|
return store, nil
|
|
}
|
|
|
|
// load 从文件加载版本信息
|
|
func (s *PluginVersionStore) load() error {
|
|
data, err := os.ReadFile(s.path)
|
|
if os.IsNotExist(err) {
|
|
return nil
|
|
}
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return json.Unmarshal(data, &s.versions)
|
|
}
|
|
|
|
// save 保存版本信息到文件
|
|
func (s *PluginVersionStore) save() error {
|
|
dir := filepath.Dir(s.path)
|
|
if err := os.MkdirAll(dir, 0755); err != nil {
|
|
return err
|
|
}
|
|
data, err := json.MarshalIndent(s.versions, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return os.WriteFile(s.path, data, 0600)
|
|
}
|
|
|
|
// GetVersion 获取插件版本
|
|
func (s *PluginVersionStore) GetVersion(name string) string {
|
|
s.mu.RLock()
|
|
defer s.mu.RUnlock()
|
|
return s.versions[name]
|
|
}
|
|
|
|
// SetVersion 设置插件版本
|
|
func (s *PluginVersionStore) SetVersion(name, version string) error {
|
|
s.mu.Lock()
|
|
defer s.mu.Unlock()
|
|
s.versions[name] = version
|
|
return s.save()
|
|
}
|