@@ -58,55 +58,96 @@ replacement.
5858
5959### Breaking changes in UpdateIndex API (both gRPC and go-lang)  
6060
61- The gRPC message ` cc.arduino.cli.commands.v1.UpdateIndexResponse  `  has been changed from:
61+ The gRPC message ` cc.arduino.cli.commands.v1.DownloadProgress  `  has been changed from:
6262
6363``` 
64- message UpdateIndexResponse { 
65-   // Progress of the platforms index download. 
66-   DownloadProgress download_progress = 1; 
64+ message DownloadProgress { 
65+   // URL of the download. 
66+   string url = 1; 
67+   // The file being downloaded. 
68+   string file = 2; 
69+   // Total size of the file being downloaded. 
70+   int64 total_size = 3; 
71+   // Size of the downloaded portion of the file. 
72+   int64 downloaded = 4; 
73+   // Whether the download is complete. 
74+   bool completed = 5; 
6775} 
6876``` 
6977
7078to
7179
7280``` 
73- message UpdateIndexResponse  { 
81+ message DownloadProgress  { 
7482  oneof message { 
75-     // Progress of the platforms index download. 
76-     DownloadProgress download_progress = 1; 
77-     // Report of the index update downloads. 
78-     DownloadResult download_result = 2; 
83+     DownloadProgressStart start = 1; 
84+     DownloadProgressUpdate update = 2; 
85+     DownloadProgressEnd end = 3; 
7986  } 
8087} 
8188
82- message DownloadResult  { 
83-   // Index  URL. 
89+ message DownloadProgressStart  { 
90+   // URL of the download . 
8491  string url = 1; 
85-   // Download result: true if successful, false if an error occurred. 
86-   bool successful = 2; 
87-   // Download error details. 
88-   string error = 3; 
92+   // The label to display on the progress bar. 
93+   string label = 2; 
8994} 
95+ 
96+ message DownloadProgressUpdate { 
97+   // Size of the downloaded portion of the file. 
98+   int64 downloaded = 1; 
99+   // Total size of the file being downloaded. 
100+   int64 total_size = 2; 
101+ } 
102+ 
103+ message DownloadProgressEnd { 
104+   // True if the download is successful 
105+   bool success = 1; 
106+   // Info or error message, depending on the value of 'success'. Some examples: 
107+   // "File xxx already downloaded" or "Connection timeout" 
108+   string message = 2; 
109+ } 
110+ ``` 
111+ 
112+ The new message format allows a better handling of the progress update reports on downloads. Every download now will
113+ report a sequence of message as follows:
114+ 
115+ ``` 
116+ DownloadProgressStart{url="https://...", label="Downloading package index..."} 
117+ DownloadProgressUpdate{downloaded=0, total_size=103928} 
118+ DownloadProgressUpdate{downloaded=29380, total_size=103928} 
119+ DownloadProgressUpdate{downloaded=69540, total_size=103928} 
120+ DownloadProgressEnd{success=true, message=""} 
121+ ``` 
122+ 
123+ or if an error occurs:
124+ 
125+ ``` 
126+ DownloadProgressStart{url="https://...", label="Downloading package index..."} 
127+ DownloadProgressUpdate{downloaded=0, total_size=103928} 
128+ DownloadProgressEnd{success=false, message="Server closed connection"} 
129+ ``` 
130+ 
131+ or if the file is already cached:
132+ 
133+ ``` 
134+ DownloadProgressStart{url="https://...", label="Downloading package index..."} 
135+ DownloadProgressEnd{success=true, message="Index already downloaded"} 
90136``` 
91137
92- even if not strictly a breaking change it's worth noting that the detailed error message is now streamed in the
93- response. About the go-lang API the following functions in ` github.com/arduino/arduino-cli/commands ` :
138+ About the go-lang API the following functions in ` github.com/arduino/arduino-cli/commands ` :
94139
95140``` go 
96141func  UpdateIndex (ctx  context .Context , req  *rpc .UpdateIndexRequest , downloadCB  rpc .DownloadProgressCB ) (*rpc .UpdateIndexResponse , error ) { ... }
97- func  UpdateCoreLibrariesIndex (ctx  context .Context , req  *rpc .UpdateCoreLibrariesIndexRequest , downloadCB  rpc .DownloadProgressCB ) error  { ... }
98142``` 
99143
100144have changed their signature to:
101145
102146``` go 
103147func  UpdateIndex (ctx  context .Context , req  *rpc .UpdateIndexRequest , downloadCB  rpc .DownloadProgressCB , downloadResultCB  rpc .DownloadResultCB ) error  { ... }
104- func  UpdateCoreLibrariesIndex (ctx  context .Context , req  *rpc .UpdateCoreLibrariesIndexRequest , downloadCB  rpc .DownloadProgressCB , downloadResultCB  rpc .DownloadResultCB ) error  { ... }
105148``` 
106149
107- ` UpdateIndex `  do not return anymore the latest ` UpdateIndexResponse `  (it was always empty). Both ` UpdateIndex `  and
108- ` UpdateCoreLibrariesIndex `  now accepts an ` rpc.DownloadResultCB `  to get download results, you can pass an empty callback
109- if you're not interested in the error details.
150+ ` UpdateIndex `  do not return anymore the latest ` UpdateIndexResponse `  (beacuse it was always empty).
110151
111152## 0.27.0  
112153
0 commit comments