1
0

完成一个简易的全局skill、command管理器

This commit is contained in:
2026-02-25 14:33:56 +08:00
parent f4cb809f9d
commit 2d327b5af8
60 changed files with 6053 additions and 1 deletions

View File

@@ -0,0 +1,141 @@
package config
import (
"encoding/json"
"fmt"
"os"
"skillmgr/internal/types"
)
// LoadInstallConfig 加载安装配置
func LoadInstallConfig() (*types.InstallConfig, error) {
path, err := GetInstallConfigPath()
if err != nil {
return nil, err
}
if _, err := os.Stat(path); os.IsNotExist(err) {
return &types.InstallConfig{
Installations: []types.InstallRecord{},
}, nil
}
data, err := os.ReadFile(path)
if err != nil {
return nil, err
}
var cfg types.InstallConfig
if err := json.Unmarshal(data, &cfg); err != nil {
return nil, fmt.Errorf("解析 install.json 失败: %w请检查 JSON 格式)", err)
}
return &cfg, nil
}
// SaveInstallConfig 保存安装配置
func SaveInstallConfig(cfg *types.InstallConfig) error {
path, err := GetInstallConfigPath()
if err != nil {
return err
}
data, err := json.MarshalIndent(cfg, "", " ")
if err != nil {
return err
}
return os.WriteFile(path, data, 0644)
}
// AddInstallRecord 添加安装记录
func AddInstallRecord(record types.InstallRecord) error {
cfg, err := LoadInstallConfig()
if err != nil {
return err
}
cfg.Installations = append(cfg.Installations, record)
return SaveInstallConfig(cfg)
}
// RemoveInstallRecord 移除安装记录
func RemoveInstallRecord(itemType types.ItemType, name string, platform types.Platform, scope types.Scope) error {
cfg, err := LoadInstallConfig()
if err != nil {
return err
}
for i, r := range cfg.Installations {
if r.Type == itemType && r.Name == name && r.Platform == platform && r.Scope == scope {
cfg.Installations = append(cfg.Installations[:i], cfg.Installations[i+1:]...)
return SaveInstallConfig(cfg)
}
}
return nil
}
// FindInstallRecord 查找安装记录
func FindInstallRecord(itemType types.ItemType, name string, platform types.Platform, scope types.Scope) (*types.InstallRecord, error) {
cfg, err := LoadInstallConfig()
if err != nil {
return nil, err
}
for _, r := range cfg.Installations {
if r.Type == itemType && r.Name == name && r.Platform == platform && r.Scope == scope {
return &r, nil
}
}
return nil, nil
}
// UpdateInstallRecord 更新安装记录
func UpdateInstallRecord(record types.InstallRecord) error {
cfg, err := LoadInstallConfig()
if err != nil {
return err
}
for i, r := range cfg.Installations {
if r.Type == record.Type && r.Name == record.Name &&
r.Platform == record.Platform && r.Scope == record.Scope {
cfg.Installations[i] = record
return SaveInstallConfig(cfg)
}
}
return nil
}
// CleanOrphanRecords 清理孤立记录(安装路径不存在)
func CleanOrphanRecords() ([]types.InstallRecord, error) {
cfg, err := LoadInstallConfig()
if err != nil {
return nil, err
}
// 预分配切片容量,减少内存分配次数
cleaned := make([]types.InstallRecord, 0, len(cfg.Installations)/2)
valid := make([]types.InstallRecord, 0, len(cfg.Installations))
for _, r := range cfg.Installations {
if _, err := os.Stat(r.InstallPath); os.IsNotExist(err) {
cleaned = append(cleaned, r)
} else {
valid = append(valid, r)
}
}
if len(cleaned) > 0 {
cfg.Installations = valid
if err := SaveInstallConfig(cfg); err != nil {
return nil, err
}
}
return cleaned, nil
}