feat(scum): add file config workbench
This commit is contained in:
@@ -316,6 +316,25 @@ type GamePluginPage struct {
|
||||
BridgeActions []string
|
||||
}
|
||||
|
||||
// PluginFileWorkspace is a bounded, logical catalog for a plugin-owned files
|
||||
// workbench. Keys are logical identifiers, never host paths.
|
||||
type PluginFileWorkspace struct {
|
||||
DefaultDirectoryKey string
|
||||
Directories []PluginLogicalDirectory
|
||||
Files []PluginLogicalFile
|
||||
ConfigFields []PluginConfigField
|
||||
}
|
||||
|
||||
type PluginLogicalDirectory struct{ Key, Label, Scope string }
|
||||
type PluginLogicalFile struct {
|
||||
Key, DirectoryKey, Label, Kind, StreamKey string
|
||||
Editable bool
|
||||
}
|
||||
type PluginConfigField struct {
|
||||
Key, FileKey, ConfigKey, Label, Description, Control, DefaultValue, RestartImpact string
|
||||
Minimum, Maximum int
|
||||
}
|
||||
|
||||
type GamePluginBridge struct {
|
||||
Actions []string
|
||||
}
|
||||
@@ -595,6 +614,7 @@ type GamePluginManifest struct {
|
||||
Permissions []string
|
||||
Actions PluginLifecycleActions
|
||||
Pages []GamePluginPage
|
||||
FileWorkspace PluginFileWorkspace
|
||||
AI GamePluginManifestAI
|
||||
ProductionLifecycle GamePluginProductionLifecycle
|
||||
RemoteAccess GamePluginRemoteAccess
|
||||
@@ -624,6 +644,7 @@ type GamePlugin struct {
|
||||
LifecycleActions PluginLifecycleActions
|
||||
BridgeActions []string
|
||||
Pages []GamePluginPage
|
||||
FileWorkspace PluginFileWorkspace
|
||||
Tags []string
|
||||
AIPurposes []string
|
||||
ProductionLifecycle GamePluginProductionLifecycle
|
||||
@@ -1611,6 +1632,7 @@ func CopyGamePlugin(plugin GamePlugin) GamePlugin {
|
||||
plugin.CreateFields = CopyPluginCreateFields(plugin.CreateFields)
|
||||
plugin.BridgeActions = CopyStringSlice(plugin.BridgeActions)
|
||||
plugin.Pages = CopyGamePluginPageSlice(plugin.Pages)
|
||||
plugin.FileWorkspace = CopyPluginFileWorkspace(plugin.FileWorkspace)
|
||||
plugin.Tags = CopyStringSlice(plugin.Tags)
|
||||
plugin.AIPurposes = CopyStringSlice(plugin.AIPurposes)
|
||||
plugin.ProductionLifecycle = CopyGamePluginProductionLifecycle(plugin.ProductionLifecycle)
|
||||
@@ -1662,6 +1684,7 @@ func CopyGamePluginManifest(manifest GamePluginManifest) GamePluginManifest {
|
||||
manifest.Capabilities = CopyStringSlice(manifest.Capabilities)
|
||||
manifest.Permissions = CopyStringSlice(manifest.Permissions)
|
||||
manifest.Pages = CopyGamePluginPageSlice(manifest.Pages)
|
||||
manifest.FileWorkspace = CopyPluginFileWorkspace(manifest.FileWorkspace)
|
||||
manifest.AI.Purposes = CopyStringSlice(manifest.AI.Purposes)
|
||||
manifest.ProductionLifecycle = CopyGamePluginProductionLifecycle(manifest.ProductionLifecycle)
|
||||
manifest.RemoteAccess = CopyGamePluginRemoteAccess(manifest.RemoteAccess)
|
||||
@@ -1670,6 +1693,13 @@ func CopyGamePluginManifest(manifest GamePluginManifest) GamePluginManifest {
|
||||
return manifest
|
||||
}
|
||||
|
||||
func CopyPluginFileWorkspace(workspace PluginFileWorkspace) PluginFileWorkspace {
|
||||
workspace.Directories = append([]PluginLogicalDirectory(nil), workspace.Directories...)
|
||||
workspace.Files = append([]PluginLogicalFile(nil), workspace.Files...)
|
||||
workspace.ConfigFields = append([]PluginConfigField(nil), workspace.ConfigFields...)
|
||||
return workspace
|
||||
}
|
||||
|
||||
func CopyPluginCreateFields(fields []PluginCreateField) []PluginCreateField {
|
||||
if fields == nil {
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user