Skip to content

Commit 4773afa

Browse files
committed
v1.8.9
1 parent 1d9a1c4 commit 4773afa

38 files changed

+924
-279
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "cursor-pool",
33
"private": true,
4-
"version": "1.8.5",
4+
"version": "1.8.9",
55
"type": "module",
66
"scripts": {
77
"dev": "vite",

src-tauri/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src-tauri/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "cursor-pool"
3-
version = "1.8.5"
3+
version = "1.8.9"
44
description = "Cursor Pool App"
55
authors = ["Cloxl"]
66
edition = "2021"

src-tauri/src/api/client.rs

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -82,42 +82,7 @@ impl ApiClient {
8282
}
8383
}
8484

85-
// 检查请求是否可克隆
86-
let can_clone = request.try_clone().is_some();
87-
88-
if can_clone {
89-
// 第一次尝试
90-
let cloned_request = request.try_clone().unwrap();
91-
let result = self.client.execute(cloned_request).await;
92-
93-
if let Ok(response) = result {
94-
return self.process_response(response, &method.to_string(), &url).await;
95-
}
96-
97-
let err = result.unwrap_err();
98-
error!(
99-
target: "http_client",
100-
"第一次请求失败 - 方法: {}, URL: {}, 错误: {}",
101-
method, url, err
102-
);
103-
104-
// 第二次尝试
105-
let cloned_request = request.try_clone().unwrap();
106-
let result = self.client.execute(cloned_request).await;
107-
108-
if let Ok(response) = result {
109-
return self.process_response(response, &method.to_string(), &url).await;
110-
}
111-
112-
let err = result.unwrap_err();
113-
error!(
114-
target: "http_client",
115-
"第二次请求失败 - 方法: {}, URL: {}, 错误: {}",
116-
method, url, err
117-
);
118-
}
119-
120-
// 第三次尝试 (对于注册请求是第一次)
85+
// 执行请求
12186
let result = self.client.execute(request).await;
12287

12388
match result {

src-tauri/src/api/endpoints.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ pub async fn report_bug(
410410
};
411411

412412
let response = client
413-
.post(format!("{}/bug/report", client.get_base_url()))
413+
.post(format!("{}/report", client.get_base_url()))
414414
.json(&request)
415415
.send()
416416
.await

src-tauri/src/cursor_reset/commands.rs

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use std::fs;
1111
use std::time::Duration;
1212
use tauri::State;
1313
use tauri::Manager;
14+
use tauri::Emitter;
1415
use tracing::error;
1516
use tokio;
1617

@@ -123,6 +124,21 @@ pub async fn reset_machine_id(
123124
}
124125
};
125126

127+
// 在这里调用新的清理函数
128+
if let Err(cleanup_err) = cleanup_database_entries(db.clone()).await {
129+
error!(target: "reset", "数据库清理步骤失败: {}", cleanup_err);
130+
ErrorReporter::report_error(
131+
client.clone(),
132+
"reset_machine_id_cleanup_step",
133+
&cleanup_err,
134+
None,
135+
Some("medium".to_string()),
136+
)
137+
.await;
138+
return Err(format!("数据库清理失败: {}", cleanup_err));
139+
}
140+
error!(target: "reset", "数据库清理步骤完成");
141+
126142
let new_ids = if let Some(id) = machine_id {
127143
// 生成随机 ID
128144
let mut ids = generate_new_ids();
@@ -266,6 +282,10 @@ pub async fn reset_machine_id(
266282
("mac_id", new_ids.get("telemetry.macMachineId").unwrap()),
267283
("machineId", new_ids.get("telemetry.machineId").unwrap()),
268284
("sqm_id", new_ids.get("telemetry.sqmId").unwrap()),
285+
(
286+
"storage.serviceMachineId",
287+
new_ids.get("telemetry.devDeviceId").unwrap(),
288+
),
269289
];
270290

271291
if let Err(e) = update_database(&paths.db, &updates) {
@@ -964,4 +984,105 @@ pub fn get_running_cursor_path() -> Result<String, String> {
964984
error!(target: "cursor", "{}", err_msg);
965985
return Err(err_msg);
966986
}
987+
}
988+
989+
#[tauri::command]
990+
pub async fn refresh_inbound(app_handle: tauri::AppHandle) -> Result<bool, String> {
991+
error!(target: "inbound", "手动触发线路刷新");
992+
993+
// 重新获取线路配置并测速
994+
match crate::api::inbound::init_inbound_config(&app_handle).await {
995+
Ok(_) => {
996+
error!(target: "inbound", "线路刷新成功完成");
997+
// 通知前端刷新完成
998+
if let Some(window) = app_handle.get_webview_window("main") {
999+
if let Err(e) = window.emit("inbound-refreshed", ()) {
1000+
error!(target: "inbound", "发送线路刷新事件失败: {}", e);
1001+
}
1002+
} else {
1003+
error!(target: "inbound", "无法获取主窗口实例");
1004+
}
1005+
Ok(true)
1006+
},
1007+
Err(e) => {
1008+
error!(target: "inbound", "线路刷新失败: {}", e);
1009+
Err(format!("线路刷新失败: {}", e))
1010+
}
1011+
}
1012+
}
1013+
1014+
#[tauri::command]
1015+
pub async fn cleanup_database_entries(
1016+
db_state: State<'_, Database>,
1017+
) -> Result<(), String> {
1018+
error!(target: "database_cleanup", "开始清理数据库条目");
1019+
1020+
// 从 db_state 创建 AppPaths 实例
1021+
let app_paths = match AppPaths::new_with_db(Some(&db_state)) {
1022+
Ok(p) => p,
1023+
Err(e) => {
1024+
let err_msg = format!("获取应用路径失败: {}", e);
1025+
error!(target: "database_cleanup", "{}", err_msg);
1026+
return Err(err_msg);
1027+
}
1028+
};
1029+
1030+
let db_path = &app_paths.db;
1031+
1032+
if !db_path.exists() {
1033+
let err_msg = "数据库文件不存在,跳过清理".to_string();
1034+
error!(target: "database_cleanup", "{}", err_msg);
1035+
return Err(err_msg);
1036+
}
1037+
1038+
let conn = match Connection::open(db_path) {
1039+
Ok(c) => c,
1040+
Err(e) => {
1041+
let err_msg = format!("打开数据库失败: {}", e);
1042+
error!(target: "database_cleanup", "{}", err_msg);
1043+
return Err(err_msg);
1044+
}
1045+
};
1046+
1047+
let keys_to_delete = vec![
1048+
"src.vs.platform.reactivestorage.browser.reactiveStorageServiceImpl.persistentStorage.applicationUser",
1049+
"workbench.auxiliarybar.pinnedPanels",
1050+
"memento/mainThreadCustomEditors.origins",
1051+
];
1052+
1053+
for key in keys_to_delete {
1054+
match conn.execute("DELETE FROM ItemTable WHERE key = ?1", [key]) {
1055+
Ok(rows_affected) => {
1056+
if rows_affected > 0 {
1057+
error!(target: "database_cleanup", "成功删除键: {}", key);
1058+
} else {
1059+
error!(target: "database_cleanup", "键不存在或删除失败: {}", key);
1060+
}
1061+
}
1062+
Err(e) => {
1063+
let err_msg = format!("删除键 {} 失败: {}", key, e);
1064+
error!(target: "database_cleanup", "{}", err_msg);
1065+
//可以选择在这里返回错误,或者继续尝试删除其他键
1066+
}
1067+
}
1068+
}
1069+
1070+
let key_to_upsert = "cursorAuth/stripeMembershipType";
1071+
let value_to_upsert = "free_trial";
1072+
match conn.execute(
1073+
"INSERT OR REPLACE INTO ItemTable (key, value) VALUES (?1, ?2)",
1074+
[key_to_upsert, value_to_upsert],
1075+
) {
1076+
Ok(_) => {
1077+
error!(target: "database_cleanup", "成功设置键 {} 为 {}", key_to_upsert, value_to_upsert);
1078+
}
1079+
Err(e) => {
1080+
let err_msg = format!("设置键 {} 失败: {}", key_to_upsert, e);
1081+
error!(target: "database_cleanup", "{}", err_msg);
1082+
return Err(err_msg); // 如果这个关键操作失败,则返回错误
1083+
}
1084+
}
1085+
1086+
error!(target: "database_cleanup", "数据库条目清理完成");
1087+
Ok(())
9671088
}

src-tauri/src/cursor_reset/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
pub mod commands;
22

3-
pub use commands::{get_machine_ids, reset_machine_id, switch_account, get_running_cursor_path};
3+
pub use commands::{get_machine_ids, reset_machine_id, switch_account, get_running_cursor_path, refresh_inbound};

src-tauri/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,8 @@ pub fn run() {
170170
cursor_reset::commands::close_cursor,
171171
cursor_reset::commands::launch_cursor,
172172
cursor_reset::commands::find_cursor_path,
173+
// 线路管理
174+
cursor_reset::commands::refresh_inbound,
173175
// 日志
174176
cursor_reset::commands::log_error,
175177
cursor_reset::commands::log_warn,

src-tauri/tauri.conf.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,9 @@
9393
"active": true,
9494
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEM5NjUxODYwQkUzMkY2RTYKUldUbTlqSytZQmhseVIvWXg0c1RLakxCajBpdGQzeGxUbVMyaGYyRWZXdXdvNURtTW5lZXBVVWQK",
9595
"endpoints": [
96-
"https://pool.52ai.org/api/version"
96+
"https://vip.123pan.cn/1840147130/updater/latest.json",
97+
"https://github.com/Cloxl/CursorPool_Client/releases/latest/download/latest.json",
98+
"https://gh-proxy.com/github.com/Cloxl/CursorPool_Client/releases/latest/download/latest.json"
9799
],
98100
"windows": {
99101
"installMode": "passive"

src/App.vue

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import { Window } from '@tauri-apps/api/window'
1212
import { initializeDevToolsProtection } from './utils/devtools'
1313
import { initEventListeners, destroyEventListeners } from './utils/eventBus'
14+
import { apiClient } from './utils/apiClient'
1415
1516
const { currentTheme } = useTheme()
1617
const { currentLang } = useI18n()
@@ -27,6 +28,13 @@
2728
// 初始化语言设置
2829
await initLanguage()
2930
31+
// 初始化API客户端配置
32+
apiClient.configure({
33+
maxRetries: 2,
34+
refreshInboundOnMaxRetries: true,
35+
showRetryNotification: true,
36+
})
37+
3038
// 使用统一的初始化方法
3139
await historyStore.init()
3240
@@ -52,8 +60,11 @@
5260
5361
// 应用卸载时清理
5462
onUnmounted(() => {
55-
// 销毁所有事件监听器
63+
// 清理事件监听器
5664
destroyEventListeners()
65+
66+
// 清理API客户端资源
67+
apiClient.cleanup()
5768
})
5869
</script>
5970

0 commit comments

Comments
 (0)