MCPcopy Create free account
hub / github.com/chainreactors/EvilProxy / selectPluginFilesWithCandidates

Function selectPluginFilesWithCandidates

internal/pluginhost/platform.go:119–175  ·  view source on GitHub ↗
(root string, desiredVersions ...map[string]string)

Source from the content-addressed store, hash-verified

117}
118
119func selectPluginFilesWithCandidates(root string, desiredVersions ...map[string]string) ([]pluginFile, []pluginFile, error) {
120 root = strings.TrimSpace(root)
121 if root == "" {
122 root = "plugins"
123 }
124 desired := normalizeDesiredPluginVersions(desiredVersions...)
125
126 candidates := candidateDirs(root, runtime.GOOS, runtime.GOARCH)
127 extension := pluginExtension(runtime.GOOS)
128 selectedByID := make(map[string]pluginFile)
129 order := make([]string, 0)
130 all := make([]pluginFile, 0)
131 for _, dir := range candidates {
132 entries, errReadDir := os.ReadDir(dir)
133 if errReadDir != nil {
134 if os.IsNotExist(errReadDir) {
135 continue
136 }
137 return nil, nil, errReadDir
138 }
139 files := make([]string, 0, len(entries))
140 for _, entry := range entries {
141 if entry == nil || !entry.Type().IsRegular() {
142 continue
143 }
144 if strings.HasSuffix(strings.ToLower(entry.Name()), extension) {
145 files = append(files, filepath.Join(dir, entry.Name()))
146 }
147 }
148 sort.Strings(files)
149 for _, path := range files {
150 file, okFile := pluginFileFromPath(path, extension)
151 if !okFile {
152 continue
153 }
154 all = append(all, file)
155 current, exists := selectedByID[file.ID]
156 if !exists {
157 selectedByID[file.ID] = file
158 order = append(order, file.ID)
159 continue
160 }
161 if pluginFilePreferredForDesired(file, current, desired[file.ID]) {
162 selectedByID[file.ID] = file
163 }
164 }
165 }
166 selected := make([]pluginFile, 0, len(order))
167 for _, id := range order {
168 file := selectedByID[id]
169 if desiredVersion := desired[id]; desiredVersion != "" && file.Version != desiredVersion {
170 continue
171 }
172 selected = append(selected, file)
173 }
174 return selected, all, nil
175}
176

Callers 2

selectPluginFilesFunction · 0.85

Calls 6

candidateDirsFunction · 0.85
pluginExtensionFunction · 0.70
pluginFileFromPathFunction · 0.70
NameMethod · 0.65

Tested by

no test coverage detected