Skip to content

Commit 6bded29

Browse files
committed
feat: add update source preference settings for auto, GitHub, and Gitee
1 parent 29a9fe6 commit 6bded29

File tree

6 files changed

+89
-2
lines changed

6 files changed

+89
-2
lines changed

src/main/java/com/laker/postman/panel/topmenu/setting/SettingManager.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,28 @@ public static void setAutoUpdateStartupDelaySeconds(long seconds) {
312312
save();
313313
}
314314

315+
/**
316+
* 更新源偏好设置
317+
* 支持的值:
318+
* - "auto": 自动选择最快的源(默认)
319+
* - "github": 始终使用 GitHub
320+
* - "gitee": 始终使用 Gitee
321+
*/
322+
public static String getUpdateSourcePreference() {
323+
String val = props.getProperty("update_source_preference");
324+
if (val != null && (val.equals("github") || val.equals("gitee") || val.equals("auto"))) {
325+
return val;
326+
}
327+
return "gitee";
328+
}
329+
330+
public static void setUpdateSourcePreference(String preference) {
331+
if (preference != null && (preference.equals("auto") || preference.equals("github") || preference.equals("gitee"))) {
332+
props.setProperty("update_source_preference", preference);
333+
save();
334+
}
335+
}
336+
315337
// ===== 网络代理设置 =====
316338

317339
/**

src/main/java/com/laker/postman/panel/topmenu/setting/SystemSettingsPanel.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class SystemSettingsPanel extends JPanel {
2222
private JCheckBox autoUpdateCheckBox;
2323
private JTextField autoUpdateIntervalField;
2424
private JTextField autoUpdateStartupDelayField;
25+
private JComboBox<String> updateSourceComboBox;
2526
private JButton saveBtn;
2627
private JButton cancelBtn;
2728

@@ -83,6 +84,30 @@ private void initUI() {
8384
autoUpdateStartupDelayField.setText(String.valueOf(SettingManager.getAutoUpdateStartupDelaySeconds()));
8485
autoUpdatePanel.add(autoUpdateStartupDelayField, gbc);
8586

87+
// 更新源选择
88+
gbc.gridx = 0;
89+
gbc.gridy = 3;
90+
JLabel updateSourceLabel = new JLabel(I18nUtil.getMessage(MessageKeys.SETTINGS_UPDATE_SOURCE_PREFERENCE));
91+
updateSourceLabel.setToolTipText(I18nUtil.getMessage(MessageKeys.SETTINGS_UPDATE_SOURCE_PREFERENCE_TOOLTIP));
92+
autoUpdatePanel.add(updateSourceLabel, gbc);
93+
94+
gbc.gridx = 1;
95+
String[] sourceOptions = {
96+
I18nUtil.getMessage(MessageKeys.SETTINGS_UPDATE_SOURCE_AUTO),
97+
I18nUtil.getMessage(MessageKeys.SETTINGS_UPDATE_SOURCE_GITHUB),
98+
I18nUtil.getMessage(MessageKeys.SETTINGS_UPDATE_SOURCE_GITEE)
99+
};
100+
updateSourceComboBox = new JComboBox<>(sourceOptions);
101+
102+
// 根据当前设置选择对应的选项
103+
String currentPreference = SettingManager.getUpdateSourcePreference();
104+
switch (currentPreference) {
105+
case "github" -> updateSourceComboBox.setSelectedIndex(1);
106+
case "gitee" -> updateSourceComboBox.setSelectedIndex(2);
107+
default -> updateSourceComboBox.setSelectedIndex(0); // auto
108+
}
109+
autoUpdatePanel.add(updateSourceComboBox, gbc);
110+
86111
mainPanel.add(autoUpdatePanel);
87112
mainPanel.add(Box.createVerticalGlue());
88113

@@ -183,6 +208,7 @@ public void keyPressed(KeyEvent e) {
183208
autoUpdateCheckBox.addKeyListener(keyAdapter);
184209
autoUpdateIntervalField.addKeyListener(keyAdapter);
185210
autoUpdateStartupDelayField.addKeyListener(keyAdapter);
211+
updateSourceComboBox.addKeyListener(keyAdapter);
186212
}
187213

188214
private void registerListeners() {
@@ -218,6 +244,15 @@ private void saveSettings() {
218244
SettingManager.setAutoUpdateCheckIntervalHours(autoUpdateInterval);
219245
SettingManager.setAutoUpdateStartupDelaySeconds(autoUpdateStartupDelay);
220246

247+
// 保存更新源偏好
248+
int selectedIndex = updateSourceComboBox.getSelectedIndex();
249+
String preference = switch (selectedIndex) {
250+
case 1 -> "github";
251+
case 2 -> "gitee";
252+
default -> "auto";
253+
};
254+
SettingManager.setUpdateSourcePreference(preference);
255+
221256
NotificationUtil.showSuccess(I18nUtil.getMessage(MessageKeys.SETTINGS_SAVE_SUCCESS));
222257

223258
Window window = SwingUtilities.getWindowAncestor(this);

src/main/java/com/laker/postman/service/update/VersionChecker.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,16 +82,31 @@ public UpdateInfo checkForUpdate() {
8282

8383
/**
8484
* 检测最佳源(GitHub 或 Gitee)
85-
* 策略:并行测试连接速度,选择响应最快的源
85+
* 策略:根据用户偏好设置或并行测试连接速度,选择最合适的源
8686
*/
8787
private static String detectBestSource() {
88+
// 检查用户的更新源偏好设置
89+
String preference = com.laker.postman.panel.topmenu.setting.SettingManager.getUpdateSourcePreference();
90+
91+
// 如果用户指定了固定源,直接使用
92+
if ("github".equals(preference)) {
93+
log.info("Using user-preferred source: GitHub");
94+
cachedBestSource = GITHUB_API_URL;
95+
return GITHUB_API_URL;
96+
} else if ("gitee".equals(preference)) {
97+
log.info("Using user-preferred source: Gitee");
98+
cachedBestSource = GITEE_API_URL;
99+
return GITEE_API_URL;
100+
}
101+
102+
// auto 模式:自动选择最快的源
88103
// 如果已有缓存,直接使用
89104
if (cachedBestSource != null) {
90105
log.info("Using cached best source: {}", cachedBestSource.contains("github") ? SOURCE_GITHUB : SOURCE_GITEE);
91106
return cachedBestSource;
92107
}
93108

94-
log.info("Detecting best update source...");
109+
log.info("Auto-detecting best update source...");
95110

96111
// 并行测试两个源的连接速度
97112
CompletableFuture<Long> githubTest = CompletableFuture.supplyAsync(() -> testSourceSpeed(GITHUB_API_URL, SOURCE_GITHUB));

src/main/java/com/laker/postman/util/MessageKeys.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,11 @@ private MessageKeys() {
764764
public static final String SETTINGS_AUTO_UPDATE_INTERVAL_TOOLTIP = "settings.auto_update.interval.tooltip";
765765
public static final String SETTINGS_AUTO_UPDATE_STARTUP_DELAY = "settings.auto_update.startup_delay";
766766
public static final String SETTINGS_AUTO_UPDATE_STARTUP_DELAY_TOOLTIP = "settings.auto_update.startup_delay.tooltip";
767+
public static final String SETTINGS_UPDATE_SOURCE_PREFERENCE = "settings.update_source.preference";
768+
public static final String SETTINGS_UPDATE_SOURCE_PREFERENCE_TOOLTIP = "settings.update_source.preference.tooltip";
769+
public static final String SETTINGS_UPDATE_SOURCE_AUTO = "settings.update_source.auto";
770+
public static final String SETTINGS_UPDATE_SOURCE_GITHUB = "settings.update_source.github";
771+
public static final String SETTINGS_UPDATE_SOURCE_GITEE = "settings.update_source.gitee";
767772
public static final String SETTINGS_VALIDATION_AUTO_UPDATE_INTERVAL_ERROR = "settings.validation.auto_update_interval.error";
768773
public static final String SETTINGS_VALIDATION_AUTO_UPDATE_STARTUP_DELAY_ERROR = "settings.validation.auto_update_startup_delay.error";
769774

src/main/resources/messages_en.properties

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,11 @@ settings.auto_update.interval=Check Interval (hours):
648648
settings.auto_update.interval.tooltip=Time interval for automatic update checking, in hours
649649
settings.auto_update.startup_delay=Startup Delay (seconds):
650650
settings.auto_update.startup_delay.tooltip=How many seconds after application startup to begin checking for updates
651+
settings.update_source.preference=Update Source:
652+
settings.update_source.preference.tooltip=Choose the source for checking updates and downloading (Auto-detect, GitHub, or Gitee)
653+
settings.update_source.auto=Auto-detect (Recommended)
654+
settings.update_source.github=GitHub (International/VPN)
655+
settings.update_source.gitee=Gitee (China Mainland)
651656
settings.validation.auto_update_interval.error=Please enter a valid update check interval (integer greater than 0)
652657
settings.validation.auto_update_startup_delay.error=Please enter a valid startup delay time (integer greater than or equal to 0)
653658
settings.ui.title=UI Settings

src/main/resources/messages_zh.properties

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -649,6 +649,11 @@ settings.auto_update.interval=检查间隔(小时):
649649
settings.auto_update.interval.tooltip=自动检查更新的时间间隔,单位为小时
650650
settings.auto_update.startup_delay=启动延迟(秒):
651651
settings.auto_update.startup_delay.tooltip=应用启动后多少秒开始检查更新
652+
settings.update_source.preference=更新源:
653+
settings.update_source.preference.tooltip=选择检查更新和下载的来源(自动选择、GitHub 或 Gitee)
654+
settings.update_source.auto=自动选择(推荐)
655+
settings.update_source.github=GitHub(国外用户/VPN)
656+
settings.update_source.gitee=Gitee(国内用户)
652657
settings.validation.auto_update_interval.error=请输入有效的更新检查间隔时间(大于0的整数)
653658
settings.validation.auto_update_startup_delay.error=请输入有效的启动延迟时间(大于等于0的整数)
654659
settings.ui.title=界面设置

0 commit comments

Comments
 (0)