|
|
@@ -359,36 +359,36 @@ async fn get_git_versions_from_huaweicloud(client: &reqwest::Client) -> Vec<Stri
|
|
|
fn get_fallback_git_versions() -> Vec<VersionItem> {
|
|
|
vec![
|
|
|
VersionItem {
|
|
|
- value: "2.47.1.windows.1".to_string(),
|
|
|
- label: "2.47.1.windows.1".to_string(),
|
|
|
+ value: "2.47.1".to_string(),
|
|
|
+ label: "Git 2.47.1".to_string(),
|
|
|
lts: None,
|
|
|
disabled: None,
|
|
|
separator: None,
|
|
|
},
|
|
|
VersionItem {
|
|
|
- value: "2.47.0.windows.2".to_string(),
|
|
|
- label: "2.47.0.windows.2".to_string(),
|
|
|
+ value: "2.47.0".to_string(),
|
|
|
+ label: "Git 2.47.0".to_string(),
|
|
|
lts: None,
|
|
|
disabled: None,
|
|
|
separator: None,
|
|
|
},
|
|
|
VersionItem {
|
|
|
- value: "2.46.2.windows.1".to_string(),
|
|
|
- label: "2.46.2.windows.1".to_string(),
|
|
|
+ value: "2.46.2".to_string(),
|
|
|
+ label: "Git 2.46.2".to_string(),
|
|
|
lts: None,
|
|
|
disabled: None,
|
|
|
separator: None,
|
|
|
},
|
|
|
VersionItem {
|
|
|
- value: "2.46.1.windows.1".to_string(),
|
|
|
- label: "2.46.1.windows.1".to_string(),
|
|
|
+ value: "2.46.1".to_string(),
|
|
|
+ label: "Git 2.46.1".to_string(),
|
|
|
lts: None,
|
|
|
disabled: None,
|
|
|
separator: None,
|
|
|
},
|
|
|
VersionItem {
|
|
|
- value: "2.46.0.windows.1".to_string(),
|
|
|
- label: "2.46.0.windows.1".to_string(),
|
|
|
+ value: "2.46.0".to_string(),
|
|
|
+ label: "Git 2.46.0".to_string(),
|
|
|
lts: None,
|
|
|
disabled: None,
|
|
|
separator: None,
|
|
|
@@ -397,15 +397,45 @@ fn get_fallback_git_versions() -> Vec<VersionItem> {
|
|
|
}
|
|
|
|
|
|
async fn get_vscode_versions() -> Result<VersionResult, String> {
|
|
|
- // VS Code 通常只提供最新版本
|
|
|
- Ok(VersionResult {
|
|
|
- versions: vec![VersionItem {
|
|
|
- value: "latest".to_string(),
|
|
|
- label: "Latest".to_string(),
|
|
|
+ let client = reqwest::Client::new();
|
|
|
+
|
|
|
+ // 从 VS Code 官方 API 获取版本列表
|
|
|
+ let response = client
|
|
|
+ .get("https://update.code.visualstudio.com/api/releases/stable")
|
|
|
+ .header("User-Agent", "Claude-AI-Installer")
|
|
|
+ .timeout(std::time::Duration::from_secs(10))
|
|
|
+ .send()
|
|
|
+ .await
|
|
|
+ .map_err(|e| format!("请求 VS Code 版本列表失败: {}", e))?;
|
|
|
+
|
|
|
+ if !response.status().is_success() {
|
|
|
+ return Err(format!("VS Code API 返回错误状态: {}", response.status()));
|
|
|
+ }
|
|
|
+
|
|
|
+ // API 返回格式是版本号数组: ["1.96.0", "1.95.3", ...]
|
|
|
+ let versions: Vec<String> = response
|
|
|
+ .json()
|
|
|
+ .await
|
|
|
+ .map_err(|e| format!("解析 VS Code 版本列表失败: {}", e))?;
|
|
|
+
|
|
|
+ let version_items: Vec<VersionItem> = versions
|
|
|
+ .into_iter()
|
|
|
+ .take(15)
|
|
|
+ .map(|version| VersionItem {
|
|
|
+ value: version.clone(),
|
|
|
+ label: format!("VS Code {}", version),
|
|
|
lts: None,
|
|
|
disabled: None,
|
|
|
separator: None,
|
|
|
- }],
|
|
|
+ })
|
|
|
+ .collect();
|
|
|
+
|
|
|
+ if version_items.is_empty() {
|
|
|
+ return Err("VS Code 版本列表为空".to_string());
|
|
|
+ }
|
|
|
+
|
|
|
+ Ok(VersionResult {
|
|
|
+ versions: version_items,
|
|
|
warning: None,
|
|
|
})
|
|
|
}
|