From e30cab7e2c52bc055f8359fd9a900bba02281977 Mon Sep 17 00:00:00 2001
From: David Simpson <45690499+davegarthsimpson@users.noreply.github.com>
Date: Thu, 21 Jul 2022 16:32:50 +0200
Subject: [PATCH 1/2] ensure compile verbose pref is included on upload

---
 .../src/browser/contributions/upload-sketch.ts  | 13 +++++++++++--
 .../src/common/protocol/core-service.ts         | 10 ++++++++--
 .../src/node/core-service-impl.ts               | 17 ++++++++++++++---
 3 files changed, 33 insertions(+), 7 deletions(-)

diff --git a/arduino-ide-extension/src/browser/contributions/upload-sketch.ts b/arduino-ide-extension/src/browser/contributions/upload-sketch.ts
index 8da2b618d..ea770c0b5 100644
--- a/arduino-ide-extension/src/browser/contributions/upload-sketch.ts
+++ b/arduino-ide-extension/src/browser/contributions/upload-sketch.ts
@@ -217,6 +217,7 @@ export class UploadSketch extends CoreServiceContribution {
         verbose,
         sourceOverride,
         optimizeForDebug,
+        compileVerbose,
       ] = await Promise.all([
         this.boardsDataStore.appendConfigToFqbn(
           boardsConfig.selectedBoard?.fqbn
@@ -228,8 +229,13 @@ export class UploadSketch extends CoreServiceContribution {
         this.commandService.executeCommand<boolean>(
           'arduino-is-optimize-for-debug'
         ),
+        this.preferences.get('arduino.compile.verbose'),
       ]);
 
+      const compileStepOptions: Partial<CoreService.Compile.Options> = {
+        verbose: compileVerbose,
+      };
+
       const board = {
         ...boardsConfig.selectedBoard,
         name: boardsConfig.selectedBoard?.name || '',
@@ -277,9 +283,12 @@ export class UploadSketch extends CoreServiceContribution {
       }
       this.outputChannelManager.getChannel('Arduino').clear();
       if (usingProgrammer) {
-        await this.coreService.uploadUsingProgrammer(options);
+        await this.coreService.uploadUsingProgrammer(
+          options,
+          compileStepOptions
+        );
       } else {
-        await this.coreService.upload(options);
+        await this.coreService.upload(options, compileStepOptions);
       }
       this.messageService.info(
         nls.localize('arduino/sketch/doneUploading', 'Done uploading.'),
diff --git a/arduino-ide-extension/src/common/protocol/core-service.ts b/arduino-ide-extension/src/common/protocol/core-service.ts
index f720a7d61..2de2cd6da 100644
--- a/arduino-ide-extension/src/common/protocol/core-service.ts
+++ b/arduino-ide-extension/src/common/protocol/core-service.ts
@@ -67,8 +67,14 @@ export interface CoreService {
         compilerWarnings?: CompilerWarnings;
       }>
   ): Promise<void>;
-  upload(options: CoreService.Upload.Options): Promise<void>;
-  uploadUsingProgrammer(options: CoreService.Upload.Options): Promise<void>;
+  upload(
+    options: CoreService.Upload.Options,
+    additionalCompileOptions: Partial<CoreService.Compile.Options>
+  ): Promise<void>;
+  uploadUsingProgrammer(
+    options: CoreService.Upload.Options,
+    additionalCompileOptions: Partial<CoreService.Compile.Options>
+  ): Promise<void>;
   burnBootloader(options: CoreService.Bootloader.Options): Promise<void>;
 }
 
diff --git a/arduino-ide-extension/src/node/core-service-impl.ts b/arduino-ide-extension/src/node/core-service-impl.ts
index afe7f2099..a3922dd91 100644
--- a/arduino-ide-extension/src/node/core-service-impl.ts
+++ b/arduino-ide-extension/src/node/core-service-impl.ts
@@ -163,9 +163,13 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService {
     return request;
   }
 
-  upload(options: CoreService.Upload.Options): Promise<void> {
+  upload(
+    options: CoreService.Upload.Options,
+    additionalCompileOptions: Partial<CoreService.Compile.Options>
+  ): Promise<void> {
     return this.doUpload(
       options,
+      additionalCompileOptions,
       () => new UploadRequest(),
       (client, req) => client.upload(req),
       (message: string, locations: CoreError.ErrorLocation[]) =>
@@ -175,10 +179,12 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService {
   }
 
   async uploadUsingProgrammer(
-    options: CoreService.Upload.Options
+    options: CoreService.Upload.Options,
+    additionalCompileOptions: Partial<CoreService.Compile.Options>
   ): Promise<void> {
     return this.doUpload(
       options,
+      additionalCompileOptions,
       () => new UploadUsingProgrammerRequest(),
       (client, req) => client.uploadUsingProgrammer(req),
       (message: string, locations: CoreError.ErrorLocation[]) =>
@@ -189,6 +195,7 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService {
 
   protected async doUpload(
     options: CoreService.Upload.Options,
+    additionalCompileOptions: Partial<CoreService.Compile.Options>,
     requestFactory: () => UploadRequest | UploadUsingProgrammerRequest,
     responseHandler: (
       client: ArduinoCoreServiceClient,
@@ -200,7 +207,11 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService {
     ) => ApplicationError<number, CoreError.ErrorLocation[]>,
     task: string
   ): Promise<void> {
-    await this.compile(Object.assign(options, { exportBinaries: false }));
+    await this.compile({
+      ...options,
+      ...additionalCompileOptions,
+      exportBinaries: false,
+    });
 
     const coreClient = await this.coreClient;
     const { client, instance } = coreClient;

From 93a8bd943066474b2863928194d67137debdd7a2 Mon Sep 17 00:00:00 2001
From: Akos Kitta <a.kitta@arduino.cc>
Date: Fri, 22 Jul 2022 08:36:28 +0200
Subject: [PATCH 2/2] better verbose typings

Signed-off-by: Akos Kitta <a.kitta@arduino.cc>
---
 .../src/browser/contributions/upload-sketch.ts    | 14 ++++----------
 .../src/common/protocol/core-service.ts           | 13 ++++---------
 .../src/node/core-service-impl.ts                 | 15 ++++-----------
 3 files changed, 12 insertions(+), 30 deletions(-)

diff --git a/arduino-ide-extension/src/browser/contributions/upload-sketch.ts b/arduino-ide-extension/src/browser/contributions/upload-sketch.ts
index ea770c0b5..c17143bbf 100644
--- a/arduino-ide-extension/src/browser/contributions/upload-sketch.ts
+++ b/arduino-ide-extension/src/browser/contributions/upload-sketch.ts
@@ -214,7 +214,7 @@ export class UploadSketch extends CoreServiceContribution {
         fqbn,
         { selectedProgrammer },
         verify,
-        verbose,
+        uploadVerbose,
         sourceOverride,
         optimizeForDebug,
         compileVerbose,
@@ -232,10 +232,7 @@ export class UploadSketch extends CoreServiceContribution {
         this.preferences.get('arduino.compile.verbose'),
       ]);
 
-      const compileStepOptions: Partial<CoreService.Compile.Options> = {
-        verbose: compileVerbose,
-      };
-
+      const verbose = { compile: compileVerbose, upload: uploadVerbose };
       const board = {
         ...boardsConfig.selectedBoard,
         name: boardsConfig.selectedBoard?.name || '',
@@ -283,12 +280,9 @@ export class UploadSketch extends CoreServiceContribution {
       }
       this.outputChannelManager.getChannel('Arduino').clear();
       if (usingProgrammer) {
-        await this.coreService.uploadUsingProgrammer(
-          options,
-          compileStepOptions
-        );
+        await this.coreService.uploadUsingProgrammer(options);
       } else {
-        await this.coreService.upload(options, compileStepOptions);
+        await this.coreService.upload(options);
       }
       this.messageService.info(
         nls.localize('arduino/sketch/doneUploading', 'Done uploading.'),
diff --git a/arduino-ide-extension/src/common/protocol/core-service.ts b/arduino-ide-extension/src/common/protocol/core-service.ts
index 2de2cd6da..1ac6a2913 100644
--- a/arduino-ide-extension/src/common/protocol/core-service.ts
+++ b/arduino-ide-extension/src/common/protocol/core-service.ts
@@ -67,14 +67,8 @@ export interface CoreService {
         compilerWarnings?: CompilerWarnings;
       }>
   ): Promise<void>;
-  upload(
-    options: CoreService.Upload.Options,
-    additionalCompileOptions: Partial<CoreService.Compile.Options>
-  ): Promise<void>;
-  uploadUsingProgrammer(
-    options: CoreService.Upload.Options,
-    additionalCompileOptions: Partial<CoreService.Compile.Options>
-  ): Promise<void>;
+  upload(options: CoreService.Upload.Options): Promise<void>;
+  uploadUsingProgrammer(options: CoreService.Upload.Options): Promise<void>;
   burnBootloader(options: CoreService.Bootloader.Options): Promise<void>;
 }
 
@@ -90,11 +84,12 @@ export namespace CoreService {
   }
 
   export namespace Upload {
-    export interface Options extends Compile.Options {
+    export interface Options extends Omit<Compile.Options, 'verbose'> {
       readonly port?: Port;
       readonly programmer?: Programmer | undefined;
       readonly verify: boolean;
       readonly userFields: BoardUserField[];
+      readonly verbose: { compile: boolean; upload: boolean };
     }
   }
 
diff --git a/arduino-ide-extension/src/node/core-service-impl.ts b/arduino-ide-extension/src/node/core-service-impl.ts
index a3922dd91..a10b829da 100644
--- a/arduino-ide-extension/src/node/core-service-impl.ts
+++ b/arduino-ide-extension/src/node/core-service-impl.ts
@@ -163,13 +163,9 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService {
     return request;
   }
 
-  upload(
-    options: CoreService.Upload.Options,
-    additionalCompileOptions: Partial<CoreService.Compile.Options>
-  ): Promise<void> {
+  upload(options: CoreService.Upload.Options): Promise<void> {
     return this.doUpload(
       options,
-      additionalCompileOptions,
       () => new UploadRequest(),
       (client, req) => client.upload(req),
       (message: string, locations: CoreError.ErrorLocation[]) =>
@@ -179,12 +175,10 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService {
   }
 
   async uploadUsingProgrammer(
-    options: CoreService.Upload.Options,
-    additionalCompileOptions: Partial<CoreService.Compile.Options>
+    options: CoreService.Upload.Options
   ): Promise<void> {
     return this.doUpload(
       options,
-      additionalCompileOptions,
       () => new UploadUsingProgrammerRequest(),
       (client, req) => client.uploadUsingProgrammer(req),
       (message: string, locations: CoreError.ErrorLocation[]) =>
@@ -195,7 +189,6 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService {
 
   protected async doUpload(
     options: CoreService.Upload.Options,
-    additionalCompileOptions: Partial<CoreService.Compile.Options>,
     requestFactory: () => UploadRequest | UploadUsingProgrammerRequest,
     responseHandler: (
       client: ArduinoCoreServiceClient,
@@ -209,7 +202,7 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService {
   ): Promise<void> {
     await this.compile({
       ...options,
-      ...additionalCompileOptions,
+      verbose: options.verbose.compile,
       exportBinaries: false,
     });
 
@@ -273,7 +266,7 @@ export class CoreServiceImpl extends CoreClientAware implements CoreService {
     if (programmer) {
       request.setProgrammer(programmer.id);
     }
-    request.setVerbose(options.verbose);
+    request.setVerbose(options.verbose.upload);
     request.setVerify(options.verify);
 
     options.userFields.forEach((e) => {