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 ae3b52fc..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,6 +462,9 @@ "settingsAddServerButton": { "message": "Add Server" }, + "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": "删除多个" }, diff --git a/src/ui/code/settingsPage.ts b/src/ui/code/settingsPage.ts index af3707c8..7a6917c5 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.removeClass("d-none"); + } + else { + button.addClass("d-none"); + } + } + 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 || !subscription.proxies) + 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 = settingsPage.readServers().reduce((order, item) => Math.max(order, item.order || 0), 0) + 1; + 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 @@