async configDeviceSettings()

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.");
  }