|
16 | 16 | package projectdata
|
17 | 17 |
|
18 | 18 | import (
|
19 |
| - "encoding/json" |
20 |
| - "io/ioutil" |
| 19 | + "io" |
21 | 20 | "net/http"
|
22 | 21 | "os"
|
23 | 22 |
|
24 | 23 | "github.com/arduino/arduino-cli/arduino/libraries"
|
| 24 | + "github.com/arduino/arduino-cli/arduino/libraries/librariesmanager" |
25 | 25 | "github.com/arduino/arduino-lint/internal/configuration"
|
26 | 26 | "github.com/arduino/arduino-lint/internal/configuration/rulemode"
|
27 | 27 | "github.com/arduino/arduino-lint/internal/project"
|
28 | 28 | "github.com/arduino/arduino-lint/internal/project/library/libraryproperties"
|
29 | 29 | "github.com/arduino/arduino-lint/internal/result/feedback"
|
30 | 30 | "github.com/arduino/arduino-lint/internal/rule/schema"
|
31 | 31 | "github.com/arduino/arduino-lint/internal/rule/schema/compliancelevel"
|
| 32 | + "github.com/arduino/go-paths-helper" |
32 | 33 | "github.com/arduino/go-properties-orderedmap"
|
33 | 34 | "github.com/client9/misspell"
|
34 | 35 | "github.com/sirupsen/logrus"
|
@@ -60,23 +61,34 @@ func InitializeForLibrary(project project.Type) {
|
60 | 61 |
|
61 | 62 | // Download the Library Manager index if needed.
|
62 | 63 | if !configuration.RuleModes(project.SuperprojectType)[rulemode.LibraryManagerIndexing] && libraryManagerIndex == nil {
|
63 |
| - url := "http://downloads.arduino.cc/libraries/library_index.json" |
64 |
| - httpResponse, err := http.Get(url) |
| 64 | + // Set up the temporary folder for the index |
| 65 | + libraryIndexFolderPath, err := paths.TempDir().MkTempDir("arduino-lint-library-index-folder") |
| 66 | + defer libraryIndexFolderPath.RemoveAll() |
65 | 67 | if err != nil {
|
66 |
| - feedback.Errorf("Unable to download Library Manager index from %s: %s", err, url) |
| 68 | + panic(err) |
| 69 | + } |
| 70 | + libraryIndexPath := libraryIndexFolderPath.Join("library_index.json") |
| 71 | + |
| 72 | + // Download the index data |
| 73 | + httpResponse, err := http.Get(librariesmanager.LibraryIndexURL.String()) |
| 74 | + if err != nil { |
| 75 | + feedback.Errorf("Unable to download Library Manager index from %s: %s", err, librariesmanager.LibraryIndexURL) |
67 | 76 | os.Exit(1)
|
68 | 77 | }
|
69 | 78 | defer httpResponse.Body.Close()
|
70 | 79 |
|
71 |
| - bytes, err := ioutil.ReadAll(httpResponse.Body) |
| 80 | + // Write the index data to file |
| 81 | + libraryIndexFile, err := libraryIndexPath.Create() |
| 82 | + defer libraryIndexFile.Close() |
72 | 83 | if err != nil {
|
73 | 84 | panic(err)
|
74 | 85 | }
|
75 |
| - |
76 |
| - err = json.Unmarshal(bytes, &libraryManagerIndex) |
77 |
| - if err != nil { |
| 86 | + if _, err := io.Copy(libraryIndexFile, httpResponse.Body); err != nil { |
78 | 87 | panic(err)
|
79 | 88 | }
|
| 89 | + |
| 90 | + libraryManagerIndex = librariesmanager.NewLibraryManager(libraryIndexFolderPath, nil) |
| 91 | + libraryManagerIndex.LoadIndex() |
80 | 92 | }
|
81 | 93 |
|
82 | 94 | if misspelledWordsReplacer == nil { // The replacer only needs to be compiled once per run.
|
@@ -120,10 +132,10 @@ func SourceHeaders() []string {
|
120 | 132 | return sourceHeaders
|
121 | 133 | }
|
122 | 134 |
|
123 |
| -var libraryManagerIndex map[string]interface{} |
| 135 | +var libraryManagerIndex *librariesmanager.LibrariesManager |
124 | 136 |
|
125 | 137 | // LibraryManagerIndex returns the Library Manager index data.
|
126 |
| -func LibraryManagerIndex() map[string]interface{} { |
| 138 | +func LibraryManagerIndex() *librariesmanager.LibrariesManager { |
127 | 139 | return libraryManagerIndex
|
128 | 140 | }
|
129 | 141 |
|
|
0 commit comments