Skip to content

Commit 52b0fd3

Browse files
Akos Kittakittaakos
Akos Kitta
authored andcommitted
ATL-93: Added Support for .pde sketch file format.
Signed-off-by: Akos Kitta <[email protected]>
1 parent b1ab6df commit 52b0fd3

File tree

9 files changed

+81
-276
lines changed

9 files changed

+81
-276
lines changed

Diff for: arduino-ide-extension/src/browser/arduino-frontend-contribution.tsx

+9
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import { FileService } from '@theia/filesystem/lib/browser/file-service';
4747
import { OutputService } from '../common/protocol/output-service';
4848
import { ArduinoPreferences } from './arduino-preferences';
4949
import { SketchesServiceClientImpl } from '../common/protocol/sketches-service-client-impl';
50+
import { SaveAsSketch } from './contributions/save-as-sketch';
5051

5152
@injectable()
5253
export class ArduinoFrontendContribution implements FrontendApplicationContribution,
@@ -338,6 +339,14 @@ export class ArduinoFrontendContribution implements FrontendApplicationContribut
338339
await this.ensureOpened(uri);
339340
}
340341
await this.ensureOpened(mainFileUri, true);
342+
if (mainFileUri.endsWith('.pde')) {
343+
const message = `The '${sketch.name}' still uses the old \`.pde\` format. Do you want to switch to the new \`.ino\` extension?`;
344+
this.messageService.info(message, 'Later', 'Yes').then(async answer => {
345+
if (answer === 'Yes') {
346+
this.commandRegistry.executeCommand(SaveAsSketch.Commands.SAVE_AS_SKETCH.id, { execOnlyIfTemp: false, openAfterMove: true, wipeOriginal: false });
347+
}
348+
});
349+
}
341350
} catch (e) {
342351
console.error(e);
343352
const message = e instanceof Error ? e.message : JSON.stringify(e);

Diff for: arduino-ide-extension/src/browser/contributions/open-sketch.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ export class OpenSketch extends SketchContribution {
122122
filters: [
123123
{
124124
name: 'Sketch',
125-
extensions: ['ino']
125+
extensions: ['ino', 'pde']
126126
}
127127
]
128128
});
@@ -138,7 +138,7 @@ export class OpenSketch extends SketchContribution {
138138
if (sketch) {
139139
return sketch;
140140
}
141-
if (sketchFileUri.endsWith('.ino')) {
141+
if (Sketch.isSketchFile(sketchFileUri)) {
142142
const name = new URI(sketchFileUri).path.name;
143143
const nameWithExt = this.labelProvider.getName(new URI(sketchFileUri));
144144
const { response } = await remote.dialog.showMessageBox({

Diff for: arduino-ide-extension/src/browser/theia/workspace/workspace-service.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { FocusTracker, Widget } from '@theia/core/lib/browser';
99
import { WorkspaceService as TheiaWorkspaceService } from '@theia/workspace/lib/browser/workspace-service';
1010
import { FrontendApplicationConfigProvider } from '@theia/core/lib/browser/frontend-application-config-provider';
1111
import { ConfigService } from '../../../common/protocol/config-service';
12-
import { SketchesService } from '../../../common/protocol/sketches-service';
12+
import { SketchesService, Sketch } from '../../../common/protocol/sketches-service';
1313
import { ArduinoWorkspaceRootResolver } from '../../arduino-workspace-resolver';
1414

1515
@injectable()
@@ -85,7 +85,7 @@ export class WorkspaceService extends TheiaWorkspaceService {
8585
protected onCurrentWidgetChange({ newValue }: FocusTracker.IChangedArgs<Widget>): void {
8686
if (newValue instanceof EditorWidget) {
8787
const { uri } = newValue.editor;
88-
if (uri.toString().endsWith('.ino')) {
88+
if (Sketch.isSketchFile(uri.toString())) {
8989
this.updateTitle();
9090
} else {
9191
const title = this.workspaceTitle;

Diff for: arduino-ide-extension/src/common/protocol/sketches-service.ts

+6
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,10 @@ export namespace Sketch {
8181
const { mainFileUri, otherSketchFileUris, additionalFileUris } = sketch;
8282
return [mainFileUri, ...otherSketchFileUris, ...additionalFileUris].indexOf(uri.toString()) !== -1;
8383
}
84+
export function isSketchFile(arg: string | URI): boolean {
85+
if (arg instanceof URI) {
86+
return isSketchFile(arg.toString());
87+
}
88+
return Extensions.MAIN.some(ext => arg.endsWith(ext));
89+
}
8490
}

Diff for: arduino-ide-extension/src/node/arduino-ide-backend-module.ts

-5
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ import { MonitorServiceImpl } from './monitor/monitor-service-impl';
2121
import { MonitorService, MonitorServicePath, MonitorServiceClient } from '../common/protocol/monitor-service';
2222
import { MonitorClientProvider } from './monitor/monitor-client-provider';
2323
import { ConfigServiceImpl } from './config-service-impl';
24-
import { HostedPluginReader } from './theia/plugin-ext/plugin-reader';
25-
import { HostedPluginReader as TheiaHostedPluginReader } from '@theia/plugin-ext/lib/hosted/node/plugin-reader';
2624
import { EnvVariablesServer as TheiaEnvVariablesServer } from '@theia/core/lib/common/env-variables';
2725
import { EnvVariablesServer } from './theia/env-variables/env-variables-server';
2826
import { NodeFileSystemExt } from './node-filesystem-ext';
@@ -106,9 +104,6 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
106104
bind(EnvVariablesServer).toSelf().inSingletonScope();
107105
rebind(TheiaEnvVariablesServer).toService(EnvVariablesServer);
108106

109-
bind(HostedPluginReader).toSelf().inSingletonScope();
110-
rebind(TheiaHostedPluginReader).toService(HostedPluginReader);
111-
112107
// #endregion Theia customizations
113108

114109
// Monitor client provider per connected frontend.

Diff for: arduino-ide-extension/src/node/core-client-provider.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ export class CoreClientProvider extends GrpcClientProvider<CoreClientProvider.Cl
5757
throw new Error(`Could not retrieve instance from the initialize response.`);
5858
}
5959

60-
await this.updateIndexes({ instance, client });
60+
// No `await`. The index update event comes later. This way we do not block app startup with index update when invalid proxy is given.
61+
this.updateIndexes({ instance, client });
6162

6263
return { instance, client };
6364
}

Diff for: arduino-ide-extension/src/node/core-service-impl.ts

+2-12
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { FileUri } from '@theia/core/lib/node/file-uri';
2-
import { inject, injectable, postConstruct } from 'inversify';
2+
import { inject, injectable } from 'inversify';
33
import { dirname } from 'path';
44
import { CoreService } from '../common/protocol/core-service';
55
import { CompileReq, CompileResp } from './cli-protocol/commands/compile_pb';
66
import { CoreClientProvider } from './core-client-provider';
77
import { UploadReq, UploadResp, BurnBootloaderReq, BurnBootloaderResp, UploadUsingProgrammerReq, UploadUsingProgrammerResp } from './cli-protocol/commands/upload_pb';
88
import { OutputService } from '../common/protocol/output-service';
9-
import { NotificationServiceServer, ConfigService } from '../common/protocol';
9+
import { NotificationServiceServer } from '../common/protocol';
1010
import { ClientReadableStream } from '@grpc/grpc-js';
1111
import { ArduinoCoreClient } from './cli-protocol/commands/commands_grpc_pb';
1212
import { firstToUpperCase, firstToLowerCase } from '../common/utils';
@@ -23,16 +23,6 @@ export class CoreServiceImpl implements CoreService {
2323
@inject(NotificationServiceServer)
2424
protected readonly notificationService: NotificationServiceServer;
2525

26-
@inject(ConfigService)
27-
protected readonly configService: ConfigService;
28-
29-
@postConstruct()
30-
protected init(): void {
31-
this.coreClient().then(({ client, instance }) => {
32-
33-
});
34-
}
35-
3626
async compile(options: CoreService.Compile.Options): Promise<void> {
3727
this.outputService.append({ name: 'compile', chunk: 'Compile...\n' + JSON.stringify(options, null, 2) + '\n--------------------------\n' });
3828
const { sketchUri, fqbn } = options;

0 commit comments

Comments
 (0)