in src/Models/RaspberryPiDevice.ts [180:295]
async configDeviceSettings(): Promise<void> {
// Raspberry Pi host
const sshDiscoverOrInputItems: vscode.QuickPickItem[] = [
{
label: "$(search) Auto discover",
detail: "Auto discover SSH enabled device in LAN"
},
{
label: "$(gear) Manual setup",
detail: "Setup device SSH configuration manually"
}
];
const sshDiscoverOrInputChoice = await vscode.window.showQuickPick(sshDiscoverOrInputItems, {
ignoreFocusOut: true,
matchOnDescription: true,
matchOnDetail: true,
placeHolder: "Select an option"
});
if (!sshDiscoverOrInputChoice) {
throw new OperationCanceledError("SSH configuration type selection cancelled.");
}
let raspiHost: string | undefined;
if (sshDiscoverOrInputChoice.label === "$(search) Auto discover") {
let selectDeviceChoice: vscode.QuickPickItem | undefined;
do {
const selectDeviceItems = this.autoDiscoverDeviceIp();
selectDeviceChoice = await vscode.window.showQuickPick(selectDeviceItems, {
ignoreFocusOut: true,
matchOnDescription: true,
matchOnDetail: true,
placeHolder: "Select a device"
});
} while (selectDeviceChoice && selectDeviceChoice.label === "$(sync) Discover again");
if (!selectDeviceChoice) {
throw new OperationCanceledError("Device selection cancelled.");
}
if (selectDeviceChoice.label !== "$(gear) Manual setup") {
raspiHost = selectDeviceChoice.label;
}
}
if (!raspiHost) {
const raspiHostOption: vscode.InputBoxOptions = {
value: RaspberryPiUploadConfig.host,
prompt: `Please input device ip or hostname here.`,
ignoreFocusOut: true
};
raspiHost = await vscode.window.showInputBox(raspiHostOption);
if (!raspiHost) {
throw new OperationCanceledError("Hostname input cancelled.");
}
}
raspiHost = raspiHost || RaspberryPiUploadConfig.host;
// Raspberry Pi SSH port
const raspiPortOption: vscode.InputBoxOptions = {
value: RaspberryPiUploadConfig.port.toString(),
prompt: `Please input SSH port here.`,
ignoreFocusOut: true
};
const raspiPortString = await vscode.window.showInputBox(raspiPortOption);
if (!raspiPortString) {
throw new OperationCanceledError("Port input cancelled.");
}
const raspiPort =
raspiPortString && !isNaN(Number(raspiPortString)) ? Number(raspiPortString) : RaspberryPiUploadConfig.port;
// Raspberry Pi user name
const raspiUserOption: vscode.InputBoxOptions = {
value: RaspberryPiUploadConfig.user,
prompt: `Please input user name here.`,
ignoreFocusOut: true
};
let raspiUser = await vscode.window.showInputBox(raspiUserOption);
if (!raspiUser) {
throw new OperationCanceledError("User name input cancelled.");
}
raspiUser = raspiUser || RaspberryPiUploadConfig.user;
// Raspberry Pi user password
const raspiPasswordOption: vscode.InputBoxOptions = {
value: RaspberryPiUploadConfig.password,
prompt: `Please input password here.`,
ignoreFocusOut: true
};
let raspiPassword = await vscode.window.showInputBox(raspiPasswordOption);
if (raspiPassword === undefined) {
throw new OperationCanceledError("Password input cancelled.");
}
raspiPassword = raspiPassword || RaspberryPiUploadConfig.password;
// Raspberry Pi path
const raspiPathOption: vscode.InputBoxOptions = {
value: RaspberryPiUploadConfig.projectPath,
prompt: `Please input project destination path here.`,
ignoreFocusOut: true
};
let raspiPath = await vscode.window.showInputBox(raspiPathOption);
if (!raspiPath) {
throw new OperationCanceledError("Project destination path input cancelled.");
}
raspiPath = raspiPath || RaspberryPiUploadConfig.projectPath;
RaspberryPiUploadConfig.host = raspiHost;
RaspberryPiUploadConfig.port = raspiPort;
RaspberryPiUploadConfig.user = raspiUser;
RaspberryPiUploadConfig.password = raspiPassword;
RaspberryPiUploadConfig.projectPath = raspiPath;
RaspberryPiUploadConfig.updated = true;
vscode.window.showInformationMessage("Config SSH successfully.");
}