Merge branch 'arduino:main' into main

This commit is contained in:
neochaos42 2025-04-16 18:32:15 -05:00 committed by GitHub
commit 56b0a2d66d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
127 changed files with 5960 additions and 6328 deletions

View File

@ -182,6 +182,7 @@ jobs:
is-nightly: ${{ steps.determination.outputs.is-nightly }} is-nightly: ${{ steps.determination.outputs.is-nightly }}
channel-name: ${{ steps.determination.outputs.channel-name }} channel-name: ${{ steps.determination.outputs.channel-name }}
publish-to-s3: ${{ steps.determination.outputs.publish-to-s3 }} publish-to-s3: ${{ steps.determination.outputs.publish-to-s3 }}
environment: production
permissions: {} permissions: {}
steps: steps:
- name: Determine the type of build - name: Determine the type of build
@ -304,6 +305,7 @@ jobs:
SIGNTOOL_PATH: "C:/Program Files (x86)/Windows Kits/10/bin/10.0.19041.0/x86/signtool.exe" SIGNTOOL_PATH: "C:/Program Files (x86)/Windows Kits/10/bin/10.0.19041.0/x86/signtool.exe"
WIN_CERT_PASSWORD: ${{ secrets[matrix.config.certificate-password-secret] }} WIN_CERT_PASSWORD: ${{ secrets[matrix.config.certificate-password-secret] }}
WIN_CERT_CONTAINER_NAME: ${{ secrets[matrix.config.certificate-container] }} WIN_CERT_CONTAINER_NAME: ${{ secrets[matrix.config.certificate-container] }}
PUPPETEER_SKIP_DOWNLOAD: true
strategy: strategy:
matrix: matrix:
@ -484,6 +486,12 @@ jobs:
repo-token: ${{ secrets.GITHUB_TOKEN }} repo-token: ${{ secrets.GITHUB_TOKEN }}
version: 3.x version: 3.x
- name: Install dependencies (Linux only)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y libx11-dev libxkbfile-dev libsecret-1-dev
- name: Install dependencies - name: Install dependencies
run: yarn run: yarn
@ -644,7 +652,7 @@ jobs:
permissions: permissions:
id-token: write id-token: write
contents: read contents: write
steps: steps:
- name: Download all job transfer artifacts - name: Download all job transfer artifacts

View File

@ -29,6 +29,12 @@ jobs:
node-version: ${{ env.NODE_VERSION }} node-version: ${{ env.NODE_VERSION }}
registry-url: 'https://registry.npmjs.org' registry-url: 'https://registry.npmjs.org'
- name: Install Dependencies (Linux only)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y libx11-dev libxkbfile-dev libsecret-1-dev
- name: Get Tag - name: Get Tag
id: tag_name id: tag_name
run: | run: |

View File

@ -1,6 +1,6 @@
{ {
"name": "arduino-ide-extension", "name": "arduino-ide-extension",
"version": "2.3.5", "version": "2.3.7",
"description": "An extension for Theia building the Arduino IDE", "description": "An extension for Theia building the Arduino IDE",
"license": "AGPL-3.0-or-later", "license": "AGPL-3.0-or-later",
"scripts": { "scripts": {
@ -24,28 +24,29 @@
}, },
"dependencies": { "dependencies": {
"@grpc/grpc-js": "^1.8.14", "@grpc/grpc-js": "^1.8.14",
"@theia/application-package": "1.41.0", "@theia/application-package": "1.57.0",
"@theia/core": "1.41.0", "@theia/core": "1.57.0",
"@theia/debug": "1.41.0", "@theia/debug": "1.57.0",
"@theia/editor": "1.41.0", "@theia/editor": "1.57.0",
"@theia/electron": "1.41.0", "@theia/electron": "1.57.0",
"@theia/filesystem": "1.41.0", "@theia/filesystem": "1.57.0",
"@theia/keymaps": "1.41.0", "@theia/keymaps": "1.57.0",
"@theia/markers": "1.41.0", "@theia/markers": "1.57.0",
"@theia/messages": "1.41.0", "@theia/messages": "1.57.0",
"@theia/monaco": "1.41.0", "@theia/monaco": "1.57.0",
"@theia/monaco-editor-core": "1.72.3", "@theia/monaco-editor-core": "1.83.101",
"@theia/navigator": "1.41.0", "@theia/navigator": "1.57.0",
"@theia/outline-view": "1.41.0", "@theia/outline-view": "1.57.0",
"@theia/output": "1.41.0", "@theia/output": "1.57.0",
"@theia/plugin-ext": "1.41.0", "@theia/plugin-ext": "1.57.0",
"@theia/plugin-ext-vscode": "1.41.0", "@theia/plugin-ext-vscode": "1.57.0",
"@theia/preferences": "1.41.0", "@theia/preferences": "1.57.0",
"@theia/scm": "1.41.0", "@theia/scm": "1.57.0",
"@theia/search-in-workspace": "1.41.0", "@theia/search-in-workspace": "1.57.0",
"@theia/terminal": "1.41.0", "@theia/terminal": "1.57.0",
"@theia/typehierarchy": "1.41.0", "@theia/test": "1.57.0",
"@theia/workspace": "1.41.0", "@theia/typehierarchy": "1.57.0",
"@theia/workspace": "1.57.0",
"@tippyjs/react": "^4.2.5", "@tippyjs/react": "^4.2.5",
"@types/auth0-js": "^9.21.3", "@types/auth0-js": "^9.21.3",
"@types/btoa": "^1.2.3", "@types/btoa": "^1.2.3",
@ -57,7 +58,6 @@
"@types/node-fetch": "^2.5.7", "@types/node-fetch": "^2.5.7",
"@types/p-queue": "^2.3.1", "@types/p-queue": "^2.3.1",
"@types/ps-tree": "^1.1.0", "@types/ps-tree": "^1.1.0",
"@types/react-tabs": "^2.3.2",
"@types/temp": "^0.8.34", "@types/temp": "^0.8.34",
"arduino-serial-plotter-webapp": "0.2.0", "arduino-serial-plotter-webapp": "0.2.0",
"async-mutex": "^0.3.0", "async-mutex": "^0.3.0",
@ -99,7 +99,7 @@
"react-markdown": "^8.0.0", "react-markdown": "^8.0.0",
"react-perfect-scrollbar": "^1.5.8", "react-perfect-scrollbar": "^1.5.8",
"react-select": "^5.6.0", "react-select": "^5.6.0",
"react-tabs": "^3.1.2", "react-tabs": "^6.1.0",
"react-window": "^1.8.6", "react-window": "^1.8.6",
"semver": "^7.3.2", "semver": "^7.3.2",
"string-natural-compare": "^2.0.3", "string-natural-compare": "^2.0.3",
@ -126,7 +126,7 @@
"mockdate": "^3.0.5", "mockdate": "^3.0.5",
"moment": "^2.24.0", "moment": "^2.24.0",
"ncp": "^2.0.0", "ncp": "^2.0.0",
"rimraf": "^2.6.1" "rimraf": "^5.0.0"
}, },
"optionalDependencies": { "optionalDependencies": {
"@pingghost/protoc": "^1.0.2", "@pingghost/protoc": "^1.0.2",
@ -172,7 +172,7 @@
], ],
"arduino": { "arduino": {
"arduino-cli": { "arduino-cli": {
"version": "1.1.1" "version": "1.2.0"
}, },
"arduino-fwuploader": { "arduino-fwuploader": {
"version": "2.4.1" "version": "2.4.1"

View File

@ -1,7 +1,7 @@
import { ColorContribution } from '@theia/core/lib/browser/color-application-contribution'; import { ColorContribution } from '@theia/core/lib/browser/color-application-contribution';
import { ColorRegistry } from '@theia/core/lib/browser/color-registry'; import { ColorRegistry } from '@theia/core/lib/browser/color-registry';
import { CommonMenus } from '@theia/core/lib/browser/common-frontend-contribution'; import { CommonMenus } from '@theia/core/lib/browser/common-frontend-contribution';
import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application'; import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application-contribution';
import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state'; import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state';
import { import {
TabBarToolbarContribution, TabBarToolbarContribution,

View File

@ -1,18 +1,12 @@
import '../../src/browser/style/index.css'; import '../../src/browser/style/index.css';
import { import { Container, ContainerModule } from '@theia/core/shared/inversify';
Container,
ContainerModule,
interfaces,
} from '@theia/core/shared/inversify';
import { WidgetFactory } from '@theia/core/lib/browser/widget-manager'; import { WidgetFactory } from '@theia/core/lib/browser/widget-manager';
import { CommandContribution } from '@theia/core/lib/common/command'; import { CommandContribution } from '@theia/core/lib/common/command';
import { bindViewContribution } from '@theia/core/lib/browser/shell/view-contribution'; import { bindViewContribution } from '@theia/core/lib/browser/shell/view-contribution';
import { TabBarToolbarContribution } from '@theia/core/lib/browser/shell/tab-bar-toolbar'; import { TabBarToolbarContribution } from '@theia/core/lib/browser/shell/tab-bar-toolbar';
import { WebSocketConnectionProvider } from '@theia/core/lib/browser/messaging/ws-connection-provider'; import { WebSocketConnectionProvider } from '@theia/core/lib/browser/messaging/ws-connection-provider';
import { import { FrontendApplication as TheiaFrontendApplication } from '@theia/core/lib/browser/frontend-application';
FrontendApplicationContribution, import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application-contribution';
FrontendApplication as TheiaFrontendApplication,
} from '@theia/core/lib/browser/frontend-application';
import { LibraryListWidget } from './library/library-list-widget'; import { LibraryListWidget } from './library/library-list-widget';
import { ArduinoFrontendContribution } from './arduino-frontend-contribution'; import { ArduinoFrontendContribution } from './arduino-frontend-contribution';
import { import {
@ -57,8 +51,6 @@ import {
DockPanelRenderer as TheiaDockPanelRenderer, DockPanelRenderer as TheiaDockPanelRenderer,
TabBarRendererFactory, TabBarRendererFactory,
ContextMenuRenderer, ContextMenuRenderer,
createTreeContainer,
TreeWidget,
} from '@theia/core/lib/browser'; } from '@theia/core/lib/browser';
import { MenuContribution } from '@theia/core/lib/common/menu'; import { MenuContribution } from '@theia/core/lib/common/menu';
import { import {
@ -97,7 +89,6 @@ import {
ArduinoDaemonPath, ArduinoDaemonPath,
ArduinoDaemon, ArduinoDaemon,
} from '../common/protocol/arduino-daemon'; } from '../common/protocol/arduino-daemon';
import { EditorCommandContribution as TheiaEditorCommandContribution } from '@theia/editor/lib/browser';
import { import {
FrontendConnectionStatusService, FrontendConnectionStatusService,
ApplicationConnectionStatusContribution, ApplicationConnectionStatusContribution,
@ -186,7 +177,6 @@ import {
import { About } from './contributions/about'; import { About } from './contributions/about';
import { IconThemeService } from '@theia/core/lib/browser/icon-theme-service'; import { IconThemeService } from '@theia/core/lib/browser/icon-theme-service';
import { TabBarRenderer } from './theia/core/tab-bars'; import { TabBarRenderer } from './theia/core/tab-bars';
import { EditorCommandContribution } from './theia/editor/editor-command';
import { NavigatorTabBarDecorator as TheiaNavigatorTabBarDecorator } from '@theia/navigator/lib/browser/navigator-tab-bar-decorator'; import { NavigatorTabBarDecorator as TheiaNavigatorTabBarDecorator } from '@theia/navigator/lib/browser/navigator-tab-bar-decorator';
import { NavigatorTabBarDecorator } from './theia/navigator/navigator-tab-bar-decorator'; import { NavigatorTabBarDecorator } from './theia/navigator/navigator-tab-bar-decorator';
import { Debug, DebugDisabledStatusMessageSource } from './contributions/debug'; import { Debug, DebugDisabledStatusMessageSource } from './contributions/debug';
@ -275,7 +265,7 @@ import {
IDEUpdaterDialog, IDEUpdaterDialog,
IDEUpdaterDialogProps, IDEUpdaterDialogProps,
} from './dialogs/ide-updater/ide-updater-dialog'; } from './dialogs/ide-updater/ide-updater-dialog';
import { ElectronIpcConnectionProvider } from '@theia/core/lib/electron-browser/messaging/electron-ipc-connection-provider'; import { ElectronIpcConnectionProvider } from '@theia/core/lib/electron-browser/messaging/electron-ipc-connection-source';
import { MonitorModel } from './monitor-model'; import { MonitorModel } from './monitor-model';
import { MonitorManagerProxyClientImpl } from './monitor-manager-proxy-client-impl'; import { MonitorManagerProxyClientImpl } from './monitor-manager-proxy-client-impl';
import { EditorManager as TheiaEditorManager } from '@theia/editor/lib/browser/editor-manager'; import { EditorManager as TheiaEditorManager } from '@theia/editor/lib/browser/editor-manager';
@ -295,10 +285,6 @@ import { PreferenceTreeGenerator } from './theia/preferences/preference-tree-gen
import { PreferenceTreeGenerator as TheiaPreferenceTreeGenerator } from '@theia/preferences/lib/browser/util/preference-tree-generator'; import { PreferenceTreeGenerator as TheiaPreferenceTreeGenerator } from '@theia/preferences/lib/browser/util/preference-tree-generator';
import { AboutDialog } from './theia/core/about-dialog'; import { AboutDialog } from './theia/core/about-dialog';
import { AboutDialog as TheiaAboutDialog } from '@theia/core/lib/browser/about-dialog'; import { AboutDialog as TheiaAboutDialog } from '@theia/core/lib/browser/about-dialog';
import {
SurveyNotificationService,
SurveyNotificationServicePath,
} from '../common/protocol/survey-service';
import { WindowContribution } from './theia/core/window-contribution'; import { WindowContribution } from './theia/core/window-contribution';
import { WindowContribution as TheiaWindowContribution } from '@theia/core/lib/browser/window-contribution'; import { WindowContribution as TheiaWindowContribution } from '@theia/core/lib/browser/window-contribution';
import { CoreErrorHandler } from './contributions/core-error-handler'; import { CoreErrorHandler } from './contributions/core-error-handler';
@ -381,19 +367,13 @@ import { DebugSessionWidget } from '@theia/debug/lib/browser/view/debug-session-
import { DebugConfigurationWidget } from './theia/debug/debug-configuration-widget'; import { DebugConfigurationWidget } from './theia/debug/debug-configuration-widget';
import { DebugConfigurationWidget as TheiaDebugConfigurationWidget } from '@theia/debug/lib/browser/view/debug-configuration-widget'; import { DebugConfigurationWidget as TheiaDebugConfigurationWidget } from '@theia/debug/lib/browser/view/debug-configuration-widget';
import { DebugToolBar } from '@theia/debug/lib/browser/view/debug-toolbar-widget'; import { DebugToolBar } from '@theia/debug/lib/browser/view/debug-toolbar-widget';
import {
PluginTree,
PluginTreeModel,
TreeViewWidgetOptions,
VIEW_ITEM_CONTEXT_MENU,
} from '@theia/plugin-ext/lib/main/browser/view/tree-view-widget';
import { TreeViewDecoratorService } from '@theia/plugin-ext/lib/main/browser/view/tree-view-decorator-service';
import { PLUGIN_VIEW_DATA_FACTORY_ID } from '@theia/plugin-ext/lib/main/browser/view/plugin-view-registry';
import { TreeViewWidget } from './theia/plugin-ext/tree-view-widget';
import { import {
VersionWelcomeDialog, VersionWelcomeDialog,
VersionWelcomeDialogProps, VersionWelcomeDialogProps,
} from './dialogs/version-welcome-dialog'; } from './dialogs/version-welcome-dialog';
import { TestViewContribution as TheiaTestViewContribution } from '@theia/test/lib/browser/view/test-view-contribution';
import { TestViewContribution } from './theia/test/test-view-contribution';
// Hack to fix copy/cut/paste issue after electron version update in Theia. // Hack to fix copy/cut/paste issue after electron version update in Theia.
// https://github.com/eclipse-theia/theia/issues/12487 // https://github.com/eclipse-theia/theia/issues/12487
@ -574,15 +554,6 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
WorkspaceVariableContribution WorkspaceVariableContribution
); );
bind(SurveyNotificationService)
.toDynamicValue((context) => {
return ElectronIpcConnectionProvider.createProxy(
context.container,
SurveyNotificationServicePath
);
})
.inSingletonScope();
// Layout and shell customizations. // Layout and shell customizations.
rebind(TheiaOutlineViewContribution) rebind(TheiaOutlineViewContribution)
.to(OutlineViewContribution) .to(OutlineViewContribution)
@ -856,13 +827,6 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
); );
}); });
// Workaround for https://github.com/eclipse-theia/theia/issues/8722
// Do not trigger a save on IDE startup if `"editor.autoSave": "on"` was set as a preference.
// Note: `"editor.autoSave" was renamed to `"files.autoSave" and `"on"` was replaced with three
// different cases, but we treat `!== 'off'` as auto save enabled. (https://github.com/eclipse-theia/theia/issues/10812)
bind(EditorCommandContribution).toSelf().inSingletonScope();
rebind(TheiaEditorCommandContribution).toService(EditorCommandContribution);
// Silent the badge decoration in the Explorer view. // Silent the badge decoration in the Explorer view.
bind(NavigatorTabBarDecorator).toSelf().inSingletonScope(); bind(NavigatorTabBarDecorator).toSelf().inSingletonScope();
rebind(TheiaNavigatorTabBarDecorator).toService(NavigatorTabBarDecorator); rebind(TheiaNavigatorTabBarDecorator).toService(NavigatorTabBarDecorator);
@ -1112,42 +1076,7 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
TerminalFrontendContribution TerminalFrontendContribution
); );
bindViewsWelcome_TheiaGH14309({ bind, widget: TreeViewWidget }); // Hides the Test Explorer from the side-bar
bind(TestViewContribution).toSelf().inSingletonScope();
rebind(TheiaTestViewContribution).toService(TestViewContribution);
}); });
// Align the viewsWelcome rendering with VS Code (https://github.com/eclipse-theia/theia/issues/14309)
// Copied from Theia code but with customized TreeViewWidget with the customized viewsWelcome rendering
// https://github.com/eclipse-theia/theia/blob/0c5f69455d9ee355b1a7ca510ffa63d2b20f0c77/packages/plugin-ext/src/main/browser/plugin-ext-frontend-module.ts#L159-L181
function bindViewsWelcome_TheiaGH14309({
bind,
widget,
}: {
bind: interfaces.Bind;
widget: interfaces.Newable<TreeWidget>;
}) {
bind(WidgetFactory)
.toDynamicValue(({ container }) => ({
id: PLUGIN_VIEW_DATA_FACTORY_ID,
createWidget: (options: TreeViewWidgetOptions) => {
const props = {
contextMenuPath: VIEW_ITEM_CONTEXT_MENU,
expandOnlyOnExpansionToggleClick: true,
expansionTogglePadding: 22,
globalSelection: true,
leftPadding: 8,
search: true,
multiSelect: options.multiSelect,
};
const child = createTreeContainer(container, {
props,
tree: PluginTree,
model: PluginTreeModel,
widget,
decoratorService: TreeViewDecoratorService,
});
child.bind(TreeViewWidgetOptions).toConstantValue(options);
return child.get(TreeWidget);
},
}))
.inSingletonScope();
}

View File

@ -280,14 +280,6 @@ const properties: ArduinoPreferenceSchemaProperties = {
), ),
default: 'https://auth.arduino.cc/login#/register', default: 'https://auth.arduino.cc/login#/register',
}, },
'arduino.survey.notification': {
type: 'boolean',
description: nls.localize(
'arduino/preferences/survey.notification',
'True if users should be notified if a survey is available. True by default.'
),
default: true,
},
'arduino.cli.daemon.debug': { 'arduino.cli.daemon.debug': {
type: 'boolean', type: 'boolean',
description: nls.localize( description: nls.localize(
@ -355,7 +347,6 @@ export interface ArduinoConfiguration {
'arduino.auth.domain': string; 'arduino.auth.domain': string;
'arduino.auth.audience': string; 'arduino.auth.audience': string;
'arduino.auth.registerUri': string; 'arduino.auth.registerUri': string;
'arduino.survey.notification': boolean;
'arduino.cli.daemon.debug': boolean; 'arduino.cli.daemon.debug': boolean;
'arduino.sketch.inoBlueprint': string; 'arduino.sketch.inoBlueprint': string;
'arduino.checkForUpdates': boolean; 'arduino.checkForUpdates': boolean;

View File

@ -3,7 +3,7 @@ import { Emitter } from '@theia/core/lib/common/event';
import { JsonRpcProxy } from '@theia/core/lib/common/messaging/proxy-factory'; import { JsonRpcProxy } from '@theia/core/lib/common/messaging/proxy-factory';
import { WindowService } from '@theia/core/lib/browser/window/window-service'; import { WindowService } from '@theia/core/lib/browser/window/window-service';
import { DisposableCollection } from '@theia/core/lib/common/disposable'; import { DisposableCollection } from '@theia/core/lib/common/disposable';
import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application'; import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application-contribution';
import { import {
CommandRegistry, CommandRegistry,
CommandContribution, CommandContribution,

View File

@ -1,4 +1,4 @@
import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application'; import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application-contribution';
import { DisposableCollection } from '@theia/core/lib/common/disposable'; import { DisposableCollection } from '@theia/core/lib/common/disposable';
import { MessageService } from '@theia/core/lib/common/message-service'; import { MessageService } from '@theia/core/lib/common/message-service';
import { MessageType } from '@theia/core/lib/common/message-service-protocol'; import { MessageType } from '@theia/core/lib/common/message-service-protocol';

View File

@ -98,6 +98,7 @@ export class BoardsConfigDialog extends ReactDialog<BoardsConfigDialogState> {
} }
override async open( override async open(
disposeOnResolve = true,
params?: EditBoardsConfigActionParams params?: EditBoardsConfigActionParams
): Promise<BoardsConfig | undefined> { ): Promise<BoardsConfig | undefined> {
this._searchSet = undefined; this._searchSet = undefined;
@ -119,7 +120,7 @@ export class BoardsConfigDialog extends ReactDialog<BoardsConfigDialogState> {
this._searchSet = params.searchSet.slice(); this._searchSet = params.searchSet.slice();
} }
} }
return super.open(); return super.open(disposeOnResolve);
} }
protected override onAfterAttach(msg: Message): void { protected override onAfterAttach(msg: Message): void {

View File

@ -1,4 +1,4 @@
import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application'; import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application-contribution';
import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state'; import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state';
import { StorageService } from '@theia/core/lib/browser/storage-service'; import { StorageService } from '@theia/core/lib/browser/storage-service';
import type { import type {

View File

@ -1,4 +1,4 @@
import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application'; import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application-contribution';
import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state'; import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state';
import { StorageService } from '@theia/core/lib/browser/storage-service'; import { StorageService } from '@theia/core/lib/browser/storage-service';
import { import {

View File

@ -1,4 +1,4 @@
import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application'; import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application-contribution';
import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state'; import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state';
import { DisposableCollection } from '@theia/core/lib/common/disposable'; import { DisposableCollection } from '@theia/core/lib/common/disposable';
import { Emitter, Event } from '@theia/core/lib/common/event'; import { Emitter, Event } from '@theia/core/lib/common/event';

View File

@ -70,7 +70,7 @@ export class CheckForIDEUpdates extends Contribution {
SKIP_IDE_VERSION SKIP_IDE_VERSION
); );
if (versionToSkip === updateInfo.version) return; if (versionToSkip === updateInfo.version) return;
this.updaterDialog.open(updateInfo); this.updaterDialog.open(true, updateInfo);
}) })
.catch((e) => { .catch((e) => {
this.messageService.error( this.messageService.error(

View File

@ -1,8 +1,6 @@
import { Dialog } from '@theia/core/lib/browser/dialogs'; import { Dialog } from '@theia/core/lib/browser/dialogs';
import type { import type { FrontendApplication } from '@theia/core/lib/browser/frontend-application';
FrontendApplication, import type { OnWillStopAction } from '@theia/core/lib/browser/frontend-application-contribution';
OnWillStopAction,
} from '@theia/core/lib/browser/frontend-application';
import { ApplicationShell } from '@theia/core/lib/browser/shell/application-shell'; import { ApplicationShell } from '@theia/core/lib/browser/shell/application-shell';
import { nls } from '@theia/core/lib/common/nls'; import { nls } from '@theia/core/lib/common/nls';
import type { MaybePromise } from '@theia/core/lib/common/types'; import type { MaybePromise } from '@theia/core/lib/common/types';

View File

@ -779,7 +779,7 @@ export class CompilerErrors
return undefined; return undefined;
} else { } else {
return this.editorManager return this.editorManager
.getByUri(new URI(uriOrWidget)) .getByUri(new URI(uriOrWidget.toString()))
.then((editor) => { .then((editor) => {
if (editor) { if (editor) {
return this.monacoEditor(editor); return this.monacoEditor(editor);

View File

@ -1,8 +1,6 @@
import { ClipboardService } from '@theia/core/lib/browser/clipboard-service'; import { ClipboardService } from '@theia/core/lib/browser/clipboard-service';
import { import { FrontendApplication } from '@theia/core/lib/browser/frontend-application';
FrontendApplication, import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application-contribution';
FrontendApplicationContribution,
} from '@theia/core/lib/browser/frontend-application';
import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state'; import { FrontendApplicationStateService } from '@theia/core/lib/browser/frontend-application-state';
import { import {
KeybindingContribution, KeybindingContribution,

View File

@ -1,7 +1,11 @@
import { nls } from '@theia/core/lib/common';
import { inject, injectable } from '@theia/core/shared/inversify'; import { inject, injectable } from '@theia/core/shared/inversify';
import { CommonCommands } from '@theia/core/lib/browser/common-frontend-contribution'; import { CommonCommands } from '@theia/core/lib/browser/common-frontend-contribution';
import { ClipboardService } from '@theia/core/lib/browser/clipboard-service'; import { ClipboardService } from '@theia/core/lib/browser/clipboard-service';
import { MonacoEditorService } from '@theia/monaco/lib/browser/monaco-editor-service'; import { StandaloneServices } from '@theia/monaco-editor-core/esm/vs/editor/standalone/browser/standaloneServices';
import { ICodeEditorService } from '@theia/monaco-editor-core/esm/vs/editor/browser/services/codeEditorService';
import type { ICodeEditor } from '@theia/monaco-editor-core/esm/vs/editor/browser/editorBrowser';
import type { StandaloneCodeEditor } from '@theia/monaco-editor-core/esm/vs/editor/standalone/browser/standaloneCodeEditor';
import { import {
Contribution, Contribution,
Command, Command,
@ -10,17 +14,11 @@ import {
CommandRegistry, CommandRegistry,
} from './contribution'; } from './contribution';
import { ArduinoMenus } from '../menu/arduino-menus'; import { ArduinoMenus } from '../menu/arduino-menus';
import { nls } from '@theia/core/lib/common';
import type { ICodeEditor } from '@theia/monaco-editor-core/esm/vs/editor/browser/editorBrowser';
import type { StandaloneCodeEditor } from '@theia/monaco-editor-core/esm/vs/editor/standalone/browser/standaloneCodeEditor';
// TODO: [macOS]: to remove `Start Dictation...` and `Emoji & Symbol` see this thread: https://github.com/electron/electron/issues/8283#issuecomment-269522072 // TODO: [macOS]: to remove `Start Dictation...` and `Emoji & Symbol` see this thread: https://github.com/electron/electron/issues/8283#issuecomment-269522072
// Depends on https://github.com/eclipse-theia/theia/pull/7964 // Depends on https://github.com/eclipse-theia/theia/pull/7964
@injectable() @injectable()
export class EditContributions extends Contribution { export class EditContributions extends Contribution {
@inject(MonacoEditorService)
private readonly codeEditorService: MonacoEditorService;
@inject(ClipboardService) @inject(ClipboardService)
private readonly clipboardService: ClipboardService; private readonly clipboardService: ClipboardService;
@ -208,9 +206,10 @@ ${value}
protected async current(): Promise< protected async current(): Promise<
ICodeEditor | StandaloneCodeEditor | undefined ICodeEditor | StandaloneCodeEditor | undefined
> { > {
const codeEditorService = StandaloneServices.get(ICodeEditorService);
return ( return (
this.codeEditorService.getFocusedCodeEditor() || codeEditorService.getFocusedCodeEditor() ||
this.codeEditorService.getActiveCodeEditor() || codeEditorService.getActiveCodeEditor() ||
undefined undefined
); );
} }

View File

@ -12,7 +12,7 @@ export class OpenBoardsConfig extends Contribution {
override registerCommands(registry: CommandRegistry): void { override registerCommands(registry: CommandRegistry): void {
registry.registerCommand(OpenBoardsConfig.Commands.OPEN_DIALOG, { registry.registerCommand(OpenBoardsConfig.Commands.OPEN_DIALOG, {
execute: async (params?: EditBoardsConfigActionParams) => execute: async (params?: EditBoardsConfigActionParams) =>
this.boardsConfigDialog.open(params), this.boardsConfigDialog.open(true, params),
}); });
} }
} }

View File

@ -1,78 +0,0 @@
import { MessageService } from '@theia/core';
import { FrontendApplicationContribution } from '@theia/core/lib/browser';
import { inject, injectable } from '@theia/core/shared/inversify';
import { LocalStorageService } from '@theia/core/lib/browser';
import { nls } from '@theia/core/lib/common';
import { WindowService } from '@theia/core/lib/browser/window/window-service';
import { ArduinoPreferences } from '../arduino-preferences';
import { SurveyNotificationService } from '../../common/protocol/survey-service';
const SURVEY_MESSAGE = nls.localize(
'arduino/survey/surveyMessage',
'Please help us improve by answering this super short survey. We value our community and would like to get to know our supporters a little better.'
);
const DO_NOT_SHOW_AGAIN = nls.localize(
'arduino/survey/dismissSurvey',
"Don't show again"
);
const GO_TO_SURVEY = nls.localize(
'arduino/survey/answerSurvey',
'Answer survey'
);
const SURVEY_BASE_URL = 'https://surveys.hotjar.com/';
const surveyId = '17887b40-e1f0-4bd6-b9f0-a37f229ccd8b';
@injectable()
export class SurveyNotification implements FrontendApplicationContribution {
@inject(MessageService)
private readonly messageService: MessageService;
@inject(LocalStorageService)
private readonly localStorageService: LocalStorageService;
@inject(WindowService)
private readonly windowService: WindowService;
@inject(ArduinoPreferences)
private readonly arduinoPreferences: ArduinoPreferences;
@inject(SurveyNotificationService)
private readonly surveyNotificationService: SurveyNotificationService;
onStart(): void {
this.arduinoPreferences.ready.then(async () => {
if (
(await this.surveyNotificationService.isFirstInstance()) &&
this.arduinoPreferences.get('arduino.survey.notification')
) {
const surveyAnswered = await this.localStorageService.getData(
this.surveyKey(surveyId)
);
if (surveyAnswered !== undefined) {
return;
}
const answer = await this.messageService.info(
SURVEY_MESSAGE,
DO_NOT_SHOW_AGAIN,
GO_TO_SURVEY
);
switch (answer) {
case GO_TO_SURVEY:
this.windowService.openNewWindow(SURVEY_BASE_URL + surveyId, {
external: true,
});
this.localStorageService.setData(this.surveyKey(surveyId), true);
break;
case DO_NOT_SHOW_AGAIN:
this.localStorageService.setData(this.surveyKey(surveyId), false);
break;
}
}
});
}
private surveyKey(id: string): string {
return `answered_survey:${id}`;
}
}

View File

@ -1,4 +1,4 @@
import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application'; import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application-contribution';
import { DisposableCollection } from '@theia/core/lib/common/disposable'; import { DisposableCollection } from '@theia/core/lib/common/disposable';
import { Emitter, Event } from '@theia/core/lib/common/event'; import { Emitter, Event } from '@theia/core/lib/common/event';
import URI from '@theia/core/lib/common/uri'; import URI from '@theia/core/lib/common/uri';

View File

@ -5,7 +5,7 @@ import {
Disposable, Disposable,
DisposableCollection, DisposableCollection,
} from '@theia/core/lib/common/disposable'; } from '@theia/core/lib/common/disposable';
import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application'; import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application-contribution';
import { import {
Stat, Stat,
FileType, FileType,

View File

@ -261,6 +261,7 @@ export class IDEUpdaterDialog extends ReactDialog<UpdateInfo | undefined> {
} }
override async open( override async open(
disposeOnResolve = true,
data: UpdateInfo | undefined = undefined data: UpdateInfo | undefined = undefined
): Promise<UpdateInfo | undefined> { ): Promise<UpdateInfo | undefined> {
if (data && data.version) { if (data && data.version) {
@ -271,7 +272,7 @@ export class IDEUpdaterDialog extends ReactDialog<UpdateInfo | undefined> {
error: undefined, error: undefined,
}); });
this.updateInfo = data; this.updateInfo = data;
return super.open(); return super.open(disposeOnResolve);
} }
} }

View File

@ -30,7 +30,7 @@ export class IDEUpdaterCommands implements CommandContribution {
try { try {
const updateInfo = await this.updater.checkForUpdates(initialCheck); const updateInfo = await this.updater.checkForUpdates(initialCheck);
if (!!updateInfo) { if (!!updateInfo) {
this.updaterDialog.open(updateInfo); this.updaterDialog.open(true, updateInfo);
} else { } else {
this.messageService.info( this.messageService.info(
nls.localize( nls.localize(

View File

@ -6,7 +6,7 @@ import {
import { Emitter } from '@theia/core/lib/common/event'; import { Emitter } from '@theia/core/lib/common/event';
import { JsonRpcProxy } from '@theia/core/lib/common/messaging/proxy-factory'; import { JsonRpcProxy } from '@theia/core/lib/common/messaging/proxy-factory';
import { DisposableCollection } from '@theia/core/lib/common/disposable'; import { DisposableCollection } from '@theia/core/lib/common/disposable';
import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application'; import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application-contribution';
import { import {
IndexUpdateDidCompleteParams, IndexUpdateDidCompleteParams,
IndexUpdateDidFailParams, IndexUpdateDidFailParams,

View File

@ -9,7 +9,7 @@ import {
Disposable, Disposable,
DisposableCollection, DisposableCollection,
} from '@theia/core/lib/common/disposable'; } from '@theia/core/lib/common/disposable';
import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application'; import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application-contribution';
import { Sketch, SketchesService } from '../common/protocol'; import { Sketch, SketchesService } from '../common/protocol';
import { ConfigServiceClient } from './config/config-service-client'; import { ConfigServiceClient } from './config/config-service-client';
import { import {
@ -74,6 +74,7 @@ export class SketchesServiceClientImpl
const sketchDirUri = this.configService.tryGetSketchDirUri(); const sketchDirUri = this.configService.tryGetSketchDirUri();
this.watchSketchbookDir(sketchDirUri); this.watchSketchbookDir(sketchDirUri);
const refreshCurrentSketch = async () => { const refreshCurrentSketch = async () => {
await this.workspaceService.ready;
const currentSketch = await this.loadCurrentSketch(); const currentSketch = await this.loadCurrentSketch();
const ideTempFolderUri = await this.getIdeTempFolderUriForSketch( const ideTempFolderUri = await this.getIdeTempFolderUriForSketch(
currentSketch currentSketch
@ -287,7 +288,7 @@ export class SketchesServiceClientImpl
* `true` if the `uri` is not contained in any of the opened workspaces. Otherwise, `false`. * `true` if the `uri` is not contained in any of the opened workspaces. Otherwise, `false`.
*/ */
isReadOnly(uri: URI | monaco.Uri | string): boolean { isReadOnly(uri: URI | monaco.Uri | string): boolean {
const toCheck = uri instanceof URI ? uri : new URI(uri); const toCheck = uri instanceof URI ? uri : new URI(uri.toString());
if (toCheck.scheme === 'user-storage') { if (toCheck.scheme === 'user-storage') {
return false; return false;
} }

View File

@ -98,16 +98,12 @@
color: var(--theia-textLink-foreground); color: var(--theia-textLink-foreground);
} }
.account-icon { img.arduino-account-picture {
width: var(--theia-private-sidebar-icon-size); width: var(--theia-private-sidebar-icon-size);
height: var(--theia-private-sidebar-icon-size); height: var(--theia-private-sidebar-icon-size);
border-radius: 50%;
overflow: hidden;
}
.account-icon > img {
max-width: 100%; max-width: 100%;
max-height: 100%; max-height: 100%;
border-radius: 50%;
} }
.connected-status-icon { .connected-status-icon {

View File

@ -13,6 +13,8 @@ import { MessageService } from '@theia/core/lib/common/message-service';
import { inject, injectable } from '@theia/core/shared/inversify'; import { inject, injectable } from '@theia/core/shared/inversify';
import { ApplicationConnectionStatusContribution } from './connection-status-service'; import { ApplicationConnectionStatusContribution } from './connection-status-service';
import { ToolbarAwareTabBar } from './tab-bars'; import { ToolbarAwareTabBar } from './tab-bars';
import { find } from '@theia/core/shared/@phosphor/algorithm';
import { OutputWidget } from '@theia/output/lib/browser/output-widget';
@injectable() @injectable()
export class ApplicationShell extends TheiaApplicationShell { export class ApplicationShell extends TheiaApplicationShell {
@ -48,6 +50,38 @@ export class ApplicationShell extends TheiaApplicationShell {
return super.addWidget(widget, { ...options, ref }); return super.addWidget(widget, { ...options, ref });
} }
override doRevealWidget(id: string): Widget | undefined {
let widget = find(this.mainPanel.widgets(), (w) => w.id === id);
if (!widget) {
widget = find(this.bottomPanel.widgets(), (w) => w.id === id);
if (widget) {
this.expandBottomPanel();
}
}
if (widget) {
const tabBar = this.getTabBarFor(widget);
if (tabBar) {
tabBar.currentTitle = widget.title;
}
}
if (!widget) {
widget = this.leftPanelHandler.expand(id);
}
if (!widget) {
widget = this.rightPanelHandler.expand(id);
}
if (widget) {
// Prevent focusing the output widget when is updated
// See https://github.com/arduino/arduino-ide/issues/2679
if (!(widget instanceof OutputWidget)) {
this.windowService.focus();
}
return widget;
} else {
return this.secondaryWindowHandler.revealWidget(id);
}
}
override handleEvent(): boolean { override handleEvent(): boolean {
// NOOP, dragging has been disabled // NOOP, dragging has been disabled
return false; return false;

View File

@ -2,7 +2,7 @@ import {
CommonCommands, CommonCommands,
CommonFrontendContribution as TheiaCommonFrontendContribution, CommonFrontendContribution as TheiaCommonFrontendContribution,
} from '@theia/core/lib/browser/common-frontend-contribution'; } from '@theia/core/lib/browser/common-frontend-contribution';
import type { OnWillStopAction } from '@theia/core/lib/browser/frontend-application'; import type { OnWillStopAction } from '@theia/core/lib/browser/frontend-application-contribution';
import type { KeybindingRegistry } from '@theia/core/lib/browser/keybinding'; import type { KeybindingRegistry } from '@theia/core/lib/browser/keybinding';
import type { CommandRegistry } from '@theia/core/lib/common/command'; import type { CommandRegistry } from '@theia/core/lib/common/command';
import type { MenuModelRegistry } from '@theia/core/lib/common/menu'; import type { MenuModelRegistry } from '@theia/core/lib/common/menu';

View File

@ -1,10 +1,10 @@
import { import {
ApplicationConnectionStatusContribution as TheiaApplicationConnectionStatusContribution,
ConnectionStatus, ConnectionStatus,
ApplicationConnectionStatusContribution as TheiaApplicationConnectionStatusContribution,
FrontendConnectionStatusService as TheiaFrontendConnectionStatusService, FrontendConnectionStatusService as TheiaFrontendConnectionStatusService,
} from '@theia/core/lib/browser/connection-status-service'; } from '@theia/core/lib/browser/connection-status-service';
import type { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application'; import type { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application-contribution';
import { WebSocketConnectionProvider } from '@theia/core/lib/browser/index'; import { WebSocketConnectionSource } from '@theia/core/lib/browser/messaging/ws-connection-source';
import { StatusBarAlignment } from '@theia/core/lib/browser/status-bar/status-bar'; import { StatusBarAlignment } from '@theia/core/lib/browser/status-bar/status-bar';
import { Disposable } from '@theia/core/lib/common/disposable'; import { Disposable } from '@theia/core/lib/common/disposable';
import { Emitter, Event } from '@theia/core/lib/common/event'; import { Emitter, Event } from '@theia/core/lib/common/event';
@ -114,8 +114,8 @@ export class FrontendConnectionStatusService extends TheiaFrontendConnectionStat
private readonly daemonPort: DaemonPort; private readonly daemonPort: DaemonPort;
@inject(IsOnline) @inject(IsOnline)
private readonly isOnline: IsOnline; private readonly isOnline: IsOnline;
@inject(WebSocketConnectionProvider) @inject(WebSocketConnectionSource)
private readonly connectionProvider: WebSocketConnectionProvider; private readonly connectionSource: WebSocketConnectionSource;
@postConstruct() @postConstruct()
protected override init(): void { protected override init(): void {
@ -128,7 +128,7 @@ export class FrontendConnectionStatusService extends TheiaFrontendConnectionStat
} }
protected override async performPingRequest(): Promise<void> { protected override async performPingRequest(): Promise<void> {
if (!this.connectionProvider['socket'].connected) { if (!this.connectionSource['socket'].connected) {
this.updateStatus(false); this.updateStatus(false);
return; return;
} }
@ -171,8 +171,8 @@ export class ApplicationConnectionStatusContribution extends TheiaApplicationCon
private readonly notificationManager: NotificationManager; private readonly notificationManager: NotificationManager;
@inject(CreateFeatures) @inject(CreateFeatures)
private readonly createFeatures: CreateFeatures; private readonly createFeatures: CreateFeatures;
@inject(WebSocketConnectionProvider) @inject(WebSocketConnectionSource)
private readonly connectionProvider: WebSocketConnectionProvider; private readonly connectionSource: WebSocketConnectionSource;
private readonly offlineStatusDidChangeEmitter = new Emitter< private readonly offlineStatusDidChangeEmitter = new Emitter<
OfflineConnectionStatus | undefined OfflineConnectionStatus | undefined
@ -202,7 +202,7 @@ export class ApplicationConnectionStatusContribution extends TheiaApplicationCon
const params = <OfflineMessageParams>{ const params = <OfflineMessageParams>{
port: this.daemonPort.port, port: this.daemonPort.port,
online: this.isOnline.online, online: this.isOnline.online,
backendConnected: this.connectionProvider['socket'].connected, // https://github.com/arduino/arduino-ide/issues/2081 backendConnected: this.connectionSource['socket'].connected, // https://github.com/arduino/arduino-ide/issues/2081
}; };
this._offlineStatus = offlineConnectionStatusType(params); this._offlineStatus = offlineConnectionStatusType(params);
const { text, tooltip } = offlineMessage(params); const { text, tooltip } = offlineMessage(params);

View File

@ -1,5 +1,5 @@
import { SidebarBottomMenuWidget as TheiaSidebarBottomMenuWidget } from '@theia/core/lib/browser/shell/sidebar-bottom-menu-widget'; import { SidebarBottomMenuWidget as TheiaSidebarBottomMenuWidget } from '@theia/core/lib/browser/shell/sidebar-bottom-menu-widget';
import type { SidebarMenu } from '@theia/core/lib/browser/shell/sidebar-menu-widget'; import type { SidebarMenuItem } from '@theia/core/lib/browser/shell/sidebar-menu-widget';
import type { MenuPath } from '@theia/core/lib/common/menu'; import type { MenuPath } from '@theia/core/lib/common/menu';
import { nls } from '@theia/core/lib/common/nls'; import { nls } from '@theia/core/lib/common/nls';
import { import {
@ -46,46 +46,45 @@ export class SidebarBottomMenuWidget extends TheiaSidebarBottomMenuWidget {
this.contextMenuRenderer.render(options); this.contextMenuRenderer.render(options);
} }
protected override render(): React.ReactNode { override renderItem(item: SidebarMenuItem): React.ReactNode {
return (
<React.Fragment>
{this.menus.map((menu) => this.renderMenu(menu))}
</React.Fragment>
);
}
private renderMenu(menu: SidebarMenu): React.ReactNode {
// Removes the _Settings_ (cog) icon from the left sidebar // Removes the _Settings_ (cog) icon from the left sidebar
if (menu.id === 'settings-menu') { if (item.menu.id === 'settings-menu') {
return undefined; return undefined;
} }
const arduinoAccount = menu.id === accountMenu.id; const arduinoAccount = item.menu.id === accountMenu.id;
const picture = const arduinoAccountPicture =
arduinoAccount && arduinoAccount &&
this.connectionStatue.offlineStatus !== 'internet' && this.connectionStatue.offlineStatus !== 'internet' &&
this.createFeatures.session?.account.picture; this.createFeatures.session?.account.picture;
const className = typeof picture === 'string' ? undefined : menu.iconClass;
return ( return (
<i <div
key={menu.id} key={item.menu.id}
className={className} className="theia-sidebar-menu-item"
title={menu.title} title={item.menu.title}
onClick={(e) => this.onClick(e, menu.menuPath)} onClick={(e) => this.onClick(e, item.menu.menuPath)}
onMouseDown={this.onMouseDown} onMouseDown={this.onMouseDown}
onMouseEnter={(e) => this.onMouseEnter(e, item.menu.title)}
onMouseOut={this.onMouseOut} onMouseOut={this.onMouseOut}
> >
{picture && ( {arduinoAccountPicture ? (
<div className="account-icon"> <i>
<img <img
src={picture} className="arduino-account-picture"
src={arduinoAccountPicture}
alt={nls.localize( alt={nls.localize(
'arduino/cloud/profilePicture', 'arduino/cloud/profilePicture',
'Profile picture' 'Profile picture'
)} )}
/> />
</div>
)}
</i> </i>
) : (
<i className={item.menu.iconClass} />
)}
{item.badge && (
<div className="theia-badge-decorator-sidebar">{item.badge}</div>
)}
</div>
); );
} }
} }

View File

@ -1,6 +1,7 @@
import { injectable } from '@theia/core/shared/inversify'; import { injectable } from '@theia/core/shared/inversify';
import { DebugSessionConnection } from '@theia/debug/lib/browser/debug-session-connection'; import { DebugSessionConnection } from '@theia/debug/lib/browser/debug-session-connection';
import { DefaultDebugSessionFactory as TheiaDefaultDebugSessionFactory } from '@theia/debug/lib/browser/debug-session-contribution'; import { DefaultDebugSessionFactory as TheiaDefaultDebugSessionFactory } from '@theia/debug/lib/browser/debug-session-contribution';
import { DebugSessionManager } from '@theia/debug/lib/browser/debug-session-manager';
import { DebugConfigurationSessionOptions } from '@theia/debug/lib/browser/debug-session-options'; import { DebugConfigurationSessionOptions } from '@theia/debug/lib/browser/debug-session-options';
import { import {
DebugAdapterPath, DebugAdapterPath,
@ -12,6 +13,7 @@ import { DebugSession } from './debug-session';
@injectable() @injectable()
export class DefaultDebugSessionFactory extends TheiaDefaultDebugSessionFactory { export class DefaultDebugSessionFactory extends TheiaDefaultDebugSessionFactory {
override get( override get(
manager: DebugSessionManager,
sessionId: string, sessionId: string,
options: DebugConfigurationSessionOptions, options: DebugConfigurationSessionOptions,
parentSession?: DebugSession parentSession?: DebugSession
@ -20,12 +22,12 @@ export class DefaultDebugSessionFactory extends TheiaDefaultDebugSessionFactory
sessionId, sessionId,
() => () =>
new Promise<DebugChannel>((resolve) => new Promise<DebugChannel>((resolve) =>
this.connectionProvider.openChannel( this.connectionProvider.listen(
`${DebugAdapterPath}/${sessionId}`, `${DebugAdapterPath}/${sessionId}`,
(wsChannel) => { (_, wsChannel) => {
resolve(new ForwardingDebugChannel(wsChannel)); resolve(new ForwardingDebugChannel(wsChannel));
}, },
{ reconnecting: false } false
) )
), ),
this.getTraceOutputChannel() this.getTraceOutputChannel()
@ -35,6 +37,9 @@ export class DefaultDebugSessionFactory extends TheiaDefaultDebugSessionFactory
sessionId, sessionId,
options, options,
parentSession, parentSession,
this.testService,
options.testRun,
manager,
connection, connection,
this.terminalService, this.terminalService,
this.editorManager, this.editorManager,

View File

@ -1,21 +0,0 @@
import { injectable, postConstruct } from '@theia/core/shared/inversify';
import { EditorCommandContribution as TheiaEditorCommandContribution } from '@theia/editor/lib/browser/editor-command';
@injectable()
export class EditorCommandContribution extends TheiaEditorCommandContribution {
@postConstruct()
protected override init(): void {
// Workaround for https://github.com/eclipse-theia/theia/issues/8722.
this.editorPreferences.onPreferenceChanged(
({ preferenceName, newValue, oldValue }) => {
if (preferenceName === 'files.autoSave') {
const autoSaveWasOnBeforeChange = !oldValue || oldValue !== 'off';
const autoSaveIsOnAfterChange = !newValue || newValue !== 'off';
if (!autoSaveWasOnBeforeChange && autoSaveIsOnAfterChange) {
this.shell.saveAll();
}
}
}
);
}
}

View File

@ -1,19 +1,18 @@
import { injectable } from '@theia/core/shared/inversify'; import { injectable } from '@theia/core/shared/inversify';
import { TextEditor } from '@theia/editor/lib/browser';
import { EditorContribution as TheiaEditorContribution } from '@theia/editor/lib/browser/editor-contribution'; import { EditorContribution as TheiaEditorContribution } from '@theia/editor/lib/browser/editor-contribution';
@injectable() @injectable()
export class EditorContribution extends TheiaEditorContribution { export class EditorContribution extends TheiaEditorContribution {
protected override updateLanguageStatus( protected override updateLanguageStatus(
// eslint-disable-next-line @typescript-eslint/no-unused-vars, unused-imports/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars
editor: TextEditor | undefined ..._: Parameters<TheiaEditorContribution['updateLanguageStatus']>
): void { ): void {
// NOOP // NOOP
} }
protected override updateEncodingStatus( protected override updateEncodingStatus(
// eslint-disable-next-line @typescript-eslint/no-unused-vars, unused-imports/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars
editor: TextEditor | undefined ..._: Parameters<TheiaEditorContribution['updateEncodingStatus']>
): void { ): void {
// https://github.com/arduino/arduino-ide/issues/1393 // https://github.com/arduino/arduino-ide/issues/1393
// NOOP // NOOP

View File

@ -36,7 +36,7 @@ export class FileResourceResolver extends TheiaFileResourceResolver {
); );
} }
return new WriteQueuedFileResource(uri, this.fileService, { return new WriteQueuedFileResource(uri, this.fileService, {
isReadonly: stat?.isReadonly ?? false, readOnly: stat?.isReadonly ?? false,
shouldOverwrite: () => this.shouldOverwrite(uri), shouldOverwrite: () => this.shouldOverwrite(uri),
shouldOpenAsText: (error) => this.shouldOpenAsText(uri, error), shouldOpenAsText: (error) => this.shouldOpenAsText(uri, error),
}); });

View File

@ -117,7 +117,7 @@ export function maybeUpdateReadOnlyState(
const model = editor.document; const model = editor.document;
const oldReadOnly = model.readOnly; const oldReadOnly = model.readOnly;
const resource = model['resource']; const resource = model['resource'];
const newReadOnly = Boolean(resource.isReadonly) || isReadOnly(resource.uri); const newReadOnly = Boolean(resource.readOnly) || isReadOnly(resource.uri);
if (oldReadOnly !== newReadOnly) { if (oldReadOnly !== newReadOnly) {
editor.getControl().updateOptions({ readOnly: newReadOnly }); editor.getControl().updateOptions({ readOnly: newReadOnly });
if (newReadOnly) { if (newReadOnly) {

View File

@ -20,7 +20,7 @@ export class MonacoTextModelService extends TheiaMonacoTextModelService {
.getContributions() .getContributions()
.find(({ scheme }) => resource.uri.scheme === scheme); .find(({ scheme }) => resource.uri.scheme === scheme);
const readOnly = const readOnly =
Boolean(resource.isReadonly) || Boolean(resource.readOnly) ||
this.sketchesServiceClient.isReadOnly(resource.uri); this.sketchesServiceClient.isReadOnly(resource.uri);
return factory return factory
? factory.createModel(resource) ? factory.createModel(resource)

View File

@ -1,4 +1,4 @@
import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application'; import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application-contribution';
import { ThemeService } from '@theia/core/lib/browser/theming'; import { ThemeService } from '@theia/core/lib/browser/theming';
import { import {
Disposable, Disposable,

View File

@ -1,11 +1,9 @@
import { DisposableCollection } from '@theia/core/lib/common/disposable'; import type { DisposableCollection } from '@theia/core/lib/common/disposable';
import { Emitter, Event } from '@theia/core/lib/common/event'; import { Emitter, Event } from '@theia/core/lib/common/event';
import { injectable, interfaces } from '@theia/core/shared/inversify'; import { injectable, interfaces } from '@theia/core/shared/inversify';
import { import { HostedPluginSupport as TheiaHostedPluginSupport } from '@theia/plugin-ext/lib/hosted/browser/hosted-plugin';
PluginContributions, import type { PluginContributions } from '@theia/plugin-ext/lib/hosted/common/hosted-plugin';
HostedPluginSupport as TheiaHostedPluginSupport, import type { HostedPluginSupport } from '../../hosted/hosted-plugin-support';
} from '@theia/plugin-ext/lib/hosted/browser/hosted-plugin';
import { HostedPluginSupport } from '../../hosted/hosted-plugin-support';
@injectable() @injectable()
export class HostedPluginSupportImpl export class HostedPluginSupportImpl

View File

@ -1,241 +0,0 @@
import { LabelIcon } from '@theia/core/lib/browser/label-parser';
import { OpenerService, open } from '@theia/core/lib/browser/opener-service';
import { codicon } from '@theia/core/lib/browser/widgets/widget';
import { DisposableCollection } from '@theia/core/lib/common/disposable';
import { URI } from '@theia/core/lib/common/uri';
import { inject, injectable } from '@theia/core/shared/inversify';
import React from '@theia/core/shared/react';
import { URI as CodeUri } from '@theia/core/shared/vscode-uri';
import { TreeViewWidget as TheiaTreeViewWidget } from '@theia/plugin-ext/lib/main/browser/view/tree-view-widget';
// Copied back from https://github.com/eclipse-theia/theia/pull/14391
// Remove the patching when Arduino uses Eclipse Theia >1.55.0
// https://github.com/eclipse-theia/theia/blob/8d3c5a11af65448b6700bedd096f8d68f0675541/packages/core/src/browser/tree/tree-view-welcome-widget.tsx#L37-L54
// https://github.com/eclipse-theia/theia/blob/8d3c5a11af65448b6700bedd096f8d68f0675541/packages/core/src/browser/tree/tree-view-welcome-widget.tsx#L146-L298
interface ViewWelcome {
readonly view: string;
readonly content: string;
readonly when?: string;
readonly enablement?: string;
readonly order: number;
}
export interface IItem {
readonly welcomeInfo: ViewWelcome;
visible: boolean;
}
export interface ILink {
readonly label: string;
readonly href: string;
readonly title?: string;
}
type LinkedTextItem = string | ILink;
@injectable()
export class TreeViewWidget extends TheiaTreeViewWidget {
@inject(OpenerService)
private readonly openerService: OpenerService;
private readonly toDisposeBeforeUpdateViewWelcomeNodes =
new DisposableCollection();
protected override updateViewWelcomeNodes(): void {
this.viewWelcomeNodes = [];
this.toDisposeBeforeUpdateViewWelcomeNodes.dispose();
const items = this.visibleItems.sort((a, b) => a.order - b.order);
const enablementKeys: Set<string>[] = [];
// the plugin-view-registry will push the changes when there is a change in the `when` prop which controls the visibility
// this listener is to update the enablement of the components in the view welcome
this.toDisposeBeforeUpdateViewWelcomeNodes.push(
this.contextService.onDidChange((event) => {
if (enablementKeys.some((keys) => event.affects(keys))) {
this.updateViewWelcomeNodes();
this.update();
}
})
);
// Note: VS Code does not support the `renderSecondaryButtons` prop in welcome content either.
for (const item of items) {
const { content } = item;
const enablement = isEnablementAware(item) ? item.enablement : undefined;
const itemEnablementKeys = enablement
? this.contextService.parseKeys(enablement)
: undefined;
if (itemEnablementKeys) {
enablementKeys.push(itemEnablementKeys);
}
const lines = content.split('\n');
for (let line of lines) {
line = line.trim();
if (!line) {
continue;
}
const linkedTextItems = this.parseLinkedText_patch14309(line);
if (
linkedTextItems.length === 1 &&
typeof linkedTextItems[0] !== 'string'
) {
const node = linkedTextItems[0];
this.viewWelcomeNodes.push(
this.renderButtonNode_patch14309(
node,
this.viewWelcomeNodes.length,
enablement
)
);
} else {
const renderNode = (item: LinkedTextItem, index: number) =>
typeof item == 'string'
? this.renderTextNode_patch14309(item, index)
: this.renderLinkNode_patch14309(item, index, enablement);
this.viewWelcomeNodes.push(
<p key={`p-${this.viewWelcomeNodes.length}`}>
{...linkedTextItems.flatMap(renderNode)}
</p>
);
}
}
}
}
private renderButtonNode_patch14309(
node: ILink,
lineKey: string | number,
enablement: string | undefined
): React.ReactNode {
return (
<div key={`line-${lineKey}`} className="theia-WelcomeViewButtonWrapper">
<button
title={node.title}
className="theia-button theia-WelcomeViewButton"
disabled={!this.isEnabledClick_patch14309(enablement)}
onClick={(e) => this.openLinkOrCommand_patch14309(e, node.href)}
>
{node.label}
</button>
</div>
);
}
private renderTextNode_patch14309(
node: string,
textKey: string | number
): React.ReactNode {
return (
<span key={`text-${textKey}`}>
{this.labelParser
.parse(node)
.map((segment, index) =>
LabelIcon.is(segment) ? (
<span key={index} className={codicon(segment.name)} />
) : (
<span key={index}>{segment}</span>
)
)}
</span>
);
}
private renderLinkNode_patch14309(
node: ILink,
linkKey: string | number,
enablement: string | undefined
): React.ReactNode {
return (
<a
key={`link-${linkKey}`}
className={this.getLinkClassName_patch14309(node.href, enablement)}
title={node.title || ''}
onClick={(e) => this.openLinkOrCommand_patch14309(e, node.href)}
>
{node.label}
</a>
);
}
private getLinkClassName_patch14309(
href: string,
enablement: string | undefined
): string {
const classNames = ['theia-WelcomeViewCommandLink'];
// Only command-backed links can be disabled. All other, https:, file: remain enabled
if (
href.startsWith('command:') &&
!this.isEnabledClick_patch14309(enablement)
) {
classNames.push('disabled');
}
return classNames.join(' ');
}
private isEnabledClick_patch14309(enablement: string | undefined): boolean {
return typeof enablement === 'string'
? this.contextService.match(enablement)
: true;
}
private openLinkOrCommand_patch14309 = (
event: React.MouseEvent,
value: string
): void => {
event.stopPropagation();
if (value.startsWith('command:')) {
const command = value.replace('command:', '');
this.commands.executeCommand(command);
} else if (value.startsWith('file:')) {
const uri = value.replace('file:', '');
open(this.openerService, new URI(CodeUri.file(uri).toString()));
} else {
this.windowService.openNewWindow(value, { external: true });
}
};
private parseLinkedText_patch14309(text: string): LinkedTextItem[] {
const result: LinkedTextItem[] = [];
const linkRegex =
/\[([^\]]+)\]\(((?:https?:\/\/|command:|file:)[^\)\s]+)(?: (["'])(.+?)(\3))?\)/gi;
let index = 0;
let match: RegExpExecArray | null;
while ((match = linkRegex.exec(text))) {
if (match.index - index > 0) {
result.push(text.substring(index, match.index));
}
const [, label, href, , title] = match;
if (title) {
result.push({ label, href, title });
} else {
result.push({ label, href });
}
index = match.index + match[0].length;
}
if (index < text.length) {
result.push(text.substring(index));
}
return result;
}
}
interface EnablementAware {
readonly enablement: string | undefined;
}
function isEnablementAware(arg: unknown): arg is EnablementAware {
return !!arg && typeof arg === 'object' && 'enablement' in arg;
}

View File

@ -0,0 +1,9 @@
import { TestViewContribution as TheiaTestViewContribution } from '@theia/test/lib/browser/view/test-view-contribution';
import { injectable } from 'inversify';
@injectable()
export class TestViewContribution extends TheiaTestViewContribution {
override async initializeLayout(): Promise<void> {
// NOOP
}
}

View File

@ -4,6 +4,7 @@ import {
TabBarToolbarRegistry, TabBarToolbarRegistry,
TabBarToolbarItem, TabBarToolbarItem,
ReactTabBarToolbarItem, ReactTabBarToolbarItem,
RenderedToolbarItem,
} from '@theia/core/lib/browser/shell/tab-bar-toolbar'; } from '@theia/core/lib/browser/shell/tab-bar-toolbar';
import { CommandRegistry } from '@theia/core/lib/common/command'; import { CommandRegistry } from '@theia/core/lib/common/command';
import { ReactWidget } from '@theia/core/lib/browser'; import { ReactWidget } from '@theia/core/lib/browser';
@ -14,7 +15,7 @@ export const ARDUINO_TOOLBAR_ITEM_CLASS = 'arduino-tool-item';
export namespace ArduinoToolbarComponent { export namespace ArduinoToolbarComponent {
export interface Props { export interface Props {
side: 'left' | 'right'; side: 'left' | 'right';
items: (TabBarToolbarItem | ReactTabBarToolbarItem)[]; items: TabBarToolbarItem[];
commands: CommandRegistry; commands: CommandRegistry;
labelParser: LabelParser; labelParser: LabelParser;
commandIsEnabled: (id: string) => boolean; commandIsEnabled: (id: string) => boolean;
@ -34,7 +35,7 @@ export class ArduinoToolbarComponent extends React.Component<
this.state = { tooltip: '' }; this.state = { tooltip: '' };
} }
protected renderItem = (item: TabBarToolbarItem) => { protected renderItem = (item: RenderedToolbarItem) => {
let innerText = ''; let innerText = '';
let className = `arduino-tool-icon ${item.id}-icon`; let className = `arduino-tool-icon ${item.id}-icon`;
if (item.text) { if (item.text) {
@ -46,7 +47,8 @@ export class ArduinoToolbarComponent extends React.Component<
} }
} }
} }
const command = this.props.commands.getCommand(item.command); const command =
item.command && this.props.commands.getCommand(item.command);
const cls = `${ARDUINO_TOOLBAR_ITEM_CLASS} ${ const cls = `${ARDUINO_TOOLBAR_ITEM_CLASS} ${
TabBarToolbar.Styles.TAB_BAR_TOOLBAR_ITEM TabBarToolbar.Styles.TAB_BAR_TOOLBAR_ITEM
} ${command && this.props.commandIsEnabled(command.id) ? 'enabled' : ''} ${ } ${command && this.props.commandIsEnabled(command.id) ? 'enabled' : ''} ${
@ -80,7 +82,9 @@ export class ArduinoToolbarComponent extends React.Component<
const items = [ const items = [
<React.Fragment key={this.props.side + '-arduino-toolbar-tooltip'}> <React.Fragment key={this.props.side + '-arduino-toolbar-tooltip'}>
{[...this.props.items].map((item) => {[...this.props.items].map((item) =>
TabBarToolbarItem.is(item) ? this.renderItem(item) : item.render() ReactTabBarToolbarItem.is(item)
? item.render()
: this.renderItem(item)
)} )}
</React.Fragment>, </React.Fragment>,
]; ];
@ -94,10 +98,7 @@ export class ArduinoToolbarComponent extends React.Component<
} }
export class ArduinoToolbar extends ReactWidget { export class ArduinoToolbar extends ReactWidget {
protected items = new Map< protected items = new Map<string, TabBarToolbarItem>();
string,
TabBarToolbarItem | ReactTabBarToolbarItem
>();
constructor( constructor(
protected readonly tabBarToolbarRegistry: TabBarToolbarRegistry, protected readonly tabBarToolbarRegistry: TabBarToolbarRegistry,
@ -112,9 +113,7 @@ export class ArduinoToolbar extends ReactWidget {
this.tabBarToolbarRegistry.onDidChange(() => this.updateToolbar()); this.tabBarToolbarRegistry.onDidChange(() => this.updateToolbar());
} }
protected updateItems( protected updateItems(items: Array<TabBarToolbarItem>): void {
items: Array<TabBarToolbarItem | ReactTabBarToolbarItem>
): void {
this.items.clear(); this.items.clear();
const revItems = items const revItems = items
.sort(TabBarToolbarItem.PRIORITY_COMPARATOR) .sort(TabBarToolbarItem.PRIORITY_COMPARATOR)
@ -163,7 +162,7 @@ export class ArduinoToolbar extends ReactWidget {
protected executeCommand = (e: React.MouseEvent<HTMLElement>) => { protected executeCommand = (e: React.MouseEvent<HTMLElement>) => {
const item = this.items.get(e.currentTarget.id); const item = this.items.get(e.currentTarget.id);
if (TabBarToolbarItem.is(item)) { if (item && item.command) {
this.commands.executeCommand(item.command, this, e.target); this.commands.executeCommand(item.command, this, e.target);
} }
}; };

View File

@ -1,4 +1,4 @@
import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application'; import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application-contribution';
import { import {
OpenerOptions, OpenerOptions,
OpenHandler, OpenHandler,

View File

@ -3,7 +3,7 @@ import { CommandRegistry } from '@theia/core/lib/common/command';
import { MenuModelRegistry } from '@theia/core/lib/common/menu'; import { MenuModelRegistry } from '@theia/core/lib/common/menu';
import { PreferenceService } from '@theia/core/lib/browser/preferences/preference-service'; import { PreferenceService } from '@theia/core/lib/browser/preferences/preference-service';
import { AbstractViewContribution } from '@theia/core/lib/browser/shell/view-contribution'; import { AbstractViewContribution } from '@theia/core/lib/browser/shell/view-contribution';
import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application'; import { FrontendApplicationContribution } from '@theia/core/lib/browser/frontend-application-contribution';
import { MainMenuManager } from '../../../common/main-menu-manager'; import { MainMenuManager } from '../../../common/main-menu-manager';
import { ArduinoPreferences } from '../../arduino-preferences'; import { ArduinoPreferences } from '../../arduino-preferences';
import { SketchbookWidget } from './sketchbook-widget'; import { SketchbookWidget } from './sketchbook-widget';

View File

@ -1,7 +0,0 @@
export const SurveyNotificationServicePath =
'/services/survey-notification-service';
export const SurveyNotificationService = Symbol('SurveyNotificationService');
export interface SurveyNotificationService {
isFirstInstance(): Promise<boolean>;
}

View File

@ -38,3 +38,26 @@ export function uint8ArrayToString(uint8Array: Uint8Array): string {
export function stringToUint8Array(text: string): Uint8Array { export function stringToUint8Array(text: string): Uint8Array {
return Uint8Array.from(text, (char) => char.charCodeAt(0)); return Uint8Array.from(text, (char) => char.charCodeAt(0));
} }
export function poolWhile(
whileCondition: () => boolean,
intervalMs: number,
timeoutMs: number
): Promise<void> {
return new Promise((resolve, reject) => {
if (!whileCondition) {
resolve();
}
const start = Date.now();
const interval = setInterval(() => {
if (!whileCondition()) {
clearInterval(interval);
resolve();
} else if (Date.now() - start > timeoutMs) {
clearInterval(interval);
reject(new Error('Timed out while polling.'));
}
}, intervalMs);
});
}

View File

@ -38,33 +38,33 @@ export class ElectronMainMenuFactory extends TheiaElectronMainMenuFactory {
this.preferencesService.onPreferenceChanged( this.preferencesService.onPreferenceChanged(
debounce((e) => { debounce((e) => {
if (e.preferenceName === 'window.menuBarVisibility') { if (e.preferenceName === 'window.menuBarVisibility') {
this.setMenuBar(); this.doSetMenuBar();
} }
if (this._menu) { if (this.menu) {
for (const cmd of this._toggledCommands) { for (const cmd of this.toggledCommands) {
const menuItem = this.findMenuById(this._menu, cmd); const menuItem = this.findMenuById(this.menu, cmd);
if (menuItem) { if (menuItem) {
menuItem.checked = this.commandRegistry.isToggled(cmd); menuItem.checked = this.commandRegistry.isToggled(cmd);
} }
} }
window.electronArduino.setMenu(this._menu); // calls the IDE2-specific implementation window.electronArduino.setMenu(this.menu); // calls the IDE2-specific implementation
} }
}, 10) }, 10)
); );
this.keybindingRegistry.onKeybindingsChanged(() => { this.keybindingRegistry.onKeybindingsChanged(() => {
this.setMenuBar(); this.doSetMenuBar();
}); });
// #endregion Theia `postConstruct` // #endregion Theia `postConstruct`
this.appStateService.reachedState('ready').then(() => { this.appStateService.reachedState('ready').then(() => {
this.appReady = true; this.appReady = true;
if (this.updateWhenReady) { if (this.updateWhenReady) {
this.setMenuBar(); this.doSetMenuBar();
} }
}); });
} }
override createElectronMenuBar(): MenuDto[] { override createElectronMenuBar(): MenuDto[] {
this._toggledCommands.clear(); // https://github.com/eclipse-theia/theia/issues/8977 this.toggledCommands.clear(); // https://github.com/eclipse-theia/theia/issues/8977
const menuModel = this.menuProvider.getMenu(MAIN_MENU_BAR); const menuModel = this.menuProvider.getMenu(MAIN_MENU_BAR);
const menu = this.fillMenuTemplate([], menuModel, [], { const menu = this.fillMenuTemplate([], menuModel, [], {
rootMenuPath: MAIN_MENU_BAR, rootMenuPath: MAIN_MENU_BAR,
@ -73,11 +73,11 @@ export class ElectronMainMenuFactory extends TheiaElectronMainMenuFactory {
menu.unshift(this.createOSXMenu()); menu.unshift(this.createOSXMenu());
} }
const escapedMenu = this.escapeAmpersand(menu); const escapedMenu = this.escapeAmpersand(menu);
this._menu = escapedMenu; this.menu = escapedMenu;
return escapedMenu; return escapedMenu;
} }
override async setMenuBar(): Promise<void> { override async doSetMenuBar(): Promise<void> {
// Avoid updating menu items when the app is not ready. // Avoid updating menu items when the app is not ready.
// Getting the current electron window is not free and synchronous. // Getting the current electron window is not free and synchronous.
// Here, we defer all menu update requests, and fire one when the app is ready. // Here, we defer all menu update requests, and fire one when the app is ready.
@ -124,17 +124,17 @@ export class ElectronMainMenuFactory extends TheiaElectronMainMenuFactory {
...args ...args
); );
if ( if (
this._menu && this.menu &&
this.menuCommandExecutor.isVisible(menuPath, commandId, ...args) this.menuCommandExecutor.isVisible(menuPath, commandId, ...args)
) { ) {
const item = this.findMenuById(this._menu, commandId); const item = this.findMenuById(this.menu, commandId);
if (item) { if (item) {
item.checked = this.menuCommandExecutor.isToggled( item.checked = this.menuCommandExecutor.isToggled(
menuPath, menuPath,
commandId, commandId,
...args ...args
); );
window.electronArduino.setMenu(this._menu); // overridden to call the IDE2-specific implementation. window.electronArduino.setMenu(this.menu); // overridden to call the IDE2-specific implementation.
} }
} }
} }
@ -342,7 +342,7 @@ export class ElectronMainMenuFactory extends TheiaElectronMainMenuFactory {
parentItems.push(menuItem); parentItems.push(menuItem);
if (this.commandRegistry.getToggledHandler(commandId, ...args)) { if (this.commandRegistry.getToggledHandler(commandId, ...args)) {
this._toggledCommands.add(commandId); this.toggledCommands.add(commandId);
} }
} }
return parentItems; return parentItems;

View File

@ -7,6 +7,7 @@ import {
hasStartupTasks, hasStartupTasks,
StartupTasks, StartupTasks,
} from '../../../electron-common/startup-task'; } from '../../../electron-common/startup-task';
import { WindowReloadOptions } from '@theia/core/lib/browser/window/window-service';
@injectable() @injectable()
export class ElectronWindowService export class ElectronWindowService
@ -17,8 +18,12 @@ export class ElectronWindowService
@postConstruct() @postConstruct()
protected override init(): void { protected override init(): void {
// NOOP // Overridden to avoid calling the zoom level listener in super.
// IDE2 listens on the zoom level changes in `ArduinoFrontendContribution#onStart` // IDE2 listens on the zoom level changes in `ArduinoFrontendContribution#onStart`
window.electronTheiaCore.onAboutToClose(() => {
this.connectionCloseService.markForClose(this.frontendIdProvider.getId());
});
} }
async isFirstWindow(): Promise<boolean> { async isFirstWindow(): Promise<boolean> {
@ -38,11 +43,11 @@ export class ElectronWindowService
} }
// Overridden to support optional task owner params and make `tsc` happy. // Overridden to support optional task owner params and make `tsc` happy.
override reload(options?: StartupTasks): void { override reload(options?: StartupTasks | WindowReloadOptions): void {
if (hasStartupTasks(options)) { if (hasStartupTasks(options)) {
window.electronArduino.requestReload(options); window.electronArduino.requestReload(options);
} else { } else {
window.electronTheiaCore.requestReload(); super.reload(options);
} }
} }

View File

@ -1,10 +1,10 @@
import { JsonRpcConnectionHandler } from '@theia/core/lib/common/messaging/proxy-factory'; import { ElectronConnectionHandler } from '@theia/core/lib/electron-main/messaging/electron-connection-handler';
import { RpcConnectionHandler } from '@theia/core/lib/common/messaging/proxy-factory';
import { ElectronMainWindowService } from '@theia/core/lib/electron-common/electron-main-window-service'; import { ElectronMainWindowService } from '@theia/core/lib/electron-common/electron-main-window-service';
import { ElectronConnectionHandler } from '@theia/core/lib/electron-common/messaging/electron-connection-handler';
import { TheiaMainApi } from '@theia/core/lib/electron-main/electron-api-main'; import { TheiaMainApi } from '@theia/core/lib/electron-main/electron-api-main';
import { import {
ElectronMainApplication as TheiaElectronMainApplication,
ElectronMainApplicationContribution, ElectronMainApplicationContribution,
ElectronMainApplication as TheiaElectronMainApplication,
} from '@theia/core/lib/electron-main/electron-main-application'; } from '@theia/core/lib/electron-main/electron-main-application';
import { TheiaElectronWindow as DefaultTheiaElectronWindow } from '@theia/core/lib/electron-main/theia-electron-window'; import { TheiaElectronWindow as DefaultTheiaElectronWindow } from '@theia/core/lib/electron-main/theia-electron-window';
import { ContainerModule } from '@theia/core/shared/inversify'; import { ContainerModule } from '@theia/core/shared/inversify';
@ -36,15 +36,12 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
bind(ElectronConnectionHandler) bind(ElectronConnectionHandler)
.toDynamicValue( .toDynamicValue(
(context) => (context) =>
new JsonRpcConnectionHandler<IDEUpdaterClient>( new RpcConnectionHandler<IDEUpdaterClient>(IDEUpdaterPath, (client) => {
IDEUpdaterPath,
(client) => {
const server = context.container.get<IDEUpdater>(IDEUpdater); const server = context.container.get<IDEUpdater>(IDEUpdater);
server.setClient(client); server.setClient(client);
client.onDidCloseConnection(() => server.disconnectClient(client)); client.onDidCloseConnection(() => server.disconnectClient(client));
return server; return server;
} })
)
) )
.inSingletonScope(); .inSingletonScope();

View File

@ -11,16 +11,16 @@ import {
Disposable, Disposable,
DisposableCollection, DisposableCollection,
} from '@theia/core/lib/common/disposable'; } from '@theia/core/lib/common/disposable';
import { FileUri } from '@theia/core/lib/common/file-uri';
import { isOSX } from '@theia/core/lib/common/os'; import { isOSX } from '@theia/core/lib/common/os';
import { Deferred } from '@theia/core/lib/common/promise-util'; import { Deferred } from '@theia/core/lib/common/promise-util';
import { isObject, MaybePromise, Mutable } from '@theia/core/lib/common/types'; import { isObject, MaybePromise, Mutable } from '@theia/core/lib/common/types';
import { ElectronSecurityToken } from '@theia/core/lib/electron-common/electron-token'; import { ElectronSecurityToken } from '@theia/core/lib/electron-common/electron-token';
import { import {
ElectronMainExecutionParams, ElectronMainCommandOptions,
ElectronMainApplication as TheiaElectronMainApplication, ElectronMainApplication as TheiaElectronMainApplication,
} from '@theia/core/lib/electron-main/electron-main-application'; } from '@theia/core/lib/electron-main/electron-main-application';
import type { TheiaBrowserWindowOptions } from '@theia/core/lib/electron-main/theia-electron-window'; import type { TheiaBrowserWindowOptions } from '@theia/core/lib/electron-main/theia-electron-window';
import { FileUri } from '@theia/core/lib/node/file-uri';
import { inject, injectable } from '@theia/core/shared/inversify'; import { inject, injectable } from '@theia/core/shared/inversify';
import { URI } from '@theia/core/shared/vscode-uri'; import { URI } from '@theia/core/shared/vscode-uri';
import { log as logToFile, setup as setupFileLog } from 'node-log-rotate'; import { log as logToFile, setup as setupFileLog } from 'node-log-rotate';
@ -28,7 +28,9 @@ import { fork } from 'node:child_process';
import { promises as fs, readFileSync, rm, rmSync } from 'node:fs'; import { promises as fs, readFileSync, rm, rmSync } from 'node:fs';
import type { AddressInfo } from 'node:net'; import type { AddressInfo } from 'node:net';
import { isAbsolute, join, resolve } from 'node:path'; import { isAbsolute, join, resolve } from 'node:path';
import type { Argv } from 'yargs';
import { Sketch } from '../../common/protocol'; import { Sketch } from '../../common/protocol';
import { poolWhile } from '../../common/utils';
import { import {
AppInfo, AppInfo,
appInfoPropertyLiterals, appInfoPropertyLiterals,
@ -129,6 +131,11 @@ const APP_STARTED_WITH_CONTENT_TRACE =
typeof process !== 'undefined' && typeof process !== 'undefined' &&
process.argv.indexOf('--content-trace') !== -1; process.argv.indexOf('--content-trace') !== -1;
const createYargs: (
argv?: string[],
cwd?: string
) => Argv = require('yargs/yargs');
@injectable() @injectable()
export class ElectronMainApplication extends TheiaElectronMainApplication { export class ElectronMainApplication extends TheiaElectronMainApplication {
@inject(IsTempSketch) @inject(IsTempSketch)
@ -171,6 +178,26 @@ export class ElectronMainApplication extends TheiaElectronMainApplication {
private readonly scheduledDeletions: Disposable[] = []; private readonly scheduledDeletions: Disposable[] = [];
override async start(config: FrontendApplicationConfig): Promise<void> { override async start(config: FrontendApplicationConfig): Promise<void> {
createYargs(this.argv, process.cwd())
.command(
'$0 [file]',
false,
(cmd) =>
cmd
.option('electronUserData', {
type: 'string',
describe:
'The area where the electron main process puts its data',
})
.positional('file', { type: 'string' }),
async (args) => {
if (args.electronUserData) {
console.info(
`using electron user data area : '${args.electronUserData}'`
);
await fs.mkdir(args.electronUserData, { recursive: true });
app.setPath('userData', args.electronUserData);
}
// Explicitly set the app name to have better menu items on macOS. ("About", "Hide", and "Quit") // Explicitly set the app name to have better menu items on macOS. ("About", "Hide", and "Quit")
// See: https://github.com/electron-userland/electron-builder/issues/2468 // See: https://github.com/electron-userland/electron-builder/issues/2468
// Regression in Theia: https://github.com/eclipse-theia/theia/issues/8701 // Regression in Theia: https://github.com/eclipse-theia/theia/issues/8701
@ -178,23 +205,33 @@ export class ElectronMainApplication extends TheiaElectronMainApplication {
app.on('ready', () => app.setName(config.applicationName)); app.on('ready', () => app.setName(config.applicationName));
const cwd = process.cwd(); const cwd = process.cwd();
this.attachFileAssociations(cwd); this.attachFileAssociations(cwd);
this.useNativeWindowFrame = this.getTitleBarStyle(config) === 'native'; this.useNativeWindowFrame =
this._config = await updateFrontendApplicationConfigFromPackageJson(config); this.getTitleBarStyle(config) === 'native';
this._config = await updateFrontendApplicationConfigFromPackageJson(
config
);
this._appInfo = updateAppInfo(this._appInfo, this._config); this._appInfo = updateAppInfo(this._appInfo, this._config);
this.hookApplicationEvents(); this.hookApplicationEvents();
const [port] = await Promise.all([this.startBackend(), app.whenReady()]); this.showInitialWindow(undefined);
const [port] = await Promise.all([
this.startBackend(),
app.whenReady(),
]);
this.startContentTracing(); this.startContentTracing();
this._backendPort.resolve(port); this._backendPort.resolve(port);
await Promise.all([ await Promise.all([
this.attachElectronSecurityToken(port), this.attachElectronSecurityToken(port),
this.startContributions(), this.startContributions(),
]); ]);
return this.launch({ this.handleMainCommand({
secondInstance: false, file: args.file,
argv: this.processArgv.getProcessArgvWithoutBin(process.argv),
cwd, cwd,
secondInstance: false,
}); });
} }
)
.parse();
}
private startContentTracing(): void { private startContentTracing(): void {
if (!APP_STARTED_WITH_CONTENT_TRACE) { if (!APP_STARTED_WITH_CONTENT_TRACE) {
@ -256,6 +293,16 @@ export class ElectronMainApplication extends TheiaElectronMainApplication {
); );
if (sketchFolderPath) { if (sketchFolderPath) {
this.openFilePromise.reject(new InterruptWorkspaceRestoreError()); this.openFilePromise.reject(new InterruptWorkspaceRestoreError());
// open-file event is triggered before the app is ready and initialWindow is created.
// Wait for initialWindow to be set before opening the sketch on the first instance.
// See https://github.com/arduino/arduino-ide/pull/2693
try {
await app.whenReady();
if (!this.firstWindowId) {
await poolWhile(() => !this.initialWindow, 100, 3000);
}
} catch {}
await this.openSketch(sketchFolderPath); await this.openSketch(sketchFolderPath);
} }
} }
@ -284,8 +331,8 @@ export class ElectronMainApplication extends TheiaElectronMainApplication {
} }
} }
protected override async launch( protected override async handleMainCommand(
params: ElectronMainExecutionParams options: ElectronMainCommandOptions
): Promise<void> { ): Promise<void> {
try { try {
// When running on MacOS, we either have to wait until // When running on MacOS, we either have to wait until
@ -300,7 +347,7 @@ export class ElectronMainApplication extends TheiaElectronMainApplication {
throw err; throw err;
} }
if (await this.launchFromArgs(params)) { if (await this.launchFromArgs(options)) {
// Application has received a file in its arguments and will skip the default application launch // Application has received a file in its arguments and will skip the default application launch
return; return;
} }
@ -314,7 +361,10 @@ export class ElectronMainApplication extends TheiaElectronMainApplication {
`Restoring workspace roots: ${workspaces.map(({ file }) => file)}` `Restoring workspace roots: ${workspaces.map(({ file }) => file)}`
); );
for (const workspace of workspaces) { for (const workspace of workspaces) {
const resolvedPath = await this.resolvePath(workspace.file, params.cwd); const resolvedPath = await this.resolvePath(
workspace.file,
options.cwd
);
if (!resolvedPath) { if (!resolvedPath) {
continue; continue;
} }
@ -337,15 +387,20 @@ export class ElectronMainApplication extends TheiaElectronMainApplication {
} }
this.startup = false; this.startup = false;
if (useDefault) { if (useDefault) {
super.launch(params); super.handleMainCommand(options);
} }
} }
private get argv(): string[] {
return this.processArgv.getProcessArgvWithoutBin(process.argv).slice();
}
private async launchFromArgs( private async launchFromArgs(
params: ElectronMainExecutionParams params: ElectronMainCommandOptions,
argv?: string[]
): Promise<boolean> { ): Promise<boolean> {
// Copy to prevent manipulation of original array // Copy to prevent manipulation of original array
const argCopy = [...params.argv]; const argCopy = [...(argv || this.argv)];
let path: string | undefined; let path: string | undefined;
for (const maybePath of argCopy) { for (const maybePath of argCopy) {
const resolvedPath = await this.resolvePath(maybePath, params.cwd); const resolvedPath = await this.resolvePath(maybePath, params.cwd);
@ -383,7 +438,7 @@ export class ElectronMainApplication extends TheiaElectronMainApplication {
} }
const [uri, electronWindow] = await Promise.all([ const [uri, electronWindow] = await Promise.all([
this.createWindowUri(), this.createWindowUri(),
this.createWindow(options), this.reuseOrCreateWindow(options),
]); ]);
electronWindow.loadURL(uri.withFragment(encodeURI(file)).toString(true)); electronWindow.loadURL(uri.withFragment(encodeURI(file)).toString(true));
return electronWindow; return electronWindow;
@ -483,7 +538,7 @@ export class ElectronMainApplication extends TheiaElectronMainApplication {
argv: string[], argv: string[],
cwd: string cwd: string
): Promise<void> { ): Promise<void> {
if (await this.launchFromArgs({ cwd, argv, secondInstance: true })) { if (await this.launchFromArgs({ cwd, secondInstance: true }, argv)) {
// Application has received a file in its arguments // Application has received a file in its arguments
return; return;
} }
@ -779,7 +834,7 @@ class InterruptWorkspaceRestoreError extends Error {
// but it's the `package.json` inside the `resources/app/` folder if it's the final bundled app. // but it's the `package.json` inside the `resources/app/` folder if it's the final bundled app.
// See https://github.com/arduino/arduino-ide/pull/2144#pullrequestreview-1556343430. // See https://github.com/arduino/arduino-ide/pull/2144#pullrequestreview-1556343430.
async function updateFrontendApplicationConfigFromPackageJson( async function updateFrontendApplicationConfigFromPackageJson(
config: FrontendApplicationConfig config: Mutable<FrontendApplicationConfig>
): Promise<FrontendApplicationConfig> { ): Promise<FrontendApplicationConfig> {
if (!isProductionMode) { if (!isProductionMode) {
console.debug( console.debug(
@ -846,7 +901,11 @@ const fallbackFrontendAppConfig: FrontendApplicationConfig = {
defaultIconTheme: 'none', defaultIconTheme: 'none',
validatePreferencesSchema: false, validatePreferencesSchema: false,
defaultLocale: '', defaultLocale: '',
electron: {}, electron: {
showWindowEarly: true,
uriScheme: 'arduino-ide',
},
reloadOnReconnect: true,
}; };
// When the package.json must go from `./lib/backend/electron-main.js` to `./package.json` when the app is webpacked. // When the package.json must go from `./lib/backend/electron-main.js` to `./package.json` when the app is webpacked.

View File

@ -8,7 +8,7 @@ import { ElectronArduinoRenderer } from '../electron-arduino';
@injectable() @injectable()
export class TheiaElectronWindow extends DefaultTheiaElectronWindow { export class TheiaElectronWindow extends DefaultTheiaElectronWindow {
protected override reload(args?: unknown): void { protected override reload(args?: unknown): void {
this.handleStopRequest(() => { this.handleStopRequest(async () => {
this.applicationState = 'init'; this.applicationState = 'init';
if (hasStartupTasks(args)) { if (hasStartupTasks(args)) {
const { webContents } = this._window; const { webContents } = this._window;

View File

@ -1,7 +1,7 @@
import { join } from 'node:path'; import { join } from 'node:path';
import { inject, injectable, named } from '@theia/core/shared/inversify'; import { inject, injectable, named } from '@theia/core/shared/inversify';
import { spawn, ChildProcess } from 'node:child_process'; import { spawn, ChildProcess } from 'node:child_process';
import { FileUri } from '@theia/core/lib/node/file-uri'; import { FileUri } from '@theia/core/lib/common/file-uri';
import { ILogger } from '@theia/core/lib/common/logger'; import { ILogger } from '@theia/core/lib/common/logger';
import { Deferred, retry } from '@theia/core/lib/common/promise-util'; import { Deferred, retry } from '@theia/core/lib/common/promise-util';
import { import {

View File

@ -105,14 +105,8 @@ import { ClangFormatter } from './clang-formatter';
import { FormatterPath } from '../common/protocol/formatter'; import { FormatterPath } from '../common/protocol/formatter';
import { HostedPluginLocalizationService } from './theia/plugin-ext/hosted-plugin-localization-service'; import { HostedPluginLocalizationService } from './theia/plugin-ext/hosted-plugin-localization-service';
import { HostedPluginLocalizationService as TheiaHostedPluginLocalizationService } from '@theia/plugin-ext/lib/hosted/node/hosted-plugin-localization-service'; import { HostedPluginLocalizationService as TheiaHostedPluginLocalizationService } from '@theia/plugin-ext/lib/hosted/node/hosted-plugin-localization-service';
import { SurveyNotificationServiceImpl } from './survey-service-impl';
import {
SurveyNotificationService,
SurveyNotificationServicePath,
} from '../common/protocol/survey-service';
import { IsTempSketch } from './is-temp-sketch'; import { IsTempSketch } from './is-temp-sketch';
import { rebindNsfwFileSystemWatcher } from './theia/filesystem/nsfw-bindings'; import { WebsocketEndpoint } from './theia/core/websocket-endpoint';
import { MessagingContribution } from './theia/core/messaging-contribution';
import { MessagingService } from '@theia/core/lib/node/messaging/messaging-service'; import { MessagingService } from '@theia/core/lib/node/messaging/messaging-service';
import { HostedPluginReader } from './theia/plugin-ext/plugin-reader'; import { HostedPluginReader } from './theia/plugin-ext/plugin-reader';
import { HostedPluginReader as TheiaHostedPluginReader } from '@theia/plugin-ext/lib/hosted/node/plugin-reader'; import { HostedPluginReader as TheiaHostedPluginReader } from '@theia/plugin-ext/lib/hosted/node/plugin-reader';
@ -126,6 +120,7 @@ import {
} from './theia/plugin-ext/plugin-deployer'; } from './theia/plugin-ext/plugin-deployer';
import { SettingsReader } from './settings-reader'; import { SettingsReader } from './settings-reader';
import { VsCodePluginScanner } from './theia/plugin-ext-vscode/scanner-vscode'; import { VsCodePluginScanner } from './theia/plugin-ext-vscode/scanner-vscode';
import { rebindParcelFileSystemWatcher } from './theia/filesystem/parcel-bindings';
export default new ContainerModule((bind, unbind, isBound, rebind) => { export default new ContainerModule((bind, unbind, isBound, rebind) => {
bind(BackendApplication).toSelf().inSingletonScope(); bind(BackendApplication).toSelf().inSingletonScope();
@ -305,7 +300,7 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
) )
) )
.inSingletonScope(); .inSingletonScope();
rebindNsfwFileSystemWatcher(rebind); rebindParcelFileSystemWatcher(rebind);
// Output service per connection. // Output service per connection.
bind(ConnectionContainerModule).toConstantValue( bind(ConnectionContainerModule).toConstantValue(
@ -383,23 +378,8 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
HostedPluginLocalizationService HostedPluginLocalizationService
); );
// Survey notification bindings
// It's currently unused. https://github.com/arduino/arduino-ide/pull/1150
bind(SurveyNotificationServiceImpl).toSelf().inSingletonScope();
bind(SurveyNotificationService).toService(SurveyNotificationServiceImpl);
bind(ConnectionHandler)
.toDynamicValue(
({ container }) =>
new JsonRpcConnectionHandler(SurveyNotificationServicePath, () =>
container.get<SurveyNotificationService>(SurveyNotificationService)
)
)
.inSingletonScope();
bind(IsTempSketch).toSelf().inSingletonScope(); bind(IsTempSketch).toSelf().inSingletonScope();
rebind(MessagingService.Identifier) rebind(MessagingService.Identifier).to(WebsocketEndpoint).inSingletonScope();
.to(MessagingContribution)
.inSingletonScope();
// Removed undesired contributions from VS Code extensions // Removed undesired contributions from VS Code extensions
// Such as the RTOS view from the `cortex-debug` extension // Such as the RTOS view from the `cortex-debug` extension

View File

@ -1,6 +1,6 @@
import { EnvVariablesServer } from '@theia/core/lib/common/env-variables'; import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
import { MaybePromise } from '@theia/core/lib/common/types'; import { MaybePromise } from '@theia/core/lib/common/types';
import { FileUri } from '@theia/core/lib/node/file-uri'; import { FileUri } from '@theia/core/lib/common/file-uri';
import { inject, injectable } from '@theia/core/shared/inversify'; import { inject, injectable } from '@theia/core/shared/inversify';
import { constants, promises as fs } from 'node:fs'; import { constants, promises as fs } from 'node:fs';
import { join } from 'node:path'; import { join } from 'node:path';

View File

@ -1,6 +1,6 @@
import { notEmpty } from '@theia/core/lib/common/objects'; import { notEmpty } from '@theia/core/lib/common/objects';
import { nls } from '@theia/core/lib/common/nls'; import { nls } from '@theia/core/lib/common/nls';
import { FileUri } from '@theia/core/lib/node/file-uri'; import { FileUri } from '@theia/core/lib/common/file-uri';
import { import {
Range, Range,
Position, Position,

View File

@ -360,6 +360,8 @@ export class BoardListRequest extends jspb.Message {
setTimeout(value: number): BoardListRequest; setTimeout(value: number): BoardListRequest;
getFqbn(): string; getFqbn(): string;
setFqbn(value: string): BoardListRequest; setFqbn(value: string): BoardListRequest;
getSkipCloudApiForBoardDetection(): boolean;
setSkipCloudApiForBoardDetection(value: boolean): BoardListRequest;
serializeBinary(): Uint8Array; serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): BoardListRequest.AsObject; toObject(includeInstance?: boolean): BoardListRequest.AsObject;
@ -376,6 +378,7 @@ export namespace BoardListRequest {
instance?: cc_arduino_cli_commands_v1_common_pb.Instance.AsObject, instance?: cc_arduino_cli_commands_v1_common_pb.Instance.AsObject,
timeout: number, timeout: number,
fqbn: string, fqbn: string,
skipCloudApiForBoardDetection: boolean,
} }
} }
@ -493,6 +496,8 @@ export class BoardListWatchRequest extends jspb.Message {
clearInstance(): void; clearInstance(): void;
getInstance(): cc_arduino_cli_commands_v1_common_pb.Instance | undefined; getInstance(): cc_arduino_cli_commands_v1_common_pb.Instance | undefined;
setInstance(value?: cc_arduino_cli_commands_v1_common_pb.Instance): BoardListWatchRequest; setInstance(value?: cc_arduino_cli_commands_v1_common_pb.Instance): BoardListWatchRequest;
getSkipCloudApiForBoardDetection(): boolean;
setSkipCloudApiForBoardDetection(value: boolean): BoardListWatchRequest;
serializeBinary(): Uint8Array; serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): BoardListWatchRequest.AsObject; toObject(includeInstance?: boolean): BoardListWatchRequest.AsObject;
@ -507,6 +512,7 @@ export class BoardListWatchRequest extends jspb.Message {
export namespace BoardListWatchRequest { export namespace BoardListWatchRequest {
export type AsObject = { export type AsObject = {
instance?: cc_arduino_cli_commands_v1_common_pb.Instance.AsObject, instance?: cc_arduino_cli_commands_v1_common_pb.Instance.AsObject,
skipCloudApiForBoardDetection: boolean,
} }
} }
@ -621,3 +627,56 @@ export namespace BoardSearchResponse {
boardsList: Array<BoardListItem.AsObject>, boardsList: Array<BoardListItem.AsObject>,
} }
} }
export class BoardIdentifyRequest extends jspb.Message {
hasInstance(): boolean;
clearInstance(): void;
getInstance(): cc_arduino_cli_commands_v1_common_pb.Instance | undefined;
setInstance(value?: cc_arduino_cli_commands_v1_common_pb.Instance): BoardIdentifyRequest;
getPropertiesMap(): jspb.Map<string, string>;
clearPropertiesMap(): void;
getUseCloudApiForUnknownBoardDetection(): boolean;
setUseCloudApiForUnknownBoardDetection(value: boolean): BoardIdentifyRequest;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): BoardIdentifyRequest.AsObject;
static toObject(includeInstance: boolean, msg: BoardIdentifyRequest): BoardIdentifyRequest.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: BoardIdentifyRequest, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): BoardIdentifyRequest;
static deserializeBinaryFromReader(message: BoardIdentifyRequest, reader: jspb.BinaryReader): BoardIdentifyRequest;
}
export namespace BoardIdentifyRequest {
export type AsObject = {
instance?: cc_arduino_cli_commands_v1_common_pb.Instance.AsObject,
propertiesMap: Array<[string, string]>,
useCloudApiForUnknownBoardDetection: boolean,
}
}
export class BoardIdentifyResponse extends jspb.Message {
clearBoardsList(): void;
getBoardsList(): Array<BoardListItem>;
setBoardsList(value: Array<BoardListItem>): BoardIdentifyResponse;
addBoards(value?: BoardListItem, index?: number): BoardListItem;
serializeBinary(): Uint8Array;
toObject(includeInstance?: boolean): BoardIdentifyResponse.AsObject;
static toObject(includeInstance: boolean, msg: BoardIdentifyResponse): BoardIdentifyResponse.AsObject;
static extensions: {[key: number]: jspb.ExtensionFieldInfo<jspb.Message>};
static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo<jspb.Message>};
static serializeBinaryToWriter(message: BoardIdentifyResponse, writer: jspb.BinaryWriter): void;
static deserializeBinary(bytes: Uint8Array): BoardIdentifyResponse;
static deserializeBinaryFromReader(message: BoardIdentifyResponse, reader: jspb.BinaryReader): BoardIdentifyResponse;
}
export namespace BoardIdentifyResponse {
export type AsObject = {
boardsList: Array<BoardListItem.AsObject>,
}
}

View File

@ -28,6 +28,8 @@ goog.object.extend(proto, cc_arduino_cli_commands_v1_port_pb);
goog.exportSymbol('proto.cc.arduino.cli.commands.v1.BoardDetailsRequest', null, global); goog.exportSymbol('proto.cc.arduino.cli.commands.v1.BoardDetailsRequest', null, global);
goog.exportSymbol('proto.cc.arduino.cli.commands.v1.BoardDetailsResponse', null, global); goog.exportSymbol('proto.cc.arduino.cli.commands.v1.BoardDetailsResponse', null, global);
goog.exportSymbol('proto.cc.arduino.cli.commands.v1.BoardIdentificationProperties', null, global); goog.exportSymbol('proto.cc.arduino.cli.commands.v1.BoardIdentificationProperties', null, global);
goog.exportSymbol('proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest', null, global);
goog.exportSymbol('proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse', null, global);
goog.exportSymbol('proto.cc.arduino.cli.commands.v1.BoardListAllRequest', null, global); goog.exportSymbol('proto.cc.arduino.cli.commands.v1.BoardListAllRequest', null, global);
goog.exportSymbol('proto.cc.arduino.cli.commands.v1.BoardListAllResponse', null, global); goog.exportSymbol('proto.cc.arduino.cli.commands.v1.BoardListAllResponse', null, global);
goog.exportSymbol('proto.cc.arduino.cli.commands.v1.BoardListItem', null, global); goog.exportSymbol('proto.cc.arduino.cli.commands.v1.BoardListItem', null, global);
@ -465,6 +467,48 @@ if (goog.DEBUG && !COMPILED) {
*/ */
proto.cc.arduino.cli.commands.v1.BoardSearchResponse.displayName = 'proto.cc.arduino.cli.commands.v1.BoardSearchResponse'; proto.cc.arduino.cli.commands.v1.BoardSearchResponse.displayName = 'proto.cc.arduino.cli.commands.v1.BoardSearchResponse';
} }
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
* server response, or constructed directly in Javascript. The array is used
* in place and becomes part of the constructed object. It is not cloned.
* If no data is provided, the constructed object will be empty, but still
* valid.
* @extends {jspb.Message}
* @constructor
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, null, null);
};
goog.inherits(proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest, jspb.Message);
if (goog.DEBUG && !COMPILED) {
/**
* @public
* @override
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.displayName = 'proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest';
}
/**
* Generated by JsPbCodeGenerator.
* @param {Array=} opt_data Optional initial data array, typically from a
* server response, or constructed directly in Javascript. The array is used
* in place and becomes part of the constructed object. It is not cloned.
* If no data is provided, the constructed object will be empty, but still
* valid.
* @extends {jspb.Message}
* @constructor
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse = function(opt_data) {
jspb.Message.initialize(this, opt_data, 0, -1, proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse.repeatedFields_, null);
};
goog.inherits(proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse, jspb.Message);
if (goog.DEBUG && !COMPILED) {
/**
* @public
* @override
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse.displayName = 'proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse';
}
@ -3204,7 +3248,8 @@ proto.cc.arduino.cli.commands.v1.BoardListRequest.toObject = function(includeIns
var f, obj = { var f, obj = {
instance: (f = msg.getInstance()) && cc_arduino_cli_commands_v1_common_pb.Instance.toObject(includeInstance, f), instance: (f = msg.getInstance()) && cc_arduino_cli_commands_v1_common_pb.Instance.toObject(includeInstance, f),
timeout: jspb.Message.getFieldWithDefault(msg, 2, 0), timeout: jspb.Message.getFieldWithDefault(msg, 2, 0),
fqbn: jspb.Message.getFieldWithDefault(msg, 3, "") fqbn: jspb.Message.getFieldWithDefault(msg, 3, ""),
skipCloudApiForBoardDetection: jspb.Message.getBooleanFieldWithDefault(msg, 4, false)
}; };
if (includeInstance) { if (includeInstance) {
@ -3254,6 +3299,10 @@ proto.cc.arduino.cli.commands.v1.BoardListRequest.deserializeBinaryFromReader =
var value = /** @type {string} */ (reader.readString()); var value = /** @type {string} */ (reader.readString());
msg.setFqbn(value); msg.setFqbn(value);
break; break;
case 4:
var value = /** @type {boolean} */ (reader.readBool());
msg.setSkipCloudApiForBoardDetection(value);
break;
default: default:
reader.skipField(); reader.skipField();
break; break;
@ -3305,6 +3354,13 @@ proto.cc.arduino.cli.commands.v1.BoardListRequest.serializeBinaryToWriter = func
f f
); );
} }
f = message.getSkipCloudApiForBoardDetection();
if (f) {
writer.writeBool(
4,
f
);
}
}; };
@ -3381,6 +3437,24 @@ proto.cc.arduino.cli.commands.v1.BoardListRequest.prototype.setFqbn = function(v
}; };
/**
* optional bool skip_cloud_api_for_board_detection = 4;
* @return {boolean}
*/
proto.cc.arduino.cli.commands.v1.BoardListRequest.prototype.getSkipCloudApiForBoardDetection = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false));
};
/**
* @param {boolean} value
* @return {!proto.cc.arduino.cli.commands.v1.BoardListRequest} returns this
*/
proto.cc.arduino.cli.commands.v1.BoardListRequest.prototype.setSkipCloudApiForBoardDetection = function(value) {
return jspb.Message.setProto3BooleanField(this, 4, value);
};
/** /**
* List of repeated fields within this message type. * List of repeated fields within this message type.
@ -4230,7 +4304,8 @@ proto.cc.arduino.cli.commands.v1.BoardListWatchRequest.prototype.toObject = func
*/ */
proto.cc.arduino.cli.commands.v1.BoardListWatchRequest.toObject = function(includeInstance, msg) { proto.cc.arduino.cli.commands.v1.BoardListWatchRequest.toObject = function(includeInstance, msg) {
var f, obj = { var f, obj = {
instance: (f = msg.getInstance()) && cc_arduino_cli_commands_v1_common_pb.Instance.toObject(includeInstance, f) instance: (f = msg.getInstance()) && cc_arduino_cli_commands_v1_common_pb.Instance.toObject(includeInstance, f),
skipCloudApiForBoardDetection: jspb.Message.getBooleanFieldWithDefault(msg, 2, false)
}; };
if (includeInstance) { if (includeInstance) {
@ -4272,6 +4347,10 @@ proto.cc.arduino.cli.commands.v1.BoardListWatchRequest.deserializeBinaryFromRead
reader.readMessage(value,cc_arduino_cli_commands_v1_common_pb.Instance.deserializeBinaryFromReader); reader.readMessage(value,cc_arduino_cli_commands_v1_common_pb.Instance.deserializeBinaryFromReader);
msg.setInstance(value); msg.setInstance(value);
break; break;
case 2:
var value = /** @type {boolean} */ (reader.readBool());
msg.setSkipCloudApiForBoardDetection(value);
break;
default: default:
reader.skipField(); reader.skipField();
break; break;
@ -4309,6 +4388,13 @@ proto.cc.arduino.cli.commands.v1.BoardListWatchRequest.serializeBinaryToWriter =
cc_arduino_cli_commands_v1_common_pb.Instance.serializeBinaryToWriter cc_arduino_cli_commands_v1_common_pb.Instance.serializeBinaryToWriter
); );
} }
f = message.getSkipCloudApiForBoardDetection();
if (f) {
writer.writeBool(
2,
f
);
}
}; };
@ -4349,6 +4435,24 @@ proto.cc.arduino.cli.commands.v1.BoardListWatchRequest.prototype.hasInstance = f
}; };
/**
* optional bool skip_cloud_api_for_board_detection = 2;
* @return {boolean}
*/
proto.cc.arduino.cli.commands.v1.BoardListWatchRequest.prototype.getSkipCloudApiForBoardDetection = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false));
};
/**
* @param {boolean} value
* @return {!proto.cc.arduino.cli.commands.v1.BoardListWatchRequest} returns this
*/
proto.cc.arduino.cli.commands.v1.BoardListWatchRequest.prototype.setSkipCloudApiForBoardDetection = function(value) {
return jspb.Message.setProto3BooleanField(this, 2, value);
};
@ -5172,4 +5276,378 @@ proto.cc.arduino.cli.commands.v1.BoardSearchResponse.prototype.clearBoardsList =
}; };
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.
* Field names that are reserved in JavaScript and will be renamed to pb_name.
* Optional fields that are not set will be set to undefined.
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
* For the list of reserved names please see:
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
* JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @return {!Object}
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.prototype.toObject = function(opt_includeInstance) {
return proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.toObject(opt_includeInstance, this);
};
/**
* Static version of the {@see toObject} method.
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
* the JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @param {!proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest} msg The msg instance to transform.
* @return {!Object}
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.toObject = function(includeInstance, msg) {
var f, obj = {
instance: (f = msg.getInstance()) && cc_arduino_cli_commands_v1_common_pb.Instance.toObject(includeInstance, f),
propertiesMap: (f = msg.getPropertiesMap()) ? f.toObject(includeInstance, undefined) : [],
useCloudApiForUnknownBoardDetection: jspb.Message.getBooleanFieldWithDefault(msg, 3, false)
};
if (includeInstance) {
obj.$jspbMessageInstance = msg;
}
return obj;
};
}
/**
* Deserializes binary data (in protobuf wire format).
* @param {jspb.ByteSource} bytes The bytes to deserialize.
* @return {!proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest}
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.deserializeBinary = function(bytes) {
var reader = new jspb.BinaryReader(bytes);
var msg = new proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest;
return proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.deserializeBinaryFromReader(msg, reader);
};
/**
* Deserializes binary data (in protobuf wire format) from the
* given reader into the given message object.
* @param {!proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest} msg The message object to deserialize into.
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
* @return {!proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest}
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.deserializeBinaryFromReader = function(msg, reader) {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
var field = reader.getFieldNumber();
switch (field) {
case 1:
var value = new cc_arduino_cli_commands_v1_common_pb.Instance;
reader.readMessage(value,cc_arduino_cli_commands_v1_common_pb.Instance.deserializeBinaryFromReader);
msg.setInstance(value);
break;
case 2:
var value = msg.getPropertiesMap();
reader.readMessage(value, function(message, reader) {
jspb.Map.deserializeBinary(message, reader, jspb.BinaryReader.prototype.readString, jspb.BinaryReader.prototype.readString, null, "", "");
});
break;
case 3:
var value = /** @type {boolean} */ (reader.readBool());
msg.setUseCloudApiForUnknownBoardDetection(value);
break;
default:
reader.skipField();
break;
}
}
return msg;
};
/**
* Serializes the message to binary data (in protobuf wire format).
* @return {!Uint8Array}
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.prototype.serializeBinary = function() {
var writer = new jspb.BinaryWriter();
proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
};
/**
* Serializes the given message to binary data (in protobuf wire
* format), writing to the given BinaryWriter.
* @param {!proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest} message
* @param {!jspb.BinaryWriter} writer
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.serializeBinaryToWriter = function(message, writer) {
var f = undefined;
f = message.getInstance();
if (f != null) {
writer.writeMessage(
1,
f,
cc_arduino_cli_commands_v1_common_pb.Instance.serializeBinaryToWriter
);
}
f = message.getPropertiesMap(true);
if (f && f.getLength() > 0) {
f.serializeBinary(2, writer, jspb.BinaryWriter.prototype.writeString, jspb.BinaryWriter.prototype.writeString);
}
f = message.getUseCloudApiForUnknownBoardDetection();
if (f) {
writer.writeBool(
3,
f
);
}
};
/**
* optional Instance instance = 1;
* @return {?proto.cc.arduino.cli.commands.v1.Instance}
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.prototype.getInstance = function() {
return /** @type{?proto.cc.arduino.cli.commands.v1.Instance} */ (
jspb.Message.getWrapperField(this, cc_arduino_cli_commands_v1_common_pb.Instance, 1));
};
/**
* @param {?proto.cc.arduino.cli.commands.v1.Instance|undefined} value
* @return {!proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest} returns this
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.prototype.setInstance = function(value) {
return jspb.Message.setWrapperField(this, 1, value);
};
/**
* Clears the message field making it undefined.
* @return {!proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest} returns this
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.prototype.clearInstance = function() {
return this.setInstance(undefined);
};
/**
* Returns whether this field is set.
* @return {boolean}
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.prototype.hasInstance = function() {
return jspb.Message.getField(this, 1) != null;
};
/**
* map<string, string> properties = 2;
* @param {boolean=} opt_noLazyCreate Do not create the map if
* empty, instead returning `undefined`
* @return {!jspb.Map<string,string>}
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.prototype.getPropertiesMap = function(opt_noLazyCreate) {
return /** @type {!jspb.Map<string,string>} */ (
jspb.Message.getMapField(this, 2, opt_noLazyCreate,
null));
};
/**
* Clears values from the map. The map will be non-null.
* @return {!proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest} returns this
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.prototype.clearPropertiesMap = function() {
this.getPropertiesMap().clear();
return this;};
/**
* optional bool use_cloud_api_for_unknown_board_detection = 3;
* @return {boolean}
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.prototype.getUseCloudApiForUnknownBoardDetection = function() {
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 3, false));
};
/**
* @param {boolean} value
* @return {!proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest} returns this
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyRequest.prototype.setUseCloudApiForUnknownBoardDetection = function(value) {
return jspb.Message.setProto3BooleanField(this, 3, value);
};
/**
* List of repeated fields within this message type.
* @private {!Array<number>}
* @const
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse.repeatedFields_ = [1];
if (jspb.Message.GENERATE_TO_OBJECT) {
/**
* Creates an object representation of this proto.
* Field names that are reserved in JavaScript and will be renamed to pb_name.
* Optional fields that are not set will be set to undefined.
* To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
* For the list of reserved names please see:
* net/proto2/compiler/js/internal/generator.cc#kKeyword.
* @param {boolean=} opt_includeInstance Deprecated. whether to include the
* JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @return {!Object}
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse.prototype.toObject = function(opt_includeInstance) {
return proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse.toObject(opt_includeInstance, this);
};
/**
* Static version of the {@see toObject} method.
* @param {boolean|undefined} includeInstance Deprecated. Whether to include
* the JSPB instance for transitional soy proto support:
* http://goto/soy-param-migration
* @param {!proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse} msg The msg instance to transform.
* @return {!Object}
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse.toObject = function(includeInstance, msg) {
var f, obj = {
boardsList: jspb.Message.toObjectList(msg.getBoardsList(),
proto.cc.arduino.cli.commands.v1.BoardListItem.toObject, includeInstance)
};
if (includeInstance) {
obj.$jspbMessageInstance = msg;
}
return obj;
};
}
/**
* Deserializes binary data (in protobuf wire format).
* @param {jspb.ByteSource} bytes The bytes to deserialize.
* @return {!proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse}
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse.deserializeBinary = function(bytes) {
var reader = new jspb.BinaryReader(bytes);
var msg = new proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse;
return proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse.deserializeBinaryFromReader(msg, reader);
};
/**
* Deserializes binary data (in protobuf wire format) from the
* given reader into the given message object.
* @param {!proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse} msg The message object to deserialize into.
* @param {!jspb.BinaryReader} reader The BinaryReader to use.
* @return {!proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse}
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse.deserializeBinaryFromReader = function(msg, reader) {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
var field = reader.getFieldNumber();
switch (field) {
case 1:
var value = new proto.cc.arduino.cli.commands.v1.BoardListItem;
reader.readMessage(value,proto.cc.arduino.cli.commands.v1.BoardListItem.deserializeBinaryFromReader);
msg.addBoards(value);
break;
default:
reader.skipField();
break;
}
}
return msg;
};
/**
* Serializes the message to binary data (in protobuf wire format).
* @return {!Uint8Array}
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse.prototype.serializeBinary = function() {
var writer = new jspb.BinaryWriter();
proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
};
/**
* Serializes the given message to binary data (in protobuf wire
* format), writing to the given BinaryWriter.
* @param {!proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse} message
* @param {!jspb.BinaryWriter} writer
* @suppress {unusedLocalVariables} f is only used for nested messages
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse.serializeBinaryToWriter = function(message, writer) {
var f = undefined;
f = message.getBoardsList();
if (f.length > 0) {
writer.writeRepeatedMessage(
1,
f,
proto.cc.arduino.cli.commands.v1.BoardListItem.serializeBinaryToWriter
);
}
};
/**
* repeated BoardListItem boards = 1;
* @return {!Array<!proto.cc.arduino.cli.commands.v1.BoardListItem>}
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse.prototype.getBoardsList = function() {
return /** @type{!Array<!proto.cc.arduino.cli.commands.v1.BoardListItem>} */ (
jspb.Message.getRepeatedWrapperField(this, proto.cc.arduino.cli.commands.v1.BoardListItem, 1));
};
/**
* @param {!Array<!proto.cc.arduino.cli.commands.v1.BoardListItem>} value
* @return {!proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse} returns this
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse.prototype.setBoardsList = function(value) {
return jspb.Message.setRepeatedWrapperField(this, 1, value);
};
/**
* @param {!proto.cc.arduino.cli.commands.v1.BoardListItem=} opt_value
* @param {number=} opt_index
* @return {!proto.cc.arduino.cli.commands.v1.BoardListItem}
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse.prototype.addBoards = function(opt_value, opt_index) {
return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.cc.arduino.cli.commands.v1.BoardListItem, opt_index);
};
/**
* Clears the list making it empty but non-null.
* @return {!proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse} returns this
*/
proto.cc.arduino.cli.commands.v1.BoardIdentifyResponse.prototype.clearBoardsList = function() {
return this.setBoardsList([]);
};
goog.object.extend(exports, proto.cc.arduino.cli.commands.v1); goog.object.extend(exports, proto.cc.arduino.cli.commands.v1);

View File

@ -32,6 +32,7 @@ interface IArduinoCoreServiceService extends grpc.ServiceDefinition<grpc.Untyped
boardList: IArduinoCoreServiceService_IBoardList; boardList: IArduinoCoreServiceService_IBoardList;
boardListAll: IArduinoCoreServiceService_IBoardListAll; boardListAll: IArduinoCoreServiceService_IBoardListAll;
boardSearch: IArduinoCoreServiceService_IBoardSearch; boardSearch: IArduinoCoreServiceService_IBoardSearch;
boardIdentify: IArduinoCoreServiceService_IBoardIdentify;
boardListWatch: IArduinoCoreServiceService_IBoardListWatch; boardListWatch: IArduinoCoreServiceService_IBoardListWatch;
compile: IArduinoCoreServiceService_ICompile; compile: IArduinoCoreServiceService_ICompile;
platformInstall: IArduinoCoreServiceService_IPlatformInstall; platformInstall: IArduinoCoreServiceService_IPlatformInstall;
@ -195,6 +196,15 @@ interface IArduinoCoreServiceService_IBoardSearch extends grpc.MethodDefinition<
responseSerialize: grpc.serialize<cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse>; responseSerialize: grpc.serialize<cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse>;
responseDeserialize: grpc.deserialize<cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse>; responseDeserialize: grpc.deserialize<cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse>;
} }
interface IArduinoCoreServiceService_IBoardIdentify extends grpc.MethodDefinition<cc_arduino_cli_commands_v1_board_pb.BoardIdentifyRequest, cc_arduino_cli_commands_v1_board_pb.BoardIdentifyResponse> {
path: "/cc.arduino.cli.commands.v1.ArduinoCoreService/BoardIdentify";
requestStream: false;
responseStream: false;
requestSerialize: grpc.serialize<cc_arduino_cli_commands_v1_board_pb.BoardIdentifyRequest>;
requestDeserialize: grpc.deserialize<cc_arduino_cli_commands_v1_board_pb.BoardIdentifyRequest>;
responseSerialize: grpc.serialize<cc_arduino_cli_commands_v1_board_pb.BoardIdentifyResponse>;
responseDeserialize: grpc.deserialize<cc_arduino_cli_commands_v1_board_pb.BoardIdentifyResponse>;
}
interface IArduinoCoreServiceService_IBoardListWatch extends grpc.MethodDefinition<cc_arduino_cli_commands_v1_board_pb.BoardListWatchRequest, cc_arduino_cli_commands_v1_board_pb.BoardListWatchResponse> { interface IArduinoCoreServiceService_IBoardListWatch extends grpc.MethodDefinition<cc_arduino_cli_commands_v1_board_pb.BoardListWatchRequest, cc_arduino_cli_commands_v1_board_pb.BoardListWatchResponse> {
path: "/cc.arduino.cli.commands.v1.ArduinoCoreService/BoardListWatch"; path: "/cc.arduino.cli.commands.v1.ArduinoCoreService/BoardListWatch";
requestStream: false; requestStream: false;
@ -528,6 +538,7 @@ export interface IArduinoCoreServiceServer extends grpc.UntypedServiceImplementa
boardList: grpc.handleUnaryCall<cc_arduino_cli_commands_v1_board_pb.BoardListRequest, cc_arduino_cli_commands_v1_board_pb.BoardListResponse>; boardList: grpc.handleUnaryCall<cc_arduino_cli_commands_v1_board_pb.BoardListRequest, cc_arduino_cli_commands_v1_board_pb.BoardListResponse>;
boardListAll: grpc.handleUnaryCall<cc_arduino_cli_commands_v1_board_pb.BoardListAllRequest, cc_arduino_cli_commands_v1_board_pb.BoardListAllResponse>; boardListAll: grpc.handleUnaryCall<cc_arduino_cli_commands_v1_board_pb.BoardListAllRequest, cc_arduino_cli_commands_v1_board_pb.BoardListAllResponse>;
boardSearch: grpc.handleUnaryCall<cc_arduino_cli_commands_v1_board_pb.BoardSearchRequest, cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse>; boardSearch: grpc.handleUnaryCall<cc_arduino_cli_commands_v1_board_pb.BoardSearchRequest, cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse>;
boardIdentify: grpc.handleUnaryCall<cc_arduino_cli_commands_v1_board_pb.BoardIdentifyRequest, cc_arduino_cli_commands_v1_board_pb.BoardIdentifyResponse>;
boardListWatch: grpc.handleServerStreamingCall<cc_arduino_cli_commands_v1_board_pb.BoardListWatchRequest, cc_arduino_cli_commands_v1_board_pb.BoardListWatchResponse>; boardListWatch: grpc.handleServerStreamingCall<cc_arduino_cli_commands_v1_board_pb.BoardListWatchRequest, cc_arduino_cli_commands_v1_board_pb.BoardListWatchResponse>;
compile: grpc.handleServerStreamingCall<cc_arduino_cli_commands_v1_compile_pb.CompileRequest, cc_arduino_cli_commands_v1_compile_pb.CompileResponse>; compile: grpc.handleServerStreamingCall<cc_arduino_cli_commands_v1_compile_pb.CompileRequest, cc_arduino_cli_commands_v1_compile_pb.CompileResponse>;
platformInstall: grpc.handleServerStreamingCall<cc_arduino_cli_commands_v1_core_pb.PlatformInstallRequest, cc_arduino_cli_commands_v1_core_pb.PlatformInstallResponse>; platformInstall: grpc.handleServerStreamingCall<cc_arduino_cli_commands_v1_core_pb.PlatformInstallRequest, cc_arduino_cli_commands_v1_core_pb.PlatformInstallResponse>;
@ -605,6 +616,9 @@ export interface IArduinoCoreServiceClient {
boardSearch(request: cc_arduino_cli_commands_v1_board_pb.BoardSearchRequest, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse) => void): grpc.ClientUnaryCall; boardSearch(request: cc_arduino_cli_commands_v1_board_pb.BoardSearchRequest, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse) => void): grpc.ClientUnaryCall;
boardSearch(request: cc_arduino_cli_commands_v1_board_pb.BoardSearchRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse) => void): grpc.ClientUnaryCall; boardSearch(request: cc_arduino_cli_commands_v1_board_pb.BoardSearchRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse) => void): grpc.ClientUnaryCall;
boardSearch(request: cc_arduino_cli_commands_v1_board_pb.BoardSearchRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse) => void): grpc.ClientUnaryCall; boardSearch(request: cc_arduino_cli_commands_v1_board_pb.BoardSearchRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse) => void): grpc.ClientUnaryCall;
boardIdentify(request: cc_arduino_cli_commands_v1_board_pb.BoardIdentifyRequest, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardIdentifyResponse) => void): grpc.ClientUnaryCall;
boardIdentify(request: cc_arduino_cli_commands_v1_board_pb.BoardIdentifyRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardIdentifyResponse) => void): grpc.ClientUnaryCall;
boardIdentify(request: cc_arduino_cli_commands_v1_board_pb.BoardIdentifyRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardIdentifyResponse) => void): grpc.ClientUnaryCall;
boardListWatch(request: cc_arduino_cli_commands_v1_board_pb.BoardListWatchRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cc_arduino_cli_commands_v1_board_pb.BoardListWatchResponse>; boardListWatch(request: cc_arduino_cli_commands_v1_board_pb.BoardListWatchRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cc_arduino_cli_commands_v1_board_pb.BoardListWatchResponse>;
boardListWatch(request: cc_arduino_cli_commands_v1_board_pb.BoardListWatchRequest, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cc_arduino_cli_commands_v1_board_pb.BoardListWatchResponse>; boardListWatch(request: cc_arduino_cli_commands_v1_board_pb.BoardListWatchRequest, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cc_arduino_cli_commands_v1_board_pb.BoardListWatchResponse>;
compile(request: cc_arduino_cli_commands_v1_compile_pb.CompileRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cc_arduino_cli_commands_v1_compile_pb.CompileResponse>; compile(request: cc_arduino_cli_commands_v1_compile_pb.CompileRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cc_arduino_cli_commands_v1_compile_pb.CompileResponse>;
@ -737,6 +751,9 @@ export class ArduinoCoreServiceClient extends grpc.Client implements IArduinoCor
public boardSearch(request: cc_arduino_cli_commands_v1_board_pb.BoardSearchRequest, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse) => void): grpc.ClientUnaryCall; public boardSearch(request: cc_arduino_cli_commands_v1_board_pb.BoardSearchRequest, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse) => void): grpc.ClientUnaryCall;
public boardSearch(request: cc_arduino_cli_commands_v1_board_pb.BoardSearchRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse) => void): grpc.ClientUnaryCall; public boardSearch(request: cc_arduino_cli_commands_v1_board_pb.BoardSearchRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse) => void): grpc.ClientUnaryCall;
public boardSearch(request: cc_arduino_cli_commands_v1_board_pb.BoardSearchRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse) => void): grpc.ClientUnaryCall; public boardSearch(request: cc_arduino_cli_commands_v1_board_pb.BoardSearchRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardSearchResponse) => void): grpc.ClientUnaryCall;
public boardIdentify(request: cc_arduino_cli_commands_v1_board_pb.BoardIdentifyRequest, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardIdentifyResponse) => void): grpc.ClientUnaryCall;
public boardIdentify(request: cc_arduino_cli_commands_v1_board_pb.BoardIdentifyRequest, metadata: grpc.Metadata, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardIdentifyResponse) => void): grpc.ClientUnaryCall;
public boardIdentify(request: cc_arduino_cli_commands_v1_board_pb.BoardIdentifyRequest, metadata: grpc.Metadata, options: Partial<grpc.CallOptions>, callback: (error: grpc.ServiceError | null, response: cc_arduino_cli_commands_v1_board_pb.BoardIdentifyResponse) => void): grpc.ClientUnaryCall;
public boardListWatch(request: cc_arduino_cli_commands_v1_board_pb.BoardListWatchRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cc_arduino_cli_commands_v1_board_pb.BoardListWatchResponse>; public boardListWatch(request: cc_arduino_cli_commands_v1_board_pb.BoardListWatchRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cc_arduino_cli_commands_v1_board_pb.BoardListWatchResponse>;
public boardListWatch(request: cc_arduino_cli_commands_v1_board_pb.BoardListWatchRequest, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cc_arduino_cli_commands_v1_board_pb.BoardListWatchResponse>; public boardListWatch(request: cc_arduino_cli_commands_v1_board_pb.BoardListWatchRequest, metadata?: grpc.Metadata, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cc_arduino_cli_commands_v1_board_pb.BoardListWatchResponse>;
public compile(request: cc_arduino_cli_commands_v1_compile_pb.CompileRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cc_arduino_cli_commands_v1_compile_pb.CompileResponse>; public compile(request: cc_arduino_cli_commands_v1_compile_pb.CompileRequest, options?: Partial<grpc.CallOptions>): grpc.ClientReadableStream<cc_arduino_cli_commands_v1_compile_pb.CompileResponse>;

View File

@ -74,6 +74,28 @@ function deserialize_cc_arduino_cli_commands_v1_BoardDetailsResponse(buffer_arg)
return cc_arduino_cli_commands_v1_board_pb.BoardDetailsResponse.deserializeBinary(new Uint8Array(buffer_arg)); return cc_arduino_cli_commands_v1_board_pb.BoardDetailsResponse.deserializeBinary(new Uint8Array(buffer_arg));
} }
function serialize_cc_arduino_cli_commands_v1_BoardIdentifyRequest(arg) {
if (!(arg instanceof cc_arduino_cli_commands_v1_board_pb.BoardIdentifyRequest)) {
throw new Error('Expected argument of type cc.arduino.cli.commands.v1.BoardIdentifyRequest');
}
return Buffer.from(arg.serializeBinary());
}
function deserialize_cc_arduino_cli_commands_v1_BoardIdentifyRequest(buffer_arg) {
return cc_arduino_cli_commands_v1_board_pb.BoardIdentifyRequest.deserializeBinary(new Uint8Array(buffer_arg));
}
function serialize_cc_arduino_cli_commands_v1_BoardIdentifyResponse(arg) {
if (!(arg instanceof cc_arduino_cli_commands_v1_board_pb.BoardIdentifyResponse)) {
throw new Error('Expected argument of type cc.arduino.cli.commands.v1.BoardIdentifyResponse');
}
return Buffer.from(arg.serializeBinary());
}
function deserialize_cc_arduino_cli_commands_v1_BoardIdentifyResponse(buffer_arg) {
return cc_arduino_cli_commands_v1_board_pb.BoardIdentifyResponse.deserializeBinary(new Uint8Array(buffer_arg));
}
function serialize_cc_arduino_cli_commands_v1_BoardListAllRequest(arg) { function serialize_cc_arduino_cli_commands_v1_BoardListAllRequest(arg) {
if (!(arg instanceof cc_arduino_cli_commands_v1_board_pb.BoardListAllRequest)) { if (!(arg instanceof cc_arduino_cli_commands_v1_board_pb.BoardListAllRequest)) {
throw new Error('Expected argument of type cc.arduino.cli.commands.v1.BoardListAllRequest'); throw new Error('Expected argument of type cc.arduino.cli.commands.v1.BoardListAllRequest');
@ -1282,6 +1304,18 @@ boardSearch: {
responseSerialize: serialize_cc_arduino_cli_commands_v1_BoardSearchResponse, responseSerialize: serialize_cc_arduino_cli_commands_v1_BoardSearchResponse,
responseDeserialize: deserialize_cc_arduino_cli_commands_v1_BoardSearchResponse, responseDeserialize: deserialize_cc_arduino_cli_commands_v1_BoardSearchResponse,
}, },
// Identify a board using the given properties.
boardIdentify: {
path: '/cc.arduino.cli.commands.v1.ArduinoCoreService/BoardIdentify',
requestStream: false,
responseStream: false,
requestType: cc_arduino_cli_commands_v1_board_pb.BoardIdentifyRequest,
responseType: cc_arduino_cli_commands_v1_board_pb.BoardIdentifyResponse,
requestSerialize: serialize_cc_arduino_cli_commands_v1_BoardIdentifyRequest,
requestDeserialize: deserialize_cc_arduino_cli_commands_v1_BoardIdentifyRequest,
responseSerialize: serialize_cc_arduino_cli_commands_v1_BoardIdentifyResponse,
responseDeserialize: deserialize_cc_arduino_cli_commands_v1_BoardIdentifyResponse,
},
// List boards connection and disconnected events. // List boards connection and disconnected events.
boardListWatch: { boardListWatch: {
path: '/cc.arduino.cli.commands.v1.ArduinoCoreService/BoardListWatch', path: '/cc.arduino.cli.commands.v1.ArduinoCoreService/BoardListWatch',

View File

@ -4,7 +4,7 @@ import yaml from 'js-yaml';
import { injectable, inject, named } from '@theia/core/shared/inversify'; import { injectable, inject, named } from '@theia/core/shared/inversify';
import URI from '@theia/core/lib/common/uri'; import URI from '@theia/core/lib/common/uri';
import { ILogger } from '@theia/core/lib/common/logger'; import { ILogger } from '@theia/core/lib/common/logger';
import { FileUri } from '@theia/core/lib/node/file-uri'; import { FileUri } from '@theia/core/lib/common/file-uri';
import { Event, Emitter } from '@theia/core/lib/common/event'; import { Event, Emitter } from '@theia/core/lib/common/event';
import { BackendApplicationContribution } from '@theia/core/lib/node/backend-application'; import { BackendApplicationContribution } from '@theia/core/lib/node/backend-application';
import { import {

View File

@ -5,12 +5,13 @@ import {
Disposable, Disposable,
DisposableCollection, DisposableCollection,
} from '@theia/core/lib/common/disposable'; } from '@theia/core/lib/common/disposable';
import { FileUri } from '@theia/core/lib/common/file-uri';
import { nls } from '@theia/core/lib/common/nls'; import { nls } from '@theia/core/lib/common/nls';
import type { Mutable } from '@theia/core/lib/common/types'; import type { Mutable } from '@theia/core/lib/common/types';
import { FileUri } from '@theia/core/lib/node/file-uri';
import { inject, injectable } from '@theia/core/shared/inversify'; import { inject, injectable } from '@theia/core/shared/inversify';
import * as jspb from 'google-protobuf'; import * as jspb from 'google-protobuf';
import path from 'node:path'; import path from 'node:path';
import { userAbort } from '../common/nls';
import { import {
UploadResponse as ApiUploadResponse, UploadResponse as ApiUploadResponse,
OutputMessage, OutputMessage,
@ -26,6 +27,7 @@ import {
isCompileSummary, isCompileSummary,
isUploadResponse, isUploadResponse,
} from '../common/protocol/core-service'; } from '../common/protocol/core-service';
import { UserAbortApplicationError } from '../common/protocol/progressible';
import { ResponseService } from '../common/protocol/response-service'; import { ResponseService } from '../common/protocol/response-service';
import { firstToUpperCase, notEmpty } from '../common/utils'; import { firstToUpperCase, notEmpty } from '../common/utils';
import { BoardDiscovery, createApiPort } from './board-discovery'; import { BoardDiscovery, createApiPort } from './board-discovery';
@ -52,8 +54,6 @@ import { ExecuteWithProgress, ProgressResponse } from './grpc-progressible';
import { MonitorManager } from './monitor-manager'; import { MonitorManager } from './monitor-manager';
import { ServiceError } from './service-error'; import { ServiceError } from './service-error';
import { AutoFlushingBuffer } from './utils/buffers'; import { AutoFlushingBuffer } from './utils/buffers';
import { userAbort } from '../common/nls';
import { UserAbortApplicationError } from '../common/protocol/progressible';
namespace Uploadable { namespace Uploadable {
export type Request = UploadRequest | UploadUsingProgrammerRequest; export type Request = UploadRequest | UploadUsingProgrammerRequest;

View File

@ -5,7 +5,7 @@ import {
} from '@theia/core/shared/inversify'; } from '@theia/core/shared/inversify';
import { join } from 'node:path'; import { join } from 'node:path';
import fs from 'node:fs'; import fs from 'node:fs';
import { FileUri } from '@theia/core/lib/node/file-uri'; import { FileUri } from '@theia/core/lib/common/file-uri';
import { import {
SketchRef, SketchRef,
SketchContainer, SketchContainer,

View File

@ -1,4 +1,4 @@
import { FileUri } from '@theia/core/lib/node/file-uri'; import { FileUri } from '@theia/core/lib/common/file-uri';
import { injectable } from '@theia/core/shared/inversify'; import { injectable } from '@theia/core/shared/inversify';
import { ExecutableService } from '../common/protocol/executable-service'; import { ExecutableService } from '../common/protocol/executable-service';
import { import {

View File

@ -6,7 +6,7 @@ import {
postConstruct, postConstruct,
} from '@theia/core/shared/inversify'; } from '@theia/core/shared/inversify';
import { EnvVariablesServer } from '@theia/core/lib/common/env-variables'; import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
import { FileUri } from '@theia/core/lib/node/file-uri'; import { FileUri } from '@theia/core/lib/common/file-uri';
import { promisify } from 'util'; import { promisify } from 'util';
import { MonitorSettingsProvider } from './monitor-settings-provider'; import { MonitorSettingsProvider } from './monitor-settings-provider';
import { Deferred } from '@theia/core/lib/common/promise-util'; import { Deferred } from '@theia/core/lib/common/promise-util';

View File

@ -1,5 +1,5 @@
import { injectable } from '@theia/core/shared/inversify'; import { injectable } from '@theia/core/shared/inversify';
import { FileUri } from '@theia/core/lib/node/file-uri'; import { FileUri } from '@theia/core/lib/common/file-uri';
import { FileSystemExt } from '../common/protocol/filesystem-ext'; import { FileSystemExt } from '../common/protocol/filesystem-ext';
@injectable() @injectable()

View File

@ -1,5 +1,5 @@
import { EnvVariablesServer } from '@theia/core/lib/common/env-variables'; import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
import { FileUri } from '@theia/core/lib/node/file-uri'; import { FileUri } from '@theia/core/lib/common/file-uri';
import { inject, injectable } from '@theia/core/shared/inversify'; import { inject, injectable } from '@theia/core/shared/inversify';
import { promises as fs } from 'node:fs'; import { promises as fs } from 'node:fs';
import { import {

View File

@ -6,7 +6,7 @@ import { Deferred } from '@theia/core/lib/common/promise-util';
import { escapeRegExpCharacters } from '@theia/core/lib/common/strings'; import { escapeRegExpCharacters } from '@theia/core/lib/common/strings';
import type { Mutable } from '@theia/core/lib/common/types'; import type { Mutable } from '@theia/core/lib/common/types';
import URI from '@theia/core/lib/common/uri'; import URI from '@theia/core/lib/common/uri';
import { FileUri } from '@theia/core/lib/node/file-uri'; import { FileUri } from '@theia/core/lib/common/file-uri';
import { inject, injectable, named } from '@theia/core/shared/inversify'; import { inject, injectable, named } from '@theia/core/shared/inversify';
import { glob } from 'glob'; import { glob } from 'glob';
import crypto from 'node:crypto'; import crypto from 'node:crypto';

View File

@ -1,20 +0,0 @@
import { injectable } from '@theia/core/shared/inversify';
import { SurveyNotificationService } from '../common/protocol/survey-service';
/**
* Service for checking if it is the first instance of the IDE, in this case it sets a flag to true.
* This flag is used to prevent the survey notification from being visible in every open window. It must only be shown on one window.
*/
@injectable()
export class SurveyNotificationServiceImpl
implements SurveyNotificationService
{
private surveyDidShow = false;
async isFirstInstance(): Promise<boolean> {
if (this.surveyDidShow) {
return false;
}
this.surveyDidShow = true;
return this.surveyDidShow;
}
}

View File

@ -1,7 +1,8 @@
import { MessagingContribution as TheiaMessagingContribution } from '@theia/core/lib/node/messaging/messaging-contribution'; import { WebsocketEndpoint as TheiaWebsocketEndpoint } from '@theia/core/lib/node/messaging/websocket-endpoint';
import { injectable } from '@theia/core/shared/inversify'; import { injectable } from '@theia/core/shared/inversify';
@injectable() @injectable()
export class MessagingContribution extends TheiaMessagingContribution { export class WebsocketEndpoint extends TheiaWebsocketEndpoint {
// https://github.com/eclipse-theia/theia/discussions/11543 // https://github.com/eclipse-theia/theia/discussions/11543
protected override checkAliveTimeout = process.argv.includes( protected override checkAliveTimeout = process.argv.includes(
'--no-ping-timeout' '--no-ping-timeout'

View File

@ -5,7 +5,7 @@ import {
import { isWindows } from '@theia/core/lib/common/os'; import { isWindows } from '@theia/core/lib/common/os';
import URI from '@theia/core/lib/common/uri'; import URI from '@theia/core/lib/common/uri';
import { BackendApplicationConfigProvider } from '@theia/core/lib/node/backend-application-config-provider'; import { BackendApplicationConfigProvider } from '@theia/core/lib/node/backend-application-config-provider';
import { FileUri } from '@theia/core/lib/node/file-uri'; import { FileUri } from '@theia/core/lib/common/file-uri';
import { import {
inject, inject,
injectable, injectable,

View File

@ -1,42 +0,0 @@
import { join } from 'node:path';
import { interfaces } from '@theia/core/shared/inversify';
import {
NsfwFileSystemWatcherServiceProcessOptions,
NSFW_SINGLE_THREADED,
spawnNsfwFileSystemWatcherServiceProcess,
} from '@theia/filesystem/lib/node/filesystem-backend-module';
import { FileSystemWatcherService } from '@theia/filesystem/lib/common/filesystem-watcher-protocol';
import { NsfwFileSystemWatcherServerOptions } from '@theia/filesystem/lib/node/nsfw-watcher/nsfw-filesystem-service';
import { FileSystemWatcherServiceDispatcher } from '@theia/filesystem/lib/node/filesystem-watcher-dispatcher';
import { NoDelayDisposalTimeoutNsfwFileSystemWatcherService } from './nsfw-watcher/nsfw-filesystem-service';
export function rebindNsfwFileSystemWatcher(rebind: interfaces.Rebind): void {
rebind<NsfwFileSystemWatcherServiceProcessOptions>(
NsfwFileSystemWatcherServiceProcessOptions
).toConstantValue({
entryPoint: join(__dirname, 'nsfw-watcher'),
});
rebind<FileSystemWatcherService>(FileSystemWatcherService)
.toDynamicValue((context) =>
NSFW_SINGLE_THREADED
? createNsfwFileSystemWatcherService(context)
: spawnNsfwFileSystemWatcherServiceProcess(context)
)
.inSingletonScope();
}
function createNsfwFileSystemWatcherService({
container,
}: interfaces.Context): FileSystemWatcherService {
const options = container.get<NsfwFileSystemWatcherServerOptions>(
NsfwFileSystemWatcherServerOptions
);
const dispatcher = container.get<FileSystemWatcherServiceDispatcher>(
FileSystemWatcherServiceDispatcher
);
const server = new NoDelayDisposalTimeoutNsfwFileSystemWatcherService(
options
);
server.setClient(dispatcher);
return server;
}

View File

@ -0,0 +1,42 @@
import { join } from 'node:path';
import { interfaces } from '@theia/core/shared/inversify';
import {
FileSystemWatcherServiceProcessOptions,
WATCHER_SINGLE_THREADED,
spawnParcelFileSystemWatcherServiceProcess,
} from '@theia/filesystem/lib/node/filesystem-backend-module';
import { FileSystemWatcherService } from '@theia/filesystem/lib/common/filesystem-watcher-protocol';
import { ParcelFileSystemWatcherServerOptions } from '@theia/filesystem/lib/node/parcel-watcher/parcel-filesystem-service';
import { FileSystemWatcherServiceDispatcher } from '@theia/filesystem/lib/node/filesystem-watcher-dispatcher';
import { NoDelayDisposalTimeoutParcelFileSystemWatcherService } from './parcel-watcher/parcel-filesystem-service';
export function rebindParcelFileSystemWatcher(rebind: interfaces.Rebind): void {
rebind<FileSystemWatcherServiceProcessOptions>(
FileSystemWatcherServiceProcessOptions
).toConstantValue({
entryPoint: join(__dirname, 'parcel-watcher'),
});
rebind<FileSystemWatcherService>(FileSystemWatcherService)
.toDynamicValue((context) =>
WATCHER_SINGLE_THREADED
? createParcelFileSystemWatcherService(context)
: spawnParcelFileSystemWatcherServiceProcess(context)
)
.inSingletonScope();
}
function createParcelFileSystemWatcherService({
container,
}: interfaces.Context): FileSystemWatcherService {
const options = container.get<ParcelFileSystemWatcherServerOptions>(
ParcelFileSystemWatcherServerOptions
);
const dispatcher = container.get<FileSystemWatcherServiceDispatcher>(
FileSystemWatcherServiceDispatcher
);
const server = new NoDelayDisposalTimeoutParcelFileSystemWatcherService(
options
);
server.setClient(dispatcher);
return server;
}

View File

@ -1,6 +1,6 @@
import * as yargs from '@theia/core/shared/yargs'; import * as yargs from '@theia/core/shared/yargs';
import { JsonRpcProxyFactory } from '@theia/core/lib/common/messaging/proxy-factory'; import { JsonRpcProxyFactory } from '@theia/core/lib/common/messaging/proxy-factory';
import { NoDelayDisposalTimeoutNsfwFileSystemWatcherService } from './nsfw-filesystem-service'; import { NoDelayDisposalTimeoutParcelFileSystemWatcherService } from './parcel-filesystem-service';
import type { IPCEntryPoint } from '@theia/core/lib/node/messaging/ipc-protocol'; import type { IPCEntryPoint } from '@theia/core/lib/node/messaging/ipc-protocol';
import type { FileSystemWatcherServiceClient } from '@theia/filesystem/lib/common/filesystem-watcher-protocol'; import type { FileSystemWatcherServiceClient } from '@theia/filesystem/lib/common/filesystem-watcher-protocol';
@ -20,7 +20,7 @@ const options: {
}).argv as any; }).argv as any;
export default <IPCEntryPoint>((connection) => { export default <IPCEntryPoint>((connection) => {
const server = new NoDelayDisposalTimeoutNsfwFileSystemWatcherService( const server = new NoDelayDisposalTimeoutParcelFileSystemWatcherService(
options options
); );
const factory = new JsonRpcProxyFactory<FileSystemWatcherServiceClient>( const factory = new JsonRpcProxyFactory<FileSystemWatcherServiceClient>(

View File

@ -1,26 +1,26 @@
import { Minimatch } from 'minimatch'; import { Minimatch } from 'minimatch';
import type { WatchOptions } from '@theia/filesystem/lib/common/filesystem-watcher-protocol'; import type { WatchOptions } from '@theia/filesystem/lib/common/filesystem-watcher-protocol';
import { import {
NsfwFileSystemWatcherService, ParcelFileSystemWatcherService,
NsfwWatcher, ParcelWatcher,
} from '@theia/filesystem/lib/node/nsfw-watcher/nsfw-filesystem-service'; } from '@theia/filesystem/lib/node/parcel-watcher/parcel-filesystem-service';
// Dispose the watcher immediately when the last reference is removed. By default, Theia waits 10 sec. // Dispose the watcher immediately when the last reference is removed. By default, Theia waits 10 sec.
// https://github.com/eclipse-theia/theia/issues/11639#issuecomment-1238980708 // https://github.com/eclipse-theia/theia/issues/11639#issuecomment-1238980708
const NoDelay = 0; const NoDelay = 0;
export class NoDelayDisposalTimeoutNsfwFileSystemWatcherService extends NsfwFileSystemWatcherService { export class NoDelayDisposalTimeoutParcelFileSystemWatcherService extends ParcelFileSystemWatcherService {
protected override createWatcher( protected override createWatcher(
clientId: number, clientId: number,
fsPath: string, fsPath: string,
options: WatchOptions options: WatchOptions
): NsfwWatcher { ): ParcelWatcher {
const watcherOptions = { const watcherOptions = {
ignored: options.ignored.map( ignored: options.ignored.map(
(pattern) => new Minimatch(pattern, { dot: true }) (pattern) => new Minimatch(pattern, { dot: true })
), ),
}; };
return new NsfwWatcher( return new ParcelWatcher(
clientId, clientId,
fsPath, fsPath,
watcherOptions, watcherOptions,

View File

@ -83,7 +83,9 @@ const cortexDebugMapper: PluginContributionMapper = (
} }
for (const _debugger of contribution.debuggers ?? []) { for (const _debugger of contribution.debuggers ?? []) {
if (_debugger.type === 'cortex-debug') { if (_debugger.type === 'cortex-debug') {
for (const attributes of _debugger.configurationAttributes ?? []) { for (const attributes of Object.values(
_debugger.configurationAttributes ?? {}
)) {
if (attributes.properties) { if (attributes.properties) {
// Patch the cortex-debug debug config schema to allow the in-house `configId`. // Patch the cortex-debug debug config schema to allow the in-house `configId`.
attributes.properties['configId'] = { attributes.properties['configId'] = {

View File

@ -2,7 +2,7 @@ import {
Disposable, Disposable,
DisposableCollection, DisposableCollection,
} from '@theia/core/lib/common/disposable'; } from '@theia/core/lib/common/disposable';
import { FileUri } from '@theia/core/lib/node/file-uri'; import { FileUri } from '@theia/core/lib/common/file-uri';
import { expect } from 'chai'; import { expect } from 'chai';
import { promises as fs } from 'node:fs'; import { promises as fs } from 'node:fs';
import path from 'node:path'; import path from 'node:path';

View File

@ -1,12 +1,12 @@
import { DisposableCollection } from '@theia/core/lib/common/disposable'; import { DisposableCollection } from '@theia/core/lib/common/disposable';
import type { MaybePromise } from '@theia/core/lib/common/types'; import type { MaybePromise } from '@theia/core/lib/common/types';
import { FileUri } from '@theia/core/lib/node/file-uri'; import { FileUri } from '@theia/core/lib/common/file-uri';
import { Container } from '@theia/core/shared/inversify'; import { Container } from '@theia/core/shared/inversify';
import { expect } from 'chai'; import { expect } from 'chai';
import { dump, load } from 'js-yaml'; import { dump, load } from 'js-yaml';
import { promises as fs } from 'node:fs'; import { promises as fs } from 'node:fs';
import { join } from 'node:path'; import { join } from 'node:path';
import { sync as deleteSync } from 'rimraf'; import { rimrafSync } from 'rimraf';
import { import {
BoardsService, BoardsService,
CoreService, CoreService,
@ -65,7 +65,7 @@ describe('core-client-provider', () => {
it("should recover when the 'directories.data' folder is missing", async function () { it("should recover when the 'directories.data' folder is missing", async function () {
this.timeout(timeout); this.timeout(timeout);
const configDirPath = await prepareTestConfigDir(); const configDirPath = await prepareTestConfigDir();
deleteSync(join(configDirPath, 'data')); rimrafSync(join(configDirPath, 'data'));
const container = await startCli(configDirPath, toDispose); const container = await startCli(configDirPath, toDispose);
await assertFunctionalCli(container, ({ coreClientProvider }) => { await assertFunctionalCli(container, ({ coreClientProvider }) => {
@ -84,7 +84,7 @@ describe('core-client-provider', () => {
'Arduino15', 'Arduino15',
'package_index.json' 'package_index.json'
); );
deleteSync(primaryPackageIndexPath); rimrafSync(primaryPackageIndexPath);
const container = await startCli(configDirPath, toDispose); const container = await startCli(configDirPath, toDispose);
await assertFunctionalCli(container, ({ coreClientProvider }) => { await assertFunctionalCli(container, ({ coreClientProvider }) => {
@ -118,7 +118,7 @@ describe('core-client-provider', () => {
'tools', 'tools',
tool tool
); );
deleteSync(builtinToolsPath); rimrafSync(builtinToolsPath);
const container = await startCli(configDirPath, toDispose); const container = await startCli(configDirPath, toDispose);
await assertFunctionalCli(container, ({ coreClientProvider }) => { await assertFunctionalCli(container, ({ coreClientProvider }) => {
@ -140,7 +140,7 @@ describe('core-client-provider', () => {
'Arduino15', 'Arduino15',
'library_index.json' 'library_index.json'
); );
deleteSync(libraryPackageIndexPath); rimrafSync(libraryPackageIndexPath);
const container = await startCli(configDirPath, toDispose); const container = await startCli(configDirPath, toDispose);
await assertFunctionalCli(container, ({ coreClientProvider }) => { await assertFunctionalCli(container, ({ coreClientProvider }) => {
@ -176,7 +176,7 @@ describe('core-client-provider', () => {
'Arduino15', 'Arduino15',
'package_teensy_index.json' 'package_teensy_index.json'
); );
deleteSync(thirdPartyPackageIndexPath); rimrafSync(thirdPartyPackageIndexPath);
const container = await startCli(configDirPath, toDispose); const container = await startCli(configDirPath, toDispose);
await assertFunctionalCli( await assertFunctionalCli(
@ -193,7 +193,7 @@ describe('core-client-provider', () => {
it("should recover when invalid 3rd package URL is defined in the CLI config and the 'directories.data' folder is missing", async function () { it("should recover when invalid 3rd package URL is defined in the CLI config and the 'directories.data' folder is missing", async function () {
this.timeout(timeout); this.timeout(timeout);
const configDirPath = await prepareTestConfigDir(); const configDirPath = await prepareTestConfigDir();
deleteSync(join(configDirPath, 'data')); rimrafSync(join(configDirPath, 'data'));
// set an invalid URL so the CLI will try to download it // set an invalid URL so the CLI will try to download it
const cliConfigPath = join(configDirPath, 'arduino-cli.yaml'); const cliConfigPath = join(configDirPath, 'arduino-cli.yaml');

View File

@ -1,6 +1,6 @@
import { DisposableCollection } from '@theia/core/lib/common/disposable'; import { DisposableCollection } from '@theia/core/lib/common/disposable';
import { isWindows } from '@theia/core/lib/common/os'; import { isWindows } from '@theia/core/lib/common/os';
import { FileUri } from '@theia/core/lib/node/file-uri'; import { FileUri } from '@theia/core/lib/common/file-uri';
import { Container } from '@theia/core/shared/inversify'; import { Container } from '@theia/core/shared/inversify';
import { expect } from 'chai'; import { expect } from 'chai';
import { import {

View File

@ -5,7 +5,7 @@ import {
import { EnvVariablesServer as TheiaEnvVariablesServer } from '@theia/core/lib/common/env-variables'; import { EnvVariablesServer as TheiaEnvVariablesServer } from '@theia/core/lib/common/env-variables';
import { waitForEvent } from '@theia/core/lib/common/promise-util'; import { waitForEvent } from '@theia/core/lib/common/promise-util';
import URI from '@theia/core/lib/common/uri'; import URI from '@theia/core/lib/common/uri';
import { FileUri } from '@theia/core/lib/node/file-uri'; import { FileUri } from '@theia/core/lib/common/file-uri';
import { ProcessUtils } from '@theia/core/lib/node/process-utils'; import { ProcessUtils } from '@theia/core/lib/node/process-utils';
import { import {
Container, Container,

View File

@ -2,15 +2,15 @@ import {
Disposable, Disposable,
DisposableCollection, DisposableCollection,
} from '@theia/core/lib/common/disposable'; } from '@theia/core/lib/common/disposable';
import { FileUri } from '@theia/core/lib/common/file-uri';
import { isWindows } from '@theia/core/lib/common/os'; import { isWindows } from '@theia/core/lib/common/os';
import { URI } from '@theia/core/lib/common/uri'; import { URI } from '@theia/core/lib/common/uri';
import { FileUri } from '@theia/core/lib/node/file-uri';
import { Container } from '@theia/core/shared/inversify'; import { Container } from '@theia/core/shared/inversify';
import { expect } from 'chai'; import { expect } from 'chai';
import { rejects } from 'node:assert/strict'; import { rejects } from 'node:assert/strict';
import { promises as fs } from 'node:fs'; import { promises as fs } from 'node:fs';
import path, { basename, join } from 'node:path'; import path, { basename, join } from 'node:path';
import { sync as rimrafSync } from 'rimraf'; import { rimrafSync } from 'rimraf';
import temp from 'temp'; import temp from 'temp';
import { Sketch, SketchesError, SketchesService } from '../../common/protocol'; import { Sketch, SketchesError, SketchesService } from '../../common/protocol';
import { import {
@ -574,7 +574,7 @@ function disposeSketch(...sketch: Sketch[]): Disposable {
function disposeFolder(...paths: string[]): Disposable { function disposeFolder(...paths: string[]): Disposable {
return new DisposableCollection( return new DisposableCollection(
...paths.map((path) => ...paths.map((path) =>
Disposable.create(() => rimrafSync(path, { maxBusyTries: 5 })) Disposable.create(() => rimrafSync(path, { maxRetries: 5 }))
) )
); );
} }

View File

@ -1,5 +1,5 @@
import type { Mutable } from '@theia/core/lib/common/types'; import type { Mutable } from '@theia/core/lib/common/types';
import { FileUri } from '@theia/core/lib/node/file-uri'; import { FileUri } from '@theia/core/lib/common/file-uri';
import stableJsonStringify from 'fast-json-stable-stringify'; import stableJsonStringify from 'fast-json-stable-stringify';
import assert from 'node:assert/strict'; import assert from 'node:assert/strict';
import { basename, join } from 'node:path'; import { basename, join } from 'node:path';

View File

@ -20,5 +20,4 @@
"skipLibCheck": true "skipLibCheck": true
}, },
"include": ["src"], "include": ["src"],
"files": ["../node_modules/nsfw/index.d.ts"]
} }

View File

@ -1,34 +1,34 @@
{ {
"private": true, "private": true,
"name": "electron-app", "name": "electron-app",
"version": "2.3.5", "version": "2.3.7",
"license": "AGPL-3.0-or-later", "license": "AGPL-3.0-or-later",
"main": "./src-gen/backend/electron-main.js", "main": "./src-gen/backend/electron-main.js",
"dependencies": { "dependencies": {
"@theia/core": "1.41.0", "@theia/core": "1.57.0",
"@theia/debug": "1.41.0", "@theia/debug": "1.57.0",
"@theia/editor": "1.41.0", "@theia/editor": "1.57.0",
"@theia/electron": "1.41.0", "@theia/electron": "1.57.0",
"@theia/filesystem": "1.41.0", "@theia/filesystem": "1.57.0",
"@theia/keymaps": "1.41.0", "@theia/keymaps": "1.57.0",
"@theia/messages": "1.41.0", "@theia/messages": "1.57.0",
"@theia/monaco": "1.41.0", "@theia/monaco": "1.57.0",
"@theia/navigator": "1.41.0", "@theia/navigator": "1.57.0",
"@theia/plugin-ext": "1.41.0", "@theia/plugin-ext": "1.57.0",
"@theia/plugin-ext-vscode": "1.41.0", "@theia/plugin-ext-vscode": "1.57.0",
"@theia/preferences": "1.41.0", "@theia/preferences": "1.57.0",
"@theia/terminal": "1.41.0", "@theia/terminal": "1.57.0",
"@theia/workspace": "1.41.0", "@theia/workspace": "1.57.0",
"arduino-ide-extension": "2.3.5" "arduino-ide-extension": "2.3.7"
}, },
"devDependencies": { "devDependencies": {
"@theia/cli": "1.41.0", "@theia/cli": "1.57.0",
"7zip-min": "^1.4.4", "7zip-min": "^1.4.4",
"chmodr": "^1.2.0", "chmodr": "^1.2.0",
"compression-webpack-plugin": "^9.0.0", "compression-webpack-plugin": "^9.0.0",
"copy-webpack-plugin": "^8.1.1", "copy-webpack-plugin": "^8.1.1",
"dateformat": "^5.0.3", "dateformat": "^5.0.3",
"electron": "^27.0.3", "electron": "30.1.2",
"electron-builder": "^24.6.4", "electron-builder": "^24.6.4",
"electron-notarize": "^1.1.1", "electron-notarize": "^1.1.1",
"execa": "^7.1.1", "execa": "^7.1.1",
@ -36,7 +36,7 @@
"glob": "^10.3.3", "glob": "^10.3.3",
"is-ci": "^2.0.0", "is-ci": "^2.0.0",
"resolve-package-path": "^4.0.3", "resolve-package-path": "^4.0.3",
"rimraf": "^2.6.1", "rimraf": "^5.0.0",
"semver": "^7.3.2", "semver": "^7.3.2",
"temp": "^0.9.1", "temp": "^0.9.1",
"yaml": "^1.10.2" "yaml": "^1.10.2"
@ -53,7 +53,7 @@
"prepackage": "rimraf dist", "prepackage": "rimraf dist",
"package": "node ./scripts/package.js", "package": "node ./scripts/package.js",
"postpackage": "node ./scripts/post-package.js", "postpackage": "node ./scripts/post-package.js",
"rebuild": "theia rebuild:browser --cacheRoot ../.. && theia rebuild:electron --cacheRoot ../.." "rebuild": "theia rebuild:browser --cacheRoot .. && theia rebuild:electron --cacheRoot .."
}, },
"theia": { "theia": {
"target": "electron", "target": "electron",
@ -66,6 +66,11 @@
}, },
"defaultIconTheme": "none", "defaultIconTheme": "none",
"validatePreferencesSchema": false, "validatePreferencesSchema": false,
"electron": {
"showWindowEarly": true,
"uriScheme": "arduino-ide"
},
"reloadOnReconnect": true,
"preferences": { "preferences": {
"window.title": "${rootName}${activeEditorShort}${appName}", "window.title": "${rootName}${activeEditorShort}${appName}",
"files.autoSave": "afterDelay", "files.autoSave": "afterDelay",
@ -195,29 +200,29 @@
}, },
"theiaPluginsDir": "plugins", "theiaPluginsDir": "plugins",
"theiaPlugins": { "theiaPlugins": {
"vscode-builtin-cpp": "https://open-vsx.org/api/vscode/cpp/1.52.1/file/vscode.cpp-1.52.1.vsix", "vscode-builtin-cpp": "https://open-vsx.org/api/vscode/cpp/1.88.1/file/vscode.cpp-1.88.1.vsix",
"vscode-arduino-api": "https://github.com/dankeboy36/vscode-arduino-api/releases/download/0.1.2/vscode-arduino-api-0.1.2.vsix", "vscode-arduino-api": "https://github.com/dankeboy36/vscode-arduino-api/releases/download/0.1.2/vscode-arduino-api-0.1.2.vsix",
"vscode-arduino-tools": "https://downloads.arduino.cc/vscode-arduino-tools/vscode-arduino-tools-0.1.3.vsix", "vscode-arduino-tools": "https://downloads.arduino.cc/vscode-arduino-tools/vscode-arduino-tools-0.1.3.vsix",
"vscode-builtin-json": "https://open-vsx.org/api/vscode/json/1.46.1/file/vscode.json-1.46.1.vsix", "vscode-builtin-json": "https://open-vsx.org/api/vscode/json/1.88.1/file/vscode.json-1.88.1.vsix",
"vscode-builtin-json-language-features": "https://open-vsx.org/api/vscode/json-language-features/1.46.1/file/vscode.json-language-features-1.46.1.vsix", "vscode-builtin-json-language-features": "https://open-vsx.org/api/vscode/json-language-features/1.88.1/file/vscode.json-language-features-1.88.1.vsix",
"cortex-debug": "https://downloads.arduino.cc/marus25.cortex-debug/marus25.cortex-debug-1.5.1.vsix", "cortex-debug": "https://downloads.arduino.cc/marus25.cortex-debug/marus25.cortex-debug-1.5.1.vsix",
"vscode-language-pack-bg": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-bg/1.48.3/file/MS-CEINTL.vscode-language-pack-bg-1.48.3.vsix", "vscode-language-pack-bg": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-bg/1.48.3/file/MS-CEINTL.vscode-language-pack-bg-1.48.3.vsix",
"vscode-language-pack-cs": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-cs/1.80.0/file/MS-CEINTL.vscode-language-pack-cs-1.80.0.vsix", "vscode-language-pack-cs": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-cs/1.96.0/file/MS-CEINTL.vscode-language-pack-cs-1.96.0.vsix",
"vscode-language-pack-de": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-de/1.80.0/file/MS-CEINTL.vscode-language-pack-de-1.80.0.vsix", "vscode-language-pack-de": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-de/1.96.0/file/MS-CEINTL.vscode-language-pack-de-1.96.0.vsix",
"vscode-language-pack-es": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-es/1.80.0/file/MS-CEINTL.vscode-language-pack-es-1.80.0.vsix", "vscode-language-pack-es": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-es/1.96.0/file/MS-CEINTL.vscode-language-pack-es-1.96.0.vsix",
"vscode-language-pack-fr": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-fr/1.80.0/file/MS-CEINTL.vscode-language-pack-fr-1.80.0.vsix", "vscode-language-pack-fr": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-fr/1.96.0/file/MS-CEINTL.vscode-language-pack-fr-1.96.0.vsix",
"vscode-language-pack-hu": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-hu/1.48.3/file/MS-CEINTL.vscode-language-pack-hu-1.48.3.vsix", "vscode-language-pack-hu": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-hu/1.48.3/file/MS-CEINTL.vscode-language-pack-hu-1.48.3.vsix",
"vscode-language-pack-it": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-it/1.80.0/file/MS-CEINTL.vscode-language-pack-it-1.80.0.vsix", "vscode-language-pack-it": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-it/1.96.0/file/MS-CEINTL.vscode-language-pack-it-1.96.0.vsix",
"vscode-language-pack-ja": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-ja/1.80.0/file/MS-CEINTL.vscode-language-pack-ja-1.80.0.vsix", "vscode-language-pack-ja": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-ja/1.96.0/file/MS-CEINTL.vscode-language-pack-ja-1.96.0.vsix",
"vscode-language-pack-ko": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-ko/1.80.0/file/MS-CEINTL.vscode-language-pack-ko-1.80.0.vsix", "vscode-language-pack-ko": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-ko/1.96.0/file/MS-CEINTL.vscode-language-pack-ko-1.96.0.vsix",
"vscode-language-pack-nl": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-nl/1.48.3/file/MS-CEINTL.vscode-language-pack-nl-1.48.3.vsix", "vscode-language-pack-nl": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-nl/1.48.3/file/MS-CEINTL.vscode-language-pack-nl-1.48.3.vsix",
"vscode-language-pack-pl": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-pl/1.80.0/file/MS-CEINTL.vscode-language-pack-pl-1.80.0.vsix", "vscode-language-pack-pl": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-pl/1.96.0/file/MS-CEINTL.vscode-language-pack-pl-1.96.0.vsix",
"vscode-language-pack-pt-BR": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-pt-BR/1.80.0/file/MS-CEINTL.vscode-language-pack-pt-BR-1.80.0.vsix", "vscode-language-pack-pt-BR": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-pt-BR/1.96.0/file/MS-CEINTL.vscode-language-pack-pt-BR-1.96.0.vsix",
"vscode-language-pack-ru": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-ru/1.80.0/file/MS-CEINTL.vscode-language-pack-ru-1.80.0.vsix", "vscode-language-pack-ru": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-ru/1.96.0/file/MS-CEINTL.vscode-language-pack-ru-1.96.0.vsix",
"vscode-language-pack-tr": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-tr/1.80.0/file/MS-CEINTL.vscode-language-pack-tr-1.80.0.vsix", "vscode-language-pack-tr": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-tr/1.96.0/file/MS-CEINTL.vscode-language-pack-tr-1.96.0.vsix",
"vscode-language-pack-uk": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-uk/1.48.3/file/MS-CEINTL.vscode-language-pack-uk-1.48.3.vsix", "vscode-language-pack-uk": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-uk/1.48.3/file/MS-CEINTL.vscode-language-pack-uk-1.48.3.vsix",
"vscode-language-pack-zh-hans": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.80.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.80.0.vsix", "vscode-language-pack-zh-hans": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hans/1.96.0/file/MS-CEINTL.vscode-language-pack-zh-hans-1.96.0.vsix",
"vscode-language-pack-zh-hant": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hant/1.80.0/file/MS-CEINTL.vscode-language-pack-zh-hant-1.80.0.vsix" "vscode-language-pack-zh-hant": "https://open-vsx.org/api/MS-CEINTL/vscode-language-pack-zh-hant/1.96.0/file/MS-CEINTL.vscode-language-pack-zh-hant-1.96.0.vsix"
}, },
"mocha": { "mocha": {
"reporter": "spec", "reporter": "spec",

View File

@ -6,8 +6,14 @@ const { isNightly, isRelease } = require('./utils');
async function run() { async function run() {
/** @type {string} */ /** @type {string} */
const electronVersion = const rawElectronVersion =
require('../package.json').devDependencies['electron']; require('../package.json').devDependencies['electron'];
const electronVersion = semver.clean(rawElectronVersion.replace(/^\^/, ''));
if (!electronVersion) {
throw new Error(
`Electron semver validation failed for version: '${rawElectronVersion}'.`
);
}
const platform = electronPlatform(); const platform = electronPlatform();
const version = await getVersion(); const version = await getVersion();
/** @type {string|unknown} */ /** @type {string|unknown} */
@ -18,7 +24,7 @@ async function run() {
'--publish', '--publish',
'never', 'never',
'-c.electronVersion', '-c.electronVersion',
electronVersion.slice(1), // removes the leading ^ from the version. TODO: user `semver` to clean it. electronVersion,
'-c.extraMetadata.version', '-c.extraMetadata.version',
version, version,
// overrides the `name` in the `package.json` to keep the `localStorage` location. (https://github.com/arduino/arduino-ide/pull/2144#pullrequestreview-1554005028) // overrides the `name` in the `package.json` to keep the `localStorage` location. (https://github.com/arduino/arduino-ide/pull/2144#pullrequestreview-1554005028)

View File

@ -30,9 +30,9 @@ backend.config.plugins.unshift(
); );
// Override the default entry from Theia as IDE2 has a customization of the module. // Override the default entry from Theia as IDE2 has a customization of the module.
backend.config.entry['nsfw-watcher'] = { backend.config.entry['parcel-watcher'] = {
import: require.resolve( import: require.resolve(
'arduino-ide-extension/lib/node/theia/filesystem/nsfw-watcher' 'arduino-ide-extension/lib/node/theia/filesystem/parcel-watcher'
), ),
library: { library: {
type: 'commonjs2', type: 'commonjs2',

View File

@ -275,6 +275,9 @@
"checkForUpdates": "Check for Arduino IDE Updates", "checkForUpdates": "Check for Arduino IDE Updates",
"closeAndInstallButton": "Close and Install", "closeAndInstallButton": "Close and Install",
"closeToInstallNotice": "Close the software and install the update on your machine.", "closeToInstallNotice": "Close the software and install the update on your machine.",
"donateLinkIconTitle": "open donation page",
"donateLinkText": "donate to support us",
"donateText": "Open source is love, {0}",
"downloadButton": "Aflaai", "downloadButton": "Aflaai",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.", "downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}", "errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
@ -412,7 +415,6 @@
}, },
"sketchbook.location": "Sketsboek ligging", "sketchbook.location": "Sketsboek ligging",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.", "sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"survey.notification": "True if users should be notified if a survey is available. True by default.",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs", "unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"upload": "oplaai", "upload": "oplaai",
"upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.", "upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.",
@ -487,11 +489,6 @@
"newCloudSketch": "New Cloud Sketch", "newCloudSketch": "New Cloud Sketch",
"newSketch": "New Sketch" "newSketch": "New Sketch"
}, },
"survey": {
"answerSurvey": "Answer survey",
"dismissSurvey": "Don't show again",
"surveyMessage": "Please help us improve by answering this super short survey. We value our community and would like to get to know our supporters a little better."
},
"theme": { "theme": {
"currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.", "currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.",
"dark": "Dark", "dark": "Dark",
@ -525,6 +522,14 @@
"renameSketchFolderMessage": "The sketch '{0}' cannot be used. {1} To get rid of this message, rename the sketch. Do you want to rename the sketch now?", "renameSketchFolderMessage": "The sketch '{0}' cannot be used. {1} To get rid of this message, rename the sketch. Do you want to rename the sketch now?",
"renameSketchFolderTitle": "Invalid sketch name" "renameSketchFolderTitle": "Invalid sketch name"
}, },
"versionWelcome": {
"cancelButton": "Maybe later",
"donateButton": "Donate now",
"donateMessage": "Arduino is committed to keeping software free and open-source for everyone. Your donation helps us develop new features, improve libraries, and support millions of users worldwide.",
"donateMessage2": "Please consider supporting our work on the free open source Arduino IDE.",
"title": "Welcome to a new version of the Arduino IDE!",
"titleWithVersion": "Welcome to the new Arduino IDE {0}!"
},
"workspace": { "workspace": {
"alreadyExists": "'{0}' already exists." "alreadyExists": "'{0}' already exists."
} }

View File

@ -275,6 +275,9 @@
"checkForUpdates": "جار التحقق من التحديثات لـ Arduino IDE", "checkForUpdates": "جار التحقق من التحديثات لـ Arduino IDE",
"closeAndInstallButton": "قم بالاغلاق و التحديث", "closeAndInstallButton": "قم بالاغلاق و التحديث",
"closeToInstallNotice": "اغلق البرمجية و حّدث الجهاز الخاص بك ", "closeToInstallNotice": "اغلق البرمجية و حّدث الجهاز الخاص بك ",
"donateLinkIconTitle": "open donation page",
"donateLinkText": "donate to support us",
"donateText": "Open source is love, {0}",
"downloadButton": "حمّل", "downloadButton": "حمّل",
"downloadingNotice": "يتم تحميل اخر نسخة من Arduino IDE", "downloadingNotice": "يتم تحميل اخر نسخة من Arduino IDE",
"errorCheckingForUpdates": "حدث خطأ اثناء البحث عن تحديثات للـ Arduino IDE \n{0}", "errorCheckingForUpdates": "حدث خطأ اثناء البحث عن تحديثات للـ Arduino IDE \n{0}",
@ -412,7 +415,6 @@
}, },
"sketchbook.location": "موقع ملف المشاريع", "sketchbook.location": "موقع ملف المشاريع",
"sketchbook.showAllFiles": "True لعرض كل مجلدات مشاريع داخل المشروع . False افتراضيا", "sketchbook.showAllFiles": "True لعرض كل مجلدات مشاريع داخل المشروع . False افتراضيا",
"survey.notification": "مفعل اذا اراد المستخدم ان يتم تبليغه في حالوجود استطلاع راي . مفعل بشكل افتراضي",
"unofficialBoardSupport": "انقر لعرض قائمة عناوين URL للوحات المدعومة بشكل غير رسمي", "unofficialBoardSupport": "انقر لعرض قائمة عناوين URL للوحات المدعومة بشكل غير رسمي",
"upload": "الرفع", "upload": "الرفع",
"upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.", "upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.",
@ -487,11 +489,6 @@
"newCloudSketch": "مشروع سحابي جديد", "newCloudSketch": "مشروع سحابي جديد",
"newSketch": "مشروع جديد" "newSketch": "مشروع جديد"
}, },
"survey": {
"answerSurvey": "الاجابة على الاستبيان",
"dismissSurvey": "لا تظهر مرة اخرى",
"surveyMessage": "يرجى ان تساعدنا لنحسن ادائنا من خلال الاجابة على هذا الاستبيان القصير جدا . نحن نحترم المجتمع الخاص بنا و نريد ان نتعرف بشكل افضل على داعمينا "
},
"theme": { "theme": {
"currentThemeNotFound": "تعذر الحصول على السمة التي تم اختيارها : {0} . Arduino IDE اختار سمات موجودة مسبقا و متوافقة مع السمة الغير متوفرة", "currentThemeNotFound": "تعذر الحصول على السمة التي تم اختيارها : {0} . Arduino IDE اختار سمات موجودة مسبقا و متوافقة مع السمة الغير متوفرة",
"dark": "غامق", "dark": "غامق",
@ -525,6 +522,14 @@
"renameSketchFolderMessage": "لا يمكن استخدام المشروع '{0}' , {1} قم باعادة تسمية المشروع للتخلص من هذه الرسالة . هل تريد اعادة تسمية المشروع الان؟", "renameSketchFolderMessage": "لا يمكن استخدام المشروع '{0}' , {1} قم باعادة تسمية المشروع للتخلص من هذه الرسالة . هل تريد اعادة تسمية المشروع الان؟",
"renameSketchFolderTitle": "اسم المشروع غير صالح" "renameSketchFolderTitle": "اسم المشروع غير صالح"
}, },
"versionWelcome": {
"cancelButton": "Maybe later",
"donateButton": "Donate now",
"donateMessage": "Arduino is committed to keeping software free and open-source for everyone. Your donation helps us develop new features, improve libraries, and support millions of users worldwide.",
"donateMessage2": "Please consider supporting our work on the free open source Arduino IDE.",
"title": "Welcome to a new version of the Arduino IDE!",
"titleWithVersion": "Welcome to the new Arduino IDE {0}!"
},
"workspace": { "workspace": {
"alreadyExists": "'{0}' موجود مسبقا" "alreadyExists": "'{0}' موجود مسبقا"
} }

View File

@ -275,6 +275,9 @@
"checkForUpdates": "Check for Arduino IDE Updates", "checkForUpdates": "Check for Arduino IDE Updates",
"closeAndInstallButton": "Bağla Və Yüklə", "closeAndInstallButton": "Bağla Və Yüklə",
"closeToInstallNotice": "Close the software and install the update on your machine.", "closeToInstallNotice": "Close the software and install the update on your machine.",
"donateLinkIconTitle": "open donation page",
"donateLinkText": "donate to support us",
"donateText": "Open source is love, {0}",
"downloadButton": "Download", "downloadButton": "Download",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.", "downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}", "errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
@ -412,7 +415,6 @@
}, },
"sketchbook.location": "Sketchbook location", "sketchbook.location": "Sketchbook location",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.", "sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"survey.notification": "True if users should be notified if a survey is available. True by default.",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs", "unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"upload": "upload", "upload": "upload",
"upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.", "upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.",
@ -487,11 +489,6 @@
"newCloudSketch": "New Cloud Sketch", "newCloudSketch": "New Cloud Sketch",
"newSketch": "New Sketch" "newSketch": "New Sketch"
}, },
"survey": {
"answerSurvey": "Answer survey",
"dismissSurvey": "Don't show again",
"surveyMessage": "Please help us improve by answering this super short survey. We value our community and would like to get to know our supporters a little better."
},
"theme": { "theme": {
"currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.", "currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.",
"dark": "Dark", "dark": "Dark",
@ -525,6 +522,14 @@
"renameSketchFolderMessage": "The sketch '{0}' cannot be used. {1} To get rid of this message, rename the sketch. Do you want to rename the sketch now?", "renameSketchFolderMessage": "The sketch '{0}' cannot be used. {1} To get rid of this message, rename the sketch. Do you want to rename the sketch now?",
"renameSketchFolderTitle": "Invalid sketch name" "renameSketchFolderTitle": "Invalid sketch name"
}, },
"versionWelcome": {
"cancelButton": "Maybe later",
"donateButton": "Donate now",
"donateMessage": "Arduino is committed to keeping software free and open-source for everyone. Your donation helps us develop new features, improve libraries, and support millions of users worldwide.",
"donateMessage2": "Please consider supporting our work on the free open source Arduino IDE.",
"title": "Welcome to a new version of the Arduino IDE!",
"titleWithVersion": "Welcome to the new Arduino IDE {0}!"
},
"workspace": { "workspace": {
"alreadyExists": "'{0}' already exists." "alreadyExists": "'{0}' already exists."
} }

View File

@ -13,7 +13,7 @@
"board": { "board": {
"board": "Плата{0}", "board": "Плата{0}",
"boardConfigDialogTitle": "Абярыце іншую плату і порт", "boardConfigDialogTitle": "Абярыце іншую плату і порт",
"boardDataReloaded": "Board data reloaded.", "boardDataReloaded": "Дадзеныя на плату былі загружаныя нанова.",
"boardInfo": "Інфармацыя пра плату", "boardInfo": "Інфармацыя пра плату",
"boards": "платы", "boards": "платы",
"configDialog1": "Абярыце як плату, так і порт, калі вы жадаеце загрузіць сцэнар.", "configDialog1": "Абярыце як плату, так і порт, калі вы жадаеце загрузіць сцэнар.",
@ -32,12 +32,12 @@
"port": "Порт{0}", "port": "Порт{0}",
"ports": "порты", "ports": "порты",
"programmer": "Сродак праграмавання", "programmer": "Сродак праграмавання",
"reloadBoardData": "Reload Board Data", "reloadBoardData": "Загрузіць дадзеныя на плату нанова",
"reselectLater": "Абярыце паўторна пазней", "reselectLater": "Абярыце паўторна пазней",
"revertBoardsConfig": "Ужыта '{0}' выяўлена ў '{1}'", "revertBoardsConfig": "Ужыта '{0}' выяўлена ў '{1}'",
"searchBoard": "Знайсці плату", "searchBoard": "Знайсці плату",
"selectBoard": "Знайсці плату", "selectBoard": "Знайсці плату",
"selectBoardToReload": "Please select a board first.", "selectBoardToReload": "Калі ласка, спачатку абярыце плату.",
"selectPortForInfo": "Калі ласка, абярыце порт, каб атрымаць інфармацыю пра плату.", "selectPortForInfo": "Калі ласка, абярыце порт, каб атрымаць інфармацыю пра плату.",
"showAllAvailablePorts": "Паказвае ўсе даступныя порты, калі яны ўключаныя", "showAllAvailablePorts": "Паказвае ўсе даступныя порты, калі яны ўключаныя",
"showAllPorts": "Паказаць усе порты", "showAllPorts": "Паказаць усе порты",
@ -275,6 +275,9 @@
"checkForUpdates": "Праверыць наяўнасць абнаўленняў Arduino IDE", "checkForUpdates": "Праверыць наяўнасць абнаўленняў Arduino IDE",
"closeAndInstallButton": "Зачыніць і ўсталяваць", "closeAndInstallButton": "Зачыніць і ўсталяваць",
"closeToInstallNotice": "Зачыніце праграмнае забеспячэнне і ўсталюйце абнаўленне на свой кампутар.", "closeToInstallNotice": "Зачыніце праграмнае забеспячэнне і ўсталюйце абнаўленне на свой кампутар.",
"donateLinkIconTitle": "адчыніць старонку ахвяраванняў",
"donateLinkText": "ахвяраваць, каб падтрымаць нас",
"donateText": "Адкрыты зыходны код - гэта любоў, {0}",
"downloadButton": "Спампаваць", "downloadButton": "Спампаваць",
"downloadingNotice": "Пампуе апошнюю версію Arduino IDE.", "downloadingNotice": "Пампуе апошнюю версію Arduino IDE.",
"errorCheckingForUpdates": "Памылка пры праверцы абнаўленняў Arduino IDE.\n{0}", "errorCheckingForUpdates": "Памылка пры праверцы абнаўленняў Arduino IDE.\n{0}",
@ -412,12 +415,11 @@
}, },
"sketchbook.location": "Месцазнаходжанне альбому з сцэнарамі", "sketchbook.location": "Месцазнаходжанне альбому з сцэнарамі",
"sketchbook.showAllFiles": "Калі true, адлюстроўваюцца ўсе файлы сцэнараў унутры сцэнара.\nПершапачаткова false.", "sketchbook.showAllFiles": "Калі true, адлюстроўваюцца ўсе файлы сцэнараў унутры сцэнара.\nПершапачаткова false.",
"survey.notification": "Калі true, карыстальнікі павінны атрымліваць апавяшчэнні аб даступнасці апытання.\nПершапачаткова true.",
"unofficialBoardSupport": "Пстрыкніце, каб праглядзець спіс адрасоў URL падтрымкі неафіцыйных плат", "unofficialBoardSupport": "Пстрыкніце, каб праглядзець спіс адрасоў URL падтрымкі неафіцыйных плат",
"upload": "выгрузіць", "upload": "выгрузіць",
"upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.", "upload.autoVerify": "True, калі IDE павінна аўтаматычна правяраць код перад загрузкай.\nПершапачаткова значэнне роўнае true.\nКалі false, IDE не кампілюе код нанова перад загрузкай двайковага файла на плату.\nНастойліва рэкамендуецца ўсталяваць false толькі калі вы ведаеце, што робіце.",
"upload.verbose": "Калі true, каб быў падрабязны вывад пры загрузцы.\nПершапачаткова false.", "upload.verbose": "Калі true, каб быў падрабязны вывад пры загрузцы.\nПершапачаткова false.",
"upload.verify": "After upload, verify that the contents of the memory on the board match the uploaded binary.", "upload.verify": "Пасля загрузкі пераканайцеся, што змест памяці на плаце адпавядае загружанаму двайковаму файлу.",
"verifyAfterUpload": "Праверыць код пасля выгрузкі", "verifyAfterUpload": "Праверыць код пасля выгрузкі",
"window.autoScale": "Калі true, карыстальніцкі інтэрфейс аўтаматычна маштабуецца ў адпаведнасці з памерам шрыфту.", "window.autoScale": "Калі true, карыстальніцкі інтэрфейс аўтаматычна маштабуецца ў адпаведнасці з памерам шрыфту.",
"window.zoomLevel": { "window.zoomLevel": {
@ -487,11 +489,6 @@
"newCloudSketch": "Новы сцэнар у воблаку", "newCloudSketch": "Новы сцэнар у воблаку",
"newSketch": "Новы сцэнар" "newSketch": "Новы сцэнар"
}, },
"survey": {
"answerSurvey": "Апытанне з адказамі",
"dismissSurvey": "Болей не адлюстроўваць",
"surveyMessage": "Калі ласка, дапамажыце нам стаць лепш, адказаўшы на гэтае звышкароткае апытанне.\nМы цэнім нашу супольнасць і хацелі б даведацца нашых прыхільнікаў трохі лепш."
},
"theme": { "theme": {
"currentThemeNotFound": "Не атрымалася знайсці абраную ў дадзены момант тэму: {0}.\nArduino IDE абрала ўбудаваную тэму, якая сумяшчальная з адсутнай.", "currentThemeNotFound": "Не атрымалася знайсці абраную ў дадзены момант тэму: {0}.\nArduino IDE абрала ўбудаваную тэму, якая сумяшчальная з адсутнай.",
"dark": "Цёмная", "dark": "Цёмная",
@ -525,6 +522,14 @@
"renameSketchFolderMessage": "Сцэнар '{0}' не можа быць ужыты.\n{1} Каб пазбавіцца ад гэтага паведамлення, пераназавіце сцэнар.\nЦі жадаеце вы пераназваць сцэнар?", "renameSketchFolderMessage": "Сцэнар '{0}' не можа быць ужыты.\n{1} Каб пазбавіцца ад гэтага паведамлення, пераназавіце сцэнар.\nЦі жадаеце вы пераназваць сцэнар?",
"renameSketchFolderTitle": "Хібная назва сцэнара" "renameSketchFolderTitle": "Хібная назва сцэнара"
}, },
"versionWelcome": {
"cancelButton": "Можа, пазней",
"donateButton": "Ахвераваць зараз",
"donateMessage": "Arduino імкнецца захаваць праграмнае забеспячэнне бясплатным і з адкрытым зыходным кодам для ўсіх.\nВашыя ахвяраванні дапамагаюць нам распрацоўваць новыя функцыі, удасканальваць бібліятэкі і падтрымліваць мільёны карыстальнікаў па ўсім свеце.",
"donateMessage2": "Калі ласка, падумайце пра падтрымку нашай працы над бясплатнай Arduino IDE з адкрытым зыходным кодам.",
"title": "Сардэчна запрашаем у новую версію Arduino IDE!",
"titleWithVersion": "Сардэчна запрашаем у новае асяроддзе распрацоўкі Arduino IDE {0}!"
},
"workspace": { "workspace": {
"alreadyExists": "{0}' ужо існуе." "alreadyExists": "{0}' ужо існуе."
} }

View File

@ -275,6 +275,9 @@
"checkForUpdates": "Check for Arduino IDE Updates", "checkForUpdates": "Check for Arduino IDE Updates",
"closeAndInstallButton": "Close and Install", "closeAndInstallButton": "Close and Install",
"closeToInstallNotice": "Close the software and install the update on your machine.", "closeToInstallNotice": "Close the software and install the update on your machine.",
"donateLinkIconTitle": "open donation page",
"donateLinkText": "donate to support us",
"donateText": "Open source is love, {0}",
"downloadButton": "Download", "downloadButton": "Download",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.", "downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}", "errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
@ -412,7 +415,6 @@
}, },
"sketchbook.location": "Местоположение на скицника", "sketchbook.location": "Местоположение на скицника",
"sketchbook.showAllFiles": "True , за да се покажат всички файлове вътре в скицата. По подразбиране е false.", "sketchbook.showAllFiles": "True , за да се покажат всички файлове вътре в скицата. По подразбиране е false.",
"survey.notification": "True if users should be notified if a survey is available. True by default.",
"unofficialBoardSupport": "Щракнете за списък с неофициално поддържаните URL адреси на платки", "unofficialBoardSupport": "Щракнете за списък с неофициално поддържаните URL адреси на платки",
"upload": "качване", "upload": "качване",
"upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.", "upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.",
@ -487,11 +489,6 @@
"newCloudSketch": "New Cloud Sketch", "newCloudSketch": "New Cloud Sketch",
"newSketch": "New Sketch" "newSketch": "New Sketch"
}, },
"survey": {
"answerSurvey": "Answer survey",
"dismissSurvey": "Don't show again",
"surveyMessage": "Please help us improve by answering this super short survey. We value our community and would like to get to know our supporters a little better."
},
"theme": { "theme": {
"currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.", "currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.",
"dark": "Dark", "dark": "Dark",
@ -525,6 +522,14 @@
"renameSketchFolderMessage": "The sketch '{0}' cannot be used. {1} To get rid of this message, rename the sketch. Do you want to rename the sketch now?", "renameSketchFolderMessage": "The sketch '{0}' cannot be used. {1} To get rid of this message, rename the sketch. Do you want to rename the sketch now?",
"renameSketchFolderTitle": "Invalid sketch name" "renameSketchFolderTitle": "Invalid sketch name"
}, },
"versionWelcome": {
"cancelButton": "Maybe later",
"donateButton": "Donate now",
"donateMessage": "Arduino is committed to keeping software free and open-source for everyone. Your donation helps us develop new features, improve libraries, and support millions of users worldwide.",
"donateMessage2": "Please consider supporting our work on the free open source Arduino IDE.",
"title": "Welcome to a new version of the Arduino IDE!",
"titleWithVersion": "Welcome to the new Arduino IDE {0}!"
},
"workspace": { "workspace": {
"alreadyExists": "'{0}' already exists." "alreadyExists": "'{0}' already exists."
} }

View File

@ -275,6 +275,9 @@
"checkForUpdates": "Comprova si hi ha actualitzacions de l'IDE d'Arduino", "checkForUpdates": "Comprova si hi ha actualitzacions de l'IDE d'Arduino",
"closeAndInstallButton": "Tanca i instal·la", "closeAndInstallButton": "Tanca i instal·la",
"closeToInstallNotice": "Tanqueu el programari i instal·leu l'actualització a la vostra màquina.", "closeToInstallNotice": "Tanqueu el programari i instal·leu l'actualització a la vostra màquina.",
"donateLinkIconTitle": "open donation page",
"donateLinkText": "donate to support us",
"donateText": "Open source is love, {0}",
"downloadButton": "Descarrega", "downloadButton": "Descarrega",
"downloadingNotice": "Descarregant de l'última versió de l'IDE d'Arduino.", "downloadingNotice": "Descarregant de l'última versió de l'IDE d'Arduino.",
"errorCheckingForUpdates": "S'ha produït un error en comprovar si hi ha actualitzacions de l'IDE d'Arduino.\n{0}", "errorCheckingForUpdates": "S'ha produït un error en comprovar si hi ha actualitzacions de l'IDE d'Arduino.\n{0}",
@ -412,7 +415,6 @@
}, },
"sketchbook.location": "Ubicació del quadern de programes", "sketchbook.location": "Ubicació del quadern de programes",
"sketchbook.showAllFiles": "Si està activat es mostraran els fitxers dins del programa. Per defecte està desactivat.", "sketchbook.showAllFiles": "Si està activat es mostraran els fitxers dins del programa. Per defecte està desactivat.",
"survey.notification": "Si està activat els usuaris seran notificats si hi ha una enquesta disponible. Per defecte està activat.",
"unofficialBoardSupport": "Fes clic per obtenir una llista d'URLs de suport de plaques no oficials", "unofficialBoardSupport": "Fes clic per obtenir una llista d'URLs de suport de plaques no oficials",
"upload": "carrega", "upload": "carrega",
"upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.", "upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.",
@ -487,11 +489,6 @@
"newCloudSketch": "Programa del núvol nou", "newCloudSketch": "Programa del núvol nou",
"newSketch": "Programa nou" "newSketch": "Programa nou"
}, },
"survey": {
"answerSurvey": "Contesta l'enquesta",
"dismissSurvey": "No ho tornes a mostrar",
"surveyMessage": "Ajuda'ns a millorar contestant aquesta enquesta súper curta. Valorem la nostra comunitat i volem conéixer els nostres usuaris un poc millor."
},
"theme": { "theme": {
"currentThemeNotFound": "No s'ha trobat el nom seleccionat: {0}. L'IDE d'Arduino ha agafat un tema compatible amb el que falta.", "currentThemeNotFound": "No s'ha trobat el nom seleccionat: {0}. L'IDE d'Arduino ha agafat un tema compatible amb el que falta.",
"dark": "Fosc", "dark": "Fosc",
@ -525,6 +522,14 @@
"renameSketchFolderMessage": "El programa \"{0}\" no es pot usar. {1} Per obtindre detalls del missatge, reanomena el programa. Vols reanomenar-lo ara?", "renameSketchFolderMessage": "El programa \"{0}\" no es pot usar. {1} Per obtindre detalls del missatge, reanomena el programa. Vols reanomenar-lo ara?",
"renameSketchFolderTitle": "El nom del programa no és vàlid" "renameSketchFolderTitle": "El nom del programa no és vàlid"
}, },
"versionWelcome": {
"cancelButton": "Maybe later",
"donateButton": "Donate now",
"donateMessage": "Arduino is committed to keeping software free and open-source for everyone. Your donation helps us develop new features, improve libraries, and support millions of users worldwide.",
"donateMessage2": "Please consider supporting our work on the free open source Arduino IDE.",
"title": "Welcome to a new version of the Arduino IDE!",
"titleWithVersion": "Welcome to the new Arduino IDE {0}!"
},
"workspace": { "workspace": {
"alreadyExists": "\"{0}\" ja existeix." "alreadyExists": "\"{0}\" ja existeix."
} }

View File

@ -1,28 +1,28 @@
{ {
"arduino": { "arduino": {
"about": { "about": {
"detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}\n\n{4}", "detail": "Verze: {0}\nDatum: {1}[2]\nVerze CLI: {3}{4} [{5}]\n\n{6}",
"label": "O {0}" "label": "O {0}"
}, },
"account": { "account": {
"goToCloudEditor": "Otevřít v cloudovém editoru", "goToCloudEditor": "Otevřít v cloudovém editoru",
"goToIoTCloud": "Go to IoT Cloud", "goToIoTCloud": "Jít do IoT cloudu",
"goToProfile": "Jdi do profilu", "goToProfile": "Jdi do profilu",
"menuTitle": "Arduino Cloud" "menuTitle": "Arduino Cloud"
}, },
"board": { "board": {
"board": "Deska {0}", "board": "Deska {0}",
"boardConfigDialogTitle": "Zvolit jinou Desku a Port", "boardConfigDialogTitle": "Zvolit jinou desku a port",
"boardDataReloaded": "Board data reloaded.", "boardDataReloaded": "Informace o desce znovunačteny",
"boardInfo": "Info o desce", "boardInfo": "Info o desce",
"boards": "Desky", "boards": "Desky",
"configDialog1": "Pokud chcete nahrát sketch, musíte zvolit jak desku tak i port.", "configDialog1": "Pokud chcete nahrát projekt do desky, musíte zvolit jak desku, tak i port.",
"configDialog2": "Pokud zvolíte jen desku, budete schopni kompilovat sketch, ale nebudete ji moci nahrát do desky.", "configDialog2": "Pokud zvolíte pouze desku, budete schopni projekt kompilovat, ale nebudete jej moci nahrát do desky.",
"couldNotFindPreviouslySelected": "Dříve zvolená deska '{0}' v instalované platformě '{1}' nebyla nalezena. Zvolte prosím manuálně desku kterou chcete použít. Chcete tuto desku zvolit nyní? ", "couldNotFindPreviouslySelected": "Dříve zvolená deska '{0}' v instalované platformě '{1}' nebyla nalezena. Zvolte prosím manuálně desku, kterou chcete použít. Chcete tuto desku zvolit nyní? ",
"editBoardsConfig": "Editovat Desku a Port", "editBoardsConfig": "Editovat Desku a Port",
"getBoardInfo": "Získat info o desce.", "getBoardInfo": "Získat info o desce",
"inSketchbook": "(v projektech)", "inSketchbook": "(v projektech)",
"installNow": "\"{0}{1}\" jádro musí být instalováno pro aktuálně zvolenou \"{2}\" desku. Chcete ho nyní nainstalovat?", "installNow": "Jádro \"{0}{1}\" musí být instalováno pro aktuálně zvolenou \"{2}\" desku. Chcete ho nyní nainstalovat?",
"noBoardsFound": "Nenalezeny žádné desky pro \"{0}\"", "noBoardsFound": "Nenalezeny žádné desky pro \"{0}\"",
"noNativeSerialPort": "Fyzický sériový port, nemohu získat informace.", "noNativeSerialPort": "Fyzický sériový port, nemohu získat informace.",
"noPortsDiscovered": "Nenalezeny žádné porty", "noPortsDiscovered": "Nenalezeny žádné porty",
@ -32,12 +32,12 @@
"port": "Port {0}", "port": "Port {0}",
"ports": "porty", "ports": "porty",
"programmer": "Programátor", "programmer": "Programátor",
"reloadBoardData": "Reload Board Data", "reloadBoardData": "Znovunačíst údaje o desce",
"reselectLater": "Zvolit později", "reselectLater": "Zvolit později",
"revertBoardsConfig": "Použij '{0}' objeven na '{1}'", "revertBoardsConfig": "Použij '{0}' objeven na '{1}'",
"searchBoard": "Vyhledat desku", "searchBoard": "Vyhledat desku",
"selectBoard": "Zvolit desku", "selectBoard": "Zvolit desku",
"selectBoardToReload": "Please select a board first.", "selectBoardToReload": "Nejprve zvolte desku",
"selectPortForInfo": "Prosím zvolte port pro získání informací o desce.", "selectPortForInfo": "Prosím zvolte port pro získání informací o desce.",
"showAllAvailablePorts": "Zobrazit všechny dostupné porty (pokud je zaškrtnuto)", "showAllAvailablePorts": "Zobrazit všechny dostupné porty (pokud je zaškrtnuto)",
"showAllPorts": "Ukázat všechny porty", "showAllPorts": "Ukázat všechny porty",
@ -80,22 +80,22 @@
"checkForUpdates": "Kontrola pro aktualizace", "checkForUpdates": "Kontrola pro aktualizace",
"installAll": "Instalovat vše", "installAll": "Instalovat vše",
"noUpdates": "Nejsou k dispozici žádné aktualizace", "noUpdates": "Nejsou k dispozici žádné aktualizace",
"promptUpdateBoards": "Jsou k dispozici aktualizace pro některé z vašich desek ", "promptUpdateBoards": "Pro některé z vašich desek jsou k dispozici aktualizace",
"promptUpdateLibraries": "Jsou k dispozici aktualizace pro některé z vašich knihoven", "promptUpdateLibraries": "Jsou k dispozici aktualizace pro některé z vašich knihoven",
"updatingBoards": "Aktualizuji desky...", "updatingBoards": "Aktualizuji desky...",
"updatingLibraries": "Aktualizuji knihovny..." "updatingLibraries": "Aktualizuji knihovny..."
}, },
"cli-error-parser": { "cli-error-parser": {
"keyboardError": "'Keyboard' nebylo nalezeno. Obsahuje váš projekt řádek '#include <Keyboard.h>'?", "keyboardError": "Keyboard nebylo nalezeno. Nechybí ve vašem projektu řádek #include <Keyboard.h>?",
"mouseError": "'Myš' nebyla nalezena. Obsahuje váš projekt řádek '#include <Mouse.h>'?" "mouseError": "Mouse nebylo nalezeno. Nechybí ve vašem projektu řádek #include <Mouse.h>?"
}, },
"cloud": { "cloud": {
"chooseSketchVisibility": "Zvolte viditelnost sketche:", "chooseSketchVisibility": "Zvolte viditelnost projektu:",
"cloudSketchbook": "Cloudové umístění projektů", "cloudSketchbook": "Cloudové umístění projektů",
"connected": "Připojen", "connected": "Připojen",
"continue": "Pokračovat", "continue": "Pokračovat",
"donePulling": "Done pulling '{0}'.", "donePulling": "Dokončeno stahování '{0}'.",
"donePushing": "Done pushing '{0}'.", "donePushing": "Dokončeno odesílání '{0}'.",
"embed": "Vložit: ", "embed": "Vložit: ",
"emptySketchbook": "Umístění projektů je prázdné", "emptySketchbook": "Umístění projektů je prázdné",
"goToCloud": "Jít na Cloud", "goToCloud": "Jít na Cloud",
@ -105,92 +105,92 @@
"offline": "Nepřipojen", "offline": "Nepřipojen",
"openInCloudEditor": "Otevřít v cloudovém editoru", "openInCloudEditor": "Otevřít v cloudovém editoru",
"options": "Možnosti...", "options": "Možnosti...",
"privateVisibility": "Soukromá. Pouze vy můžete vidět tuto sketch.", "privateVisibility": "Soukromý projekt. Pouze vy jej můžete vidět.",
"profilePicture": "Profilový obrázek", "profilePicture": "Profilový obrázek",
"publicVisibility": "Veřejná. Kdokoli s odkazem může vidět tuto sketch.", "publicVisibility": "Veřejný projekt. Kdokoliv s tímto odkazem jej může vidět.",
"pull": "Stáhnout", "pull": "Stáhnout",
"pullFirst": "Nejprve musíte stáhnout z cloudu, aby bylo možno do něj odeslat.", "pullFirst": "Nejprve musíte stáhnout z cloudu, aby bylo možno do něj odeslat.",
"pullSketch": "Stáhnout sketch", "pullSketch": "Stáhnout projekt",
"pullSketchMsg": "Stažením této sketche z cloudu přepíšete její lokální verzi. Chcete opravdu pokračovat?", "pullSketchMsg": "Stažení tohoto projektu z cloudu přepíše jeho místní verzi. Jste si jisti, že chcete pokračovat?",
"push": "Odeslat", "push": "Odeslat",
"pushSketch": "Odeslat sketch", "pushSketch": "Odeslat projekt",
"pushSketchMsg": "Toto je veřejná sketch. Před odesláním se prosím ujistěte že jsou smazané citlivé informace ze souboru arduino_secrets.h . Tuto sketch můžete změnit na soukromou v panelu pro sdílení. ", "pushSketchMsg": "Toto je veřejný projekt. Před odesláním se prosím ujistěte, že všechny citlivé informace ze souboru arduino_secrets.h jsou smazané. Tento projekt můžete kdykoliv učinit znovu soukromým v panelu sdílení. ",
"remote": "Vzdálený", "remote": "Vzdálený",
"share": "Sdílet...", "share": "Sdílet...",
"shareSketch": "Sdílet sketch", "shareSketch": "Sdílet projekt",
"showHideSketchbook": "Show/Hide Cloud Sketchbook", "showHideSketchbook": "Zobrazit/skrýt cloudové projekty",
"signIn": "Přihlásit se", "signIn": "Přihlásit se",
"signInToCloud": "Přihlásit se do Arduino Cloud", "signInToCloud": "Přihlásit se do Arduino Cloud",
"signOut": "Odhlásit se", "signOut": "Odhlásit se",
"sync": "Synchronizovat", "sync": "Synchronizovat",
"syncEditSketches": "Synchronizovat a editovat sketche v Arduino Cloud", "syncEditSketches": "Synchronizujte a upravujte vaše Arduino cloudové projekty",
"visitArduinoCloud": "Navštivte Arduino Cloud pro vytvoření cloudové sketche" "visitArduinoCloud": "Navštivte Arduino Cloud pro vytvoření cloudového projektu."
}, },
"cloudSketch": { "cloudSketch": {
"alreadyExists": "Cloud sketch '{0}' already exists.", "alreadyExists": "Cloudový projekt '{0}' již existuje.",
"creating": "Creating cloud sketch '{0}'...", "creating": "Vytváření cloudového projektu '{0}'…",
"new": "New Cloud Sketch", "new": "Nový cloudový projekt",
"notFound": "Could not pull the cloud sketch '{0}'. It does not exist.", "notFound": "Nepodařilo se odeslat cloudový projekt '{0}'. Neexistuje.",
"pulling": "Synchronizing sketchbook, pulling '{0}'...", "pulling": "Synchronizace projektů, odesílání '{0}'…",
"pushing": "Synchronizing sketchbook, pushing '{0}'...", "pushing": "Synchronizace projektů, odesílání '{0}'…",
"renaming": "Renaming cloud sketch from '{0}' to '{1}'...", "renaming": "Přejmenovávání cloudového projektu z '{0}' na '{1}'…",
"synchronizingSketchbook": "Synchronizuji projekt..." "synchronizingSketchbook": "Synchronizuji projekt..."
}, },
"common": { "common": {
"all": "Vše", "all": "Vše",
"contributed": "Contributed", "contributed": "Přispěl",
"installManually": "Instalovat ručně", "installManually": "Instalovat ručně",
"later": "Později", "later": "Později",
"noBoardSelected": "Nebyla zvolena deska", "noBoardSelected": "Nebyla zvolena deska",
"noSketchOpened": "No sketch opened", "noSketchOpened": "Žádný otevřený projekt",
"notConnected": "[nepřipojen]", "notConnected": "[nepřipojen]",
"offlineIndicator": "Nejspíše nejste online. Bez Internetového připojení nebude Arduino CLI schopno stáhnout potřebné zdroje a toto může způsobit chybu. Prosím připojte se k Internetu a restartujte aplikaci.", "offlineIndicator": "Nejspíše jste offline. Bez Internetového připojení není Arduino CLI schopno stáhnout potřebné zdroje, a to může způsobit chybu. Prosím připojte se k internetu a restartujte aplikaci.",
"oldFormat": "{0}používá stále starý formát `.pde`. Chcete ho převést na soubor s příponou `.ino`?", "oldFormat": "{0}používá stále starý formát `.pde`. Chcete ho převést na soubor s příponou `.ino`?",
"partner": "Partner", "partner": "Partner",
"processing": "Zpracovávám", "processing": "Zpracovávám",
"recommended": "Doporučené", "recommended": "Doporučené",
"retired": "Zastaralý", "retired": "Zastaralý",
"selectManually": "Select Manually", "selectManually": "Zvolit ručně",
"selectedOn": "zapnuto{0}", "selectedOn": "zapnuto{0}",
"serialMonitor": "Seriový monitor", "serialMonitor": "Seriový monitor",
"type": "typ", "type": "typ",
"unknown": "Neznámý", "unknown": "Neznámý",
"updateable": "Updatable", "updateable": "Aktualizovatelné",
"userAbort": "User abort" "userAbort": "Přerušení uživatelem"
}, },
"compile": { "compile": {
"error": "Chyba kompilace: {0}" "error": "Chyba kompilace: {0}"
}, },
"component": { "component": {
"boardsIncluded": "Boards included in this package:", "boardsIncluded": "Desky obsažené v tomto balíku:",
"by": "od", "by": "od",
"clickToOpen": "Click to open in browser: {0}", "clickToOpen": "Klikněte pro otevření v prohlížeči: {0}",
"filterSearch": "Filtrovat vyhledávání... ", "filterSearch": "Filtrovat vyhledávání... ",
"install": "Instalovat", "install": "Instalovat",
"installLatest": "Install Latest", "installLatest": "Instalovat poslední",
"installVersion": "Install {0}", "installVersion": "Instalovat {0}",
"installed": "{0} installed", "installed": "{0} nainstalováno",
"moreInfo": "Více informací", "moreInfo": "Více informací",
"otherVersions": "Other Versions", "otherVersions": "Ostatní verze",
"remove": "Odstranit", "remove": "Odstranit",
"title": "{0} by {1}", "title": "{0} podle {1}",
"uninstall": "Odinstalovat", "uninstall": "Odinstalovat",
"uninstallMsg": "Chcete odinstalovat {0}?", "uninstallMsg": "Chcete odinstalovat {0}?",
"update": "Update" "update": "Aktualizovat"
}, },
"configuration": { "configuration": {
"cli": { "cli": {
"inaccessibleDirectory": "Could not access the sketchbook location at '{0}': {1}" "inaccessibleDirectory": "Nepodařilo se získat přístup k lokaci projektu v '{0}': {1}"
} }
}, },
"connectionStatus": { "connectionStatus": {
"connectionLost": "Connection lost. Cloud sketch actions and updates won't be available." "connectionLost": "Připojení ztraceno. Cloudové akce a aktualizace nebudou dostupné. "
}, },
"contributions": { "contributions": {
"addFile": "Přidat soubor", "addFile": "Přidat soubor",
"fileAdded": "Soubor byl přidán do sketche.", "fileAdded": "Jeden soubor byl přidán do projektu.",
"plotter": { "plotter": {
"couldNotOpen": "Couldn't open serial plotter" "couldNotOpen": "Nepodařilo se otevřít sériový vykreslovač"
}, },
"replaceTitle": "Vyměnit" "replaceTitle": "Vyměnit"
}, },
@ -203,27 +203,27 @@
} }
}, },
"coreContribution": { "coreContribution": {
"copyError": "Copy error messages", "copyError": "Kopírovat chybové hlášky",
"noBoardSelected": "No board selected. Please select your Arduino board from the Tools > Board menu." "noBoardSelected": "Není vybraná žádná deska. Vyberte vaši desku z Nástroje > Deska nabídky."
}, },
"createCloudCopy": "Push Sketch to Cloud", "createCloudCopy": "Odeslat projekt do cloudu",
"daemon": { "daemon": {
"restart": "Restart Daemon", "restart": "Restartovat Daemon",
"start": "Spustit Daemon", "start": "Spustit Daemon",
"stop": "Zastavit Daemon" "stop": "Zastavit Daemon"
}, },
"debug": { "debug": {
"debugWithMessage": "Debug - {0}", "debugWithMessage": "Debug - {0}",
"debuggingNotSupported": "Debugging není podporován s '{0}'", "debuggingNotSupported": "Debugging není podporován s '{0}'",
"getDebugInfo": "Getting debug info...", "getDebugInfo": "Získat informace o ladění…",
"noPlatformInstalledFor": "Platforma není nainstalována pro '{0}'", "noPlatformInstalledFor": "Platforma není nainstalována pro '{0}'",
"optimizeForDebugging": "optimalizovat pro Debugging", "optimizeForDebugging": "optimalizovat pro Debugging",
"sketchIsNotCompiled": "Sketch '{0}' must be verified before starting a debug session. Please verify the sketch and start debugging again. Do you want to verify the sketch now?" "sketchIsNotCompiled": "Projekt '{0}' musí být ověřený před zahájením relace ladění. Ověřte projekt a zahajte ladění znovu. Přejete si ověřit projekt rovnou?"
}, },
"developer": { "developer": {
"clearBoardList": "Clear the Board List History", "clearBoardList": "Vyčistit historii seznamu desek",
"clearBoardsConfig": "Clear the Board and Port Selection", "clearBoardsConfig": "Vymazat výběr desky a portu",
"dumpBoardList": "Dump the Board List" "dumpBoardList": "Vypsat seznam desek"
}, },
"dialog": { "dialog": {
"dontAskAgain": "Znovu se neptat" "dontAskAgain": "Znovu se neptat"
@ -253,11 +253,11 @@
"failedInstall": "Instalace se nezdařila. Prosím zkuste to později. ", "failedInstall": "Instalace se nezdařila. Prosím zkuste to později. ",
"install": "Instalovat", "install": "Instalovat",
"installingFirmware": "Instaluji firmware.", "installingFirmware": "Instaluji firmware.",
"overwriteSketch": "Instalace přepíše sketch na desce.", "overwriteSketch": "Instalace přepíše projekt nahraný na desce.",
"selectBoard": "Zvolit desku", "selectBoard": "Zvolit desku",
"selectVersion": "Zvolit verzi firmwaru", "selectVersion": "Zvolit verzi firmwaru",
"successfullyInstalled": "Firmware byl úspěšně nainstalován. ", "successfullyInstalled": "Firmware byl úspěšně nainstalován. ",
"updater": "Firmware Updater" "updater": "aktualizační program firmwaru"
}, },
"help": { "help": {
"environment": "Prostředí", "environment": "Prostředí",
@ -275,6 +275,9 @@
"checkForUpdates": "Zkontrolovat aktualizace", "checkForUpdates": "Zkontrolovat aktualizace",
"closeAndInstallButton": "Zavřít a nainstalovat", "closeAndInstallButton": "Zavřít a nainstalovat",
"closeToInstallNotice": "Vypněte program a nainstalujte update na Váš stroj. ", "closeToInstallNotice": "Vypněte program a nainstalujte update na Váš stroj. ",
"donateLinkIconTitle": "otevřít stránku pro darování",
"donateLinkText": "darujte, abyste nás podpořili",
"donateText": "Open source is láska, {0}",
"downloadButton": "Stáhnout", "downloadButton": "Stáhnout",
"downloadingNotice": "Stahuji poslední verzi Arduino IDE.", "downloadingNotice": "Stahuji poslední verzi Arduino IDE.",
"errorCheckingForUpdates": "Nastala chyba při kontrole aktualizací Arduino IDE{0}", "errorCheckingForUpdates": "Nastala chyba při kontrole aktualizací Arduino IDE{0}",
@ -289,8 +292,8 @@
"versionDownloaded": "Arduino IDE {0}bylo staženo." "versionDownloaded": "Arduino IDE {0}bylo staženo."
}, },
"installable": { "installable": {
"libraryInstallFailed": "Failed to install library: '{0}{1}'.", "libraryInstallFailed": "Instalace knihovny '{0}{1}' se nezdařila. ",
"platformInstallFailed": "Failed to install platform: '{0}{1}'." "platformInstallFailed": "Instalace platformy '{0}{1}' se nezdařila. "
}, },
"library": { "library": {
"addZip": "Přidat .ZIP knihovnu...", "addZip": "Přidat .ZIP knihovnu...",
@ -298,10 +301,10 @@
"contributedLibraries": "Přispěné knihovny", "contributedLibraries": "Přispěné knihovny",
"include": "Zahrnout knihovnu", "include": "Zahrnout knihovnu",
"installAll": "Instalovat vše", "installAll": "Instalovat vše",
"installLibraryDependencies": "Install library dependencies", "installLibraryDependencies": "Instalovat závislosti knihovny",
"installMissingDependencies": "Chcete nainstalovat všechny chybějící závislosti? ", "installMissingDependencies": "Chcete nainstalovat všechny chybějící závislosti? ",
"installOneMissingDependency": "Chcete nainstalovat chybějící závislost? ", "installOneMissingDependency": "Chcete nainstalovat chybějící závislost? ",
"installWithoutDependencies": "Install without dependencies", "installWithoutDependencies": "Instalovat bez závislostí",
"installedSuccessfully": "Knihovna {0}:{1}byla úspěšně nainstalována", "installedSuccessfully": "Knihovna {0}:{1}byla úspěšně nainstalována",
"libraryAlreadyExists": "Knihovna již existuje. Chcete jí přepsat?", "libraryAlreadyExists": "Knihovna již existuje. Chcete jí přepsat?",
"manageLibraries": "Spravovat knihovny...", "manageLibraries": "Spravovat knihovny...",
@ -318,42 +321,42 @@
"topic": "Téma" "topic": "Téma"
}, },
"libraryTopic": { "libraryTopic": {
"communication": "Communication", "communication": "Komunikace",
"dataProcessing": "Data Processing", "dataProcessing": "Zpracovávání dat",
"dataStorage": "Data Storage", "dataStorage": "Ukládání dat",
"deviceControl": "Device Control", "deviceControl": "Ovládání zařízení",
"display": "Display", "display": "Displej",
"other": "Jiné", "other": "Jiné",
"sensors": "Senzory", "sensors": "Senzory",
"signalInputOutput": "Signal Input/Output", "signalInputOutput": "Vstup/výstup signálu",
"timing": "Časování", "timing": "Časování",
"uncategorized": "Uncategorized" "uncategorized": "Nezařazeno"
}, },
"libraryType": { "libraryType": {
"installed": "Nainstalováno" "installed": "Nainstalováno"
}, },
"menu": { "menu": {
"advanced": "Pokročilé", "advanced": "Pokročilé",
"sketch": "Sketch", "sketch": "Projekt",
"tools": "Nástroje" "tools": "Nástroje"
}, },
"monitor": { "monitor": {
"alreadyConnectedError": "Could not connect to {0} {1} port. Already connected.", "alreadyConnectedError": "Nepovedlo se připojit k {0} {1} portu. Již připojeno.",
"baudRate": "{0} baud", "baudRate": "{0} baudů",
"connectionFailedError": "Could not connect to {0} {1} port.", "connectionFailedError": "Nepovedlo se připojit k {0} {1} portu.",
"connectionFailedErrorWithDetails": "{0} Could not connect to {1} {2} port.", "connectionFailedErrorWithDetails": "{0} Nepovedlo se připojit k {1} {2} portu.",
"connectionTimeout": "Timeout. The IDE has not received the 'success' message from the monitor after successfully connecting to it", "connectionTimeout": "Vypršel časový limit. IDE neobdrželo od sériového monitoru zprávu o úspěchu po úspěšném připojení",
"missingConfigurationError": "Could not connect to {0} {1} port. The monitor configuration is missing.", "missingConfigurationError": "Nepovedlo se připojit k {0} {1} portu. Chybí konfigurace sériového monitoru.",
"notConnectedError": "Not connected to {0} {1} port.", "notConnectedError": "Nepřipojeno k {0} {1} portu.",
"unableToCloseWebSocket": "Unable to close websocket", "unableToCloseWebSocket": "Nelze uzavřít websocket",
"unableToConnectToWebSocket": "Unable to connect to websocket" "unableToConnectToWebSocket": "Nelze se připojit k websocketu"
}, },
"newCloudSketch": { "newCloudSketch": {
"newSketchTitle": "Name of the new Cloud Sketch" "newSketchTitle": "Název nového cloudového projektu"
}, },
"portProtocol": { "portProtocol": {
"network": "Síť", "network": "Síť",
"serial": "Serial" "serial": "Sériový"
}, },
"preferences": { "preferences": {
"additionalManagerURLs": "Další URL pro manager desek", "additionalManagerURLs": "Další URL pro manager desek",
@ -364,41 +367,41 @@
"automatic": "Automaticky", "automatic": "Automaticky",
"board.certificates": "Seznam certifikátů, které mohou být nahrány na desky", "board.certificates": "Seznam certifikátů, které mohou být nahrány na desky",
"browse": "Procházet", "browse": "Procházet",
"checkForUpdate": "Receive notifications of available updates for the IDE, boards, and libraries. Requires an IDE restart after change. It's true by default.", "checkForUpdate": "Dostávejte oznámení o dostupných aktualizacích pro IDE, desky a knihovny. Po změně vyžaduje restart IDE. Ve výchozím nastavení zapnuto.",
"choose": "Zvolit", "choose": "Zvolit",
"cli.daemonDebug": "Enable debug logging of the gRPC calls to the Arduino CLI. A restart of the IDE is needed for this setting to take effect. It's false by default.", "cli.daemonDebug": "Zapnout ladící logování gRPC volání na Arduino CLI. Pro aplikaci tohoto nastavení je nutný restart IDE. Ve výchozím nastavení vypnuto.",
"cloud.enabled": "Ano pokud je povolená automatická synchronizace sketche. Ano je výchozí hodnota. ", "cloud.enabled": "Zapnuto, pokud jsou zapnuty funkce synchonizace. Ve výchozím nastavení zapnuto.",
"cloud.pull.warn": "Ano pokud by měl být uživatel varován před stahováním cloud sketche. Ano je výchozí hodnota. ", "cloud.pull.warn": "Zapnout, pokud uživatelé mají být varováni před stahování cloudového projektu. Ve výchozím nastavení zapnuto.",
"cloud.push.warn": "Ano pokud by měl být uživatel varován před odesláním cloud sketche. Ano je výchozí hodnota. ", "cloud.push.warn": "Zapnout, pokud uživatelé mají být varováni před odesláním cloudového projektu. Ve výchozím nastavení zapnuto.",
"cloud.pushpublic.warn": "Ano pokud by měl být uživatel varován před odesláním veřejné sketche do cloudu. Ano je výchozí hodnota. ", "cloud.pushpublic.warn": "Zapnout, pokud uživatelé mají být varováni před odesláním veřejného projektu do cloudu. Ve výchozím nastavení zapnuto. ",
"cloud.sharedSpaceId": "The ID of the Arduino Cloud shared space to load the sketchbook from. If empty, your private space is selected.", "cloud.sharedSpaceId": "ID sdíleného prostoru Arduino Cloud, z nějž se načítají projekty. Pokud je prázdné, je vybrán váš soukromý prostor.",
"cloud.sketchSyncEndpoint": "Endpoint použitý pro stahování a odesílání sketchí z backendu. Ve výchozím stavu je toto směrováno na Arduino Cloud API.", "cloud.sketchSyncEndpoint": "Koncový bod používaný k odesílání a stahování projektů ze vzdáleného úložiště. Ve výchozím nastavení směřuje na API Arduino Cloud.",
"compile": "kompilovat", "compile": "kompilovat",
"compile.experimental": "True if the IDE should handle multiple compiler errors. False by default", "compile.experimental": "Zapnout, pokud má IDE zpracovávat více chyb kompilátoru. Ve výchozím nastavení vypnuto.",
"compile.revealRange": "Adjusts how compiler errors are revealed in the editor after a failed verify/upload. Possible values: 'auto': Scroll vertically as necessary and reveal a line. 'center': Scroll vertically as necessary and reveal a line centered vertically. 'top': Scroll vertically as necessary and reveal a line close to the top of the viewport, optimized for viewing a code definition. 'centerIfOutsideViewport': Scroll vertically as necessary and reveal a line centered vertically only if it lies outside the viewport. The default value is '{0}'.", "compile.revealRange": "Upravuje způsob, jakým jsou chyby kompilátoru zobrazeny v editoru po neúspěšném ověření/nahrání. Možné hodnoty: „auto\": Posune zobrazení svisle podle potřeby a zobrazí řádek. „center\": Posune zobrazení svisle podle potřeby a zobrazí řádek ve středu. „top\": Posune zobrazení svisle podle potřeby a zobrazí řádek blízko horní části okna, optimalizováno pro zobrazení definice kódu. „centerIfOutsideViewport\": Posune zobrazení svisle podle potřeby a zobrazí řádek ve středu pouze pokud je mimo aktuální zobrazení. Výchozí hodnota je '{0}'.",
"compile.verbose": "Ano pro podrobný výstup při kompilaci. Ne je výchozí hodnota. ", "compile.verbose": "Ano pro podrobný výstup při kompilaci. Ne je výchozí hodnota. ",
"compile.warnings": "Řekne gcc který stupeň varování se má použít. \"Žádný\" je výchozí hodnota. ", "compile.warnings": "Řekne gcc který stupeň varování se má použít. \"Žádný\" je výchozí hodnota. ",
"compilerWarnings": "Varování kompileru", "compilerWarnings": "Varování kompileru",
"editorFontSize": "Editor velikosti fontu", "editorFontSize": "Editor velikosti fontu",
"editorQuickSuggestions": "Rychlá nápověda v editoru", "editorQuickSuggestions": "Rychlá nápověda v editoru",
"enterAdditionalURLs": "Vložte další URL, jednu pro každý řádek", "enterAdditionalURLs": "Vložte další URL, jednu pro každý řádek",
"files.inside.sketches": "Zobrazit soubory uvnitř sketche", "files.inside.sketches": "Zobrazit soubory uvnitř projektů",
"ide.updateBaseUrl": "The base URL where to download updates from. Defaults to 'https://downloads.arduino.cc/arduino-ide'", "ide.updateBaseUrl": "Základní URL, z níž se stahují aktualizace. Ve výchozím nastavení: 'https://downloads.arduino.cc/arduino-ide'.",
"ide.updateChannel": "Výběr kanálu pro aktualizace. 'stable' pro stabilní vydání, 'nightly' pro nejnovější vývojové verze.", "ide.updateChannel": "Výběr kanálu pro aktualizace. 'stable' pro stabilní vydání, 'nightly' pro nejnovější vývojové verze.",
"interfaceScale": "Velikost rozhraní", "interfaceScale": "Velikost rozhraní",
"invalid.editorFontSize": "Neplatná velikost editoru písem: Toto číslo musí být kladné.", "invalid.editorFontSize": "Neplatná velikost editoru písem: Toto číslo musí být kladné.",
"invalid.sketchbook.location": "Neplatné umístění projektů:{0}", "invalid.sketchbook.location": "Neplatné umístění projektů:{0}",
"invalid.theme": "Neplatné téma.", "invalid.theme": "Neplatné téma.",
"language.asyncWorkers": "Number of async workers used by the Arduino Language Server (clangd). Background index also uses this many workers. The minimum value is 0, and the maximum is 8. When it is 0, the language server uses all available cores. The default value is 0.", "language.asyncWorkers": "Počet asynchronních pracovníků async workers používaných Arduino Language Serverem (clangd). Indexování na pozadí používá také tento počet pracovníků. Minimální hodnota je 0 a maximální 8. Při hodnotě 0 používá jazykový server všechna dostupná jádra. Výchozí hodnota je 0.",
"language.log": "Ano pokud by jazykový server pro Arduino měl generovat logovací soubory do složky se sketchi, jinak ne. Ne je výchozí hodnota.", "language.log": "Zapnout, aby Arduino Language Server vytvářel soubory `.log` do složek projektů. Jinak vypnuto. Ve výchozím nastavení vypnuto. ",
"language.realTimeDiagnostics": "If true, the language server provides real-time diagnostics when typing in the editor. It's false by default.", "language.realTimeDiagnostics": "Pokud je zapnuto, jazykový server poskytuje diagnostiku v reálném čase při psaní v editoru. Ve výchozím nastavení vypnuto.",
"manualProxy": "Ruční nastavení proxy", "manualProxy": "Ruční nastavení proxy",
"monitor": { "monitor": {
"dockPanel": "The area of the application shell where the _{0}_ widget will reside. It is either \"bottom\" or \"right\". It defaults to \"{1}\"." "dockPanel": "Oblast aplikačního prostředí, kde bude umístěn widget _{0}_. Může být buď „bottom\" dole nebo „right\" vpravo. Výchozí hodnota je „{1}\"."
}, },
"network": "Síť", "network": "Síť",
"newSketchbookLocation": "Zvolit nové umístění projektů", "newSketchbookLocation": "Zvolit nové umístění projektů",
"noCliConfig": "Could not load the CLI configuration", "noCliConfig": "Nepovedlo se načíst CLI konfiguraci",
"noProxy": "Bez proxy", "noProxy": "Bez proxy",
"proxySettings": { "proxySettings": {
"hostname": "Jméno hosta", "hostname": "Jméno hosta",
@ -408,71 +411,70 @@
}, },
"showVerbose": "Zobrazit podrobný výstup během", "showVerbose": "Zobrazit podrobný výstup během",
"sketch": { "sketch": {
"inoBlueprint": "Absolute filesystem path to the default `.ino` blueprint file. If specified, the content of the blueprint file will be used for every new sketch created by the IDE. The sketches will be generated with the default Arduino content if not specified. Unaccessible blueprint files are ignored. **A restart of the IDE is needed** for this setting to take effect." "inoBlueprint": "Cesta v souborovém systému k výchozí šabloně souborů `.ino`. Pokud je specifikována, obsah této šablony bude použit pro každý nový projekt vytvořený v IDE. Pokud není specifikována, projekty budou generovány s výchozím Arduino obsahem. Nedostupné šablony jsou ignorovány. Pro aplikaci tohoto nastavení **je potřeba restartovat IDE**."
}, },
"sketchbook.location": "Umístění sketche", "sketchbook.location": "Umístění projektu",
"sketchbook.showAllFiles": "Ano pro zobrazení všech souborů sketche. Ne je výchozí hodnota. ", "sketchbook.showAllFiles": "Zapnout zobrazování všech projektů uvnitř projektu. Ve výchozím nastavení vypnuto.",
"survey.notification": "True if users should be notified if a survey is available. True by default.",
"unofficialBoardSupport": "Zde klikněte pro seznam adres neoficiálně podporovaných desek", "unofficialBoardSupport": "Zde klikněte pro seznam adres neoficiálně podporovaných desek",
"upload": "nahrát", "upload": "nahrát",
"upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.", "upload.autoVerify": "Zapnout, pokud má IDE automaticky ověřit kód před nahráním. Ve výchozím nastavení zapnuto. Pokud je tato hodnota vypnuta, IDE nekompiluje kód znovu před nahráním binárního souboru na desku. Nanejvýš důrazně se doporučuje nastavit tuto hodnotu na vypnuto pouze, pokud jste si naprosto jisti tím, že víte, co děláte.",
"upload.verbose": "Ano pro podrobný výstup při nahrávání. Ne je výchozí hodnota. ", "upload.verbose": "Ano pro podrobný výstup při nahrávání. Ne je výchozí hodnota. ",
"upload.verify": "After upload, verify that the contents of the memory on the board match the uploaded binary.", "upload.verify": "Po nahrání ověřte, že obsah paměti na desce odpovídá nahranému binárnímu souboru.",
"verifyAfterUpload": "Kontrolovat kód po nahrání", "verifyAfterUpload": "Kontrolovat kód po nahrání",
"window.autoScale": "Ano pokud se měřítko uživatelského prostředí automaticky mění s velikostí písma. ", "window.autoScale": "Ano pokud se měřítko uživatelského prostředí automaticky mění s velikostí písma. ",
"window.zoomLevel": { "window.zoomLevel": {
"deprecationMessage": "Deprecated. Use 'window.zoomLevel' instead." "deprecationMessage": "Zastaralé. Použijte místo toho 'window.zoomLevel'."
} }
}, },
"renameCloudSketch": { "renameCloudSketch": {
"renameSketchTitle": "New name of the Cloud Sketch" "renameSketchTitle": "Nový název cloudového projektu"
}, },
"replaceMsg": "Vyměnit existující verzi {0}?", "replaceMsg": "Vyměnit existující verzi {0}?",
"selectZip": "Zvolte ZIP soubor s knihovnou kterou chcete přidat", "selectZip": "Zvolte ZIP soubor s knihovnou kterou chcete přidat",
"serial": { "serial": {
"autoscroll": "Autoscroll", "autoscroll": "Autoscroll",
"carriageReturn": "Enter (CR)", "carriageReturn": "Enter (CR)",
"connecting": "Connecting to '{0}' on '{1}'...", "connecting": "Připojování k '{0}' na '{1}'…",
"message": "Message (Enter to send message to '{0}' on '{1}')", "message": "Zpráva (Enter pro odeslání zprávy do '{0}' na '{1}')",
"newLine": "Nový řádek (NL)", "newLine": "Nový řádek (NL)",
"newLineCarriageReturn": "Oba NL & CR", "newLineCarriageReturn": "Oba NL & CR",
"noLineEndings": "Bez konce řádku", "noLineEndings": "Bez konce řádku",
"notConnected": "Nepřipojen. Zvolte desku a port pro automatické připojení.", "notConnected": "Nepřipojen. Zvolte desku a port pro automatické připojení.",
"openSerialPlotter": "Serial Plotter", "openSerialPlotter": "Sériový vykreslovač",
"timestamp": "Časová značka", "timestamp": "Časová značka",
"toggleTimestamp": "Přepnout časovou značku" "toggleTimestamp": "Přepnout časovou značku"
}, },
"sketch": { "sketch": {
"archiveSketch": "Archivovat sketch", "archiveSketch": "Archivovat projekt",
"cantOpen": "Složka s názvem \"{0}\" již existuje, proto nemohu otevřít sketch. ", "cantOpen": "Složka s názvem \"{0}\" již existuje, proto nelze projekt otevřít. ",
"compile": "Compiling sketch...", "compile": "Kompiluji projekt…",
"configureAndUpload": "Configure and Upload", "configureAndUpload": "Nastavit a nahrát",
"createdArchive": "Vytvořen archív '{0}'.", "createdArchive": "Vytvořen archív '{0}'.",
"doneCompiling": "Ověřování dokončeno.", "doneCompiling": "Ověřování dokončeno.",
"doneUploading": "Nahrávání dokončeno. ", "doneUploading": "Nahrávání dokončeno. ",
"editInvalidSketchFolderLocationQuestion": "Do you want to try saving the sketch to a different location?", "editInvalidSketchFolderLocationQuestion": "Chcete zkusit projekt uložit s jiným umístěním?",
"editInvalidSketchFolderQuestion": "Do you want to try saving the sketch with a different name?", "editInvalidSketchFolderQuestion": "Chcete zkusit projekt uložit s jiným názvem?",
"exportBinary": "Exportovat kompilované soubory", "exportBinary": "Exportovat kompilované soubory",
"invalidCloudSketchName": "The name must start with a letter, number, or underscore, followed by letters, numbers, dashes, dots and underscores. Maximum length is 36 characters.", "invalidCloudSketchName": "Název musí začínat písmenem, číslicí nebo podtržítkem, za nímž následují písmena, číslice, pomlčky, tečky a podtržítka. Maximální délka názvu činí 36 znaků.",
"invalidSketchFolderLocationDetails": "You cannot save a sketch into a folder inside itself.", "invalidSketchFolderLocationDetails": "Projekt nelze uložit do složky uvnitř sebe sama.",
"invalidSketchFolderLocationMessage": "Invalid sketch folder location: '{0}'", "invalidSketchFolderLocationMessage": "Neplatné umístění složky projektu: '{0}'",
"invalidSketchFolderNameMessage": "Invalid sketch folder name: '{0}'", "invalidSketchFolderNameMessage": "Neplatný název složky projektu '{0}'",
"invalidSketchName": "The name must start with a letter, number, or underscore, followed by letters, numbers, dashes, dots and underscores. Maximum length is 63 characters.", "invalidSketchName": "Název musí začínat písmenem, číslicí nebo podtržítkem, za nímž následují písmena, číslice, pomlčky, tečky a podtržítka. Maximální délka názvu činí 63 znaků.",
"moving": "Přesouvám", "moving": "Přesouvám",
"movingMsg": "Soubor \"{0}\" musí být uvnitř složky která je shodná názvem \"{1}\".\nVytvořit složku, přesunout tam- soubor a pokračovat? ", "movingMsg": "Soubor \"{0}\" musí být uvnitř složky pojmenované \"{1}\".\nVytvořit složku, přesunout do ní soubor a pokračovat?",
"new": "New Sketch", "new": "Nový projekt",
"noTrailingPeriod": "A filename cannot end with a dot", "noTrailingPeriod": "Název souboru nemůže končit tečkou",
"openFolder": "Otevřít složku", "openFolder": "Otevřít složku",
"openRecent": "Otevřít nedávné", "openRecent": "Otevřít nedávné",
"openSketchInNewWindow": "Otevřít sketch v novém okně", "openSketchInNewWindow": "Otevřít projekt v novém okně",
"reservedFilename": "'{0}' is a reserved filename.", "reservedFilename": "'{0}' je vyhrazený název souboru.",
"saveFolderAs": "Uložit složku sketche jako...", "saveFolderAs": "Uložit projekt jako…",
"saveSketch": "Uložte svůj sketch, abyste ho mohli znovu otevřít později.", "saveSketch": "Uložte svůj projekt, abyste ho mohli znovu otevřít později.",
"saveSketchAs": "Uložit složku sketche jako...", "saveSketchAs": "Uložit složku projektu jako…",
"showFolder": "Zobrazit složku sketche", "showFolder": "Zobrazit složku projektu",
"sketch": "Sketch", "sketch": "Projekt",
"sketchAlreadyContainsThisFileError": "The sketch already contains a file named '{0}'", "sketchAlreadyContainsThisFileError": "Projekt již obsahuje soubor pojmenovaný {0}",
"sketchAlreadyContainsThisFileMessage": "Failed to save sketch \"{0}\" as \"{1}\". {2}", "sketchAlreadyContainsThisFileMessage": "Nepovedlo se uložit projekt „{0}“ jako „{1}“. {2}",
"sketchbook": "Projekty", "sketchbook": "Projekty",
"titleLocalSketchbook": "Složka lokálních projektů", "titleLocalSketchbook": "Složka lokálních projektů",
"titleSketchbook": "Projekty", "titleSketchbook": "Projekty",
@ -484,30 +486,25 @@
"verifyOrCompile": "Ověřit/Kompilovat" "verifyOrCompile": "Ověřit/Kompilovat"
}, },
"sketchbook": { "sketchbook": {
"newCloudSketch": "New Cloud Sketch", "newCloudSketch": "Nový cloudový projekt",
"newSketch": "New Sketch" "newSketch": "Nový projekt"
},
"survey": {
"answerSurvey": "Answer survey",
"dismissSurvey": "Znovu nezobrazovat",
"surveyMessage": "Please help us improve by answering this super short survey. We value our community and would like to get to know our supporters a little better."
}, },
"theme": { "theme": {
"currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.", "currentThemeNotFound": "Nelze najít aktuálně vybrané téma: {0}. Arduino IDE vybralo vestavěné téma kompatibilní s chybějícím tématem.",
"dark": "Dark", "dark": "Tmavý",
"deprecated": "{0} (deprecated)", "deprecated": "{0} (zastaralé)",
"hc": "Dark High Contrast", "hc": "Tmavý s vysokým kontrastem",
"hcLight": "Light High Contrast", "hcLight": "Světlý s vysokým kontrastem",
"light": "Light", "light": "Světlý",
"user": "{0} (user)" "user": "{0} (uživatel)"
}, },
"title": { "title": {
"cloud": "Cloud" "cloud": "Cloud"
}, },
"updateIndexes": { "updateIndexes": {
"updateIndexes": "Update Indexes", "updateIndexes": "Aktualizovat indexy",
"updateLibraryIndex": "Update Library Index", "updateLibraryIndex": "Aktualizovat index knihoven",
"updatePackageIndex": "Update Package Index" "updatePackageIndex": "Aktualizovat index balíků"
}, },
"upload": { "upload": {
"error": "{0}chyba: {1}" "error": "{0}chyba: {1}"
@ -518,22 +515,30 @@
"upload": "Nahrát" "upload": "Nahrát"
}, },
"validateSketch": { "validateSketch": {
"abortFixMessage": "The sketch is still invalid. Do you want to fix the remaining problems? By clicking '{0}', a new sketch will open.", "abortFixMessage": "Projekt je stále neplatný. Přejete si opravit zbývající problémy? Kliknutím na '{0}' se otevře nový projekt.",
"abortFixTitle": "Invalid sketch", "abortFixTitle": "Neplatný projekt",
"renameSketchFileMessage": "The sketch file '{0}' cannot be used. {1} Do you want to rename the sketch file now?", "renameSketchFileMessage": "Projekt '{0}' nelze použít. {1} Přejete si jej teď přejmenovat?",
"renameSketchFileTitle": "Invalid sketch filename", "renameSketchFileTitle": "Neplatný název projektu",
"renameSketchFolderMessage": "The sketch '{0}' cannot be used. {1} To get rid of this message, rename the sketch. Do you want to rename the sketch now?", "renameSketchFolderMessage": "Projekt '{0}' nelze použít. {1} Chcete-li se této zprávy zbavit, přejmenujte jej. Přejete si projekt teď přejmenovat?",
"renameSketchFolderTitle": "Invalid sketch name" "renameSketchFolderTitle": "Neplatný název projektu"
},
"versionWelcome": {
"cancelButton": "Možná později.",
"donateButton": "Darujte teď! 😀",
"donateMessage": "Arduino se zavázalo udržovat software zdarma a s otevřeným zdrojovým kódem pro všechny. Váš příspěvek nám pomáhá vyvíjet nové funkce, vylepšovat knihovny a podporovat miliony uživatelů po celém světě.",
"donateMessage2": "Zvažte prosím podporu naší práce na bezplatném a open source Arduino IDE.",
"title": "Vítejte v nové verzi Arduina IDE!",
"titleWithVersion": "Vítejte v novém Arduino IDE {0}!"
}, },
"workspace": { "workspace": {
"alreadyExists": "'{0}' already exists." "alreadyExists": "'{0}' již existuje."
} }
}, },
"theia": { "theia": {
"core": { "core": {
"cannotConnectBackend": "Nebylo možné se připojit k backendu. ", "cannotConnectBackend": "Nebylo možné se připojit k backendu. ",
"cannotConnectDaemon": "Nebylo možné se připojit k CLI Daemon.", "cannotConnectDaemon": "Nebylo možné se připojit k CLI Daemon.",
"couldNotSave": "Nebylo možné uložit sketch. Zkopírujte prosím neuloženou práci do Vašeho oblíbeného textového editoru a restartujte IDE. ", "couldNotSave": "Nebylo možné projekt uložit. Zkopírujte prosím neuloženou práci do vašeho oblíbeného textového editoru a restartujte IDE. ",
"daemonOffline": "CLI Daemon nepřipojen", "daemonOffline": "CLI Daemon nepřipojen",
"offline": "Nepřipojen", "offline": "Nepřipojen",
"offlineText": "Nepřipojen", "offlineText": "Nepřipojen",
@ -547,8 +552,8 @@
"expand": "Rozšířit" "expand": "Rozšířit"
}, },
"workspace": { "workspace": {
"deleteCloudSketch": "The cloud sketch '{0}' will be permanently deleted from the Arduino servers and the local caches. This action is irreversible. Do you want to delete the current sketch?", "deleteCloudSketch": "Cloudový projekt '{0}' bude navždy smazán z Arduino serverů a místní mezipaměti. Tato akce je nevratná. Přejete si pokračovat?",
"deleteCurrentSketch": "The sketch '{0}' will be permanently deleted. This action is irreversible. Do you want to delete the current sketch?", "deleteCurrentSketch": "Projekt '{0}' bude navždy smazán. Tato akce je nevratná. Přejete si pokračovat?",
"fileNewName": "Název pro nový soubor", "fileNewName": "Název pro nový soubor",
"invalidExtension": ".{0}je neplatná přípona", "invalidExtension": ".{0}je neplatná přípona",
"newFileName": "Nový název souboru" "newFileName": "Nový název souboru"

View File

@ -2,28 +2,28 @@
"arduino": { "arduino": {
"about": { "about": {
"detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}\n\n{4}", "detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}\n\n{4}",
"label": "About {0}" "label": "Om 1{0}"
}, },
"account": { "account": {
"goToCloudEditor": "Go to Cloud Editor", "goToCloudEditor": "Gå til Cloud Editor",
"goToIoTCloud": "Go to IoT Cloud", "goToIoTCloud": "Gå til IoT Cloud",
"goToProfile": "Go to Profile", "goToProfile": "Gå til Profil",
"menuTitle": "Arduino Cloud" "menuTitle": "Arduino Cloud"
}, },
"board": { "board": {
"board": "Board{0}", "board": "Board{0}",
"boardConfigDialogTitle": "Select Other Board and Port", "boardConfigDialogTitle": "Vælg andet Board og Port",
"boardDataReloaded": "Board data reloaded.", "boardDataReloaded": "Board data genhentet",
"boardInfo": "Board Info", "boardInfo": "Board info",
"boards": "boards", "boards": "Boards",
"configDialog1": "Select both a Board and a Port if you want to upload a sketch.", "configDialog1": "Vælg både et Board og en Port, hvis du ønsker at oploade en skitse",
"configDialog2": "If you only select a Board you will be able to compile, but not to upload your sketch.", "configDialog2": "Hvis du kun vælger et Board, vil du kunne kompilere, men ikke uploade din skitse.",
"couldNotFindPreviouslySelected": "Could not find previously selected board '{0}' in installed platform '{1}'. Please manually reselect the board you want to use. Do you want to reselect it now?", "couldNotFindPreviouslySelected": "Kunne ikke finde tidligere valgte board '1 {0}' i installerede platform '2 {1}'. Vælg venligst det board du ønsker at anvende. Ønsker du at vælge det nu?",
"editBoardsConfig": "Edit Board and Port...", "editBoardsConfig": "Ret Board og Port...",
"getBoardInfo": "Get Board Info", "getBoardInfo": "Hent Board info",
"inSketchbook": " (in Sketchbook)", "inSketchbook": "(I skitsebog)",
"installNow": "The \"{0} {1}\" core has to be installed for the currently selected \"{2}\" board. Do you want to install it now?", "installNow": "\" 1 {0} 2 {1} \" kerne skal installeres for det nuværende valgte \" 3 {2}\" board. Vil du installere det nu?",
"noBoardsFound": "No boards found for \"{0}\"", "noBoardsFound": "Intet board fundet for \" 1 {0} \"",
"noNativeSerialPort": "Native serial port, can't obtain info.", "noNativeSerialPort": "Native serial port, can't obtain info.",
"noPortsDiscovered": "No ports discovered", "noPortsDiscovered": "No ports discovered",
"nonSerialPort": "Non-serial port, can't obtain info.", "nonSerialPort": "Non-serial port, can't obtain info.",
@ -275,6 +275,9 @@
"checkForUpdates": "Check for Arduino IDE Updates", "checkForUpdates": "Check for Arduino IDE Updates",
"closeAndInstallButton": "Close and Install", "closeAndInstallButton": "Close and Install",
"closeToInstallNotice": "Close the software and install the update on your machine.", "closeToInstallNotice": "Close the software and install the update on your machine.",
"donateLinkIconTitle": "open donation page",
"donateLinkText": "donate to support us",
"donateText": "Open source is love, {0}",
"downloadButton": "Download", "downloadButton": "Download",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.", "downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}", "errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
@ -412,7 +415,6 @@
}, },
"sketchbook.location": "Sketchbook location", "sketchbook.location": "Sketchbook location",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.", "sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"survey.notification": "True if users should be notified if a survey is available. True by default.",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs", "unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"upload": "upload", "upload": "upload",
"upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.", "upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.",
@ -487,11 +489,6 @@
"newCloudSketch": "New Cloud Sketch", "newCloudSketch": "New Cloud Sketch",
"newSketch": "New Sketch" "newSketch": "New Sketch"
}, },
"survey": {
"answerSurvey": "Answer survey",
"dismissSurvey": "Don't show again",
"surveyMessage": "Please help us improve by answering this super short survey. We value our community and would like to get to know our supporters a little better."
},
"theme": { "theme": {
"currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.", "currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.",
"dark": "Dark", "dark": "Dark",
@ -525,6 +522,14 @@
"renameSketchFolderMessage": "The sketch '{0}' cannot be used. {1} To get rid of this message, rename the sketch. Do you want to rename the sketch now?", "renameSketchFolderMessage": "The sketch '{0}' cannot be used. {1} To get rid of this message, rename the sketch. Do you want to rename the sketch now?",
"renameSketchFolderTitle": "Invalid sketch name" "renameSketchFolderTitle": "Invalid sketch name"
}, },
"versionWelcome": {
"cancelButton": "Maybe later",
"donateButton": "Donate now",
"donateMessage": "Arduino is committed to keeping software free and open-source for everyone. Your donation helps us develop new features, improve libraries, and support millions of users worldwide.",
"donateMessage2": "Please consider supporting our work on the free open source Arduino IDE.",
"title": "Welcome to a new version of the Arduino IDE!",
"titleWithVersion": "Welcome to the new Arduino IDE {0}!"
},
"workspace": { "workspace": {
"alreadyExists": "'{0}' already exists." "alreadyExists": "'{0}' already exists."
} }

View File

@ -12,12 +12,12 @@
}, },
"board": { "board": {
"board": "Board{0}", "board": "Board{0}",
"boardConfigDialogTitle": " Anderes Board und anderen Ports wählen", "boardConfigDialogTitle": "Andere Boards und Ports wählen",
"boardDataReloaded": "Board data reloaded.", "boardDataReloaded": "Board Daten neu gelesen.",
"boardInfo": "Board-Informationen", "boardInfo": "Board-Informationen",
"boards": "Boards", "boards": "Boards",
"configDialog1": " Wähle ein Board und einen Port, wenn du den Sketch hochladen möchtest.", "configDialog1": " Wähle ein Board und einen Port, wenn du den Sketch hochladen möchtest.",
"configDialog2": "Wenn Sie nur ein Board auswählen, werden Sie den Sketch nur kompilieren können, jedoch nicht hochladen.", "configDialog2": " Wenn du nur das Board und keinen Port wählst, kannst du den Sketch kompilieren, aber nicht hochladen.",
"couldNotFindPreviouslySelected": " Das vorher gewählte Board '{0}' gehört nicht zur installierten Plattform '{1}'. Möchtest du das Board neu auswählen?", "couldNotFindPreviouslySelected": " Das vorher gewählte Board '{0}' gehört nicht zur installierten Plattform '{1}'. Möchtest du das Board neu auswählen?",
"editBoardsConfig": "Board und Port ändern...", "editBoardsConfig": "Board und Port ändern...",
"getBoardInfo": "Board-Infos abrufen", "getBoardInfo": "Board-Infos abrufen",
@ -32,12 +32,12 @@
"port": "Port{0}", "port": "Port{0}",
"ports": "Ports", "ports": "Ports",
"programmer": "Programmer", "programmer": "Programmer",
"reloadBoardData": "Reload Board Data", "reloadBoardData": "Board Daten neuladen",
"reselectLater": "Später auswählen", "reselectLater": "Später auswählen",
"revertBoardsConfig": "'{0}' an '{1}' verwenden", "revertBoardsConfig": "'{0}' an '{1}' verwenden",
"searchBoard": "Board suchen", "searchBoard": "Board suchen",
"selectBoard": "Board wählen", "selectBoard": "Board wählen",
"selectBoardToReload": "Please select a board first.", "selectBoardToReload": "Bitte erst ein Board auswählen.",
"selectPortForInfo": " Wähle einen Port, um Infos über das Board zu erhalten.", "selectPortForInfo": " Wähle einen Port, um Infos über das Board zu erhalten.",
"showAllAvailablePorts": " Alle verfügbaren Ports anzeigen, wenn aktiviert.", "showAllAvailablePorts": " Alle verfügbaren Ports anzeigen, wenn aktiviert.",
"showAllPorts": "Alle Ports anzeigen", "showAllPorts": "Alle Ports anzeigen",
@ -275,6 +275,9 @@
"checkForUpdates": "Arduino IDE Updates suchen", "checkForUpdates": "Arduino IDE Updates suchen",
"closeAndInstallButton": "Schließen und Installieren", "closeAndInstallButton": "Schließen und Installieren",
"closeToInstallNotice": "Software beenden und Update auf deinem Computer installieren", "closeToInstallNotice": "Software beenden und Update auf deinem Computer installieren",
"donateLinkIconTitle": "Öffne die Spenden Seite",
"donateLinkText": "Spenden um uns zu Unterstützen",
"donateText": "Open Source ist Liebe, {0}",
"downloadButton": "Download", "downloadButton": "Download",
"downloadingNotice": "Die neueste Version der Arduino IDE wird heruntergeladen.", "downloadingNotice": "Die neueste Version der Arduino IDE wird heruntergeladen.",
"errorCheckingForUpdates": "Fehler bei der Suche nach IDE Updates{0}", "errorCheckingForUpdates": "Fehler bei der Suche nach IDE Updates{0}",
@ -371,7 +374,7 @@
"cloud.pull.warn": "Wenn diese Option aktiviert ist, werden Nutzer vor dem Herunterladen eines Sketches aus der Cloud gewarnt. Standardmäßig aktiviert.", "cloud.pull.warn": "Wenn diese Option aktiviert ist, werden Nutzer vor dem Herunterladen eines Sketches aus der Cloud gewarnt. Standardmäßig aktiviert.",
"cloud.push.warn": "Wenn diese Option aktiviert ist, werden Nutzer vor dem Hochladen eines Sketches in die Cloud gewarnt. Standardmäßig aktiviert. ", "cloud.push.warn": "Wenn diese Option aktiviert ist, werden Nutzer vor dem Hochladen eines Sketches in die Cloud gewarnt. Standardmäßig aktiviert. ",
"cloud.pushpublic.warn": "Wenn diese Option aktiviert ist, werden Nutzer vor dem Hochladen eines öffentlichen Sketches in die Cloud gewarnt. Standardmäßig aktiviert. ", "cloud.pushpublic.warn": "Wenn diese Option aktiviert ist, werden Nutzer vor dem Hochladen eines öffentlichen Sketches in die Cloud gewarnt. Standardmäßig aktiviert. ",
"cloud.sharedSpaceId": "The ID of the Arduino Cloud shared space to load the sketchbook from. If empty, your private space is selected.", "cloud.sharedSpaceId": "Die ID der Arduino-Cloud 'shared space' von welchem die Sketchbooks geladen werden sollen. Wenn leer, wird dein privater Bereich verwendet.",
"cloud.sketchSyncEndpoint": "Endpunkt, um Sketches zu/von einem Backend zu laden. Standardeinstellung ist die Arduino Cloud API.", "cloud.sketchSyncEndpoint": "Endpunkt, um Sketches zu/von einem Backend zu laden. Standardeinstellung ist die Arduino Cloud API.",
"compile": "Kompilieren", "compile": "Kompilieren",
"compile.experimental": "Wenn diese Option aktiviert, werden mehrere Compiler-Fehler in der IDE gleichzeitig behandelt. Standardmäßig deaktiviert.", "compile.experimental": "Wenn diese Option aktiviert, werden mehrere Compiler-Fehler in der IDE gleichzeitig behandelt. Standardmäßig deaktiviert.",
@ -412,12 +415,11 @@
}, },
"sketchbook.location": "Pfad für Sketchbook", "sketchbook.location": "Pfad für Sketchbook",
"sketchbook.showAllFiles": "Wenn diese Option aktiviert ist, werden alle Sketch-Dateien innerhalb des Sketches angezeigt. Standardmäßig deaktiviert. ", "sketchbook.showAllFiles": "Wenn diese Option aktiviert ist, werden alle Sketch-Dateien innerhalb des Sketches angezeigt. Standardmäßig deaktiviert. ",
"survey.notification": "Wenn diese Option aktiviert ist, werden Nutzer über eine verfügbare Umfrage informiert. Standardmäßig aktiviert.",
"unofficialBoardSupport": "Klicke hier, um eine URL-Liste von inoffiziell unterstützten Boards anzuzeigen.", "unofficialBoardSupport": "Klicke hier, um eine URL-Liste von inoffiziell unterstützten Boards anzuzeigen.",
"upload": "Hochladen", "upload": "Hochladen",
"upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.", "upload.autoVerify": "Wahr wenn die IDE automatisch den Code vor dem Hochladen verifizieren soll. Standard: Wahr. Wenn der Wert Falsch ist, wird die IDE den Code vor dem Upload der Binärdaten nicht noch einmal Kompilieren . Wirklich nur auf Falsch setzen wenn du genau weißt warum und was du tust!",
"upload.verbose": "Wenn die Option aktiviert ist, werden ausführliche Compiler-Meldungen angezeigt. Standardmäßig deaktiviert.", "upload.verbose": "Wenn die Option aktiviert ist, werden ausführliche Compiler-Meldungen angezeigt. Standardmäßig deaktiviert.",
"upload.verify": "After upload, verify that the contents of the memory on the board match the uploaded binary.", "upload.verify": "Verifiziere das hochzuladende Binary nach dem Hochladen im Speicher des Boards identisch ist.",
"verifyAfterUpload": "Code nach Hochladen überprüfen ", "verifyAfterUpload": "Code nach Hochladen überprüfen ",
"window.autoScale": "Wenn die Option aktiviert ist, skaliert die Nutzeroberfläche automatisch mit der Schriftgröße.", "window.autoScale": "Wenn die Option aktiviert ist, skaliert die Nutzeroberfläche automatisch mit der Schriftgröße.",
"window.zoomLevel": { "window.zoomLevel": {
@ -487,11 +489,6 @@
"newCloudSketch": "Neuer Cloud-Sketch", "newCloudSketch": "Neuer Cloud-Sketch",
"newSketch": "Neu" "newSketch": "Neu"
}, },
"survey": {
"answerSurvey": "Umfrage beantworten",
"dismissSurvey": "Nicht erneut anzeigen",
"surveyMessage": "Helfen Sie uns, uns zu verbessern, indem Sie diese kurze Umfrage ausfüllen. Wir wissen unsere Community wertzuschätzen und möchten unsere Unterstützer gerne ein wenig besser kennenlernen."
},
"theme": { "theme": {
"currentThemeNotFound": "Das aktuell ausgewählte Theme konnte nicht gefunden werden: {0}. Die Arduino IDE hat ein eingebautes Theme ausgewählt, welches kompatibel mit dem fehlenden Theme ist.", "currentThemeNotFound": "Das aktuell ausgewählte Theme konnte nicht gefunden werden: {0}. Die Arduino IDE hat ein eingebautes Theme ausgewählt, welches kompatibel mit dem fehlenden Theme ist.",
"dark": "Dunkel", "dark": "Dunkel",
@ -525,8 +522,16 @@
"renameSketchFolderMessage": "Der Sketch '{0}' kann nicht verwendet werden. {1} Um diese Meldung loszuwerden, muss der Sketch umbenannt werden. Möchtest du den Sketch jetzt umbenennen?", "renameSketchFolderMessage": "Der Sketch '{0}' kann nicht verwendet werden. {1} Um diese Meldung loszuwerden, muss der Sketch umbenannt werden. Möchtest du den Sketch jetzt umbenennen?",
"renameSketchFolderTitle": "Ungültiger Sketch-Name" "renameSketchFolderTitle": "Ungültiger Sketch-Name"
}, },
"versionWelcome": {
"cancelButton": "Vielleicht später",
"donateButton": "Spende Jetzt",
"donateMessage": "Arduino verpflichtet sich die Software frei und quell-offen für alle zu bewahren. Deine Spende hilft uns neue Funktionalitäten, verbesserte Bibliotheken zu entwickeln, und hilft Millionen Benutzern Welt Weit.",
"donateMessage2": "Bitte denke über einen Unterstützung unserer Arbeit an der freien und quell-offenen Arduino IDE nach.",
"title": "Willkommen zu einer neuen Version der Arduino IDE!",
"titleWithVersion": "Willkommen zur neuen Arduino IDE {0}!"
},
"workspace": { "workspace": {
"alreadyExists": "{0} existiert bereits." "alreadyExists": "'{0}' existiert bereits."
} }
}, },
"theia": { "theia": {

View File

@ -275,6 +275,9 @@
"checkForUpdates": "Ελέγξτε για νέες ενημερώσεις Arduino IDE", "checkForUpdates": "Ελέγξτε για νέες ενημερώσεις Arduino IDE",
"closeAndInstallButton": "Κλείσιμο και εγκατάσταση", "closeAndInstallButton": "Κλείσιμο και εγκατάσταση",
"closeToInstallNotice": "Κλείστε το πρόγραμμα και εγκαταστήστε την ενημέρωση στον υπολογιστή σας.", "closeToInstallNotice": "Κλείστε το πρόγραμμα και εγκαταστήστε την ενημέρωση στον υπολογιστή σας.",
"donateLinkIconTitle": "open donation page",
"donateLinkText": "donate to support us",
"donateText": "Open source is love, {0}",
"downloadButton": "Κατεβάστε", "downloadButton": "Κατεβάστε",
"downloadingNotice": "Λήψη της πιο πρόσφατης έκδοσης του Arduino IDE.", "downloadingNotice": "Λήψη της πιο πρόσφατης έκδοσης του Arduino IDE.",
"errorCheckingForUpdates": "Σφάλμα κατά τον έλεγχο για ενημερώσεις του Arduino IDE.\n{0}", "errorCheckingForUpdates": "Σφάλμα κατά τον έλεγχο για ενημερώσεις του Arduino IDE.\n{0}",
@ -412,7 +415,6 @@
}, },
"sketchbook.location": "Τοποθεσία σχεδίων", "sketchbook.location": "Τοποθεσία σχεδίων",
"sketchbook.showAllFiles": "Αληθές για εμφάνιση όλων των αρχείων σχεδίου μεσα στο σχέδιο. Είναι ψευδές απο προεπιλογή.", "sketchbook.showAllFiles": "Αληθές για εμφάνιση όλων των αρχείων σχεδίου μεσα στο σχέδιο. Είναι ψευδές απο προεπιλογή.",
"survey.notification": "Σωστό εάν οι χρήστες πρέπει να ειδοποιούνται εάν υπάρχει διαθέσιμη έρευνα. Αληθές από προεπιλογή.",
"unofficialBoardSupport": "Κλικ για λίστα Συνδέσμων ανεπίσημης υποστήριξης πλακετών", "unofficialBoardSupport": "Κλικ για λίστα Συνδέσμων ανεπίσημης υποστήριξης πλακετών",
"upload": "ανέβασμα", "upload": "ανέβασμα",
"upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.", "upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.",
@ -487,11 +489,6 @@
"newCloudSketch": "Νέο σχέδιο Cloud ", "newCloudSketch": "Νέο σχέδιο Cloud ",
"newSketch": "Νέο Σχέδιο" "newSketch": "Νέο Σχέδιο"
}, },
"survey": {
"answerSurvey": "Απάντηση στην έρευνα",
"dismissSurvey": "Να μην εμφανιστεί ξανά",
"surveyMessage": "Βοηθήστε μας να βελτιωθούμε απαντώντας σε αυτήν την εξαιρετικά σύντομη έρευνα. Εκτιμούμε την κοινότητά μας και θα θέλαμε να γνωρίσουμε λίγο καλύτερα τους υποστηρικτές μας."
},
"theme": { "theme": {
"currentThemeNotFound": "Δεν ήταν δυνατή η εύρεση του τρέχοντος επιλεγμένου θέματος:{0} . Το Arduino IDE έχει επιλέξει ένα ενσωματωμένο θέμα συμβατό με αυτό που λείπει.", "currentThemeNotFound": "Δεν ήταν δυνατή η εύρεση του τρέχοντος επιλεγμένου θέματος:{0} . Το Arduino IDE έχει επιλέξει ένα ενσωματωμένο θέμα συμβατό με αυτό που λείπει.",
"dark": "Σκοτεινό", "dark": "Σκοτεινό",
@ -525,6 +522,14 @@
"renameSketchFolderMessage": "Το σχέδιο '{0}' δεν μπορεί να χρησιμοποιηθεί. {1}Για να απαλλαγείτε από αυτό το μήνυμα, μετονομάστε το σχέδιο. Θέλετε να μετονομάσετε το σχέδιο τώρα;", "renameSketchFolderMessage": "Το σχέδιο '{0}' δεν μπορεί να χρησιμοποιηθεί. {1}Για να απαλλαγείτε από αυτό το μήνυμα, μετονομάστε το σχέδιο. Θέλετε να μετονομάσετε το σχέδιο τώρα;",
"renameSketchFolderTitle": "Μη έγκυρο όνομα σκίτσου" "renameSketchFolderTitle": "Μη έγκυρο όνομα σκίτσου"
}, },
"versionWelcome": {
"cancelButton": "Maybe later",
"donateButton": "Donate now",
"donateMessage": "Arduino is committed to keeping software free and open-source for everyone. Your donation helps us develop new features, improve libraries, and support millions of users worldwide.",
"donateMessage2": "Please consider supporting our work on the free open source Arduino IDE.",
"title": "Welcome to a new version of the Arduino IDE!",
"titleWithVersion": "Welcome to the new Arduino IDE {0}!"
},
"workspace": { "workspace": {
"alreadyExists": "'{0}' υπάρχει ήδη." "alreadyExists": "'{0}' υπάρχει ήδη."
} }

View File

@ -415,7 +415,6 @@
}, },
"sketchbook.location": "Sketchbook location", "sketchbook.location": "Sketchbook location",
"sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.", "sketchbook.showAllFiles": "True to show all sketch files inside the sketch. It is false by default.",
"survey.notification": "True if users should be notified if a survey is available. True by default.",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs", "unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"upload": "upload", "upload": "upload",
"upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.", "upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.",
@ -490,11 +489,6 @@
"newCloudSketch": "New Cloud Sketch", "newCloudSketch": "New Cloud Sketch",
"newSketch": "New Sketch" "newSketch": "New Sketch"
}, },
"survey": {
"answerSurvey": "Answer survey",
"dismissSurvey": "Don't show again",
"surveyMessage": "Please help us improve by answering this super short survey. We value our community and would like to get to know our supporters a little better."
},
"theme": { "theme": {
"currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.", "currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.",
"dark": "Dark", "dark": "Dark",

View File

@ -5,7 +5,7 @@
"label": "Acerca de {0}" "label": "Acerca de {0}"
}, },
"account": { "account": {
"goToCloudEditor": "Go to Cloud Editor", "goToCloudEditor": "Ir a Arduino Cloud",
"goToIoTCloud": "Go to IoT Cloud", "goToIoTCloud": "Go to IoT Cloud",
"goToProfile": "Ir al Perfil", "goToProfile": "Ir al Perfil",
"menuTitle": "Arduino Cloud" "menuTitle": "Arduino Cloud"
@ -275,6 +275,9 @@
"checkForUpdates": "Comprobar actualizaciones para Arduino IDE", "checkForUpdates": "Comprobar actualizaciones para Arduino IDE",
"closeAndInstallButton": "Cerrar e instalar", "closeAndInstallButton": "Cerrar e instalar",
"closeToInstallNotice": "Cierra el programa e instala la actualización en tu máquina.", "closeToInstallNotice": "Cierra el programa e instala la actualización en tu máquina.",
"donateLinkIconTitle": "open donation page",
"donateLinkText": "donate to support us",
"donateText": "Open source is love, {0}",
"downloadButton": "Descargar", "downloadButton": "Descargar",
"downloadingNotice": "Descargando la última versión del Arduino IDE.", "downloadingNotice": "Descargando la última versión del Arduino IDE.",
"errorCheckingForUpdates": "Error al comprobar las actualizaciones del IDE de Arduino.\n{0}", "errorCheckingForUpdates": "Error al comprobar las actualizaciones del IDE de Arduino.\n{0}",
@ -412,7 +415,6 @@
}, },
"sketchbook.location": "Ruta del Sketchbook", "sketchbook.location": "Ruta del Sketchbook",
"sketchbook.showAllFiles": "Verdadero para mostrar todos los archivos de bocetos dentro del boceto. Por defecto es falso.", "sketchbook.showAllFiles": "Verdadero para mostrar todos los archivos de bocetos dentro del boceto. Por defecto es falso.",
"survey.notification": "Verdadero si usuarios deberían ser notificados cuando una encuesta esté disponible. Verdadero es predeterminado.",
"unofficialBoardSupport": "Pulsa para listar las URLs de las tarjetas no oficiales", "unofficialBoardSupport": "Pulsa para listar las URLs de las tarjetas no oficiales",
"upload": "Carga", "upload": "Carga",
"upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.", "upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.",
@ -487,11 +489,6 @@
"newCloudSketch": "Nuevo Sketch en la Nube", "newCloudSketch": "Nuevo Sketch en la Nube",
"newSketch": "New Sketch" "newSketch": "New Sketch"
}, },
"survey": {
"answerSurvey": "Completar encuesta",
"dismissSurvey": "No volver a mostrar",
"surveyMessage": "Por favor ayudenos mejorar completando esta breve encuesta. Valoramos nuestra comunidad y nos gustaría conocer algo mejor a los que nos apoyan."
},
"theme": { "theme": {
"currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.", "currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.",
"dark": "Dark", "dark": "Dark",
@ -525,6 +522,14 @@
"renameSketchFolderMessage": "The sketch '{0}' cannot be used. {1} To get rid of this message, rename the sketch. Do you want to rename the sketch now?", "renameSketchFolderMessage": "The sketch '{0}' cannot be used. {1} To get rid of this message, rename the sketch. Do you want to rename the sketch now?",
"renameSketchFolderTitle": "Invalid sketch name" "renameSketchFolderTitle": "Invalid sketch name"
}, },
"versionWelcome": {
"cancelButton": "Maybe later",
"donateButton": "Donate now",
"donateMessage": "Arduino is committed to keeping software free and open-source for everyone. Your donation helps us develop new features, improve libraries, and support millions of users worldwide.",
"donateMessage2": "Please consider supporting our work on the free open source Arduino IDE.",
"title": "Welcome to a new version of the Arduino IDE!",
"titleWithVersion": "Welcome to the new Arduino IDE {0}!"
},
"workspace": { "workspace": {
"alreadyExists": "'{0}' ya existe." "alreadyExists": "'{0}' ya existe."
} }

View File

@ -275,6 +275,9 @@
"checkForUpdates": "Check for Arduino IDE Updates", "checkForUpdates": "Check for Arduino IDE Updates",
"closeAndInstallButton": "Itxi eta instalatu", "closeAndInstallButton": "Itxi eta instalatu",
"closeToInstallNotice": "Itxi softwarea eta instalatu eguneratzea zure makinan.", "closeToInstallNotice": "Itxi softwarea eta instalatu eguneratzea zure makinan.",
"donateLinkIconTitle": "open donation page",
"donateLinkText": "donate to support us",
"donateText": "Open source is love, {0}",
"downloadButton": "Software eguneratzea", "downloadButton": "Software eguneratzea",
"downloadingNotice": "Arduino IDEren azken bertsioa deskargatzen", "downloadingNotice": "Arduino IDEren azken bertsioa deskargatzen",
"errorCheckingForUpdates": "Errorea Arduino IDE eguneraketak egiaztatzean.\n{0}", "errorCheckingForUpdates": "Errorea Arduino IDE eguneraketak egiaztatzean.\n{0}",
@ -412,7 +415,6 @@
}, },
"sketchbook.location": "Programa bildumaren kokalekua", "sketchbook.location": "Programa bildumaren kokalekua",
"sketchbook.showAllFiles": "Egia programaren barruko programa-fitxategi guztiak erakusteko. Lehenetsia gezurra da.", "sketchbook.showAllFiles": "Egia programaren barruko programa-fitxategi guztiak erakusteko. Lehenetsia gezurra da.",
"survey.notification": "True if users should be notified if a survey is available. True by default.",
"unofficialBoardSupport": "Egin klik ofizialak ez diren plaken laguntza-URL zerrenda ikusteko", "unofficialBoardSupport": "Egin klik ofizialak ez diren plaken laguntza-URL zerrenda ikusteko",
"upload": "karga", "upload": "karga",
"upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.", "upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.",
@ -487,11 +489,6 @@
"newCloudSketch": "New Cloud Sketch", "newCloudSketch": "New Cloud Sketch",
"newSketch": "New Sketch" "newSketch": "New Sketch"
}, },
"survey": {
"answerSurvey": "Answer survey",
"dismissSurvey": "Don't show again",
"surveyMessage": "Please help us improve by answering this super short survey. We value our community and would like to get to know our supporters a little better."
},
"theme": { "theme": {
"currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.", "currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.",
"dark": "Dark", "dark": "Dark",
@ -525,6 +522,14 @@
"renameSketchFolderMessage": "The sketch '{0}' cannot be used. {1} To get rid of this message, rename the sketch. Do you want to rename the sketch now?", "renameSketchFolderMessage": "The sketch '{0}' cannot be used. {1} To get rid of this message, rename the sketch. Do you want to rename the sketch now?",
"renameSketchFolderTitle": "Invalid sketch name" "renameSketchFolderTitle": "Invalid sketch name"
}, },
"versionWelcome": {
"cancelButton": "Maybe later",
"donateButton": "Donate now",
"donateMessage": "Arduino is committed to keeping software free and open-source for everyone. Your donation helps us develop new features, improve libraries, and support millions of users worldwide.",
"donateMessage2": "Please consider supporting our work on the free open source Arduino IDE.",
"title": "Welcome to a new version of the Arduino IDE!",
"titleWithVersion": "Welcome to the new Arduino IDE {0}!"
},
"workspace": { "workspace": {
"alreadyExists": "'{0}' already exists." "alreadyExists": "'{0}' already exists."
} }

View File

@ -275,6 +275,9 @@
"checkForUpdates": "به روز رسانی آردوینو IDE را بررسی کنید", "checkForUpdates": "به روز رسانی آردوینو IDE را بررسی کنید",
"closeAndInstallButton": "بستن و نصب", "closeAndInstallButton": "بستن و نصب",
"closeToInstallNotice": "نرم افزار را ببندید و به روز رسانی را روی دستگاه خود نصب کنید.", "closeToInstallNotice": "نرم افزار را ببندید و به روز رسانی را روی دستگاه خود نصب کنید.",
"donateLinkIconTitle": "open donation page",
"donateLinkText": "donate to support us",
"donateText": "Open source is love, {0}",
"downloadButton": "دانلود", "downloadButton": "دانلود",
"downloadingNotice": "در حال بارگیری آخرین نسخه از آردوینو", "downloadingNotice": "در حال بارگیری آخرین نسخه از آردوینو",
"errorCheckingForUpdates": "خطا در حلقه بررسی برای وجود بروزرسانی برای آردوینو رخ داد. {0}", "errorCheckingForUpdates": "خطا در حلقه بررسی برای وجود بروزرسانی برای آردوینو رخ داد. {0}",
@ -412,7 +415,6 @@
}, },
"sketchbook.location": "مکان منبع طرح ها", "sketchbook.location": "مکان منبع طرح ها",
"sketchbook.showAllFiles": "همه فایل‌های طرح را در داخل طرح نشان دهد درست است. به طور پیش فرض نادرست است.", "sketchbook.showAllFiles": "همه فایل‌های طرح را در داخل طرح نشان دهد درست است. به طور پیش فرض نادرست است.",
"survey.notification": "درست است اگر در صورت وجود نظرسنجی به کاربران اطلاع داده شود. به طور پیش فرض درست است.",
"unofficialBoardSupport": "برای لیستی از آدرس های اینترنتی پشتیبانی هیئت مدیره غیررسمی کلیک کنید", "unofficialBoardSupport": "برای لیستی از آدرس های اینترنتی پشتیبانی هیئت مدیره غیررسمی کلیک کنید",
"upload": "بارگذاری", "upload": "بارگذاری",
"upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.", "upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.",
@ -487,11 +489,6 @@
"newCloudSketch": "طرح جدید روی فضای ابری", "newCloudSketch": "طرح جدید روی فضای ابری",
"newSketch": "طرح جدید" "newSketch": "طرح جدید"
}, },
"survey": {
"answerSurvey": "به نظرسنجی پاسخ دهید",
"dismissSurvey": "دیگر نشان نده",
"surveyMessage": "لطفاً با پاسخ دادن به این نظرسنجی فوق العاده کوتاه ما را در پیشرفت خود یاری کنید. ما برای جامعه خود ارزش قائلیم و دوست داریم حامیان خود را کمی بهتر بشناسیم."
},
"theme": { "theme": {
"currentThemeNotFound": "طرح زمینه انتخابی فعلی یافت نشد:«{0}». پس Arduino IDE یک طرح زمینه داخلی سازگار با طرح زمینه یافت نشده انتخاب کرده است.", "currentThemeNotFound": "طرح زمینه انتخابی فعلی یافت نشد:«{0}». پس Arduino IDE یک طرح زمینه داخلی سازگار با طرح زمینه یافت نشده انتخاب کرده است.",
"dark": "تاریک", "dark": "تاریک",
@ -525,6 +522,14 @@
"renameSketchFolderMessage": "طرح«{0}» قابل استفاده نیست. «{1}» برای خلاص شدن از این پیام، نام طرح را تغییر دهید. اکنون می خواهید نام طرح را تغییر دهید؟", "renameSketchFolderMessage": "طرح«{0}» قابل استفاده نیست. «{1}» برای خلاص شدن از این پیام، نام طرح را تغییر دهید. اکنون می خواهید نام طرح را تغییر دهید؟",
"renameSketchFolderTitle": "نام طرح بی‌اعتبار است" "renameSketchFolderTitle": "نام طرح بی‌اعتبار است"
}, },
"versionWelcome": {
"cancelButton": "Maybe later",
"donateButton": "Donate now",
"donateMessage": "Arduino is committed to keeping software free and open-source for everyone. Your donation helps us develop new features, improve libraries, and support millions of users worldwide.",
"donateMessage2": "Please consider supporting our work on the free open source Arduino IDE.",
"title": "Welcome to a new version of the Arduino IDE!",
"titleWithVersion": "Welcome to the new Arduino IDE {0}!"
},
"workspace": { "workspace": {
"alreadyExists": "'{0}' از قبل وجود دارد." "alreadyExists": "'{0}' از قبل وجود دارد."
} }

View File

@ -275,6 +275,9 @@
"checkForUpdates": "Check for Arduino IDE Updates", "checkForUpdates": "Check for Arduino IDE Updates",
"closeAndInstallButton": "Close and Install", "closeAndInstallButton": "Close and Install",
"closeToInstallNotice": "Close the software and install the update on your machine.", "closeToInstallNotice": "Close the software and install the update on your machine.",
"donateLinkIconTitle": "open donation page",
"donateLinkText": "donate to support us",
"donateText": "Open source is love, {0}",
"downloadButton": "Download", "downloadButton": "Download",
"downloadingNotice": "Downloading the latest version of the Arduino IDE.", "downloadingNotice": "Downloading the latest version of the Arduino IDE.",
"errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}", "errorCheckingForUpdates": "Error while checking for Arduino IDE updates.\n{0}",
@ -412,7 +415,6 @@
}, },
"sketchbook.location": "Sketchbook location", "sketchbook.location": "Sketchbook location",
"sketchbook.showAllFiles": "True para ipakita lahat ng sketch files sa loob ng isang sketch. Ito ay false by default.", "sketchbook.showAllFiles": "True para ipakita lahat ng sketch files sa loob ng isang sketch. Ito ay false by default.",
"survey.notification": "True if users should be notified if a survey is available. True by default.",
"unofficialBoardSupport": "Click for a list of unofficial board support URLs", "unofficialBoardSupport": "Click for a list of unofficial board support URLs",
"upload": "upload", "upload": "upload",
"upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.", "upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.",
@ -487,11 +489,6 @@
"newCloudSketch": "New Cloud Sketch", "newCloudSketch": "New Cloud Sketch",
"newSketch": "New Sketch" "newSketch": "New Sketch"
}, },
"survey": {
"answerSurvey": "Answer survey",
"dismissSurvey": "Don't show again",
"surveyMessage": "Please help us improve by answering this super short survey. We value our community and would like to get to know our supporters a little better."
},
"theme": { "theme": {
"currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.", "currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.",
"dark": "Dark", "dark": "Dark",
@ -525,6 +522,14 @@
"renameSketchFolderMessage": "The sketch '{0}' cannot be used. {1} To get rid of this message, rename the sketch. Do you want to rename the sketch now?", "renameSketchFolderMessage": "The sketch '{0}' cannot be used. {1} To get rid of this message, rename the sketch. Do you want to rename the sketch now?",
"renameSketchFolderTitle": "Invalid sketch name" "renameSketchFolderTitle": "Invalid sketch name"
}, },
"versionWelcome": {
"cancelButton": "Maybe later",
"donateButton": "Donate now",
"donateMessage": "Arduino is committed to keeping software free and open-source for everyone. Your donation helps us develop new features, improve libraries, and support millions of users worldwide.",
"donateMessage2": "Please consider supporting our work on the free open source Arduino IDE.",
"title": "Welcome to a new version of the Arduino IDE!",
"titleWithVersion": "Welcome to the new Arduino IDE {0}!"
},
"workspace": { "workspace": {
"alreadyExists": "'{0}' already exists." "alreadyExists": "'{0}' already exists."
} }

View File

@ -1,55 +1,55 @@
{ {
"arduino": { "arduino": {
"about": { "about": {
"detail": "Version: {0}\nDate: {1}{2}\nCLI Version: {3}\n\n{4}", "detail": "Version : {0}\nDate : {1}{2}\nVersion du CLI : {3}\n\n{4}",
"label": "A propos de {0}" "label": "A propos de {0}"
}, },
"account": { "account": {
"goToCloudEditor": "Go to Cloud Editor", "goToCloudEditor": "Aller à l'éditeur du cloud",
"goToIoTCloud": "Go to IoT Cloud", "goToIoTCloud": "Go to IoT Cloud",
"goToProfile": "Go to Profile", "goToProfile": "Aller au profil",
"menuTitle": "Arduino Cloud" "menuTitle": "Arduino Cloud"
}, },
"board": { "board": {
"board": "Carte{0}", "board": "Carte{0}",
"boardConfigDialogTitle": "Select Other Board and Port", "boardConfigDialogTitle": "Sélectionner une autre carte et un autre port",
"boardDataReloaded": "Board data reloaded.", "boardDataReloaded": "Données de la carte rechargées.",
"boardInfo": "Information de la carte", "boardInfo": "Information de la carte",
"boards": "boards", "boards": "cartes",
"configDialog1": "Sélectionnez une carte et un port si vous souhaitez téléverser un croquis.", "configDialog1": "Sélectionnez une carte et un port si vous souhaitez téléverser un croquis.",
"configDialog2": "Si vous sélectionnez seulement une carte, vous pourrez compiler votre croquis, mais pas le téléverser.", "configDialog2": "Si vous sélectionnez seulement une carte, vous pourrez compiler votre croquis, mais pas le téléverser.",
"couldNotFindPreviouslySelected": "Impossible de trouver la carte précédente sélectionnée \"{0}\" dans les plateformes installées \"{1}\". Merci de re-sélectionner manuellement la carte que vous souhaitez utiliser. Souhaitez vous la re-sélectionner maintenant ?", "couldNotFindPreviouslySelected": "Impossible de trouver la carte précédente sélectionnée \"{0}\" dans les plateformes installées \"{1}\". Merci de re-sélectionner manuellement la carte que vous souhaitez utiliser. Souhaitez vous la re-sélectionner maintenant ?",
"editBoardsConfig": "Edit Board and Port...", "editBoardsConfig": "Modifier la carte et le port...",
"getBoardInfo": "Obtenir les informations sur la carte", "getBoardInfo": "Obtenir les informations sur la carte",
"inSketchbook": "(dans le Croquis)", "inSketchbook": "(dans le Croquis)",
"installNow": "Le \"{0} {1}\" core doit être installé pour la carte sélectionnée \"{2}\". Souhaitez vous l'installer maintenant ?", "installNow": "Le \"{0} {1}\" core doit être installé pour la carte sélectionnée \"{2}\". Souhaitez vous l'installer maintenant ?",
"noBoardsFound": "No boards found for \"{0}\"", "noBoardsFound": "Aucunes cartes trouvées pour \"{0}\"",
"noNativeSerialPort": "Native serial port, can't obtain info.", "noNativeSerialPort": "Native serial port, can't obtain info.",
"noPortsDiscovered": "No ports discovered", "noPortsDiscovered": "Aucun ports découverts",
"nonSerialPort": "Non-serial port, can't obtain info.", "nonSerialPort": "Non-serial port, can't obtain info.",
"openBoardsConfig": "Sélectionner une autre carte et un autre port ...", "openBoardsConfig": "Sélectionner une autre carte et un autre port ...",
"pleasePickBoard": "Merci de sélectionner une carte connecté au port que vous avez sélectionné.", "pleasePickBoard": "Merci de sélectionner une carte connecté au port que vous avez sélectionné.",
"port": "Port{0}", "port": "Port{0}",
"ports": "ports", "ports": "ports",
"programmer": "Programmeur", "programmer": "Programmeur",
"reloadBoardData": "Reload Board Data", "reloadBoardData": "Recharger les données de la carte",
"reselectLater": "Re-sélectionner plus tard", "reselectLater": "Re-sélectionner plus tard",
"revertBoardsConfig": "Use '{0}' discovered on '{1}'", "revertBoardsConfig": "Utiliser '{0}' découvert sur '{1}'",
"searchBoard": "Search board", "searchBoard": "Rechercher une carte",
"selectBoard": "Selectionner une carte", "selectBoard": "Selectionner une carte",
"selectBoardToReload": "Please select a board first.", "selectBoardToReload": "Merci de sélectionner une carte dabord.",
"selectPortForInfo": "Merci de choisir un port pour obtenir des informations sur la carte.", "selectPortForInfo": "Merci de choisir un port pour obtenir des informations sur la carte.",
"showAllAvailablePorts": "Affiche les ports disponibles quand activer.", "showAllAvailablePorts": "Affiche les ports disponibles quand activer.",
"showAllPorts": "Show all ports", "showAllPorts": "Afficher tous les ports",
"succesfullyInstalledPlatform": "Plateforme installé avec succès {0}:{1}", "succesfullyInstalledPlatform": "Plateforme installé avec succès {0}:{1}",
"succesfullyUninstalledPlatform": "Plateforme désinstallée avec succès {0}:{1}", "succesfullyUninstalledPlatform": "Plateforme désinstallée avec succès {0}:{1}",
"typeOfPorts": "{0} ports", "typeOfPorts": "{0} ports",
"unconfirmedBoard": "Unconfirmed board", "unconfirmedBoard": "Carte non confirmée",
"unknownBoard": "Unknown board" "unknownBoard": "Carte inconnue"
}, },
"boardsManager": "Gestionnaire de carte", "boardsManager": "Gestionnaire de cartes",
"boardsType": { "boardsType": {
"arduinoCertified": "Arduino Certified" "arduinoCertified": "Arduino certifié"
}, },
"bootloader": { "bootloader": {
"burnBootloader": "Graver la séquence d'initialisation", "burnBootloader": "Graver la séquence d'initialisation",
@ -77,17 +77,17 @@
"uploadingCertificates": "Transfert des certificats" "uploadingCertificates": "Transfert des certificats"
}, },
"checkForUpdates": { "checkForUpdates": {
"checkForUpdates": "Check for Arduino Updates", "checkForUpdates": "Vérifier les mises à jour dArduino",
"installAll": "Install All", "installAll": "Tout installer",
"noUpdates": "There are no recent updates available.", "noUpdates": "Il n'y a pas de mises à jour récentes disponibles.",
"promptUpdateBoards": "Updates are available for some of your boards.", "promptUpdateBoards": "Des mises à jour sont disponibles pour certaines de vos cartes.",
"promptUpdateLibraries": "Updates are available for some of your libraries.", "promptUpdateLibraries": "Des mises à jour sont disponibles pour certaines de vos bibliothèques.",
"updatingBoards": "Updating boards...", "updatingBoards": "Mise à jour des cartes...",
"updatingLibraries": "Updating libraries..." "updatingLibraries": "Mise à jour des bibliothèques..."
}, },
"cli-error-parser": { "cli-error-parser": {
"keyboardError": "'Keyboard' not found. Does your sketch include the line '#include <Keyboard.h>'?", "keyboardError": "Clavier non trouvé. Votre croquis inclut-il la ligne '#include <Keyboard.h>' ?",
"mouseError": "'Mouse' not found. Does your sketch include the line '#include <Mouse.h>'?" "mouseError": "'Mouse' non trouvé. Votre croquis inclut-il la ligne '#include <Mouse.h>' ?"
}, },
"cloud": { "cloud": {
"chooseSketchVisibility": "Choisissez la visibilité du croquis :", "chooseSketchVisibility": "Choisissez la visibilité du croquis :",
@ -98,7 +98,7 @@
"donePushing": "Done pushing '{0}'.", "donePushing": "Done pushing '{0}'.",
"embed": "Embarqué : ", "embed": "Embarqué : ",
"emptySketchbook": "Votre carnet de croquis est vide", "emptySketchbook": "Votre carnet de croquis est vide",
"goToCloud": "Go to Cloud", "goToCloud": "Aller au cloud",
"learnMore": "En savoir plus", "learnMore": "En savoir plus",
"link": "Lien :", "link": "Lien :",
"notYetPulled": "Impossible de push sur le Cloud. Rien n'a été pull jusque la.", "notYetPulled": "Impossible de push sur le Cloud. Rien n'a été pull jusque la.",
@ -118,7 +118,7 @@
"remote": "A distance", "remote": "A distance",
"share": "Partager...", "share": "Partager...",
"shareSketch": "Partager le croquis", "shareSketch": "Partager le croquis",
"showHideSketchbook": "Show/Hide Cloud Sketchbook", "showHideSketchbook": "Montrer / Cacher le carnet de croquis du cloud.",
"signIn": "Se connecter", "signIn": "Se connecter",
"signInToCloud": "Se connecter à Arduino Cloud", "signInToCloud": "Se connecter à Arduino Cloud",
"signOut": "Deconnexion", "signOut": "Deconnexion",
@ -134,49 +134,49 @@
"pulling": "Synchronizing sketchbook, pulling '{0}'...", "pulling": "Synchronizing sketchbook, pulling '{0}'...",
"pushing": "Synchronizing sketchbook, pushing '{0}'...", "pushing": "Synchronizing sketchbook, pushing '{0}'...",
"renaming": "Renaming cloud sketch from '{0}' to '{1}'...", "renaming": "Renaming cloud sketch from '{0}' to '{1}'...",
"synchronizingSketchbook": "Synchronizing sketchbook..." "synchronizingSketchbook": "Synchroniser le carnet de croquis..."
}, },
"common": { "common": {
"all": "All", "all": "Tout",
"contributed": "Contributed", "contributed": "Contributed",
"installManually": "Installer manuellement.", "installManually": "Installer manuellement.",
"later": "Plus tard", "later": "Plus tard",
"noBoardSelected": "Aucune carte sélectionnée.", "noBoardSelected": "Aucune carte sélectionnée.",
"noSketchOpened": "No sketch opened", "noSketchOpened": "Aucun croquis ouvert",
"notConnected": "[hors ligne]", "notConnected": "[hors ligne]",
"offlineIndicator": "Il semblerait que vous êtes déconnecté. Sans connexion internet la CLI d'Arduino pourrait ne pas être en mesure de télécharger les resources requises, ce qui pourrait provoquer des dysfonctionnements. Merci de vous connecter à Internet et de redémarrer l'application.", "offlineIndicator": "Il semblerait que vous êtes déconnecté. Sans connexion internet la CLI d'Arduino pourrait ne pas être en mesure de télécharger les resources requises, ce qui pourrait provoquer des dysfonctionnements. Merci de vous connecter à Internet et de redémarrer l'application.",
"oldFormat": "Le '{0}' utilise toujours l'ancien format `.pde`. Souhaitez-vous utiliser le nouveau format `.ino`?", "oldFormat": "Le '{0}' utilise toujours l'ancien format `.pde`. Souhaitez-vous utiliser le nouveau format `.ino`?",
"partner": "Partner", "partner": "Partenaire",
"processing": "Traitement en cours", "processing": "Traitement en cours",
"recommended": "Recommended", "recommended": "Recommandé",
"retired": "Retired", "retired": "Retiré",
"selectManually": "Select Manually", "selectManually": "Sélectionner manuellement",
"selectedOn": "sur {0}", "selectedOn": "sur {0}",
"serialMonitor": "Moniteur série", "serialMonitor": "Moniteur série",
"type": "Type", "type": "Type",
"unknown": "Inconnu", "unknown": "Inconnu",
"updateable": "Updatable", "updateable": "Pouvant être mis à jour",
"userAbort": "User abort" "userAbort": "Abandon par l'utilisateur"
}, },
"compile": { "compile": {
"error": "Erreur de compilation : {0}" "error": "Erreur de compilation : {0}"
}, },
"component": { "component": {
"boardsIncluded": "Boards included in this package:", "boardsIncluded": "Cartes incluses dans ce paquet :",
"by": "par", "by": "par",
"clickToOpen": "Click to open in browser: {0}", "clickToOpen": "Cliquez pour ouvrir dans le navigateur : {0}",
"filterSearch": "Filtrez votre recherche...", "filterSearch": "Filtrez votre recherche...",
"install": "Installer", "install": "Installer",
"installLatest": "Install Latest", "installLatest": "Installer la dernière",
"installVersion": "Install {0}", "installVersion": "Installer {0}",
"installed": "{0} installed", "installed": "{0} installé",
"moreInfo": "Plus d'information", "moreInfo": "Plus d'information",
"otherVersions": "Other Versions", "otherVersions": "Autres versions",
"remove": "Supprimer ", "remove": "Supprimer ",
"title": "{0} by {1}", "title": "{0} par {1}",
"uninstall": "Désinstaller", "uninstall": "Désinstaller",
"uninstallMsg": "Voulez vous désinstaller {0}?", "uninstallMsg": "Voulez vous désinstaller {0}?",
"update": "Update" "update": "Mettre à jour"
}, },
"configuration": { "configuration": {
"cli": { "cli": {
@ -196,15 +196,15 @@
}, },
"core": { "core": {
"compilerWarnings": { "compilerWarnings": {
"all": "All", "all": "Tout",
"default": "Default", "default": "Par défaut",
"more": "More", "more": "Plus",
"none": "None" "none": "Aucun"
} }
}, },
"coreContribution": { "coreContribution": {
"copyError": "Copier les messages d'erreur", "copyError": "Copier les messages d'erreur",
"noBoardSelected": "No board selected. Please select your Arduino board from the Tools > Board menu." "noBoardSelected": "Aucune carte sélectionnée. Merci de sélectionner votre carte Arduino dans le menu Outils > Carte."
}, },
"createCloudCopy": "Push Sketch to Cloud", "createCloudCopy": "Push Sketch to Cloud",
"daemon": { "daemon": {
@ -215,14 +215,14 @@
"debug": { "debug": {
"debugWithMessage": "Débogage - {0}", "debugWithMessage": "Débogage - {0}",
"debuggingNotSupported": "Le débogage n'est pas supporté pour '{0}'", "debuggingNotSupported": "Le débogage n'est pas supporté pour '{0}'",
"getDebugInfo": "Getting debug info...", "getDebugInfo": "Obtenir des informations de débogage...",
"noPlatformInstalledFor": "La plateforme n'est pas installée pour '{0}'", "noPlatformInstalledFor": "La plateforme n'est pas installée pour '{0}'",
"optimizeForDebugging": "Optimisé pour le déboggage.", "optimizeForDebugging": "Optimisé pour le déboggage.",
"sketchIsNotCompiled": "Sketch '{0}' must be verified before starting a debug session. Please verify the sketch and start debugging again. Do you want to verify the sketch now?" "sketchIsNotCompiled": "Sketch '{0}' must be verified before starting a debug session. Please verify the sketch and start debugging again. Do you want to verify the sketch now?"
}, },
"developer": { "developer": {
"clearBoardList": "Clear the Board List History", "clearBoardList": "Clear the Board List History",
"clearBoardsConfig": "Clear the Board and Port Selection", "clearBoardsConfig": "Effacer la carte et la sélection du port ",
"dumpBoardList": "Dump the Board List" "dumpBoardList": "Dump the Board List"
}, },
"dialog": { "dialog": {
@ -275,6 +275,9 @@
"checkForUpdates": "Check for Arduino IDE Updates", "checkForUpdates": "Check for Arduino IDE Updates",
"closeAndInstallButton": "Fermer et installer", "closeAndInstallButton": "Fermer et installer",
"closeToInstallNotice": "Fermez le logiciel et installez la mise à jour sur votre machine.", "closeToInstallNotice": "Fermez le logiciel et installez la mise à jour sur votre machine.",
"donateLinkIconTitle": "open donation page",
"donateLinkText": "Faites un don pour nous soutenir",
"donateText": "Open source is love, {0}",
"downloadButton": "Télécharger", "downloadButton": "Télécharger",
"downloadingNotice": "Téléchargement de la dernière version de l'IDE Arduino.", "downloadingNotice": "Téléchargement de la dernière version de l'IDE Arduino.",
"errorCheckingForUpdates": "Erreur lors de la vérification de la mise à jour de l'IDE Arduino.\n{0}", "errorCheckingForUpdates": "Erreur lors de la vérification de la mise à jour de l'IDE Arduino.\n{0}",
@ -297,11 +300,11 @@
"arduinoLibraries": "Bibliothèques Arduino", "arduinoLibraries": "Bibliothèques Arduino",
"contributedLibraries": "Bibliothèques tierce-partie", "contributedLibraries": "Bibliothèques tierce-partie",
"include": "Importer une bibliothèque", "include": "Importer une bibliothèque",
"installAll": "Install All", "installAll": "Tout installer",
"installLibraryDependencies": "Install library dependencies", "installLibraryDependencies": "Installer les dépendances de la bibliothèque",
"installMissingDependencies": "Souhaitez vous installer toutes les ressources liées manquantes ?", "installMissingDependencies": "Souhaitez vous installer toutes les ressources liées manquantes ?",
"installOneMissingDependency": "Souhaitez-vous installer la ressource liée manquante?", "installOneMissingDependency": "Souhaitez-vous installer la ressource liée manquante?",
"installWithoutDependencies": "Install without dependencies", "installWithoutDependencies": "Installer sans les dépendances",
"installedSuccessfully": "Librairie installée avec succès {0}:{1}", "installedSuccessfully": "Librairie installée avec succès {0}:{1}",
"libraryAlreadyExists": "Cette librairie existe déjà. Souhaitez-vous l'écraser ?", "libraryAlreadyExists": "Cette librairie existe déjà. Souhaitez-vous l'écraser ?",
"manageLibraries": "Gérer les bibliothèques...", "manageLibraries": "Gérer les bibliothèques...",
@ -315,22 +318,22 @@
"zipLibrary": "Bibliothèque" "zipLibrary": "Bibliothèque"
}, },
"librarySearchProperty": { "librarySearchProperty": {
"topic": "Topic" "topic": "Sujet"
}, },
"libraryTopic": { "libraryTopic": {
"communication": "Communication", "communication": "Communication",
"dataProcessing": "Data Processing", "dataProcessing": "Traitement de données",
"dataStorage": "Data Storage", "dataStorage": "Stockage de données",
"deviceControl": "Device Control", "deviceControl": "Contrôle d'appareil",
"display": "Display", "display": "Affichage",
"other": "Other", "other": "Autre",
"sensors": "Sensors", "sensors": "Capteurs",
"signalInputOutput": "Signal Input/Output", "signalInputOutput": "Signaux entrants/sortants",
"timing": "Timing", "timing": "Synchronisation",
"uncategorized": "Uncategorized" "uncategorized": "Non classé"
}, },
"libraryType": { "libraryType": {
"installed": "Installed" "installed": "Installé"
}, },
"menu": { "menu": {
"advanced": "Avancé", "advanced": "Avancé",
@ -340,20 +343,20 @@
"monitor": { "monitor": {
"alreadyConnectedError": "Could not connect to {0} {1} port. Already connected.", "alreadyConnectedError": "Could not connect to {0} {1} port. Already connected.",
"baudRate": "{0} baud", "baudRate": "{0} baud",
"connectionFailedError": "Could not connect to {0} {1} port.", "connectionFailedError": "Impossible de se connecter au ports {0} {1}.",
"connectionFailedErrorWithDetails": "{0} Could not connect to {1} {2} port.", "connectionFailedErrorWithDetails": "{0} Could not connect to {1} {2} port.",
"connectionTimeout": "Timeout. The IDE has not received the 'success' message from the monitor after successfully connecting to it", "connectionTimeout": "Délai dattente dépassé. LIDE na pas reçu le message de réussite du moniteur après sêtre connecté avec succès",
"missingConfigurationError": "Could not connect to {0} {1} port. The monitor configuration is missing.", "missingConfigurationError": "Could not connect to {0} {1} port. The monitor configuration is missing.",
"notConnectedError": "Not connected to {0} {1} port.", "notConnectedError": "Not connected to {0} {1} port.",
"unableToCloseWebSocket": "Impossible de fermer le web socket", "unableToCloseWebSocket": "Impossible de fermer le web socket",
"unableToConnectToWebSocket": "Impossible de se connecter au web socket" "unableToConnectToWebSocket": "Impossible de se connecter au web socket"
}, },
"newCloudSketch": { "newCloudSketch": {
"newSketchTitle": "Name of the new Cloud Sketch" "newSketchTitle": "Non du nouveau croquis Cloud"
}, },
"portProtocol": { "portProtocol": {
"network": "Réseau", "network": "Réseau",
"serial": "Serial" "serial": "Série"
}, },
"preferences": { "preferences": {
"additionalManagerURLs": "URL de gestionnaire de cartes supplémentaires", "additionalManagerURLs": "URL de gestionnaire de cartes supplémentaires",
@ -364,9 +367,9 @@
"automatic": "Automatique", "automatic": "Automatique",
"board.certificates": "Liste des certificats pouvant être téléversé vers les cartes.", "board.certificates": "Liste des certificats pouvant être téléversé vers les cartes.",
"browse": "Parcourir", "browse": "Parcourir",
"checkForUpdate": "Receive notifications of available updates for the IDE, boards, and libraries. Requires an IDE restart after change. It's true by default.", "checkForUpdate": "Recevoir les notifications de mises à jour disponibles pour lIDE, les cartes et les bibliothèques. Nécessite un redémarrage de lIE après la modification. Activé par défaut.",
"choose": "Choisir", "choose": "Choisir",
"cli.daemonDebug": "Enable debug logging of the gRPC calls to the Arduino CLI. A restart of the IDE is needed for this setting to take effect. It's false by default.", "cli.daemonDebug": "Activer la journalisation de débogage des appels gRPC vers le CLI Arduino. Un redémarrage de lIDE est nécessaire pour que ce paramètre prenne effet. Désactivé par défaut.",
"cloud.enabled": "Vrai si les fonctions de synchronisation de croquis est activé. Par défaut, la valeur est vrai.", "cloud.enabled": "Vrai si les fonctions de synchronisation de croquis est activé. Par défaut, la valeur est vrai.",
"cloud.pull.warn": "Vrai si les utilisateurs devrait être averti avant de pull un croquis sur le cloud. Par défaut, la valeur est vrai.", "cloud.pull.warn": "Vrai si les utilisateurs devrait être averti avant de pull un croquis sur le cloud. Par défaut, la valeur est vrai.",
"cloud.push.warn": "Vrai, si les utilisateurs devrait être averti avant de push un croquis sur le cloud. Par défaut, la valeur est vrai.", "cloud.push.warn": "Vrai, si les utilisateurs devrait être averti avant de push un croquis sur le cloud. Par défaut, la valeur est vrai.",
@ -398,13 +401,13 @@
}, },
"network": "Réseau", "network": "Réseau",
"newSketchbookLocation": "Sélectionner la localisation du nouveau croquis.", "newSketchbookLocation": "Sélectionner la localisation du nouveau croquis.",
"noCliConfig": "Could not load the CLI configuration", "noCliConfig": "Impossible de charger la configuration du CLI",
"noProxy": "Aucun proxy", "noProxy": "Aucun proxy",
"proxySettings": { "proxySettings": {
"hostname": "Host name", "hostname": "Nom d'hôte",
"password": "Password", "password": "Mot de passe",
"port": "Port number", "port": "Numéro de port",
"username": "Username" "username": "Nom d'utilisateur"
}, },
"showVerbose": "Afficher la sortie de débogage verbeuse pendant", "showVerbose": "Afficher la sortie de débogage verbeuse pendant",
"sketch": { "sketch": {
@ -412,7 +415,6 @@
}, },
"sketchbook.location": "Localisation du croquis.", "sketchbook.location": "Localisation du croquis.",
"sketchbook.showAllFiles": "Vrai pour montrer tous les fichiers croquis à l'intérieur du croquis. La valeur par défaut est faux.", "sketchbook.showAllFiles": "Vrai pour montrer tous les fichiers croquis à l'intérieur du croquis. La valeur par défaut est faux.",
"survey.notification": "Vrai si les utilisateurs doivent être avertis si une enquête est disponible. Vrai par défaut.",
"unofficialBoardSupport": "Cliquer pour la liste non-officielle des URLs des support de cartes", "unofficialBoardSupport": "Cliquer pour la liste non-officielle des URLs des support de cartes",
"upload": "téléverser", "upload": "téléverser",
"upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.", "upload.autoVerify": "True if the IDE should automatically verify the code before the upload. True by default. When this value is false, IDE does not recompile the code before uploading the binary to the board. It's highly advised to only set this value to false if you know what you are doing.",
@ -451,21 +453,21 @@
"doneCompiling": "Compilation terminée.", "doneCompiling": "Compilation terminée.",
"doneUploading": "Téléversement fait.", "doneUploading": "Téléversement fait.",
"editInvalidSketchFolderLocationQuestion": "Do you want to try saving the sketch to a different location?", "editInvalidSketchFolderLocationQuestion": "Do you want to try saving the sketch to a different location?",
"editInvalidSketchFolderQuestion": "Do you want to try saving the sketch with a different name?", "editInvalidSketchFolderQuestion": "Voulez-vous essayer d'enregistrer le croquis sous un autre nom?",
"exportBinary": "Exporter les binaires compilés", "exportBinary": "Exporter les binaires compilés",
"invalidCloudSketchName": "The name must start with a letter, number, or underscore, followed by letters, numbers, dashes, dots and underscores. Maximum length is 36 characters.", "invalidCloudSketchName": "The name must start with a letter, number, or underscore, followed by letters, numbers, dashes, dots and underscores. Maximum length is 36 characters.",
"invalidSketchFolderLocationDetails": "You cannot save a sketch into a folder inside itself.", "invalidSketchFolderLocationDetails": "Vous ne pouvez pas enregistrer un croquis dans un dossier qui lui est interne",
"invalidSketchFolderLocationMessage": "Invalid sketch folder location: '{0}'", "invalidSketchFolderLocationMessage": "Invalid sketch folder location: '{0}'",
"invalidSketchFolderNameMessage": "Invalid sketch folder name: '{0}'", "invalidSketchFolderNameMessage": "Nom de dossier de croquis invalide: '{0}'",
"invalidSketchName": "The name must start with a letter, number, or underscore, followed by letters, numbers, dashes, dots and underscores. Maximum length is 63 characters.", "invalidSketchName": "The name must start with a letter, number, or underscore, followed by letters, numbers, dashes, dots and underscores. Maximum length is 63 characters.",
"moving": "Déplacement", "moving": "Déplacement",
"movingMsg": "Le fichier \"{0}\" à besoin d'être à l'intérieur d'un dossier de croquis appelé \"{1}\".\nCréer ce dossier, déplacer le fichier et continuer ?", "movingMsg": "Le fichier \"{0}\" à besoin d'être à l'intérieur d'un dossier de croquis appelé \"{1}\".\nCréer ce dossier, déplacer le fichier et continuer ?",
"new": "New Sketch", "new": "Nouveau croquis",
"noTrailingPeriod": "A filename cannot end with a dot", "noTrailingPeriod": "Un nom de fichier ne peut pas se terminer par un point",
"openFolder": "Ouvrir le dossier", "openFolder": "Ouvrir le dossier",
"openRecent": "Ouvrir les récents", "openRecent": "Ouvrir les récents",
"openSketchInNewWindow": "Ouvrir le croquis dans une nouvelle fenêtre", "openSketchInNewWindow": "Ouvrir le croquis dans une nouvelle fenêtre",
"reservedFilename": "'{0}' is a reserved filename.", "reservedFilename": "'{0}' est un nom de fichier réservé.",
"saveFolderAs": "Sauvegarder le dossier de croquis en tant que ...", "saveFolderAs": "Sauvegarder le dossier de croquis en tant que ...",
"saveSketch": "Enregistrer son programme pour le rouvrir plus tard.", "saveSketch": "Enregistrer son programme pour le rouvrir plus tard.",
"saveSketchAs": "Sauvegarder un dossier de croquis comme ...", "saveSketchAs": "Sauvegarder un dossier de croquis comme ...",
@ -485,48 +487,51 @@
}, },
"sketchbook": { "sketchbook": {
"newCloudSketch": "New Cloud Sketch", "newCloudSketch": "New Cloud Sketch",
"newSketch": "New Sketch" "newSketch": "Nouveau croquis"
},
"survey": {
"answerSurvey": "Enquête sur les réponses",
"dismissSurvey": "Ne pas montrer de nouveau",
"surveyMessage": "Aide-nous à nous améliorer en répondant à cette enquête très courte. Nous apprécions notre communauté et nous aimerions connaître un peu mieux nos supporters."
}, },
"theme": { "theme": {
"currentThemeNotFound": "Could not find the currently selected theme: {0}. Arduino IDE has picked a built-in theme compatible with the missing one.", "currentThemeNotFound": "Impossible de trouver le thème actuellement sélectionné : {0}. L'IDE Arduino a choisi un thème intégré compatible avec celui qui manque.",
"dark": "Dark", "dark": "Sombre",
"deprecated": "{0} (deprecated)", "deprecated": "{0} (deprecated)",
"hc": "Dark High Contrast", "hc": "Sombre avec contraste élevé",
"hcLight": "Light High Contrast", "hcLight": "Clair avec contraste élevé",
"light": "Light", "light": "Clair",
"user": "{0} (user)" "user": "{0} (user)"
}, },
"title": { "title": {
"cloud": "Cloud" "cloud": "Cloud"
}, },
"updateIndexes": { "updateIndexes": {
"updateIndexes": "Update Indexes", "updateIndexes": "Mettre à jour les index",
"updateLibraryIndex": "Update Library Index", "updateLibraryIndex": "Mettre à jour lindex des bibliothèques",
"updatePackageIndex": "Update Package Index" "updatePackageIndex": "Mettre à jour lindex des paquets"
}, },
"upload": { "upload": {
"error": "{0} erreur : {1}" "error": "{0} erreur : {1}"
}, },
"userFields": { "userFields": {
"cancel": "Annuler", "cancel": "Annuler",
"enterField": "Enter {0}", "enterField": "Saisir {0}",
"upload": "Téléverser" "upload": "Téléverser"
}, },
"validateSketch": { "validateSketch": {
"abortFixMessage": "The sketch is still invalid. Do you want to fix the remaining problems? By clicking '{0}', a new sketch will open.", "abortFixMessage": "Le croquis nest toujours pas valide. Voulez -vous corriger les problèmes restants ? En cliquant sur '{0}', un nouveau croquis souvrira.",
"abortFixTitle": "Invalid sketch", "abortFixTitle": "Croquis invalide",
"renameSketchFileMessage": "The sketch file '{0}' cannot be used. {1} Do you want to rename the sketch file now?", "renameSketchFileMessage": "Le fichier de croquis '{0}' ne peut pas être utilisé. {1} Voulez-vous renommer le fichier de croquis maintenant ?",
"renameSketchFileTitle": "Invalid sketch filename", "renameSketchFileTitle": "Nom de fichier du croquis invalide",
"renameSketchFolderMessage": "The sketch '{0}' cannot be used. {1} To get rid of this message, rename the sketch. Do you want to rename the sketch now?", "renameSketchFolderMessage": "Le croquis '{0}' ne peut pas être utilisé. {1} Pour supprimer ce message, renommez le croquis. Voulez-vous renommer le croquis maintenant ?",
"renameSketchFolderTitle": "Invalid sketch name" "renameSketchFolderTitle": "Nom de croquis invalide"
},
"versionWelcome": {
"cancelButton": "Peut-être plus tard",
"donateButton": "Faire un don maintenant",
"donateMessage": "Arduino sengage à garder les logiciels libres et gratuits pour tous. Votre don nous aide à développer de nouvelles fonctionnalités, à améliorer les bibliothèques et à soutenir des millions dutilisateurs dans le monde entier.",
"donateMessage2": "Veuillez envisager de soutenir notre travail sur lIDE Arduino gratuit et libre.",
"title": "Bienvenue dans une nouvelle version de lIDE Arduino !",
"titleWithVersion": "Bienvenue dans le nouvel IDE Arduino {0}!"
}, },
"workspace": { "workspace": {
"alreadyExists": "'{0}' already exists." "alreadyExists": "'{0}' existe déjà."
} }
}, },
"theia": { "theia": {
@ -547,8 +552,8 @@
"expand": "Replier" "expand": "Replier"
}, },
"workspace": { "workspace": {
"deleteCloudSketch": "The cloud sketch '{0}' will be permanently deleted from the Arduino servers and the local caches. This action is irreversible. Do you want to delete the current sketch?", "deleteCloudSketch": "Le croquis du cloud '{0}' sera définitivement supprimé des serveurs Arduino et des caches locaux. Cette action est irréversible. Voulez-vous supprimer le croquis actuel ?",
"deleteCurrentSketch": "The sketch '{0}' will be permanently deleted. This action is irreversible. Do you want to delete the current sketch?", "deleteCurrentSketch": "Le croquis '{0}' sera définitivement supprimé. Cette action est irréversible. Voulez-vous supprimer le croquis actuel ?",
"fileNewName": "Nouveau nom pour le fichier", "fileNewName": "Nouveau nom pour le fichier",
"invalidExtension": "« .{0} » n''est pas une extension valide.", "invalidExtension": "« .{0} » n''est pas une extension valide.",
"newFileName": "Nouveau nom pour le fichier" "newFileName": "Nouveau nom pour le fichier"

Some files were not shown because too many files have changed in this diff Show More