@@ -25,6 +25,8 @@ func (l MalLevel) String() string {
2525 return "community"
2626 case ProfessionalLevel :
2727 return "professional"
28+ case CustomLevel :
29+ return "custom"
2830 default :
2931 return "unknown"
3032 }
@@ -37,7 +39,7 @@ const (
3739)
3840
3941var (
40- levelOrder = []MalLevel {CommunityLevel , ProfessionalLevel , CustomLevel }
42+ levelOrder = []MalLevel {CustomLevel , ProfessionalLevel , CommunityLevel }
4143)
4244
4345// EmbedPlugin 嵌入式Lua插件,直接实现Plugin接口
@@ -51,9 +53,10 @@ type EmbedPlugin struct {
5153
5254// NewEmbedPlugin 创建嵌入式插件
5355func NewEmbedPlugin (malPath , malName string , level MalLevel ) (* EmbedPlugin , error ) {
56+ pluginFS := intl .UnifiedFS
5457 // 读取manifest文件
5558 manifestPath := malPath + "/mal.yaml"
56- manifestData , err := intl . UnifiedFS .ReadFile (manifestPath )
59+ manifestData , err := pluginFS .ReadFile (manifestPath )
5760 if err != nil {
5861 return nil , fmt .Errorf ("failed to read manifest: %w" , err )
5962 }
@@ -71,7 +74,7 @@ func NewEmbedPlugin(malPath, malName string, level MalLevel) (*EmbedPlugin, erro
7174 var content []byte
7275 if manifest .EntryFile != "" {
7376 entryPath := malPath + "/" + manifest .EntryFile
74- content , err = intl . UnifiedFS .ReadFile (entryPath )
77+ content , err = pluginFS .ReadFile (entryPath )
7578 if err != nil {
7679 return nil , fmt .Errorf ("failed to read entry file %s: %w" , manifest .EntryFile , err )
7780 }
@@ -96,7 +99,7 @@ func NewEmbedPlugin(malPath, malName string, level MalLevel) (*EmbedPlugin, erro
9699 embedPlugin := & EmbedPlugin {
97100 LuaPlugin : luaPlugin ,
98101 Level : level ,
99- FS : intl . UnifiedFS ,
102+ FS : pluginFS ,
100103 RootPath : malPath ,
101104 }
102105
@@ -168,13 +171,11 @@ func (plug *EmbedPlugin) registerEmbedResourceFunctions() {
168171 plug .registerFunction ("global_resource" , func (filename string ) (string , error ) {
169172 // 从全局管理器查找
170173 if globalManager := GetGlobalMalManager (); globalManager != nil {
171- reverseLevelOrder := []string {"custom" , "professional" , "community" }
172-
173- for _ , levelName := range reverseLevelOrder {
174- if plugin , exists := globalManager .GetEmbedPlugin (levelName ); exists {
174+ for _ , level := range []MalLevel {CustomLevel , ProfessionalLevel , CommunityLevel } {
175+ for _ , levelPlugin := range globalManager .GetEmbeddedPluginsByLevel (level ) {
175176 resourcePath := "resources/" + filename
176- if _ , fileExists := plugin .GetFileContent (resourcePath ); fileExists {
177- return fmt .Sprintf ("embed://%s/%s" , levelName , resourcePath ), nil
177+ if _ , fileExists := levelPlugin .GetFileContent (resourcePath ); fileExists {
178+ return fmt .Sprintf ("embed://%s/%s" , levelPlugin . Name , resourcePath ), nil
178179 }
179180 }
180181 }
@@ -203,13 +204,11 @@ func (plug *EmbedPlugin) registerEmbedResourceFunctions() {
203204 filename := fmt .Sprintf ("%s.%s.%s" , base , sess .Os .Arch , ext )
204205
205206 if globalManager := GetGlobalMalManager (); globalManager != nil {
206- reverseLevelOrder := []string {"custom" , "professional" , "community" }
207-
208- for _ , levelName := range reverseLevelOrder {
209- if plugin , exists := globalManager .GetEmbedPlugin (levelName ); exists {
207+ for _ , level := range []MalLevel {CustomLevel , ProfessionalLevel , CommunityLevel } {
208+ for _ , levelPlugin := range globalManager .GetEmbeddedPluginsByLevel (level ) {
210209 resourcePath := "resources/" + filename
211- if _ , fileExists := plugin .GetFileContent (resourcePath ); fileExists {
212- return fmt .Sprintf ("embed://%s/%s" , levelName , resourcePath ), nil
210+ if _ , fileExists := levelPlugin .GetFileContent (resourcePath ); fileExists {
211+ return fmt .Sprintf ("embed://%s/%s" , levelPlugin . Name , resourcePath ), nil
213212 }
214213 }
215214 }
@@ -241,13 +240,10 @@ func (plug *EmbedPlugin) registerEmbedResourceFunctions() {
241240 plug .registerFunction ("read_global_resource" , func (filename string ) (string , error ) {
242241 // 从plugin包获取全局嵌入式mal管理器
243242 if globalManager := GetGlobalMalManager (); globalManager != nil {
244- // 按优先级顺序查找:custom -> professional -> community
245- reverseLevelOrder := []string {"custom" , "professional" , "community" }
246-
247- for _ , levelName := range reverseLevelOrder {
248- if plugin , exists := globalManager .GetEmbedPlugin (levelName ); exists {
243+ for _ , level := range []MalLevel {CustomLevel , ProfessionalLevel , CommunityLevel } {
244+ for _ , levelPlugin := range globalManager .GetEmbeddedPluginsByLevel (level ) {
249245 resourcePath := "resources/" + filename
250- if content , fileExists := plugin .GetFileContent (resourcePath ); fileExists {
246+ if content , fileExists := levelPlugin .GetFileContent (resourcePath ); fileExists {
251247 return string (content ), nil
252248 }
253249 }
0 commit comments