@@ -26,9 +26,10 @@ var instancesCount int32 = 1
26
26
// instantiate as many as needed by providing a different configuration
27
27
// for each one.
28
28
type CoreInstance struct {
29
- config * configs.Configuration
30
- pm * packagemanager.PackageManager
31
- lm * librariesmanager.LibrariesManager
29
+ config * configs.Configuration
30
+ pm * packagemanager.PackageManager
31
+ lm * librariesmanager.LibrariesManager
32
+ getLibOnly bool
32
33
}
33
34
34
35
type InstanceContainer interface {
@@ -74,70 +75,15 @@ func Init(ctx context.Context, req *rpc.InitReq) (*rpc.InitResp, error) {
74
75
return nil , fmt .Errorf ("parsing url %s: %s" , rawurl , err )
75
76
}
76
77
}
77
-
78
- var pm * packagemanager.PackageManager
79
- if ! req .GetLibraryManagerOnly () {
80
- pm = packagemanager .NewPackageManager (
81
- config .IndexesDir (),
82
- config .PackagesDir (),
83
- config .DownloadsDir (),
84
- config .DataDir .Join ("tmp" ))
85
-
86
- for _ , URL := range config .BoardManagerAdditionalUrls {
87
- if err := pm .LoadPackageIndex (URL ); err != nil {
88
- return nil , fmt .Errorf ("loading " + URL .String ()+ " package index: %s" , err )
89
- }
90
- }
91
-
92
- if err := pm .LoadHardware (config ); err != nil {
93
- return nil , fmt .Errorf ("loading hardware packages: %s" , err )
94
- }
95
- }
96
-
97
- // Initialize library manager
98
- // --------------------------
99
- lm := librariesmanager .NewLibraryManager (
100
- config .IndexesDir (),
101
- config .DownloadsDir ())
102
-
103
- // Add IDE builtin libraries dir
104
- if bundledLibsDir := config .IDEBundledLibrariesDir (); bundledLibsDir != nil {
105
- lm .AddLibrariesDir (bundledLibsDir , libraries .IDEBuiltIn )
106
- }
107
-
108
- // Add sketchbook libraries dir
109
- lm .AddLibrariesDir (config .LibrariesDir (), libraries .Sketchbook )
110
-
111
- // Add libraries dirs from installed platforms
112
- if pm != nil {
113
- for _ , targetPackage := range pm .GetPackages ().Packages {
114
- for _ , platform := range targetPackage .Platforms {
115
- if platformRelease := pm .GetInstalledPlatformRelease (platform ); platformRelease != nil {
116
- lm .AddPlatformReleaseLibrariesDir (platformRelease , libraries .PlatformBuiltIn )
117
- }
118
- }
119
- }
120
- }
121
-
122
- // Load index and auto-update it if needed
123
- if err := lm .LoadIndex (); err != nil {
124
- UpdateLibrariesIndex (ctx , lm , func (curr * rpc.DownloadProgress ) {
125
- fmt .Printf (">> %+v\n " , curr )
126
- })
127
- if err := lm .LoadIndex (); err != nil {
128
- return nil , fmt .Errorf ("loading libraries index: %s" , err )
129
- }
130
- }
131
-
132
- // Scan for libraries
133
- if err := lm .RescanLibraries (); err != nil {
134
- return nil , fmt .Errorf ("libraries rescan: %s" , err )
78
+ pm , lm , err := createInstance (ctx , config , req .GetLibraryManagerOnly ())
79
+ if err != nil {
80
+ return nil , fmt .Errorf ("Impossible create instance" )
135
81
}
136
-
137
82
instance := & CoreInstance {
138
- config : config ,
139
- pm : pm ,
140
- lm : lm }
83
+ config : config ,
84
+ pm : pm ,
85
+ lm : lm ,
86
+ getLibOnly : req .GetLibraryManagerOnly ()}
141
87
handle := instancesCount
142
88
instancesCount ++
143
89
instances [handle ] = instance
@@ -193,22 +139,33 @@ func Rescan(ctx context.Context, req *rpc.RescanReq) (*rpc.RescanResp, error) {
193
139
if config == nil {
194
140
return nil , fmt .Errorf ("invalid request" )
195
141
}
142
+ pm , lm , err := createInstance (ctx , config , coreInstance .getLibOnly )
143
+ if err != nil {
144
+ return nil , fmt .Errorf ("Impossible create" )
145
+ }
146
+ coreInstance .pm = pm
147
+ coreInstance .lm = lm
148
+ return & rpc.RescanResp {}, nil
149
+ }
196
150
151
+ func createInstance (ctx context.Context , config * configs.Configuration , GetLibOnly bool ) (* packagemanager.PackageManager , * librariesmanager.LibrariesManager , error ) {
197
152
var pm * packagemanager.PackageManager
198
- pm = packagemanager .NewPackageManager (
199
- config .IndexesDir (),
200
- config .PackagesDir (),
201
- config .DownloadsDir (),
202
- config .DataDir .Join ("tmp" ))
153
+ if ! GetLibOnly {
154
+ pm = packagemanager .NewPackageManager (
155
+ config .IndexesDir (),
156
+ config .PackagesDir (),
157
+ config .DownloadsDir (),
158
+ config .DataDir .Join ("tmp" ))
203
159
204
- for _ , URL := range config .BoardManagerAdditionalUrls {
205
- if err := pm .LoadPackageIndex (URL ); err != nil {
206
- return nil , fmt .Errorf ("loading " + URL .String ()+ " package index: %s" , err )
160
+ for _ , URL := range config .BoardManagerAdditionalUrls {
161
+ if err := pm .LoadPackageIndex (URL ); err != nil {
162
+ return nil , nil , fmt .Errorf ("loading " + URL .String ()+ " package index: %s" , err )
163
+ }
207
164
}
208
- }
209
165
210
- if err := pm .LoadHardware (config ); err != nil {
211
- return nil , fmt .Errorf ("loading hardware packages: %s" , err )
166
+ if err := pm .LoadHardware (config ); err != nil {
167
+ return nil , nil , fmt .Errorf ("loading hardware packages: %s" , err )
168
+ }
212
169
}
213
170
214
171
// Initialize library manager
@@ -242,19 +199,13 @@ func Rescan(ctx context.Context, req *rpc.RescanReq) (*rpc.RescanResp, error) {
242
199
fmt .Printf (">> %+v\n " , curr )
243
200
})
244
201
if err := lm .LoadIndex (); err != nil {
245
- return nil , fmt .Errorf ("loading libraries index: %s" , err )
202
+ return nil , nil , fmt .Errorf ("loading libraries index: %s" , err )
246
203
}
247
204
}
248
205
249
206
// Scan for libraries
250
207
if err := lm .RescanLibraries (); err != nil {
251
- return nil , fmt .Errorf ("libraries rescan: %s" , err )
208
+ return nil , nil , fmt .Errorf ("libraries rescan: %s" , err )
252
209
}
253
-
254
- coreInstance .pm = pm
255
- coreInstance .lm = lm
256
- id = req .Instance .Id
257
- return & rpc.RescanResp {
258
- Instance : & rpc.Instance {Id : id },
259
- }, nil
210
+ return pm , lm , nil
260
211
}
0 commit comments