diff options
Diffstat (limited to 'lib/crosssdk/sdks.go')
-rw-r--r-- | lib/crosssdk/sdks.go | 57 |
1 files changed, 55 insertions, 2 deletions
diff --git a/lib/crosssdk/sdks.go b/lib/crosssdk/sdks.go index 435aae6..87bb85d 100644 --- a/lib/crosssdk/sdks.go +++ b/lib/crosssdk/sdks.go @@ -3,6 +3,7 @@ package crosssdk import ( "path" "path/filepath" + "sync" "github.com/Sirupsen/logrus" "github.com/iotbzh/xds-server/lib/common" @@ -10,7 +11,11 @@ import ( ) // SDKs List of installed SDK -type SDKs []*SDK +type SDKs struct { + Sdks []SDK + + mutex sync.Mutex +} // Init creates a new instance of Syncthing func Init(cfg *xdsconfig.Config, log *logrus.Logger) (*SDKs, error) { @@ -27,13 +32,61 @@ func Init(cfg *xdsconfig.Config, log *logrus.Logger) (*SDKs, error) { log.Debugf("Error while retrieving SDKs: dir=%s, error=%s", sdkRD, err.Error()) return &s, err } + s.mutex.Lock() + defer s.mutex.Unlock() + for _, d := range dirs { sdk, err := NewCrossSDK(d) if err != nil { log.Debugf("Error while processing SDK dir=%s, err=%s", d, err.Error()) } - s = append(s, sdk) + s.Sdks = append(s.Sdks, *sdk) } } + + log.Debugf("SDKs: %d cross sdks found", len(s.Sdks)) + return &s, nil } + +// GetAll returns all existing SDKs +func (s *SDKs) GetAll() []SDK { + s.mutex.Lock() + defer s.mutex.Unlock() + res := s.Sdks + return res +} + +// Get returns an SDK from id +func (s *SDKs) Get(id int) SDK { + s.mutex.Lock() + defer s.mutex.Unlock() + + if id < 0 || id > len(s.Sdks) { + return SDK{} + } + res := s.Sdks[id] + return res +} + +// GetEnvCmd returns the command used to initialized the environment for an SDK +func (s *SDKs) GetEnvCmd(id string, defaultID string) string { + if id == "" && defaultID == "" { + // no env cmd + return "" + } + + s.mutex.Lock() + defer s.mutex.Unlock() + defaultEnv := "" + for _, sdk := range s.Sdks { + if sdk.ID == id { + return sdk.GetEnvCmd() + } + if sdk.ID == defaultID { + defaultEnv = sdk.GetEnvCmd() + } + } + // Return default env that may be empty + return defaultEnv +} |