Skip to content

Commit afe72b3

Browse files
committed
feat: enhance pre-operation check with background processing and error handling
1 parent 11598ac commit afe72b3

File tree

1 file changed

+39
-17
lines changed

1 file changed

+39
-17
lines changed

src/main/java/com/laker/postman/panel/workspace/components/GitOperationDialog.java

Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -399,26 +399,48 @@ private JPanel createFooterPanel() {
399399
*/
400400
private void performPreOperationCheck() {
401401
stepIndicator.setCurrentStep(0);
402+
updateStatus(I18nUtil.getMessage(MessageKeys.GIT_DIALOG_CHECKING_STATUS_AND_CONFLICT), "icons/refresh.svg", Color.BLUE);
403+
404+
// 禁用执行按钮,防止在检查期间执行操作
405+
executeButton.setEnabled(false);
406+
407+
// 使用 SwingWorker 在后台线程执行 Git 检查,避免阻塞 UI
408+
SwingWorker<GitStatusCheck, Void> worker = new SwingWorker<>() {
409+
@Override
410+
protected GitStatusCheck doInBackground() {
411+
try {
412+
CredentialsProvider credentialsProvider = null;
413+
SshCredentialsProvider sshCredentialsProvider = null;
414+
if (workspace.getGitAuthType() != null) {
415+
credentialsProvider = workspaceService.getCredentialsProvider(workspace);
416+
sshCredentialsProvider = workspaceService.getSshCredentialsProvider(workspace);
417+
}
418+
return checkGitStatus(workspace.getPath(), operation.name(), credentialsProvider, sshCredentialsProvider);
419+
} catch (Exception e) {
420+
log.error("Failed to check git status", e);
421+
return null;
422+
}
423+
}
402424

403-
SwingUtilities.invokeLater(() -> {
404-
try {
405-
updateStatus(I18nUtil.getMessage(MessageKeys.GIT_DIALOG_CHECKING_STATUS_AND_CONFLICT), "icons/refresh.svg", Color.BLUE);
406-
CredentialsProvider credentialsProvider = null;
407-
SshCredentialsProvider sshCredentialsProvider = null;
408-
if (workspace.getGitAuthType() != null) {
409-
credentialsProvider = workspaceService.getCredentialsProvider(workspace);
410-
sshCredentialsProvider = workspaceService.getSshCredentialsProvider(workspace);
425+
@Override
426+
protected void done() {
427+
try {
428+
statusCheck = get();
429+
if (statusCheck != null) {
430+
displayStatusCheck(statusCheck);
431+
displayFileChangesStatus();
432+
stepIndicator.setCurrentStep(1);
433+
updateStatus(I18nUtil.getMessage(MessageKeys.GIT_DIALOG_STATUS_CHECK_DONE), "icons/check.svg", new Color(34, 139, 34));
434+
} else {
435+
updateStatus(I18nUtil.getMessage(MessageKeys.GIT_DIALOG_STATUS_CHECK_FAILED, "Unknown error"), "icons/warning.svg", Color.RED);
436+
}
437+
} catch (Exception e) {
438+
log.error("Failed to perform pre-operation check", e);
439+
updateStatus(I18nUtil.getMessage(MessageKeys.GIT_DIALOG_STATUS_CHECK_FAILED, e.getMessage()), "icons/warning.svg", Color.RED);
411440
}
412-
statusCheck = checkGitStatus(workspace.getPath(), operation.name(), credentialsProvider, sshCredentialsProvider);
413-
displayStatusCheck(statusCheck);
414-
displayFileChangesStatus();
415-
stepIndicator.setCurrentStep(1);
416-
updateStatus(I18nUtil.getMessage(MessageKeys.GIT_DIALOG_STATUS_CHECK_DONE), "icons/check.svg", new Color(34, 139, 34));
417-
} catch (Exception e) {
418-
log.error("Failed to perform pre-operation check", e);
419-
updateStatus(I18nUtil.getMessage(MessageKeys.GIT_DIALOG_STATUS_CHECK_FAILED, e.getMessage()), "icons/warning.svg", Color.RED);
420441
}
421-
});
442+
};
443+
worker.execute();
422444
}
423445

424446
/**

0 commit comments

Comments
 (0)