Add extension management service

This commit is contained in:
2025-06-24 14:16:53 +08:00
parent ea025e3f5d
commit f3bcb87828
31 changed files with 1682 additions and 176 deletions

View File

@@ -0,0 +1,220 @@
package models
import "time"
// Extension 单个扩展配置
type Extension struct {
ID ExtensionID `json:"id"` // 扩展唯一标识
Category ExtensionCategory `json:"category"` // 扩展分类
Enabled bool `json:"enabled"` // 是否启用
IsDefault bool `json:"isDefault"` // 是否为默认扩展
Config ExtensionConfig `json:"config"` // 扩展配置项
}
// ExtensionID 扩展标识符
type ExtensionID string
const (
// 编辑增强扩展
ExtensionRainbowBrackets ExtensionID = "rainbowBrackets" // 彩虹括号
ExtensionHyperlink ExtensionID = "hyperlink" // 超链接
ExtensionColorSelector ExtensionID = "colorSelector" // 颜色选择器
ExtensionFold ExtensionID = "fold"
ExtensionTextHighlight ExtensionID = "textHighlight"
// UI增强扩展
ExtensionMinimap ExtensionID = "minimap" // 小地图
ExtensionCodeBlast ExtensionID = "codeBlast" // 代码爆炸效果
// 工具扩展
ExtensionSearch ExtensionID = "search" // 搜索功能
ExtensionCodeBlock ExtensionID = "codeBlock" // 代码块
)
// ExtensionCategory 扩展分类
type ExtensionCategory string
const (
CategoryEditing ExtensionCategory = "editing" // 编辑增强
CategoryUI ExtensionCategory = "ui" // 界面增强
CategoryTools ExtensionCategory = "tools" // 工具类
)
// ExtensionConfig 扩展配置项(动态配置)
type ExtensionConfig map[string]interface{}
// ExtensionMetadata 扩展配置元数据
type ExtensionMetadata struct {
Version string `json:"version"` // 配置版本
LastUpdated string `json:"lastUpdated"` // 最后更新时间
}
// ExtensionSettings 扩展设置配置
type ExtensionSettings struct {
Extensions []Extension `json:"extensions"` // 扩展列表
Metadata ExtensionMetadata `json:"metadata"` // 配置元数据
}
// NewDefaultExtensionSettings 创建默认扩展配置
func NewDefaultExtensionSettings() *ExtensionSettings {
return &ExtensionSettings{
Extensions: NewDefaultExtensions(),
Metadata: ExtensionMetadata{
Version: "1.0.0",
LastUpdated: time.Now().Format(time.RFC3339),
},
}
}
// NewDefaultExtensions 创建默认扩展配置
func NewDefaultExtensions() []Extension {
return []Extension{
// 编辑增强扩展
{
ID: ExtensionRainbowBrackets,
Category: CategoryEditing,
Enabled: true,
IsDefault: true,
Config: ExtensionConfig{},
},
{
ID: ExtensionHyperlink,
Category: CategoryEditing,
Enabled: true,
IsDefault: true,
Config: ExtensionConfig{},
},
{
ID: ExtensionColorSelector,
Category: CategoryEditing,
Enabled: true,
IsDefault: true,
Config: ExtensionConfig{},
},
// UI增强扩展
{
ID: ExtensionMinimap,
Category: CategoryUI,
Enabled: true,
IsDefault: true,
Config: ExtensionConfig{
"displayText": "characters",
"showOverlay": "always",
"autohide": false,
},
},
{
ID: ExtensionCodeBlast,
Category: CategoryUI,
Enabled: true,
IsDefault: true,
Config: ExtensionConfig{
"effect": 1,
"shake": true,
"maxParticles": 300,
"shakeIntensity": 3,
},
},
// 工具扩展
{
ID: ExtensionSearch,
Category: CategoryTools,
Enabled: true,
IsDefault: true,
Config: ExtensionConfig{},
},
{
ID: ExtensionCodeBlock,
Category: CategoryTools,
Enabled: true,
IsDefault: true,
Config: ExtensionConfig{
"showBackground": true,
"enableAutoDetection": true,
},
},
{
ID: ExtensionFold,
Category: CategoryEditing,
Enabled: true,
IsDefault: true,
Config: ExtensionConfig{},
},
{
ID: ExtensionTextHighlight,
Category: CategoryEditing,
Enabled: true,
IsDefault: true,
Config: ExtensionConfig{},
},
}
}
// GetVersion 获取配置版本
func (es *ExtensionSettings) GetVersion() string {
return es.Metadata.Version
}
// SetVersion 设置配置版本
func (es *ExtensionSettings) SetVersion(version string) {
es.Metadata.Version = version
}
// SetLastUpdated 设置最后更新时间
func (es *ExtensionSettings) SetLastUpdated(timeStr string) {
es.Metadata.LastUpdated = timeStr
}
// GetDefaultConfig 获取默认配置
func (es *ExtensionSettings) GetDefaultConfig() any {
return NewDefaultExtensionSettings()
}
// GetExtensionByID 根据ID获取扩展
func (es *ExtensionSettings) GetExtensionByID(id ExtensionID) *Extension {
for i := range es.Extensions {
if es.Extensions[i].ID == id {
return &es.Extensions[i]
}
}
return nil
}
// GetEnabledExtensions 获取所有启用的扩展
func (es *ExtensionSettings) GetEnabledExtensions() []Extension {
var enabled []Extension
for _, ext := range es.Extensions {
if ext.Enabled {
enabled = append(enabled, ext)
}
}
return enabled
}
// GetExtensionsByCategory 根据分类获取扩展
func (es *ExtensionSettings) GetExtensionsByCategory(category ExtensionCategory) []Extension {
var extensions []Extension
for _, ext := range es.Extensions {
if ext.Category == category {
extensions = append(extensions, ext)
}
}
return extensions
}
// UpdateExtension 更新扩展配置
func (es *ExtensionSettings) UpdateExtension(id ExtensionID, enabled bool, config ExtensionConfig) bool {
for i := range es.Extensions {
if es.Extensions[i].ID == id {
es.Extensions[i].Enabled = enabled
if config != nil {
es.Extensions[i].Config = config
}
es.SetLastUpdated(time.Now().Format(time.RFC3339))
return true
}
}
return false
}