From cbc5f6e27e03625545f588c6d33ee12edc587279 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 20 May 2026 00:10:44 +0000
Subject: [PATCH 1/6] Initial plan
From 73b70f6cde8809136410f15eb4d05511d8e38950 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 20 May 2026 00:16:33 +0000
Subject: [PATCH 2/6] Add subscription proxy add button
Agent-Logs-Url: https://github.com/salarcode/SmartProxy/sessions/0ae21641-a397-4146-ab1b-fc58fd113911
Co-authored-by: salarcode <1272095+salarcode@users.noreply.github.com>
---
src/_locales/en/messages.json | 3 ++
src/ui/code/settingsPage.ts | 64 ++++++++++++++++++++++++++++++++---
src/ui/settings.html | 4 +++
3 files changed, 67 insertions(+), 4 deletions(-)
diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json
index ae3b52fc..7b0903fc 100644
--- a/src/_locales/en/messages.json
+++ b/src/_locales/en/messages.json
@@ -462,6 +462,9 @@
"settingsAddServerButton": {
"message": "Add Server"
},
+ "settingsAddActiveSubscriptionProxyServerButton": {
+ "message": "Add to My Servers"
+ },
"settingsRemoveMultipleServerButton": {
"message": "Delete Multiple"
},
diff --git a/src/ui/code/settingsPage.ts b/src/ui/code/settingsPage.ts
index af3707c8..f767fdbc 100644
--- a/src/ui/code/settingsPage.ts
+++ b/src/ui/code/settingsPage.ts
@@ -207,6 +207,8 @@ export class settingsPage {
jq("#btnAddProxyServer").click(settingsPage.uiEvents.onClickAddProxyServer);
+ jq("#btnAddActiveSubscriptionProxyServerToMyServers").click(settingsPage.uiEvents.onClickAddActiveSubscriptionProxyServerToMyServers);
+
jq("#btnRemoveMultipleProxyServer").click(settingsPage.uiEvents.onClickRemoveMultipleProxyServer);
jq("#cmdServerProtocol").on("change", settingsPage.uiEvents.onChangeServerProtocol);
@@ -1201,6 +1203,7 @@ export class settingsPage {
// populate
this.populateProxyServersToComboBox(cmbActiveProxyServer, defaultProxyServerId, proxyServers, serverSubscriptions);
+ this.updateActiveSubscriptionProxyServerAction();
}
private static readServers(): ProxyServer[] {
@@ -1318,6 +1321,35 @@ export class settingsPage {
return null;
}
+ private static findProxyServerSubscriptionByProxyServerId(proxyServerId: string): ProxyServerSubscription | null {
+ if (!proxyServerId)
+ return null;
+
+ let serverSubscriptions = settingsPage.readServerSubscriptions();
+ for (let subscription of serverSubscriptions) {
+ if (!subscription.enabled || !subscription.proxies)
+ continue;
+
+ let proxy = subscription.proxies.find(item => item.id === proxyServerId);
+ if (proxy !== undefined)
+ return subscription;
+ }
+ return null;
+ }
+
+ private static updateActiveSubscriptionProxyServerAction() {
+ let proxyServerId = jq("#cmbActiveProxyServer").val() as string;
+ let subscription = settingsPage.findProxyServerSubscriptionByProxyServerId(proxyServerId);
+ let button = jq("#btnAddActiveSubscriptionProxyServerToMyServers");
+
+ if (subscription) {
+ button.show().removeClass("d-none");
+ }
+ else {
+ button.hide();
+ }
+ }
+
private static exportServersListFormatted(): string {
let proxyList = settingsPage.readServers();
let result = `[SmartProxy Servers]\r\n`;
@@ -2640,6 +2672,7 @@ export class settingsPage {
else {
Debug.warn("Settings> Selected ActiveProxyServer ID not found!");
}
+ settingsPage.updateActiveSubscriptionProxyServerAction();
},
onClickAddProxyServer() {
@@ -2651,6 +2684,29 @@ export class settingsPage {
modal.modal("show");
modal.find("#txtServerAddress").focus();
},
+ onClickAddActiveSubscriptionProxyServerToMyServers() {
+ let proxyServerId = jq("#cmbActiveProxyServer").val() as string;
+ let subscription = settingsPage.findProxyServerSubscriptionByProxyServerId(proxyServerId);
+ if (!subscription)
+ return;
+
+ let server = subscription.proxies.find(item => item.id === proxyServerId);
+ if (!server)
+ return;
+
+ let modal = jq("#modalModifyProxyServer");
+ modal.data("editing", null);
+
+ let serverToAdd = new ProxyServer();
+ jQuery.extend(serverToAdd, server);
+ serverToAdd.order = 0;
+ serverToAdd.name = settingsPage.generateNewServerName(subscription.name);
+
+ settingsPage.populateServerModal(modal, serverToAdd);
+
+ modal.modal("show");
+ modal.find("#txtServerAddress").focus();
+ },
onClickRemoveMultipleProxyServer() {
var rows = settingsPage.grdServers.rows({ selected: true });
if (!rows)
@@ -4367,17 +4423,17 @@ export class settingsPage {
//#endregion
//#region Common functions ---------------
- private static generateNewServerName(): string {
+ private static generateNewServerName(prefix: string = "Server"): string {
// generates a unique name for proxy server
let servers = this.readServers();
let serverNo = 1;
- let result = `Server ${serverNo}`;
+ let result = `${prefix} ${serverNo}`;
if (servers && servers.length > 0) {
let exist;
serverNo = servers.length + 1;
- result = `Server ${serverNo}`;
+ result = `${prefix} ${serverNo}`;
do {
exist = false;
@@ -4385,7 +4441,7 @@ export class settingsPage {
if (servers[i].name === result) {
exist = true;
serverNo++;
- result = `Server ${serverNo}`;
+ result = `${prefix} ${serverNo}`;
break;
}
}
diff --git a/src/ui/settings.html b/src/ui/settings.html
index ac18f691..403b1827 100644
--- a/src/ui/settings.html
+++ b/src/ui/settings.html
@@ -599,6 +599,10 @@
+
+
+
Manage your proxy servers:
From fad187a8399a33c97ebd5faca438149d9608a89d Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 20 May 2026 00:18:06 +0000
Subject: [PATCH 3/6] Use Bootstrap class for add button visibility
Agent-Logs-Url: https://github.com/salarcode/SmartProxy/sessions/0ae21641-a397-4146-ab1b-fc58fd113911
Co-authored-by: salarcode <1272095+salarcode@users.noreply.github.com>
---
src/ui/code/settingsPage.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/ui/code/settingsPage.ts b/src/ui/code/settingsPage.ts
index f767fdbc..0f2970a2 100644
--- a/src/ui/code/settingsPage.ts
+++ b/src/ui/code/settingsPage.ts
@@ -1343,10 +1343,10 @@ export class settingsPage {
let button = jq("#btnAddActiveSubscriptionProxyServerToMyServers");
if (subscription) {
- button.show().removeClass("d-none");
+ button.removeClass("d-none");
}
else {
- button.hide();
+ button.addClass("d-none");
}
}
From 02f21ffed5148d688cb8361bb5c673bbed4153dc Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 20 May 2026 00:19:30 +0000
Subject: [PATCH 4/6] Guard subscription proxy lookup
Agent-Logs-Url: https://github.com/salarcode/SmartProxy/sessions/0ae21641-a397-4146-ab1b-fc58fd113911
Co-authored-by: salarcode <1272095+salarcode@users.noreply.github.com>
---
src/ui/code/settingsPage.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/ui/code/settingsPage.ts b/src/ui/code/settingsPage.ts
index 0f2970a2..b6044cf3 100644
--- a/src/ui/code/settingsPage.ts
+++ b/src/ui/code/settingsPage.ts
@@ -2687,7 +2687,7 @@ export class settingsPage {
onClickAddActiveSubscriptionProxyServerToMyServers() {
let proxyServerId = jq("#cmbActiveProxyServer").val() as string;
let subscription = settingsPage.findProxyServerSubscriptionByProxyServerId(proxyServerId);
- if (!subscription)
+ if (!subscription || !subscription.proxies)
return;
let server = subscription.proxies.find(item => item.id === proxyServerId);
From 17ce4cce6ca4572098438f939fe7cfba8dc16232 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 20 May 2026 00:21:04 +0000
Subject: [PATCH 5/6] Set added subscription server order
Agent-Logs-Url: https://github.com/salarcode/SmartProxy/sessions/0ae21641-a397-4146-ab1b-fc58fd113911
Co-authored-by: salarcode <1272095+salarcode@users.noreply.github.com>
---
src/ui/code/settingsPage.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/ui/code/settingsPage.ts b/src/ui/code/settingsPage.ts
index b6044cf3..7a6917c5 100644
--- a/src/ui/code/settingsPage.ts
+++ b/src/ui/code/settingsPage.ts
@@ -2699,7 +2699,7 @@ export class settingsPage {
let serverToAdd = new ProxyServer();
jQuery.extend(serverToAdd, server);
- serverToAdd.order = 0;
+ serverToAdd.order = settingsPage.readServers().reduce((order, item) => Math.max(order, item.order || 0), 0) + 1;
serverToAdd.name = settingsPage.generateNewServerName(subscription.name);
settingsPage.populateServerModal(modal, serverToAdd);
From 682ef58a4b9df9cd8b4cf935d5a61c03e77c2356 Mon Sep 17 00:00:00 2001
From: salarcode
Date: Mon, 17 Aug 2026 23:42:38 +1000
Subject: [PATCH 6/6] translations
---
src/_locales/ar/messages.json | 3 +++
src/_locales/de/messages.json | 21 ++++++++++++---------
src/_locales/en/messages.json | 24 ++++++++++++------------
src/_locales/es/messages.json | 3 +++
src/_locales/fa/messages.json | 3 +++
src/_locales/fr/messages.json | 3 +++
src/_locales/id/messages.json | 3 +++
src/_locales/it/messages.json | 3 +++
src/_locales/nl/messages.json | 3 +++
src/_locales/pl/messages.json | 3 +++
src/_locales/ru/messages.json | 3 +++
src/_locales/tr/messages.json | 3 +++
src/_locales/zh-TW/messages.json | 3 +++
src/_locales/zh_CN/messages.json | 3 +++
14 files changed, 60 insertions(+), 21 deletions(-)
diff --git a/src/_locales/ar/messages.json b/src/_locales/ar/messages.json
index bf55127a..980df0b8 100644
--- a/src/_locales/ar/messages.json
+++ b/src/_locales/ar/messages.json
@@ -462,6 +462,9 @@
"settingsAddServerButton": {
"message": "إضافة خادم"
},
+ "settingsAddActiveSubscriptionProxyServerButton": {
+ "message": "أضف إلى خوادمي"
+ },
"settingsRemoveMultipleServerButton": {
"message": "حذف متعدد"
},
diff --git a/src/_locales/de/messages.json b/src/_locales/de/messages.json
index 743619b3..bab2579f 100644
--- a/src/_locales/de/messages.json
+++ b/src/_locales/de/messages.json
@@ -420,15 +420,15 @@
"settingsGeneralDisplayAppliedRulePatternOnBadge": {
"message": "Angewandtes Regelmuster am Icon anzeigen"
},
- "settingsGeneralRefreshTabOnConfigChanges": {
- "message": "Aktiven Tab neu laden, wenn sich das Profil oder der Proxy ändert"
- },
- "settingsGeneralDeleteRuleWhenDisabledFromPopup": {
- "message": "Regel löschen, wenn sie im Popup-Menü deaktiviert/abgewählt wird"
- },
- "settingsGeneralCancelButton": {
- "message": "Abbrechen"
- },
+ "settingsGeneralRefreshTabOnConfigChanges": {
+ "message": "Aktiven Tab neu laden, wenn sich das Profil oder der Proxy ändert"
+ },
+ "settingsGeneralDeleteRuleWhenDisabledFromPopup": {
+ "message": "Regel löschen, wenn sie im Popup-Menü deaktiviert/abgewählt wird"
+ },
+ "settingsGeneralCancelButton": {
+ "message": "Abbrechen"
+ },
"settingsGeneralSaveChanges": {
"message": "Änderungen speichern"
},
@@ -462,6 +462,9 @@
"settingsAddServerButton": {
"message": "Server hinzufügen"
},
+ "settingsAddActiveSubscriptionProxyServerButton": {
+ "message": "Zu meinen Servern hinzufügen"
+ },
"settingsRemoveMultipleServerButton": {
"message": "Mehrere löschen"
},
diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json
index 7b0903fc..947a5511 100644
--- a/src/_locales/en/messages.json
+++ b/src/_locales/en/messages.json
@@ -420,15 +420,15 @@
"settingsGeneralDisplayAppliedRulePatternOnBadge": {
"message": "Display applied rule pattern on badge"
},
- "settingsGeneralRefreshTabOnConfigChanges": {
- "message": "Refresh active tab when profile or proxy changed"
- },
- "settingsGeneralDeleteRuleWhenDisabledFromPopup": {
- "message": "Delete rule when disabled/unchecked from popup menu"
- },
- "settingsGeneralCancelButton": {
- "message": "Cancel"
- },
+ "settingsGeneralRefreshTabOnConfigChanges": {
+ "message": "Refresh active tab when profile or proxy changed"
+ },
+ "settingsGeneralDeleteRuleWhenDisabledFromPopup": {
+ "message": "Delete rule when disabled/unchecked from popup menu"
+ },
+ "settingsGeneralCancelButton": {
+ "message": "Cancel"
+ },
"settingsGeneralSaveChanges": {
"message": "Save Changes"
},
@@ -462,9 +462,9 @@
"settingsAddServerButton": {
"message": "Add Server"
},
- "settingsAddActiveSubscriptionProxyServerButton": {
- "message": "Add to My Servers"
- },
+ "settingsAddActiveSubscriptionProxyServerButton": {
+ "message": "Add to My Servers"
+ },
"settingsRemoveMultipleServerButton": {
"message": "Delete Multiple"
},
diff --git a/src/_locales/es/messages.json b/src/_locales/es/messages.json
index 9436bcf4..3fb00b0e 100644
--- a/src/_locales/es/messages.json
+++ b/src/_locales/es/messages.json
@@ -462,6 +462,9 @@
"settingsAddServerButton": {
"message": "Agregar servidor"
},
+ "settingsAddActiveSubscriptionProxyServerButton": {
+ "message": "Agregar a Mis Servidores"
+ },
"settingsRemoveMultipleServerButton": {
"message": "Eliminar varios"
},
diff --git a/src/_locales/fa/messages.json b/src/_locales/fa/messages.json
index 96798f74..c91481ef 100644
--- a/src/_locales/fa/messages.json
+++ b/src/_locales/fa/messages.json
@@ -462,6 +462,9 @@
"settingsAddServerButton": {
"message": "افزودن پراکسی سرور"
},
+ "settingsAddActiveSubscriptionProxyServerButton": {
+ "message": "افزودن به سرورهای من"
+ },
"settingsRemoveMultipleServerButton": {
"message": "حذف چندتایی"
},
diff --git a/src/_locales/fr/messages.json b/src/_locales/fr/messages.json
index 645e69dd..5f0e948c 100644
--- a/src/_locales/fr/messages.json
+++ b/src/_locales/fr/messages.json
@@ -462,6 +462,9 @@
"settingsAddServerButton": {
"message": "Ajouter serveur"
},
+ "settingsAddActiveSubscriptionProxyServerButton": {
+ "message": "Ajouter à mes serveurs"
+ },
"settingsRemoveMultipleServerButton": {
"message": "Supprimer plusieurs"
},
diff --git a/src/_locales/id/messages.json b/src/_locales/id/messages.json
index ecaa2633..5fcbcbe6 100644
--- a/src/_locales/id/messages.json
+++ b/src/_locales/id/messages.json
@@ -462,6 +462,9 @@
"settingsAddServerButton": {
"message": "Tambahkan Server"
},
+ "settingsAddActiveSubscriptionProxyServerButton": {
+ "message": "Tambahkan ke Server Saya"
+ },
"settingsRemoveMultipleServerButton": {
"message": "Hapus Banyak"
},
diff --git a/src/_locales/it/messages.json b/src/_locales/it/messages.json
index 9a7efcf9..d9f8fdbc 100644
--- a/src/_locales/it/messages.json
+++ b/src/_locales/it/messages.json
@@ -462,6 +462,9 @@
"settingsAddServerButton": {
"message": "Aggiungi Server"
},
+ "settingsAddActiveSubscriptionProxyServerButton": {
+ "message": "Aggiungi ai miei server"
+ },
"settingsRemoveMultipleServerButton": {
"message": "Elimina Multipli"
},
diff --git a/src/_locales/nl/messages.json b/src/_locales/nl/messages.json
index 3169ee90..6845bb2d 100644
--- a/src/_locales/nl/messages.json
+++ b/src/_locales/nl/messages.json
@@ -462,6 +462,9 @@
"settingsAddServerButton": {
"message": "Server toevoegen"
},
+ "settingsAddActiveSubscriptionProxyServerButton": {
+ "message": "Toevoegen aan Mijn servers"
+ },
"settingsRemoveMultipleServerButton": {
"message": "Verwijder meerdere"
},
diff --git a/src/_locales/pl/messages.json b/src/_locales/pl/messages.json
index fef6edc6..af1ac346 100644
--- a/src/_locales/pl/messages.json
+++ b/src/_locales/pl/messages.json
@@ -462,6 +462,9 @@
"settingsAddServerButton": {
"message": "Dodaj serwer"
},
+ "settingsAddActiveSubscriptionProxyServerButton": {
+ "message": "Dodaj do moich serwerów"
+ },
"settingsRemoveMultipleServerButton": {
"message": "Usuń wiele"
},
diff --git a/src/_locales/ru/messages.json b/src/_locales/ru/messages.json
index bb3fa06a..d2dd8eb8 100644
--- a/src/_locales/ru/messages.json
+++ b/src/_locales/ru/messages.json
@@ -462,6 +462,9 @@
"settingsAddServerButton": {
"message": "Добавить сервер"
},
+ "settingsAddActiveSubscriptionProxyServerButton": {
+ "message": "Добавить в мои серверы"
+ },
"settingsRemoveMultipleServerButton": {
"message": "Удалить несколько"
},
diff --git a/src/_locales/tr/messages.json b/src/_locales/tr/messages.json
index 6a930e2d..261752c2 100644
--- a/src/_locales/tr/messages.json
+++ b/src/_locales/tr/messages.json
@@ -462,6 +462,9 @@
"settingsAddServerButton": {
"message": "Sunucu ekle"
},
+ "settingsAddActiveSubscriptionProxyServerButton": {
+ "message": "Sunucularıma ekle"
+ },
"settingsRemoveMultipleServerButton": {
"message": "Çoklu Sil"
},
diff --git a/src/_locales/zh-TW/messages.json b/src/_locales/zh-TW/messages.json
index a1717a84..d4bf734c 100644
--- a/src/_locales/zh-TW/messages.json
+++ b/src/_locales/zh-TW/messages.json
@@ -462,6 +462,9 @@
"settingsAddServerButton": {
"message": "添加服務器"
},
+ "settingsAddActiveSubscriptionProxyServerButton": {
+ "message": "新增至我的伺服器"
+ },
"settingsRemoveMultipleServerButton": {
"message": "刪除多個"
},
diff --git a/src/_locales/zh_CN/messages.json b/src/_locales/zh_CN/messages.json
index 57d1cf6a..71087f9d 100644
--- a/src/_locales/zh_CN/messages.json
+++ b/src/_locales/zh_CN/messages.json
@@ -462,6 +462,9 @@
"settingsAddServerButton": {
"message": "添加服务器"
},
+ "settingsAddActiveSubscriptionProxyServerButton": {
+ "message": "添加到我的服务器"
+ },
"settingsRemoveMultipleServerButton": {
"message": "删除多个"
},