Files
voidraft/internal/models/extensions.go
2025-06-25 21:09:21 +08:00

179 lines
4.3 KiB
Go

package models
import "time"
// Extension 单个扩展配置
type Extension struct {
ID ExtensionID `json:"id"` // 扩展唯一标识
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" // 小地图
// 工具扩展
ExtensionSearch ExtensionID = "search" // 搜索功能
ExtensionCodeBlock ExtensionID = "codeBlock" // 代码块
// 核心扩展
ExtensionEditor ExtensionID = "editor" // 编辑器核心功能
)
// 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,
Enabled: true,
IsDefault: true,
Config: ExtensionConfig{},
},
{
ID: ExtensionHyperlink,
Enabled: true,
IsDefault: true,
Config: ExtensionConfig{},
},
{
ID: ExtensionColorSelector,
Enabled: true,
IsDefault: true,
Config: ExtensionConfig{},
},
{
ID: ExtensionFold,
Enabled: true,
IsDefault: true,
Config: ExtensionConfig{},
},
{
ID: ExtensionTextHighlight,
Enabled: true,
IsDefault: true,
Config: ExtensionConfig{},
},
// UI增强扩展
{
ID: ExtensionMinimap,
Enabled: true,
IsDefault: true,
Config: ExtensionConfig{
"displayText": "characters",
"showOverlay": "always",
"autohide": false,
},
},
// 工具扩展
{
ID: ExtensionSearch,
Enabled: true,
IsDefault: true,
Config: ExtensionConfig{},
},
{
ID: ExtensionCodeBlock,
Enabled: true,
IsDefault: true,
Config: ExtensionConfig{
"showBackground": true,
"enableAutoDetection": true,
},
},
// 核心扩展
{
ID: ExtensionEditor,
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
}
// 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
}