From 3652a522d1836a7b7b5975778e3714efe121950d Mon Sep 17 00:00:00 2001 From: ushan0v Date: Fri, 29 May 2026 21:55:50 +0300 Subject: [PATCH] ui: improve update and server dialogs --- .gitignore | 1 + fe-app-podkop/locales/calls.json | 906 ++++++++++++------ fe-app-podkop/locales/podkop_plus.pot | 330 ++++--- fe-app-podkop/locales/podkop_plus.ru.po | 28 +- fe-app-podkop/src/main.ts | 1 + .../src/podkop/services/store.service.ts | 1 + .../tabs/diagnostic/diagnostic.store.ts | 8 +- .../src/podkop/tabs/updates/initController.ts | 52 +- .../src/podkop/tabs/updates/styles.ts | 15 + fe-app-podkop/src/podkop/types.ts | 1 + .../luci-static/resources/view/podkop/main.js | 73 +- .../resources/view/podkop/server.js | 175 +++- luci-app-podkop-plus/po/ru/podkop_plus.po | 28 +- .../po/templates/podkop_plus.pot | 330 ++++--- podkop/files/usr/bin/podkop | 12 +- podkop/files/usr/lib/json_utils.uc | 2 +- podkop/files/usr/lib/updater.sh | 51 +- 17 files changed, 1275 insertions(+), 739 deletions(-) diff --git a/.gitignore b/.gitignore index 5e2ee79f..052c8c03 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .idea fe-app-podkop/node_modules +fe-app-podkop/.yarn/ fe-app-podkop/.env .DS_Store diff --git a/fe-app-podkop/locales/calls.json b/fe-app-podkop/locales/calls.json index 5e09bbb6..b272ef10 100644 --- a/fe-app-podkop/locales/calls.json +++ b/fe-app-podkop/locales/calls.json @@ -23,13 +23,6 @@ "src/podkop/tabs/dashboard/initController.ts:605" ] }, - { - "call": "Accept routes", - "key": "Accept routes", - "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2372" - ] - }, { "call": "Accept external proxy connections and route them with sing-box.", "key": "Accept external proxy connections and route them with sing-box.", @@ -37,6 +30,13 @@ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:130" ] }, + { + "call": "Accept routes", + "key": "Accept routes", + "places": [ + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2376" + ] + }, { "call": "Action", "key": "Action", @@ -49,15 +49,16 @@ "call": "Active", "key": "Active", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1248", - "src/podkop/tabs/monitoring/initController.ts:501", + "src/podkop/tabs/monitoring/initController.ts:555", "src/podkop/tabs/monitoring/render.ts:20" ] }, { "call": "Active Connections", "key": "Active Connections", - "places": ["src/podkop/tabs/dashboard/initController.ts:551"] + "places": [ + "src/podkop/tabs/dashboard/initController.ts:551" + ] }, { "call": "Add a section", @@ -70,7 +71,7 @@ "call": "Add a server inbound", "key": "Add a server inbound", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:135" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:136" ] }, { @@ -97,27 +98,36 @@ { "call": "Additional marking rules found", "key": "Additional marking rules found", - "places": ["src/podkop/tabs/diagnostic/checks/runNftCheck.ts:106"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runNftCheck.ts:106" + ] + }, + { + "call": "Address", + "key": "Address", + "places": [ + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1273" + ] }, { "call": "Advertise exit node", "key": "Advertise exit node", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2355" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2359" ] }, { "call": "Advertise routes", "key": "Advertise routes", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2365" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2369" ] }, { "call": "All", "key": "All", "places": [ - "src/podkop/tabs/monitoring/initController.ts:464", + "src/podkop/tabs/monitoring/initController.ts:518", "src/podkop/tabs/monitoring/render.ts:39" ] }, @@ -153,14 +163,14 @@ "call": "ALPN", "key": "ALPN", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2051" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2055" ] }, { "call": "Alter ID", "key": "Alter ID", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2260" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2264" ] }, { @@ -187,7 +197,9 @@ { "call": "Auto refresh", "key": "Auto refresh", - "places": ["src/partials/modal/renderModal.ts:218"] + "places": [ + "src/partials/modal/renderModal.ts:218" + ] }, { "call": "Auto select by URLTest", @@ -214,7 +226,9 @@ { "call": "Bootsrap DNS", "key": "Bootsrap DNS", - "places": ["src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:65"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:65" + ] }, { "call": "Bootstrap DNS server", @@ -226,12 +240,16 @@ { "call": "Browser is not using FakeIP", "key": "Browser is not using FakeIP", - "places": ["src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:60"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:60" + ] }, { "call": "Browser is using FakeIP correctly", "key": "Browser is using FakeIP correctly", - "places": ["src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:59"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:59" + ] }, { "call": "Built-in rule sets", @@ -274,42 +292,58 @@ { "call": "ByeDPI package is installed", "key": "ByeDPI package is installed", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:97"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:97" + ] }, { "call": "ByeDPI package is not installed", "key": "ByeDPI package is not installed", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:98"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:98" + ] }, { "call": "ByeDPI provider binary is available", "key": "ByeDPI provider binary is available", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:90"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:90" + ] }, { "call": "ByeDPI provider binary is not available", "key": "ByeDPI provider binary is not available", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:91"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:91" + ] }, { "call": "ByeDPI route rules are configured", "key": "ByeDPI route rules are configured", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:140"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:140" + ] }, { "call": "ByeDPI route rules are not configured", "key": "ByeDPI route rules are not configured", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:141"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:141" + ] }, { "call": "ByeDPI sing-box outbound is configured", "key": "ByeDPI sing-box outbound is configured", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:133"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:133" + ] }, { "call": "ByeDPI sing-box outbound is not configured", "key": "ByeDPI sing-box outbound is not configured", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:134"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:134" + ] }, { "call": "ByeDPI Strategy", @@ -355,20 +389,22 @@ "call": "Cannot save server", "key": "Cannot save server", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1737" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1741" ] }, { "call": "Certificate path", "key": "Certificate path", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2061" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2065" ] }, { "call": "Check update", "key": "Check update", - "places": ["src/podkop/tabs/updates/initController.ts:306"] + "places": [ + "src/podkop/tabs/updates/initController.ts:324" + ] }, { "call": "Checking, please wait", @@ -386,7 +422,9 @@ { "call": "checks", "key": "checks", - "places": ["src/podkop/tabs/diagnostic/helpers/getCheckTitle.ts:2"] + "places": [ + "src/podkop/tabs/diagnostic/helpers/getCheckTitle.ts:2" + ] }, { "call": "Checks failed", @@ -420,45 +458,46 @@ { "call": "CIDR must be between 0 and 32", "key": "CIDR must be between 0 and 32", - "places": ["src/validators/validateSubnet.ts:33"] + "places": [ + "src/validators/validateSubnet.ts:33" + ] }, { "call": "Client fingerprint", "key": "Client fingerprint", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2159" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2163" ] }, { "call": "Client link", "key": "Client link", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1293" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1290" ] }, { "call": "Client link is not available yet", "key": "Client link is not available yet", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1277" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1210" ] }, { "call": "Client link QR code", "key": "Client link QR code", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1283", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1289" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1231" ] }, { "call": "Close", "key": "Close", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1339", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1335", "src/partials/modal/renderModal.ts:195", - "src/podkop/tabs/monitoring/initController.ts:645", - "src/podkop/tabs/monitoring/initController.ts:695" + "src/podkop/tabs/monitoring/initController.ts:699", + "src/podkop/tabs/monitoring/initController.ts:749" ] }, { @@ -473,15 +512,15 @@ "call": "Close connection", "key": "Close connection", "places": [ - "src/podkop/tabs/monitoring/initController.ts:612", - "src/podkop/tabs/monitoring/initController.ts:613" + "src/podkop/tabs/monitoring/initController.ts:666", + "src/podkop/tabs/monitoring/initController.ts:667" ] }, { "call": "Closed", "key": "Closed", "places": [ - "src/podkop/tabs/monitoring/initController.ts:507", + "src/podkop/tabs/monitoring/initController.ts:561", "src/podkop/tabs/monitoring/render.ts:29" ] }, @@ -506,13 +545,6 @@ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:108" ] }, - { - "call": "Connection statistics are unavailable", - "key": "Connection statistics are unavailable", - "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1262" - ] - }, { "call": "Connection URL", "key": "Connection URL", @@ -523,13 +555,15 @@ { "call": "Connections are unavailable", "key": "Connections are unavailable", - "places": ["src/podkop/tabs/monitoring/initController.ts:748"] + "places": [ + "src/podkop/tabs/monitoring/initController.ts:802" + ] }, { "call": "Copy", "key": "Copy", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1314", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1313", "src/partials/modal/renderModal.ts:190" ] }, @@ -544,19 +578,23 @@ { "call": "Currently unavailable", "key": "Currently unavailable", - "places": ["src/podkop/tabs/dashboard/partials/renderWidget.ts:22"] + "places": [ + "src/podkop/tabs/dashboard/partials/renderWidget.ts:22" + ] }, { "call": "Dashboard", "key": "Dashboard", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:167" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:168" ] }, { "call": "Dashboard currently unavailable", "key": "Dashboard currently unavailable", - "places": ["src/podkop/tabs/dashboard/partials/renderSections.ts:133"] + "places": [ + "src/podkop/tabs/dashboard/partials/renderSections.ts:133" + ] }, { "call": "Delay in milliseconds before reloading Podkop Plus after interface UP", @@ -576,7 +614,7 @@ "call": "Delete", "key": "Delete", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1355" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1351" ] }, { @@ -589,7 +627,9 @@ { "call": "Dev", "key": "Dev", - "places": ["src/podkop/tabs/updates/initController.ts:61"] + "places": [ + "src/podkop/tabs/updates/initController.ts:62" + ] }, { "call": "Device, IP, or subnet", @@ -602,21 +642,22 @@ { "call": "DHCP has DNS server", "key": "DHCP has DNS server", - "places": ["src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:82"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:82" + ] }, { "call": "Diagnostics", "key": "Diagnostics", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:155" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:156" ] }, { "call": "Direct", "key": "Direct", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1984", - "src/podkop/tabs/monitoring/initController.ts:119" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1988" ] }, { @@ -643,7 +684,9 @@ { "call": "DNS on router", "key": "DNS on router", - "places": ["src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:77"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:77" + ] }, { "call": "DNS over HTTPS (DoH)", @@ -699,12 +742,16 @@ { "call": "DNS server address cannot be empty", "key": "DNS server address cannot be empty", - "places": ["src/validators/validateDns.ts:7"] + "places": [ + "src/validators/validateDns.ts:7" + ] }, { "call": "Do not panic, everything can be fixed, just...", "key": "Do not panic, everything can be fixed, just...", - "places": ["src/podkop/tabs/diagnostic/partials/renderWikiDisclaimer.ts:26"] + "places": [ + "src/podkop/tabs/diagnostic/partials/renderWikiDisclaimer.ts:26" + ] }, { "call": "Domain and IP Lists", @@ -760,7 +807,6 @@ "call": "Download", "key": "Download", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1250", "src/partials/modal/renderModal.ts:185" ] }, @@ -789,8 +835,8 @@ "call": "Downloaded", "key": "Downloaded", "places": [ - "src/podkop/tabs/monitoring/initController.ts:638", - "src/podkop/tabs/monitoring/initController.ts:692" + "src/podkop/tabs/monitoring/initController.ts:692", + "src/podkop/tabs/monitoring/initController.ts:746" ] }, { @@ -814,7 +860,7 @@ "key": "Edit rule action", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:68", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1348" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1344" ] }, { @@ -822,7 +868,7 @@ "key": "Enable", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2482", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1900" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1904" ] }, { @@ -954,7 +1000,9 @@ { "call": "Expires", "key": "Expires", - "places": ["src/podkop/tabs/dashboard/partials/renderSections.ts:220"] + "places": [ + "src/podkop/tabs/dashboard/partials/renderSections.ts:220" + ] }, { "call": "Expose this section as a local HTTP+SOCKS proxy", @@ -974,22 +1022,25 @@ "call": "Failed to close connection", "key": "Failed to close connection", "places": [ - "src/podkop/tabs/monitoring/initController.ts:1010", - "src/podkop/tabs/monitoring/initController.ts:1025" + "src/podkop/tabs/monitoring/initController.ts:1064", + "src/podkop/tabs/monitoring/initController.ts:1079" ] }, { "call": "Failed to close connections", "key": "Failed to close connections", "places": [ - "src/podkop/tabs/monitoring/initController.ts:1044", - "src/podkop/tabs/monitoring/initController.ts:1057" + "src/podkop/tabs/monitoring/initController.ts:1098", + "src/podkop/tabs/monitoring/initController.ts:1111" ] }, { "call": "Failed to copy!", "key": "Failed to copy!", - "places": ["src/helpers/copyToClipboard.ts:12"] + "places": [ + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1199", + "src/helpers/copyToClipboard.ts:12" + ] }, { "call": "Failed to execute", @@ -997,8 +1048,8 @@ "places": [ "src/podkop/methods/shell/index.ts:97", "src/podkop/methods/shell/index.ts:273", - "src/podkop/tabs/updates/initController.ts:241", - "src/podkop/tabs/updates/initController.ts:285" + "src/podkop/tabs/updates/initController.ts:254", + "src/podkop/tabs/updates/initController.ts:303" ] }, { @@ -1013,7 +1064,7 @@ "call": "Fastest", "key": "Fastest", "places": [ - "src/podkop/methods/custom/getDashboardSections.ts:259", + "src/podkop/methods/custom/getDashboardSections.ts:307", "src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:93" ] }, @@ -1021,7 +1072,7 @@ "call": "Fix the highlighted fields and save again.", "key": "Fix the highlighted fields and save again.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1738" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1742" ] }, { @@ -1038,16 +1089,25 @@ "src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:98" ] }, + { + "call": "GitHub release", + "key": "GitHub release", + "places": [ + "src/podkop/tabs/updates/initController.ts:490" + ] + }, { "call": "Global check", "key": "Global check", - "places": ["src/podkop/tabs/diagnostic/initController.ts:415"] + "places": [ + "src/podkop/tabs/diagnostic/initController.ts:415" + ] }, { "call": "gRPC service", "key": "gRPC service", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2211" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2215" ] }, { @@ -1061,20 +1121,22 @@ "call": "Host", "key": "Host", "places": [ - "src/podkop/tabs/monitoring/initController.ts:628", - "src/podkop/tabs/monitoring/initController.ts:688" + "src/podkop/tabs/monitoring/initController.ts:682", + "src/podkop/tabs/monitoring/initController.ts:742" ] }, { "call": "HTTP error", "key": "HTTP error", - "places": ["src/podkop/api.ts:27"] + "places": [ + "src/podkop/api.ts:27" + ] }, { "call": "HTTP hosts", "key": "HTTP hosts", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2204" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2208" ] }, { @@ -1102,37 +1164,45 @@ "call": "Information", "key": "Information", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1356" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1352" ] }, { "call": "Install", "key": "Install", "places": [ - "src/podkop/tabs/updates/initController.ts:77", - "src/podkop/tabs/updates/initController.ts:381", - "src/podkop/tabs/updates/initController.ts:410" + "src/podkop/tabs/updates/initController.ts:78", + "src/podkop/tabs/updates/initController.ts:402", + "src/podkop/tabs/updates/initController.ts:432" ] }, { "call": "Install %s", "key": "Install %s", - "places": ["src/podkop/tabs/updates/initController.ts:74"] + "places": [ + "src/podkop/tabs/updates/initController.ts:75" + ] }, { "call": "Install extended", "key": "Install extended", - "places": ["src/podkop/tabs/updates/initController.ts:329"] + "places": [ + "src/podkop/tabs/updates/initController.ts:347" + ] }, { "call": "Install stable", "key": "Install stable", - "places": ["src/podkop/tabs/updates/initController.ts:322"] + "places": [ + "src/podkop/tabs/updates/initController.ts:340" + ] }, { "call": "Installed version is newer than release", "key": "Installed version is newer than release", - "places": ["src/podkop/tabs/updates/initController.ts:137"] + "places": [ + "src/podkop/tabs/updates/initController.ts:150" + ] }, { "call": "Interface Monitoring", @@ -1165,7 +1235,9 @@ { "call": "Invalid DNS server format. Examples: 8.8.8.8 or dns.example.com or dns.example.com/nicedns for DoH", "key": "Invalid DNS server format. Examples: 8.8.8.8 or dns.example.com or dns.example.com/nicedns for DoH", - "places": ["src/validators/validateDns.ts:23"] + "places": [ + "src/validators/validateDns.ts:23" + ] }, { "call": "Invalid domain address", @@ -1178,87 +1250,121 @@ { "call": "Invalid format. Use X.X.X.X or X.X.X.X/Y", "key": "Invalid format. Use X.X.X.X or X.X.X.X/Y", - "places": ["src/validators/validateSubnet.ts:11"] + "places": [ + "src/validators/validateSubnet.ts:11" + ] }, { "call": "Invalid HY2 URL: insecure must be 0 or 1", "key": "Invalid HY2 URL: insecure must be 0 or 1", - "places": ["src/validators/validateHysteriaUrl.ts:76"] + "places": [ + "src/validators/validateHysteriaUrl.ts:107" + ] }, { "call": "Invalid HY2 URL: invalid port number", "key": "Invalid HY2 URL: invalid port number", - "places": ["src/validators/validateHysteriaUrl.ts:62"] + "places": [ + "src/validators/validateHysteriaUrl.ts:93" + ] }, { "call": "Invalid HY2 URL: missing credentials/server", "key": "Invalid HY2 URL: missing credentials/server", - "places": ["src/validators/validateHysteriaUrl.ts:32"] + "places": [ + "src/validators/validateHysteriaUrl.ts:32" + ] }, { "call": "Invalid HY2 URL: missing host", "key": "Invalid HY2 URL: missing host", - "places": ["src/validators/validateHysteriaUrl.ts:49"] + "places": [ + "src/validators/validateHysteriaUrl.ts:49" + ] }, { "call": "Invalid HY2 URL: missing host & port", "key": "Invalid HY2 URL: missing host & port", - "places": ["src/validators/validateHysteriaUrl.ts:43"] + "places": [ + "src/validators/validateHysteriaUrl.ts:43" + ] }, { "call": "Invalid HY2 URL: missing password", "key": "Invalid HY2 URL: missing password", - "places": ["src/validators/validateHysteriaUrl.ts:38"] + "places": [ + "src/validators/validateHysteriaUrl.ts:38" + ] }, { "call": "Invalid HY2 URL: missing port", "key": "Invalid HY2 URL: missing port", - "places": ["src/validators/validateHysteriaUrl.ts:53"] + "places": [ + "src/validators/validateHysteriaUrl.ts:53" + ] }, { "call": "Invalid HY2 URL: must not contain spaces", "key": "Invalid HY2 URL: must not contain spaces", - "places": ["src/validators/validateHysteriaUrl.ts:19"] + "places": [ + "src/validators/validateHysteriaUrl.ts:19" + ] }, { "call": "Invalid HY2 URL: must start with hysteria2:// or hy2://", "key": "Invalid HY2 URL: must start with hysteria2:// or hy2://", - "places": ["src/validators/validateHysteriaUrl.ts:12"] + "places": [ + "src/validators/validateHysteriaUrl.ts:12" + ] }, { "call": "Invalid HY2 URL: obfs-password required when obfs is set", "key": "Invalid HY2 URL: obfs-password required when obfs is set", - "places": ["src/validators/validateHysteriaUrl.ts:99"] + "places": [ + "src/validators/validateHysteriaUrl.ts:130" + ] }, { "call": "Invalid HY2 URL: parsing failed", "key": "Invalid HY2 URL: parsing failed", - "places": ["src/validators/validateHysteriaUrl.ts:115"] + "places": [ + "src/validators/validateHysteriaUrl.ts:146" + ] }, { "call": "Invalid HY2 URL: sni cannot be empty", "key": "Invalid HY2 URL: sni cannot be empty", - "places": ["src/validators/validateHysteriaUrl.ts:108"] + "places": [ + "src/validators/validateHysteriaUrl.ts:139" + ] }, { "call": "Invalid HY2 URL: unsupported obfs type", "key": "Invalid HY2 URL: unsupported obfs type", - "places": ["src/validators/validateHysteriaUrl.ts:88"] + "places": [ + "src/validators/validateHysteriaUrl.ts:119" + ] }, { "call": "Invalid IP address", "key": "Invalid IP address", - "places": ["src/validators/validateIp.ts:11"] + "places": [ + "src/validators/validateIp.ts:11" + ] }, { "call": "Invalid JSON format", "key": "Invalid JSON format", - "places": ["src/validators/validateOutboundJson.ts:9"] + "places": [ + "src/validators/validateOutboundJson.ts:9" + ] }, { "call": "Invalid path format. Path must start with \"/\" and contain valid characters", "key": "Invalid path format. Path must start with \"/\" and contain valid characters", - "places": ["src/validators/validatePath.ts:22"] + "places": [ + "src/validators/validatePath.ts:22" + ] }, { "call": "Invalid port number. Must be between 1 and 65535", @@ -1285,107 +1391,149 @@ { "call": "Invalid Shadowsocks URL: decoded credentials must contain method:password", "key": "Invalid Shadowsocks URL: decoded credentials must contain method:password", - "places": ["src/validators/validateShadowsocksUrl.ts:37"] + "places": [ + "src/validators/validateShadowsocksUrl.ts:37" + ] }, { "call": "Invalid Shadowsocks URL: missing credentials", "key": "Invalid Shadowsocks URL: missing credentials", - "places": ["src/validators/validateShadowsocksUrl.ts:27"] + "places": [ + "src/validators/validateShadowsocksUrl.ts:27" + ] }, { "call": "Invalid Shadowsocks URL: missing method and password separator \":\"", "key": "Invalid Shadowsocks URL: missing method and password separator \":\"", - "places": ["src/validators/validateShadowsocksUrl.ts:46"] + "places": [ + "src/validators/validateShadowsocksUrl.ts:46" + ] }, { "call": "Invalid Shadowsocks URL: missing port", "key": "Invalid Shadowsocks URL: missing port", - "places": ["src/validators/validateShadowsocksUrl.ts:76"] + "places": [ + "src/validators/validateShadowsocksUrl.ts:76" + ] }, { "call": "Invalid Shadowsocks URL: missing server", "key": "Invalid Shadowsocks URL: missing server", - "places": ["src/validators/validateShadowsocksUrl.ts:67"] + "places": [ + "src/validators/validateShadowsocksUrl.ts:67" + ] }, { "call": "Invalid Shadowsocks URL: missing server address", "key": "Invalid Shadowsocks URL: missing server address", - "places": ["src/validators/validateShadowsocksUrl.ts:58"] + "places": [ + "src/validators/validateShadowsocksUrl.ts:58" + ] }, { "call": "Invalid Shadowsocks URL: must not contain spaces", "key": "Invalid Shadowsocks URL: must not contain spaces", - "places": ["src/validators/validateShadowsocksUrl.ts:16"] + "places": [ + "src/validators/validateShadowsocksUrl.ts:16" + ] }, { "call": "Invalid Shadowsocks URL: must start with ss://", "key": "Invalid Shadowsocks URL: must start with ss://", - "places": ["src/validators/validateShadowsocksUrl.ts:8"] + "places": [ + "src/validators/validateShadowsocksUrl.ts:8" + ] }, { "call": "Invalid Shadowsocks URL: parsing failed", "key": "Invalid Shadowsocks URL: parsing failed", - "places": ["src/validators/validateShadowsocksUrl.ts:91"] + "places": [ + "src/validators/validateShadowsocksUrl.ts:91" + ] }, { "call": "Invalid SOCKS URL: invalid host format", "key": "Invalid SOCKS URL: invalid host format", - "places": ["src/validators/validateSocksUrl.ts:73"] + "places": [ + "src/validators/validateSocksUrl.ts:73" + ] }, { "call": "Invalid SOCKS URL: invalid port number", "key": "Invalid SOCKS URL: invalid port number", - "places": ["src/validators/validateSocksUrl.ts:63"] + "places": [ + "src/validators/validateSocksUrl.ts:63" + ] }, { "call": "Invalid SOCKS URL: missing host and port", "key": "Invalid SOCKS URL: missing host and port", - "places": ["src/validators/validateSocksUrl.ts:42"] + "places": [ + "src/validators/validateSocksUrl.ts:42" + ] }, { "call": "Invalid SOCKS URL: missing hostname or IP", "key": "Invalid SOCKS URL: missing hostname or IP", - "places": ["src/validators/validateSocksUrl.ts:51"] + "places": [ + "src/validators/validateSocksUrl.ts:51" + ] }, { "call": "Invalid SOCKS URL: missing port", "key": "Invalid SOCKS URL: missing port", - "places": ["src/validators/validateSocksUrl.ts:56"] + "places": [ + "src/validators/validateSocksUrl.ts:56" + ] }, { "call": "Invalid SOCKS URL: missing username", "key": "Invalid SOCKS URL: missing username", - "places": ["src/validators/validateSocksUrl.ts:34"] + "places": [ + "src/validators/validateSocksUrl.ts:34" + ] }, { "call": "Invalid SOCKS URL: must not contain spaces", "key": "Invalid SOCKS URL: must not contain spaces", - "places": ["src/validators/validateSocksUrl.ts:19"] + "places": [ + "src/validators/validateSocksUrl.ts:19" + ] }, { "call": "Invalid SOCKS URL: must start with socks4://, socks4a://, or socks5://", "key": "Invalid SOCKS URL: must start with socks4://, socks4a://, or socks5://", - "places": ["src/validators/validateSocksUrl.ts:10"] + "places": [ + "src/validators/validateSocksUrl.ts:10" + ] }, { "call": "Invalid SOCKS URL: parsing failed", "key": "Invalid SOCKS URL: parsing failed", - "places": ["src/validators/validateSocksUrl.ts:77"] + "places": [ + "src/validators/validateSocksUrl.ts:77" + ] }, { "call": "Invalid Trojan URL: must not contain spaces", "key": "Invalid Trojan URL: must not contain spaces", - "places": ["src/validators/validateTrojanUrl.ts:15"] + "places": [ + "src/validators/validateTrojanUrl.ts:15" + ] }, { "call": "Invalid Trojan URL: must start with trojan://", "key": "Invalid Trojan URL: must start with trojan://", - "places": ["src/validators/validateTrojanUrl.ts:8"] + "places": [ + "src/validators/validateTrojanUrl.ts:8" + ] }, { "call": "Invalid Trojan URL: parsing failed", "key": "Invalid Trojan URL: parsing failed", - "places": ["src/validators/validateTrojanUrl.ts:56"] + "places": [ + "src/validators/validateTrojanUrl.ts:56" + ] }, { "call": "Invalid URL format", @@ -1398,12 +1546,16 @@ { "call": "Invalid VLESS URL: parsing failed", "key": "Invalid VLESS URL: parsing failed", - "places": ["src/validators/validateVlessUrl.ts:111"] + "places": [ + "src/validators/validateVlessUrl.ts:111" + ] }, { "call": "IP address 0.0.0.0 is not allowed", "key": "IP address 0.0.0.0 is not allowed", - "places": ["src/validators/validateSubnet.ts:18"] + "places": [ + "src/validators/validateSubnet.ts:18" + ] }, { "call": "IPs", @@ -1435,7 +1587,7 @@ "call": "Key path", "key": "Key path", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2076" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2080" ] }, { @@ -1448,12 +1600,16 @@ { "call": "Latest", "key": "Latest", - "places": ["src/podkop/tabs/updates/initController.ts:54"] + "places": [ + "src/podkop/tabs/updates/initController.ts:55" + ] }, { "call": "Latest version is installed", "key": "Latest version is installed", - "places": ["src/podkop/tabs/updates/initController.ts:140"] + "places": [ + "src/podkop/tabs/updates/initController.ts:153" + ] }, { "call": "List must be an HTTP(S) URL or a local .lst path", @@ -1473,22 +1629,21 @@ "call": "Listen address", "key": "Listen address", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1956" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1960" ] }, { "call": "Listen port", "key": "Listen port", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1963" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1967" ] }, { "call": "Loading connections", "key": "Loading connections", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1255", - "src/podkop/tabs/monitoring/initController.ts:738", + "src/podkop/tabs/monitoring/initController.ts:792", "src/podkop/tabs/monitoring/render.ts:88" ] }, @@ -1502,7 +1657,9 @@ { "call": "Main DNS", "key": "Main DNS", - "places": ["src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:72"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:72" + ] }, { "call": "Match destination IPs or subnets", @@ -1563,13 +1720,15 @@ { "call": "Memory Usage", "key": "Memory Usage", - "places": ["src/podkop/tabs/dashboard/initController.ts:555"] + "places": [ + "src/podkop/tabs/dashboard/initController.ts:555" + ] }, { "call": "Method", "key": "Method", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2218" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2222" ] }, { @@ -1604,7 +1763,7 @@ "call": "Monitoring", "key": "Monitoring", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:179" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:180" ] }, { @@ -1624,12 +1783,16 @@ { "call": "NFQUEUE range is available", "key": "NFQUEUE range is available", - "places": ["src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:118"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:118" + ] }, { "call": "NFQUEUE range overlaps with another rule", "key": "NFQUEUE range overlaps with another rule", - "places": ["src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:117"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:117" + ] }, { "call": "NFQWS Strategy", @@ -1648,50 +1811,62 @@ { "call": "No active connections", "key": "No active connections", - "places": ["src/podkop/tabs/monitoring/initController.ts:762"] + "places": [ + "src/podkop/tabs/monitoring/initController.ts:816" + ] }, { "call": "No closed connections", "key": "No closed connections", - "places": ["src/podkop/tabs/monitoring/initController.ts:763"] + "places": [ + "src/podkop/tabs/monitoring/initController.ts:817" + ] }, { "call": "No other marking rules found", "key": "No other marking rules found", - "places": ["src/podkop/tabs/diagnostic/checks/runNftCheck.ts:105"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runNftCheck.ts:105" + ] }, { "call": "No rules use ByeDPI", "key": "No rules use ByeDPI", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:105"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:105" + ] }, { "call": "No rules use Zapret", "key": "No rules use Zapret", - "places": ["src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:100"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:100" + ] }, { "call": "None", "key": "None", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:427", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2006", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2273", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2282" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2010", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2277", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2286" ] }, { "call": "Not implement yet", "key": "Not implement yet", - "places": ["src/podkop/tabs/diagnostic/partials/renderCheckSection.ts:189"] + "places": [ + "src/podkop/tabs/diagnostic/partials/renderCheckSection.ts:189" + ] }, { "call": "Not installed", "key": "Not installed", "places": [ - "src/podkop/tabs/updates/initController.ts:347", - "src/podkop/tabs/updates/initController.ts:365", - "src/podkop/tabs/updates/initController.ts:394" + "src/podkop/tabs/updates/initController.ts:366", + "src/podkop/tabs/updates/initController.ts:385", + "src/podkop/tabs/updates/initController.ts:415" ] }, { @@ -1717,14 +1892,14 @@ "call": "Obfuscation", "key": "Obfuscation", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2281" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2285" ] }, { "call": "Obfuscation password", "key": "Obfuscation password", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2304" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2308" ] }, { @@ -1758,7 +1933,9 @@ { "call": "Open Project Page", "key": "Open Project Page", - "places": ["src/podkop/tabs/diagnostic/partials/renderWikiDisclaimer.ts:31"] + "places": [ + "src/podkop/tabs/diagnostic/partials/renderWikiDisclaimer.ts:31" + ] }, { "call": "Operation timed out", @@ -1799,7 +1976,9 @@ { "call": "Outdated", "key": "Outdated", - "places": ["src/podkop/tabs/updates/initController.ts:58"] + "places": [ + "src/podkop/tabs/updates/initController.ts:59" + ] }, { "call": "Output Network Interface", @@ -1812,7 +1991,7 @@ "call": "Password", "key": "Password", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2244" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2248" ] }, { @@ -1825,7 +2004,9 @@ { "call": "Path cannot be empty", "key": "Path cannot be empty", - "places": ["src/validators/validatePath.ts:7"] + "places": [ + "src/validators/validatePath.ts:7" + ] }, { "call": "Path must be absolute (start with /)", @@ -1852,7 +2033,7 @@ "call": "Pause updates", "key": "Pause updates", "places": [ - "src/podkop/tabs/monitoring/initController.ts:520", + "src/podkop/tabs/monitoring/initController.ts:574", "src/podkop/tabs/monitoring/render.ts:70", "src/podkop/tabs/monitoring/render.ts:71" ] @@ -1860,17 +2041,23 @@ { "call": "Pending", "key": "Pending", - "places": ["src/podkop/tabs/diagnostic/diagnostic.store.ts:55"] + "places": [ + "src/podkop/tabs/diagnostic/diagnostic.store.ts:55" + ] }, { "call": "Podkop Plus Error", "key": "Podkop Plus Error", - "places": ["src/podkop/services/core.service.ts:82"] + "places": [ + "src/podkop/services/core.service.ts:82" + ] }, { "call": "Podkop Plus has been installed", "key": "Podkop Plus has been installed", - "places": ["src/podkop/methods/shell/index.ts:325"] + "places": [ + "src/podkop/methods/shell/index.ts:325" + ] }, { "call": "Podkop Plus manages ciadpi pid files itself, so pidfile options are not allowed here.", @@ -1897,7 +2084,7 @@ "call": "Podkop Plus rules", "key": "Podkop Plus rules", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1983" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1987" ] }, { @@ -1917,37 +2104,51 @@ { "call": "Podkop Plus-managed ciadpi runtime has restarted", "key": "Podkop Plus-managed ciadpi runtime has restarted", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:117"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:117" + ] }, { "call": "Podkop Plus-managed ciadpi runtime is not ready", "key": "Podkop Plus-managed ciadpi runtime is not ready", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:120"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:120" + ] }, { "call": "Podkop Plus-managed ciadpi runtime is not running", "key": "Podkop Plus-managed ciadpi runtime is not running", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:123"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:123" + ] }, { "call": "Podkop Plus-managed ciadpi runtime is ready", "key": "Podkop Plus-managed ciadpi runtime is ready", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:119"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:119" + ] }, { "call": "Podkop Plus-managed nfqws runtime is not ready", "key": "Podkop Plus-managed nfqws runtime is not ready", - "places": ["src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:108"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:108" + ] }, { "call": "Podkop Plus-managed nfqws runtime is not running", "key": "Podkop Plus-managed nfqws runtime is not running", - "places": ["src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:111"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:111" + ] }, { "call": "Podkop Plus-managed nfqws runtime is ready", "key": "Podkop Plus-managed nfqws runtime is ready", - "places": ["src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:107"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:107" + ] }, { "call": "Port cannot be empty", @@ -1968,7 +2169,7 @@ "key": "Port must be between 1 and 65535", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1336", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1416" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1420" ] }, { @@ -1989,92 +2190,100 @@ "call": "Protocol", "key": "Protocol", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1906", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1940" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1910", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1944" ] }, { "call": "Proxy link is unavailable", "key": "Proxy link is unavailable", - "places": ["src/podkop/tabs/dashboard/initController.ts:343"] + "places": [ + "src/podkop/tabs/dashboard/initController.ts:343" + ] }, { "call": "Proxy traffic is not routed via FakeIP", "key": "Proxy traffic is not routed via FakeIP", - "places": ["src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:68"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:68" + ] }, { "call": "Proxy traffic is routed via FakeIP", "key": "Proxy traffic is routed via FakeIP", - "places": ["src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:67"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:67" + ] }, { "call": "Public host", "key": "Public host", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1970" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1974" ] }, { "call": "QR code is too large", "key": "QR code is too large", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1291" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1233" ] }, { "call": "Reality fake site", "key": "Reality fake site", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2094" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2098" ] }, { "call": "Reality fake site port", "key": "Reality fake site port", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2105" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2109" ] }, { "call": "Reality max time difference", "key": "Reality max time difference", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2148" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2152" ] }, { "call": "Reality private key", "key": "Reality private key", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2116" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2120" ] }, { "call": "Reality public key", "key": "Reality public key", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2123" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2127" ] }, { "call": "Reality short ID", "key": "Reality short ID", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2129" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2133" ] }, { "call": "Reality short ID must contain 1-8 hex digits", "key": "Reality short ID must contain 1-8 hex digits", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1604" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1608" ] }, { "call": "Refill", "key": "Refill", - "places": ["src/podkop/tabs/dashboard/partials/renderSections.ts:221"] + "places": [ + "src/podkop/tabs/dashboard/partials/renderSections.ts:221" + ] }, { "call": "Regional options cannot be used together", @@ -2087,8 +2296,8 @@ "call": "Remove", "key": "Remove", "places": [ - "src/podkop/tabs/updates/initController.ts:372", - "src/podkop/tabs/updates/initController.ts:401" + "src/podkop/tabs/updates/initController.ts:393", + "src/podkop/tabs/updates/initController.ts:423" ] }, { @@ -2143,14 +2352,16 @@ { "call": "Resume updates", "key": "Resume updates", - "places": ["src/podkop/tabs/monitoring/initController.ts:520"] + "places": [ + "src/podkop/tabs/monitoring/initController.ts:574" + ] }, { "call": "Route", "key": "Route", "places": [ - "src/podkop/tabs/monitoring/initController.ts:632", - "src/podkop/tabs/monitoring/initController.ts:690" + "src/podkop/tabs/monitoring/initController.ts:686", + "src/podkop/tabs/monitoring/initController.ts:744" ] }, { @@ -2164,14 +2375,14 @@ "call": "Routing mode", "key": "Routing mode", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1982" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1986" ] }, { "call": "Routing section", "key": "Routing section", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1991" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1995" ] }, { @@ -2198,37 +2409,51 @@ { "call": "Rules mangle counters", "key": "Rules mangle counters", - "places": ["src/podkop/tabs/diagnostic/checks/runNftCheck.ts:79"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runNftCheck.ts:79" + ] }, { "call": "Rules mangle exist", "key": "Rules mangle exist", - "places": ["src/podkop/tabs/diagnostic/checks/runNftCheck.ts:74"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runNftCheck.ts:74" + ] }, { "call": "Rules mangle output counters", "key": "Rules mangle output counters", - "places": ["src/podkop/tabs/diagnostic/checks/runNftCheck.ts:89"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runNftCheck.ts:89" + ] }, { "call": "Rules mangle output exist", "key": "Rules mangle output exist", - "places": ["src/podkop/tabs/diagnostic/checks/runNftCheck.ts:84"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runNftCheck.ts:84" + ] }, { "call": "Rules proxy counters", "key": "Rules proxy counters", - "places": ["src/podkop/tabs/diagnostic/checks/runNftCheck.ts:99"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runNftCheck.ts:99" + ] }, { "call": "Rules proxy exist", "key": "Rules proxy exist", - "places": ["src/podkop/tabs/diagnostic/checks/runNftCheck.ts:94"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runNftCheck.ts:94" + ] }, { "call": "Run Diagnostic", "key": "Run Diagnostic", - "places": ["src/podkop/tabs/diagnostic/partials/renderRunAction.ts:17"] + "places": [ + "src/podkop/tabs/diagnostic/partials/renderRunAction.ts:17" + ] }, { "call": "Russia inside restrictions", @@ -2240,7 +2465,9 @@ { "call": "Search", "key": "Search", - "places": ["src/podkop/tabs/monitoring/render.ts:47"] + "places": [ + "src/podkop/tabs/monitoring/render.ts:47" + ] }, { "call": "Secret key for authenticating remote access to YACD when WAN access is enabled.", @@ -2274,7 +2501,7 @@ "call": "Security", "key": "Security", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2003" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2007" ] }, { @@ -2379,14 +2606,14 @@ "call": "Selected section", "key": "Selected section", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1985" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1989" ] }, { "call": "Server", "key": "Server", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:134" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:135" ] }, { @@ -2400,21 +2627,22 @@ "call": "Server information", "key": "Server information", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1328" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1322" ] }, { "call": "Server name", "key": "Server name", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1917" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1243", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1921" ] }, { "call": "Server name / SNI", "key": "Server name / SNI", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2032" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2036" ] }, { @@ -2448,13 +2676,15 @@ { "call": "Services info", "key": "Services info", - "places": ["src/podkop/tabs/dashboard/initController.ts:588"] + "places": [ + "src/podkop/tabs/dashboard/initController.ts:588" + ] }, { "call": "Settings", "key": "Settings", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:143", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:144", "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2479" ] }, @@ -2476,49 +2706,65 @@ { "call": "Sing-box autostart disabled", "key": "Sing-box autostart disabled", - "places": ["src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:77"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:77" + ] }, { "call": "Sing-box FakeIP DNS does not work", "key": "Sing-box FakeIP DNS does not work", - "places": ["src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:53"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:53" + ] }, { "call": "Sing-box FakeIP DNS works", "key": "Sing-box FakeIP DNS works", - "places": ["src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:52"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runFakeIPCheck.ts:52" + ] }, { "call": "Sing-box installed", "key": "Sing-box installed", - "places": ["src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:62"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:62" + ] }, { "call": "Sing-box listening ports", "key": "Sing-box listening ports", - "places": ["src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:87"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:87" + ] }, { "call": "Sing-box process running", "key": "Sing-box process running", - "places": ["src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:82"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:82" + ] }, { "call": "Sing-box service exist", "key": "Sing-box service exist", - "places": ["src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:72"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:72" + ] }, { "call": "Sing-box version is compatible (newer than 1.12.4)", "key": "Sing-box version is compatible (newer than 1.12.4)", - "places": ["src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:67"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runSingBoxCheck.ts:67" + ] }, { "call": "Source", "key": "Source", "places": [ - "src/podkop/tabs/monitoring/initController.ts:644", - "src/podkop/tabs/monitoring/initController.ts:694" + "src/podkop/tabs/monitoring/initController.ts:698", + "src/podkop/tabs/monitoring/initController.ts:748" ] }, { @@ -2539,15 +2785,15 @@ "call": "Specify a file path", "key": "Specify a file path", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1497" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1501" ] }, { "call": "Specify different files", "key": "Specify different files", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1508", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1520" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1512", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1524" ] }, { @@ -2560,37 +2806,51 @@ { "call": "Standalone ByeDPI autostart is enabled", "key": "Standalone ByeDPI autostart is enabled", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:157"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:157" + ] }, { "call": "Standalone ByeDPI is active together with Podkop Plus ByeDPI rules", "key": "Standalone ByeDPI is active together with Podkop Plus ByeDPI rules", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:152"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:152" + ] }, { "call": "Standalone ByeDPI service is active", "key": "Standalone ByeDPI service is active", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:155"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:155" + ] }, { "call": "Standalone ByeDPI service is inactive", "key": "Standalone ByeDPI service is inactive", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:158"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:158" + ] }, { "call": "Standalone Zapret is active together with Podkop Plus Zapret rules", "key": "Standalone Zapret is active together with Podkop Plus Zapret rules", - "places": ["src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:125"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:125" + ] }, { "call": "Standalone Zapret service is active", "key": "Standalone Zapret service is active", - "places": ["src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:128"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:128" + ] }, { "call": "Standalone Zapret service is inactive", "key": "Standalone Zapret service is inactive", - "places": ["src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:129"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:129" + ] }, { "call": "Start Podkop Plus", @@ -2616,17 +2876,23 @@ { "call": "Subscription info:", "key": "Subscription info:", - "places": ["src/podkop/tabs/dashboard/partials/renderSections.ts:235"] + "places": [ + "src/podkop/tabs/dashboard/partials/renderSections.ts:235" + ] }, { "call": "Subscription update completed", "key": "Subscription update completed", - "places": ["src/podkop/tabs/dashboard/initController.ts:367"] + "places": [ + "src/podkop/tabs/dashboard/initController.ts:367" + ] }, { "call": "Subscription update failed", "key": "Subscription update failed", - "places": ["src/podkop/methods/shell/index.ts:371"] + "places": [ + "src/podkop/methods/shell/index.ts:371" + ] }, { "call": "Subscription update interval", @@ -2652,42 +2918,51 @@ { "call": "Successfully copied!", "key": "Successfully copied!", - "places": ["src/helpers/copyToClipboard.ts:10"] + "places": [ + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1197", + "src/helpers/copyToClipboard.ts:10" + ] }, { "call": "System info", "key": "System info", - "places": ["src/podkop/tabs/dashboard/initController.ts:548"] + "places": [ + "src/podkop/tabs/dashboard/initController.ts:548" + ] }, { "call": "System information", "key": "System information", - "places": ["src/podkop/tabs/diagnostic/partials/renderSystemInfo.ts:21"] + "places": [ + "src/podkop/tabs/diagnostic/partials/renderSystemInfo.ts:21" + ] }, { "call": "Table exist", "key": "Table exist", - "places": ["src/podkop/tabs/diagnostic/checks/runNftCheck.ts:69"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runNftCheck.ts:69" + ] }, { "call": "Tailscale auth key", "key": "Tailscale auth key", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2320" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2324" ] }, { "call": "Tailscale control URL", "key": "Tailscale control URL", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2329" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2333" ] }, { "call": "Tailscale hostname", "key": "Tailscale hostname", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2337" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2341" ] }, { @@ -2722,22 +2997,26 @@ { "call": "There are rules using ByeDPI", "key": "There are rules using ByeDPI", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:104"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:104" + ] }, { "call": "There are rules using Zapret", "key": "There are rules using Zapret", - "places": ["src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:99"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:99" + ] }, { "call": "This field is required", "key": "This field is required", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1431", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1436", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1491", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1595", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2267" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1435", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1440", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1495", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1599", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2271" ] }, { @@ -2779,8 +3058,8 @@ "call": "Time", "key": "Time", "places": [ - "src/podkop/tabs/monitoring/initController.ts:635", - "src/podkop/tabs/monitoring/initController.ts:691" + "src/podkop/tabs/monitoring/initController.ts:689", + "src/podkop/tabs/monitoring/initController.ts:745" ] }, { @@ -2794,7 +3073,6 @@ "call": "Traffic", "key": "Traffic", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1268", "src/podkop/tabs/dashboard/initController.ts:474", "src/podkop/tabs/dashboard/partials/renderSections.ts:216" ] @@ -2802,7 +3080,9 @@ { "call": "Traffic Total", "key": "Traffic Total", - "places": ["src/podkop/tabs/dashboard/initController.ts:508"] + "places": [ + "src/podkop/tabs/dashboard/initController.ts:508" + ] }, { "call": "Transparent proxy mode is incompatible with action=byedpi because Podkop Plus connects to ciadpi through SOCKS.", @@ -2815,34 +3095,36 @@ "call": "Transport", "key": "Transport", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2170" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2174" ] }, { "call": "Transport host", "key": "Transport host", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2194" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2198" ] }, { "call": "Transport path", "key": "Transport path", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2181" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2185" ] }, { "call": "Transport path must start with /", "key": "Transport path must start with /", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1549" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1553" ] }, { "call": "Troubleshooting", "key": "Troubleshooting", - "places": ["src/podkop/tabs/diagnostic/partials/renderWikiDisclaimer.ts:25"] + "places": [ + "src/podkop/tabs/diagnostic/partials/renderWikiDisclaimer.ts:25" + ] }, { "call": "TTL must be a positive number", @@ -2862,8 +3144,9 @@ "call": "Type", "key": "Type", "places": [ - "src/podkop/tabs/monitoring/initController.ts:629", - "src/podkop/tabs/monitoring/initController.ts:689" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1258", + "src/podkop/tabs/monitoring/initController.ts:683", + "src/podkop/tabs/monitoring/initController.ts:743" ] }, { @@ -2905,12 +3188,16 @@ { "call": "Unexpected Podkop Plus-managed ciadpi runtime is running", "key": "Unexpected Podkop Plus-managed ciadpi runtime is running", - "places": ["src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:122"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runByedpiCheck.ts:122" + ] }, { "call": "Unexpected Podkop Plus-managed nfqws runtime is running", "key": "Unexpected Podkop Plus-managed nfqws runtime is running", - "places": ["src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:110"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:110" + ] }, { "call": "Unexpected standalone token. Use explicit flags such as --name or --name=value.", @@ -2938,7 +3225,7 @@ "src/podkop/services/systemInfo.service.ts:16", "src/podkop/services/systemInfo.service.ts:18", "src/podkop/services/systemInfo.service.ts:19", - "src/podkop/tabs/updates/initController.ts:174" + "src/podkop/tabs/updates/initController.ts:187" ] }, { @@ -2960,7 +3247,9 @@ { "call": "Unknown error", "key": "Unknown error", - "places": ["src/podkop/api.ts:40"] + "places": [ + "src/podkop/api.ts:40" + ] }, { "call": "Unknown NFQWS flag.", @@ -2973,13 +3262,15 @@ "call": "Unsupported security mode for this protocol", "key": "Unsupported security mode for this protocol", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1616" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1620" ] }, { "call": "Update is available", "key": "Update is available", - "places": ["src/podkop/tabs/updates/initController.ts:133"] + "places": [ + "src/podkop/tabs/updates/initController.ts:146" + ] }, { "call": "Update subscriptions", @@ -2993,7 +3284,7 @@ "call": "Updates", "key": "Updates", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:191" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:192" ] }, { @@ -3004,30 +3295,27 @@ "src/podkop/tabs/dashboard/initController.ts:511" ] }, - { - "call": "Upload", - "key": "Upload", - "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1249" - ] - }, { "call": "Uploaded", "key": "Uploaded", "places": [ - "src/podkop/tabs/monitoring/initController.ts:641", - "src/podkop/tabs/monitoring/initController.ts:693" + "src/podkop/tabs/monitoring/initController.ts:695", + "src/podkop/tabs/monitoring/initController.ts:747" ] }, { "call": "URL must start with vless://, ss://, trojan://, socks4://, socks4a://, socks5://, hysteria2://, or hy2://", "key": "URL must start with vless://, ss://, trojan://, socks4://, socks4a://, socks5://, hysteria2://, or hy2://", - "places": ["src/validators/validateProxyUrl.ts:37"] + "places": [ + "src/validators/validateProxyUrl.ts:37" + ] }, { "call": "URL must use one of the following protocols:", "key": "URL must use one of the following protocols:", - "places": ["src/validators/validateUrl.ts:17"] + "places": [ + "src/validators/validateUrl.ts:17" + ] }, { "call": "URLTest interval", @@ -3054,45 +3342,45 @@ "call": "Use a domain name or IPv4 address", "key": "Use a domain name or IPv4 address", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1471", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1477", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1558" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1475", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1481", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1562" ] }, { "call": "Use a duration like 30s, 5m, or 1h30m", "key": "Use a duration like 30s, 5m, or 1h30m", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1543" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1547" ] }, { "call": "Use a non-negative integer", "key": "Use a non-negative integer", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2269" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2273" ] }, { "call": "Use an HTTP or HTTPS URL", "key": "Use an HTTP or HTTPS URL", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1530", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1532" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1534", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1536" ] }, { "call": "Use an IPv4 listen address", "key": "Use an IPv4 listen address", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1484" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1488" ] }, { "call": "Use CIDR prefixes like 192.168.1.0/24", "key": "Use CIDR prefixes like 192.168.1.0/24", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1590" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1594" ] }, { @@ -3107,7 +3395,7 @@ "call": "Use letters, digits, dots, underscores, or hyphens", "key": "Use letters, digits, dots, underscores, or hyphens", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1564" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1568" ] }, { @@ -3128,7 +3416,7 @@ "call": "Username", "key": "Username", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2228" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2232" ] }, { @@ -3146,7 +3434,7 @@ "src/validators/validateDns.ts:18", "src/validators/validateDomain.ts:13", "src/validators/validateDomain.ts:30", - "src/validators/validateHysteriaUrl.ts:113", + "src/validators/validateHysteriaUrl.ts:144", "src/validators/validateIp.ts:8", "src/validators/validateOutboundJson.ts:7", "src/validators/validatePath.ts:16", @@ -3171,13 +3459,15 @@ "call": "Value must not contain control characters", "key": "Value must not contain control characters", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1440" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1444" ] }, { "call": "Version", "key": "Version", - "places": ["src/podkop/tabs/updates/initController.ts:467"] + "places": [ + "src/podkop/tabs/updates/initController.ts:515" + ] }, { "call": "View logs", @@ -3198,7 +3488,7 @@ "call": "VLESS flow", "key": "VLESS flow", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2272" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2276" ] }, { @@ -3253,21 +3543,29 @@ { "call": "Zapret package is installed", "key": "Zapret package is installed", - "places": ["src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:92"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:92" + ] }, { "call": "Zapret package is not installed", "key": "Zapret package is not installed", - "places": ["src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:93"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:93" + ] }, { "call": "Zapret provider binary is available", "key": "Zapret provider binary is available", - "places": ["src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:81"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:81" + ] }, { "call": "Zapret provider binary is not available", "key": "Zapret provider binary is not available", - "places": ["src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:82"] + "places": [ + "src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:82" + ] } -] +] \ No newline at end of file diff --git a/fe-app-podkop/locales/podkop_plus.pot b/fe-app-podkop/locales/podkop_plus.pot index 4742644d..ee8e9e8e 100644 --- a/fe-app-podkop/locales/podkop_plus.pot +++ b/fe-app-podkop/locales/podkop_plus.pot @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PODKOP PLUS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-29 02:03+0300\n" -"PO-Revision-Date: 2026-05-29 02:03+0300\n" +"POT-Creation-Date: 2026-05-29 18:05+0300\n" +"PO-Revision-Date: 2026-05-29 18:05+0300\n" "Last-Translator: ushan0v \n" "Language-Team: LANGUAGE \n" "Language: \n" @@ -31,21 +31,20 @@ msgstr "" msgid "✘ Stopped" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2372 -msgid "Accept routes" -msgstr "" - #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:130 msgid "Accept external proxy connections and route them with sing-box." msgstr "" +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2376 +msgid "Accept routes" +msgstr "" + #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2492 #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2524 msgid "Action" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1248 -#: src/podkop/tabs/monitoring/initController.ts:501 +#: src/podkop/tabs/monitoring/initController.ts:555 #: src/podkop/tabs/monitoring/render.ts:20 msgid "Active" msgstr "" @@ -58,7 +57,7 @@ msgstr "" msgid "Add a section" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:135 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:136 msgid "Add a server inbound" msgstr "" @@ -78,15 +77,19 @@ msgstr "" msgid "Additional marking rules found" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2355 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1273 +msgid "Address" +msgstr "" + +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2359 msgid "Advertise exit node" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2365 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2369 msgid "Advertise routes" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:464 +#: src/podkop/tabs/monitoring/initController.ts:518 #: src/podkop/tabs/monitoring/render.ts:39 msgid "All" msgstr "" @@ -107,11 +110,11 @@ msgstr "" msgid "Allows limiting the list of servers for URLTest" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2051 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2055 msgid "ALPN" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2260 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2264 msgid "Alter ID" msgstr "" @@ -240,15 +243,15 @@ msgstr "" msgid "Cannot receive checks result" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1737 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1741 msgid "Cannot save server" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2061 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2065 msgid "Certificate path" msgstr "" -#: src/podkop/tabs/updates/initController.ts:306 +#: src/podkop/tabs/updates/initController.ts:324 msgid "Check update" msgstr "" @@ -290,27 +293,26 @@ msgstr "" msgid "CIDR must be between 0 and 32" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2159 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2163 msgid "Client fingerprint" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1293 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1290 msgid "Client link" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1277 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1210 msgid "Client link is not available yet" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1283 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1289 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1231 msgid "Client link QR code" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1339 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1335 #: src/partials/modal/renderModal.ts:195 -#: src/podkop/tabs/monitoring/initController.ts:645 -#: src/podkop/tabs/monitoring/initController.ts:695 +#: src/podkop/tabs/monitoring/initController.ts:699 +#: src/podkop/tabs/monitoring/initController.ts:749 msgid "Close" msgstr "" @@ -319,12 +321,12 @@ msgstr "" msgid "Close all connections" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:612 -#: src/podkop/tabs/monitoring/initController.ts:613 +#: src/podkop/tabs/monitoring/initController.ts:666 +#: src/podkop/tabs/monitoring/initController.ts:667 msgid "Close connection" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:507 +#: src/podkop/tabs/monitoring/initController.ts:561 #: src/podkop/tabs/monitoring/render.ts:29 msgid "Closed" msgstr "" @@ -341,19 +343,15 @@ msgstr "" msgid "Configuration for Podkop Plus service" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1262 -msgid "Connection statistics are unavailable" -msgstr "" - #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2619 msgid "Connection URL" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:748 +#: src/podkop/tabs/monitoring/initController.ts:802 msgid "Connections are unavailable" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1314 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1313 #: src/partials/modal/renderModal.ts:190 msgid "Copy" msgstr "" @@ -367,7 +365,7 @@ msgstr "" msgid "Currently unavailable" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:167 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:168 msgid "Dashboard" msgstr "" @@ -383,7 +381,7 @@ msgstr "" msgid "Delay value cannot be empty" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1355 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1351 msgid "Delete" msgstr "" @@ -391,7 +389,7 @@ msgstr "" msgid "Detect server country" msgstr "" -#: src/podkop/tabs/updates/initController.ts:61 +#: src/podkop/tabs/updates/initController.ts:62 msgid "Dev" msgstr "" @@ -404,12 +402,11 @@ msgstr "" msgid "DHCP has DNS server" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:155 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:156 msgid "Diagnostics" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1984 -#: src/podkop/tabs/monitoring/initController.ts:119 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1988 msgid "Direct" msgstr "" @@ -496,7 +493,6 @@ msgstr "" msgid "Downlink" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1250 #: src/partials/modal/renderModal.ts:185 msgid "Download" msgstr "" @@ -513,8 +509,8 @@ msgstr "" msgid "Download lists/updates/subscriptions via Proxy/VPN" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:638 #: src/podkop/tabs/monitoring/initController.ts:692 +#: src/podkop/tabs/monitoring/initController.ts:746 msgid "Downloaded" msgstr "" @@ -529,12 +525,12 @@ msgid "Duplicate value" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:68 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1348 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1344 msgid "Edit rule action" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2482 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1900 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1904 msgid "Enable" msgstr "" @@ -622,24 +618,25 @@ msgstr "" msgid "External nfqws config files bypass Podkop Plus queue management and explicit validation." msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:1010 -#: src/podkop/tabs/monitoring/initController.ts:1025 +#: src/podkop/tabs/monitoring/initController.ts:1064 +#: src/podkop/tabs/monitoring/initController.ts:1079 msgid "Failed to close connection" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:1044 -#: src/podkop/tabs/monitoring/initController.ts:1057 +#: src/podkop/tabs/monitoring/initController.ts:1098 +#: src/podkop/tabs/monitoring/initController.ts:1111 msgid "Failed to close connections" msgstr "" +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1199 #: src/helpers/copyToClipboard.ts:12 msgid "Failed to copy!" msgstr "" #: src/podkop/methods/shell/index.ts:97 #: src/podkop/methods/shell/index.ts:273 -#: src/podkop/tabs/updates/initController.ts:241 -#: src/podkop/tabs/updates/initController.ts:285 +#: src/podkop/tabs/updates/initController.ts:254 +#: src/podkop/tabs/updates/initController.ts:303 msgid "Failed to execute" msgstr "" @@ -648,12 +645,12 @@ msgstr "" msgid "Failed to update subscriptions" msgstr "" -#: src/podkop/methods/custom/getDashboardSections.ts:259 +#: src/podkop/methods/custom/getDashboardSections.ts:307 #: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:93 msgid "Fastest" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1738 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1742 msgid "Fix the highlighted fields and save again." msgstr "" @@ -665,11 +662,15 @@ msgstr "" msgid "Get global check" msgstr "" +#: src/podkop/tabs/updates/initController.ts:490 +msgid "GitHub release" +msgstr "" + #: src/podkop/tabs/diagnostic/initController.ts:415 msgid "Global check" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2211 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2215 msgid "gRPC service" msgstr "" @@ -677,8 +678,8 @@ msgstr "" msgid "Hide filtered servers" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:628 -#: src/podkop/tabs/monitoring/initController.ts:688 +#: src/podkop/tabs/monitoring/initController.ts:682 +#: src/podkop/tabs/monitoring/initController.ts:742 msgid "Host" msgstr "" @@ -686,7 +687,7 @@ msgstr "" msgid "HTTP error" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2204 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2208 msgid "HTTP hosts" msgstr "" @@ -702,29 +703,29 @@ msgstr "" msgid "Include server in URLTest" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1356 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1352 msgid "Information" msgstr "" -#: src/podkop/tabs/updates/initController.ts:77 -#: src/podkop/tabs/updates/initController.ts:381 -#: src/podkop/tabs/updates/initController.ts:410 +#: src/podkop/tabs/updates/initController.ts:78 +#: src/podkop/tabs/updates/initController.ts:402 +#: src/podkop/tabs/updates/initController.ts:432 msgid "Install" msgstr "" -#: src/podkop/tabs/updates/initController.ts:74 +#: src/podkop/tabs/updates/initController.ts:75 msgid "Install %s" msgstr "" -#: src/podkop/tabs/updates/initController.ts:329 +#: src/podkop/tabs/updates/initController.ts:347 msgid "Install extended" msgstr "" -#: src/podkop/tabs/updates/initController.ts:322 +#: src/podkop/tabs/updates/initController.ts:340 msgid "Install stable" msgstr "" -#: src/podkop/tabs/updates/initController.ts:137 +#: src/podkop/tabs/updates/initController.ts:150 msgid "Installed version is newer than release" msgstr "" @@ -757,11 +758,11 @@ msgstr "" msgid "Invalid format. Use X.X.X.X or X.X.X.X/Y" msgstr "" -#: src/validators/validateHysteriaUrl.ts:76 +#: src/validators/validateHysteriaUrl.ts:107 msgid "Invalid HY2 URL: insecure must be 0 or 1" msgstr "" -#: src/validators/validateHysteriaUrl.ts:62 +#: src/validators/validateHysteriaUrl.ts:93 msgid "Invalid HY2 URL: invalid port number" msgstr "" @@ -793,19 +794,19 @@ msgstr "" msgid "Invalid HY2 URL: must start with hysteria2:// or hy2://" msgstr "" -#: src/validators/validateHysteriaUrl.ts:99 +#: src/validators/validateHysteriaUrl.ts:130 msgid "Invalid HY2 URL: obfs-password required when obfs is set" msgstr "" -#: src/validators/validateHysteriaUrl.ts:115 +#: src/validators/validateHysteriaUrl.ts:146 msgid "Invalid HY2 URL: parsing failed" msgstr "" -#: src/validators/validateHysteriaUrl.ts:108 +#: src/validators/validateHysteriaUrl.ts:139 msgid "Invalid HY2 URL: sni cannot be empty" msgstr "" -#: src/validators/validateHysteriaUrl.ts:88 +#: src/validators/validateHysteriaUrl.ts:119 msgid "Invalid HY2 URL: unsupported obfs type" msgstr "" @@ -948,7 +949,7 @@ msgstr "" msgid "JSON outbound" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2076 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2080 msgid "Key path" msgstr "" @@ -956,11 +957,11 @@ msgstr "" msgid "Keyword must not contain spaces" msgstr "" -#: src/podkop/tabs/updates/initController.ts:54 +#: src/podkop/tabs/updates/initController.ts:55 msgid "Latest" msgstr "" -#: src/podkop/tabs/updates/initController.ts:140 +#: src/podkop/tabs/updates/initController.ts:153 msgid "Latest version is installed" msgstr "" @@ -972,16 +973,15 @@ msgstr "" msgid "List Update Frequency" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1956 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1960 msgid "Listen address" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1963 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1967 msgid "Listen port" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1255 -#: src/podkop/tabs/monitoring/initController.ts:738 +#: src/podkop/tabs/monitoring/initController.ts:792 #: src/podkop/tabs/monitoring/render.ts:88 msgid "Loading connections" msgstr "" @@ -1030,7 +1030,7 @@ msgstr "" msgid "Memory Usage" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2218 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2222 msgid "Method" msgstr "" @@ -1050,7 +1050,7 @@ msgstr "" msgid "Monitored Interfaces" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:179 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:180 msgid "Monitoring" msgstr "" @@ -1078,11 +1078,11 @@ msgstr "" msgid "NFQWS strategy cannot be empty" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:762 +#: src/podkop/tabs/monitoring/initController.ts:816 msgid "No active connections" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:763 +#: src/podkop/tabs/monitoring/initController.ts:817 msgid "No closed connections" msgstr "" @@ -1099,9 +1099,9 @@ msgid "No rules use Zapret" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:427 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2006 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2273 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2282 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2010 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2277 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2286 msgid "None" msgstr "" @@ -1109,9 +1109,9 @@ msgstr "" msgid "Not implement yet" msgstr "" -#: src/podkop/tabs/updates/initController.ts:347 -#: src/podkop/tabs/updates/initController.ts:365 -#: src/podkop/tabs/updates/initController.ts:394 +#: src/podkop/tabs/updates/initController.ts:366 +#: src/podkop/tabs/updates/initController.ts:385 +#: src/podkop/tabs/updates/initController.ts:415 msgid "Not installed" msgstr "" @@ -1128,11 +1128,11 @@ msgstr "" msgid "Not running" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2281 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2285 msgid "Obfuscation" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2304 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2308 msgid "Obfuscation password" msgstr "" @@ -1177,7 +1177,7 @@ msgstr "" msgid "Outbound JSON cannot be empty" msgstr "" -#: src/podkop/tabs/updates/initController.ts:58 +#: src/podkop/tabs/updates/initController.ts:59 msgid "Outdated" msgstr "" @@ -1185,7 +1185,7 @@ msgstr "" msgid "Output Network Interface" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2244 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2248 msgid "Password" msgstr "" @@ -1209,7 +1209,7 @@ msgstr "" msgid "Path must end with cache.db" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:520 +#: src/podkop/tabs/monitoring/initController.ts:574 #: src/podkop/tabs/monitoring/render.ts:70 #: src/podkop/tabs/monitoring/render.ts:71 msgid "Pause updates" @@ -1239,7 +1239,7 @@ msgstr "" msgid "Podkop Plus manages the nfqws process lifecycle itself, so daemon mode is not allowed here." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1983 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1987 msgid "Podkop Plus rules" msgstr "" @@ -1288,7 +1288,7 @@ msgid "Port for the local mixed proxy of this section" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1336 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1416 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1420 msgid "Port must be between 1 and 65535" msgstr "" @@ -1300,8 +1300,8 @@ msgstr "" msgid "Ports" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1906 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1940 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1910 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1944 msgid "Protocol" msgstr "" @@ -1317,39 +1317,39 @@ msgstr "" msgid "Proxy traffic is routed via FakeIP" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1970 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1974 msgid "Public host" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1291 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1233 msgid "QR code is too large" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2094 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2098 msgid "Reality fake site" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2105 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2109 msgid "Reality fake site port" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2148 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2152 msgid "Reality max time difference" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2116 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2120 msgid "Reality private key" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2123 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2127 msgid "Reality public key" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2129 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2133 msgid "Reality short ID" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1604 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1608 msgid "Reality short ID must contain 1-8 hex digits" msgstr "" @@ -1361,8 +1361,8 @@ msgstr "" msgid "Regional options cannot be used together" msgstr "" -#: src/podkop/tabs/updates/initController.ts:372 -#: src/podkop/tabs/updates/initController.ts:401 +#: src/podkop/tabs/updates/initController.ts:393 +#: src/podkop/tabs/updates/initController.ts:423 msgid "Remove" msgstr "" @@ -1394,12 +1394,12 @@ msgstr "" msgid "Restart Podkop Plus" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:520 +#: src/podkop/tabs/monitoring/initController.ts:574 msgid "Resume updates" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:632 -#: src/podkop/tabs/monitoring/initController.ts:690 +#: src/podkop/tabs/monitoring/initController.ts:686 +#: src/podkop/tabs/monitoring/initController.ts:744 msgid "Route" msgstr "" @@ -1407,11 +1407,11 @@ msgstr "" msgid "Routing Excluded IPs" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1982 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1986 msgid "Routing mode" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1991 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1995 msgid "Routing section" msgstr "" @@ -1479,7 +1479,7 @@ msgstr "" msgid "Sections" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2003 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2007 msgid "Security" msgstr "" @@ -1539,11 +1539,11 @@ msgstr "" msgid "Select the WAN interfaces to be monitored" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1985 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1989 msgid "Selected section" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:134 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:135 msgid "Server" msgstr "" @@ -1551,15 +1551,16 @@ msgstr "" msgid "Server filtering for URLTest" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1328 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1322 msgid "Server information" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1917 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1243 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1921 msgid "Server name" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2032 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2036 msgid "Server name / SNI" msgstr "" @@ -1583,7 +1584,7 @@ msgstr "" msgid "Services info" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:143 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:144 #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2479 msgid "Settings" msgstr "" @@ -1629,8 +1630,8 @@ msgstr "" msgid "Sing-box version is compatible (newer than 1.12.4)" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:644 -#: src/podkop/tabs/monitoring/initController.ts:694 +#: src/podkop/tabs/monitoring/initController.ts:698 +#: src/podkop/tabs/monitoring/initController.ts:748 msgid "Source" msgstr "" @@ -1642,12 +1643,12 @@ msgstr "" msgid "Source Network Interface" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1497 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1501 msgid "Specify a file path" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1508 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1520 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1512 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1524 msgid "Specify different files" msgstr "" @@ -1719,6 +1720,7 @@ msgstr "" msgid "Subscription URL cannot be empty" msgstr "" +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1197 #: src/helpers/copyToClipboard.ts:10 msgid "Successfully copied!" msgstr "" @@ -1735,15 +1737,15 @@ msgstr "" msgid "Table exist" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2320 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2324 msgid "Tailscale auth key" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2329 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2333 msgid "Tailscale control URL" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2337 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2341 msgid "Tailscale hostname" msgstr "" @@ -1772,11 +1774,11 @@ msgstr "" msgid "There are rules using Zapret" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1431 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1436 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1491 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1595 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2267 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1435 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1440 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1495 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1599 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2271 msgid "This field is required" msgstr "" @@ -1800,8 +1802,8 @@ msgstr "" msgid "This option requires a value." msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:635 -#: src/podkop/tabs/monitoring/initController.ts:691 +#: src/podkop/tabs/monitoring/initController.ts:689 +#: src/podkop/tabs/monitoring/initController.ts:745 msgid "Time" msgstr "" @@ -1809,7 +1811,6 @@ msgstr "" msgid "Time in seconds for DNS record caching (default: 60)" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1268 #: src/podkop/tabs/dashboard/initController.ts:474 #: src/podkop/tabs/dashboard/partials/renderSections.ts:216 msgid "Traffic" @@ -1823,19 +1824,19 @@ msgstr "" msgid "Transparent proxy mode is incompatible with action=byedpi because Podkop Plus connects to ciadpi through SOCKS." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2170 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2174 msgid "Transport" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2194 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2198 msgid "Transport host" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2181 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2185 msgid "Transport path" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1549 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1553 msgid "Transport path must start with /" msgstr "" @@ -1851,8 +1852,9 @@ msgstr "" msgid "TTL value cannot be empty" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:629 -#: src/podkop/tabs/monitoring/initController.ts:689 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1258 +#: src/podkop/tabs/monitoring/initController.ts:683 +#: src/podkop/tabs/monitoring/initController.ts:743 msgid "Type" msgstr "" @@ -1901,7 +1903,7 @@ msgstr "" #: src/podkop/services/systemInfo.service.ts:16 #: src/podkop/services/systemInfo.service.ts:18 #: src/podkop/services/systemInfo.service.ts:19 -#: src/podkop/tabs/updates/initController.ts:174 +#: src/podkop/tabs/updates/initController.ts:187 msgid "unknown" msgstr "" @@ -1923,11 +1925,11 @@ msgstr "" msgid "Unknown NFQWS flag." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1616 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1620 msgid "Unsupported security mode for this protocol" msgstr "" -#: src/podkop/tabs/updates/initController.ts:133 +#: src/podkop/tabs/updates/initController.ts:146 msgid "Update is available" msgstr "" @@ -1936,7 +1938,7 @@ msgstr "" msgid "Update subscriptions" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:191 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:192 msgid "Updates" msgstr "" @@ -1945,12 +1947,8 @@ msgstr "" msgid "Uplink" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1249 -msgid "Upload" -msgstr "" - -#: src/podkop/tabs/monitoring/initController.ts:641 -#: src/podkop/tabs/monitoring/initController.ts:693 +#: src/podkop/tabs/monitoring/initController.ts:695 +#: src/podkop/tabs/monitoring/initController.ts:747 msgid "Uploaded" msgstr "" @@ -1974,30 +1972,30 @@ msgstr "" msgid "URLTest URL" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1471 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1477 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1558 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1475 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1481 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1562 msgid "Use a domain name or IPv4 address" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1543 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1547 msgid "Use a duration like 30s, 5m, or 1h30m" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2269 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2273 msgid "Use a non-negative integer" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1530 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1532 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1534 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1536 msgid "Use an HTTP or HTTPS URL" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1484 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1488 msgid "Use an IPv4 listen address" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1590 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1594 msgid "Use CIDR prefixes like 192.168.1.0/24" msgstr "" @@ -2006,7 +2004,7 @@ msgstr "" msgid "Use format: URL | User-Agent" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1564 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1568 msgid "Use letters, digits, dots, underscores, or hyphens" msgstr "" @@ -2021,7 +2019,7 @@ msgstr "" msgid "Use sing-box duration format like 1d, 12h or 30m" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2228 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2232 msgid "Username" msgstr "" @@ -2033,7 +2031,7 @@ msgstr "" #: src/validators/validateDns.ts:18 #: src/validators/validateDomain.ts:13 #: src/validators/validateDomain.ts:30 -#: src/validators/validateHysteriaUrl.ts:113 +#: src/validators/validateHysteriaUrl.ts:144 #: src/validators/validateIp.ts:8 #: src/validators/validateOutboundJson.ts:7 #: src/validators/validatePath.ts:16 @@ -2052,11 +2050,11 @@ msgstr "" msgid "Validation errors:" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1440 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1444 msgid "Value must not contain control characters" msgstr "" -#: src/podkop/tabs/updates/initController.ts:467 +#: src/podkop/tabs/updates/initController.ts:515 msgid "Version" msgstr "" @@ -2069,7 +2067,7 @@ msgstr "" msgid "Visible name of this section" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2272 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2276 msgid "VLESS flow" msgstr "" diff --git a/fe-app-podkop/locales/podkop_plus.ru.po b/fe-app-podkop/locales/podkop_plus.ru.po index 5952ad43..b1cfb1a9 100644 --- a/fe-app-podkop/locales/podkop_plus.ru.po +++ b/fe-app-podkop/locales/podkop_plus.ru.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PODKOP PLUS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-29 05:03+0300\n" -"PO-Revision-Date: 2026-05-29 05:03+0300\n" +"POT-Creation-Date: 2026-05-29 21:05+0300\n" +"PO-Revision-Date: 2026-05-29 21:05+0300\n" "Last-Translator: ushan0v\n" "Language-Team: none\n" "Language: ru\n" @@ -26,12 +26,12 @@ msgstr "✔ Работает" msgid "✘ Stopped" msgstr "✘ Остановлен" -msgid "Accept routes" -msgstr "Принимать маршруты" - msgid "Accept external proxy connections and route them with sing-box." msgstr "Принимает внешние прокси-подключения и маршрутизирует их через sing-box." +msgid "Accept routes" +msgstr "Принимать маршруты" + msgid "Action" msgstr "Действие" @@ -59,6 +59,9 @@ msgstr "Добавляйте URL или локальные пути к спис msgid "Additional marking rules found" msgstr "Найдены дополнительные правила маркировки" +msgid "Address" +msgstr "Адрес" + msgid "Advertise exit node" msgstr "Анонсировать exit node" @@ -201,7 +204,7 @@ msgid "CIDR must be between 0 and 32" msgstr "CIDR должен быть между 0 и 32" msgid "Client fingerprint" -msgstr "Client fingerprint" +msgstr "Отпечаток клиента" msgid "Client link" msgstr "Ссылка клиента" @@ -233,9 +236,6 @@ msgstr "Путь к файлу конфигурации" msgid "Configuration for Podkop Plus service" msgstr "Настройки сервиса Podkop Plus" -msgid "Connection statistics are unavailable" -msgstr "Статистика подключений недоступна" - msgid "Connection URL" msgstr "URL подключения" @@ -264,7 +264,7 @@ msgid "Delay value cannot be empty" msgstr "Значение задержки не может быть пустым" msgid "Delete" -msgstr "" +msgstr "Удалить" msgid "Detect server country" msgstr "Определять страну сервера" @@ -461,6 +461,9 @@ msgstr "Полностью маршрутизированные IP-адреса" msgid "Get global check" msgstr "Получить глобальную проверку" +msgid "GitHub release" +msgstr "Релиз на GitHub" + msgid "Global check" msgstr "Глобальная проверка" @@ -1110,7 +1113,7 @@ msgid "Server name" msgstr "Имя сервера" msgid "Server name / SNI" -msgstr "Server name / SNI" +msgstr "Имя сервера / SNI" msgid "Servers" msgstr "Серверы" @@ -1379,9 +1382,6 @@ msgstr "Обновления" msgid "Uplink" msgstr "Исходящий" -msgid "Upload" -msgstr "Загрузка" - msgid "Uploaded" msgstr "Отдано" diff --git a/fe-app-podkop/src/main.ts b/fe-app-podkop/src/main.ts index 92b9d7d7..2f3162e8 100644 --- a/fe-app-podkop/src/main.ts +++ b/fe-app-podkop/src/main.ts @@ -18,6 +18,7 @@ export { validateOutboundJson } from './validators/validateOutboundJson'; export { validateProxyUrl } from './validators/validateProxyUrl'; export { parseValueList } from './helpers/parseValueList'; export { injectGlobalStyles } from './helpers/injectGlobalStyles'; +export { showToast } from './helpers/showToast'; export { getClashUIUrl } from './helpers/getClashApiUrl'; export { PodkopShellMethods } from './podkop/methods/shell'; export { coreService } from './podkop/services/core.service'; diff --git a/fe-app-podkop/src/podkop/services/store.service.ts b/fe-app-podkop/src/podkop/services/store.service.ts index 6d358811..a0c415ce 100644 --- a/fe-app-podkop/src/podkop/services/store.service.ts +++ b/fe-app-podkop/src/podkop/services/store.service.ts @@ -220,6 +220,7 @@ export interface StoreType { { status: 'latest' | 'outdated' | 'dev' | null; latest_version: string; + release_url: string; } >; } diff --git a/fe-app-podkop/src/podkop/tabs/diagnostic/diagnostic.store.ts b/fe-app-podkop/src/podkop/tabs/diagnostic/diagnostic.store.ts index a70f74c4..9eab169d 100644 --- a/fe-app-podkop/src/podkop/tabs/diagnostic/diagnostic.store.ts +++ b/fe-app-podkop/src/podkop/tabs/diagnostic/diagnostic.store.ts @@ -124,9 +124,9 @@ export const initialDiagnosticStore: Pick< byedpiRemove: { loading: false }, }, updatesChecks: { - podkop: { status: null, latest_version: '' }, - sing_box: { status: null, latest_version: '' }, - zapret: { status: null, latest_version: '' }, - byedpi: { status: null, latest_version: '' }, + podkop: { status: null, latest_version: '', release_url: '' }, + sing_box: { status: null, latest_version: '', release_url: '' }, + zapret: { status: null, latest_version: '', release_url: '' }, + byedpi: { status: null, latest_version: '', release_url: '' }, }, }; diff --git a/fe-app-podkop/src/podkop/tabs/updates/initController.ts b/fe-app-podkop/src/podkop/tabs/updates/initController.ts index 552391a9..809ce5be 100644 --- a/fe-app-podkop/src/podkop/tabs/updates/initController.ts +++ b/fe-app-podkop/src/podkop/tabs/updates/initController.ts @@ -28,6 +28,7 @@ interface ComponentActionButton { interface ComponentCard { title: string; version: string; + releaseUrl?: string; tag?: { label: string; kind: 'neutral' | 'success' | 'warning'; @@ -77,6 +78,16 @@ function getInstallActionText(component: Podkop.ComponentName) { return _('Install'); } +function getGitHubReleaseUrl(component: Podkop.ComponentName) { + const checkResult = store.get().updatesChecks[component]; + + if (!shouldShowInstallAfterCheck(component) || !checkResult.release_url) { + return undefined; + } + + return checkResult.release_url; +} + function isAnyActionLoading() { return Object.values(store.get().updatesActions).some((item) => item.loading); } @@ -102,6 +113,7 @@ function setCheckResult( component: Podkop.ComponentName, status: UpdateStatus, latestVersion: string, + releaseUrl: string = '', ) { const updatesChecks = store.get().updatesChecks; @@ -111,6 +123,7 @@ function setCheckResult( [component]: { status, latest_version: latestVersion, + release_url: releaseUrl, }, }, }); @@ -248,7 +261,12 @@ async function handleComponentAction(button: ComponentActionButton) { const status = result.status || null; if (status === 'latest' || status === 'outdated' || status === 'dev') { - setCheckResult(button.component, status, result.latest_version || ''); + setCheckResult( + button.component, + status, + result.latest_version || '', + result.release_url || '', + ); } setActionLoading(button.key, false); @@ -336,6 +354,7 @@ function getComponentCards(): ComponentCard[] { { title: 'Podkop Plus', version: normalizeCompiledVersion(systemInfo.podkop_version), + releaseUrl: getGitHubReleaseUrl('podkop'), tag: getCheckTag('podkop'), actions: [ getPrimaryUpdateAction('podkop', 'podkopCheck', 'podkopInstall'), @@ -346,6 +365,7 @@ function getComponentCards(): ComponentCard[] { version: isNotInstalled(systemInfo.sing_box_version) ? _('Not installed') : systemInfo.sing_box_version, + releaseUrl: getGitHubReleaseUrl('sing_box'), tag: getCheckTag('sing_box'), actions: [ getPrimaryUpdateAction( @@ -363,6 +383,7 @@ function getComponentCards(): ComponentCard[] { : zapretInstalled ? systemInfo.zapret_version : _('Not installed'), + releaseUrl: getGitHubReleaseUrl('zapret'), tag: zapretInstalled ? getCheckTag('zapret') : undefined, actions: zapretInstalled ? [ @@ -392,6 +413,7 @@ function getComponentCards(): ComponentCard[] { : byedpiInstalled ? systemInfo.byedpi_version : _('Not installed'), + releaseUrl: getGitHubReleaseUrl('byedpi'), tag: byedpiInstalled ? getCheckTag('byedpi') : undefined, actions: byedpiInstalled ? [ @@ -449,9 +471,35 @@ function renderComponentCard(card: ComponentCard) { const headerChildren: Node[] = [ E('b', { class: 'pdk_updates-page__component__title' }, card.title), ]; + const statusChildren: Node[] = []; + + if (card.releaseUrl) { + statusChildren.push( + E( + 'a', + { + class: 'pdk_updates-page__component__release-link', + href: card.releaseUrl, + target: '_blank', + rel: 'noopener noreferrer', + }, + _('GitHub release'), + ), + ); + } if (tag) { - headerChildren.push(tag); + statusChildren.push(tag); + } + + if (statusChildren.length > 0) { + headerChildren.push( + E( + 'div', + { class: 'pdk_updates-page__component__status' }, + statusChildren, + ), + ); } return E('div', { class: 'pdk_updates-page__component' }, [ diff --git a/fe-app-podkop/src/podkop/tabs/updates/styles.ts b/fe-app-podkop/src/podkop/tabs/updates/styles.ts index bb3a50b5..25fe1a0b 100644 --- a/fe-app-podkop/src/podkop/tabs/updates/styles.ts +++ b/fe-app-podkop/src/podkop/tabs/updates/styles.ts @@ -50,6 +50,14 @@ export const styles = ` overflow-wrap: anywhere; } +.pdk_updates-page__component__status { + display: inline-flex; + align-items: center; + justify-content: flex-end; + gap: 6px; + flex: 0 0 auto; +} + .pdk_updates-page__component__version { display: grid; grid-template-columns: auto 1fr; @@ -95,4 +103,11 @@ export const styles = ` .pdk_updates-page__component__actions > .pdk-partial-button { margin-left: 0; } + +.pdk_updates-page__component__release-link { + font-size: 11px; + line-height: 1.2; + text-align: right; + white-space: nowrap; +} `; diff --git a/fe-app-podkop/src/podkop/types.ts b/fe-app-podkop/src/podkop/types.ts index ece2695d..f3e3c1a1 100644 --- a/fe-app-podkop/src/podkop/types.ts +++ b/fe-app-podkop/src/podkop/types.ts @@ -301,6 +301,7 @@ export namespace Podkop { message: string; current_version: string; latest_version: string; + release_url?: string; changed: boolean; status?: 'latest' | 'outdated' | 'dev' | ''; exit_code?: number | null; diff --git a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/main.js b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/main.js index cc20fa33..57fa9712 100644 --- a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/main.js +++ b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/main.js @@ -3062,10 +3062,10 @@ var initialDiagnosticStore = { byedpiRemove: { loading: false } }, updatesChecks: { - podkop: { status: null, latest_version: "" }, - sing_box: { status: null, latest_version: "" }, - zapret: { status: null, latest_version: "" }, - byedpi: { status: null, latest_version: "" } + podkop: { status: null, latest_version: "", release_url: "" }, + sing_box: { status: null, latest_version: "", release_url: "" }, + zapret: { status: null, latest_version: "", release_url: "" }, + byedpi: { status: null, latest_version: "", release_url: "" } } }; @@ -8553,6 +8553,13 @@ function getInstallActionText(component) { } return _("Install"); } +function getGitHubReleaseUrl(component) { + const checkResult = store.get().updatesChecks[component]; + if (!shouldShowInstallAfterCheck(component) || !checkResult.release_url) { + return void 0; + } + return checkResult.release_url; +} function isAnyActionLoading() { return Object.values(store.get().updatesActions).some((item) => item.loading); } @@ -8569,14 +8576,15 @@ function setActionLoading(action, loading2) { } }); } -function setCheckResult(component, status, latestVersion) { +function setCheckResult(component, status, latestVersion, releaseUrl = "") { const updatesChecks = store.get().updatesChecks; store.set({ updatesChecks: { ...updatesChecks, [component]: { status, - latest_version: latestVersion + latest_version: latestVersion, + release_url: releaseUrl } } }); @@ -8683,7 +8691,12 @@ async function handleComponentAction(button) { if (button.action === "check_update") { const status = result.status || null; if (status === "latest" || status === "outdated" || status === "dev") { - setCheckResult(button.component, status, result.latest_version || ""); + setCheckResult( + button.component, + status, + result.latest_version || "", + result.release_url || "" + ); } setActionLoading(button.key, false); showToast(getCheckToastMessage(status), "success"); @@ -8753,6 +8766,7 @@ function getComponentCards() { { title: "Podkop Plus", version: normalizeCompiledVersion(systemInfo.podkop_version), + releaseUrl: getGitHubReleaseUrl("podkop"), tag: getCheckTag("podkop"), actions: [ getPrimaryUpdateAction("podkop", "podkopCheck", "podkopInstall") @@ -8761,6 +8775,7 @@ function getComponentCards() { { title: "Sing-box", version: isNotInstalled(systemInfo.sing_box_version) ? _("Not installed") : systemInfo.sing_box_version, + releaseUrl: getGitHubReleaseUrl("sing_box"), tag: getCheckTag("sing_box"), actions: [ getPrimaryUpdateAction( @@ -8774,6 +8789,7 @@ function getComponentCards() { { title: "Zapret", version: systemInfoLoading ? "loading" : zapretInstalled ? systemInfo.zapret_version : _("Not installed"), + releaseUrl: getGitHubReleaseUrl("zapret"), tag: zapretInstalled ? getCheckTag("zapret") : void 0, actions: zapretInstalled ? [ getPrimaryUpdateAction("zapret", "zapretCheck", "zapretInstall"), @@ -8797,6 +8813,7 @@ function getComponentCards() { { title: "ByeDPI", version: systemInfoLoading ? "loading" : byedpiInstalled ? systemInfo.byedpi_version : _("Not installed"), + releaseUrl: getGitHubReleaseUrl("byedpi"), tag: byedpiInstalled ? getCheckTag("byedpi") : void 0, actions: byedpiInstalled ? [ getPrimaryUpdateAction("byedpi", "byedpiCheck", "byedpiInstall"), @@ -8843,8 +8860,32 @@ function renderComponentCard(card) { const headerChildren = [ E("b", { class: "pdk_updates-page__component__title" }, card.title) ]; + const statusChildren = []; + if (card.releaseUrl) { + statusChildren.push( + E( + "a", + { + class: "pdk_updates-page__component__release-link", + href: card.releaseUrl, + target: "_blank", + rel: "noopener noreferrer" + }, + _("GitHub release") + ) + ); + } if (tag) { - headerChildren.push(tag); + statusChildren.push(tag); + } + if (statusChildren.length > 0) { + headerChildren.push( + E( + "div", + { class: "pdk_updates-page__component__status" }, + statusChildren + ) + ); } return E("div", { class: "pdk_updates-page__component" }, [ E( @@ -8985,6 +9026,14 @@ var styles6 = ` overflow-wrap: anywhere; } +.pdk_updates-page__component__status { + display: inline-flex; + align-items: center; + justify-content: flex-end; + gap: 6px; + flex: 0 0 auto; +} + .pdk_updates-page__component__version { display: grid; grid-template-columns: auto 1fr; @@ -9030,6 +9079,13 @@ var styles6 = ` .pdk_updates-page__component__actions > .pdk-partial-button { margin-left: 0; } + +.pdk_updates-page__component__release-link { + font-size: 11px; + line-height: 1.2; + text-align: right; + white-space: nowrap; +} `; // src/podkop/tabs/updates/index.ts @@ -9236,6 +9292,7 @@ return baseclass.extend({ getClashUIUrl, injectGlobalStyles, parseValueList, + showToast, store, validateDNS, validateDomain, diff --git a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js index 256e46d6..67a4569a 100644 --- a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js +++ b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js @@ -440,18 +440,34 @@ function injectServerStyles() { .pdk-server-icon-button{box-sizing:border-box;vertical-align:middle} .pdk-server-icon-button__glyph{display:inline-block;line-height:1;transform:scale(1.55);transform-origin:center} .pdk-server-icon-button--done{outline:2px solid var(--success-color,#37a969);outline-offset:1px} -.pdk-server-qr-modal{display:flex;justify-content:center;padding:12px} -.pdk-server-qr-modal__image{width:260px;height:260px;max-width:80vw;max-height:80vw;image-rendering:pixelated} -.pdk-server-info-modal{display:flex;flex-direction:column;gap:14px;min-width:min(560px,86vw)} -.pdk-server-info-modal__block{display:flex;flex-direction:column;gap:8px} -.pdk-server-info-modal__link-row{display:flex;gap:8px;align-items:flex-start} -.pdk-server-info-modal__link{min-height:5.2em;resize:vertical} .pdk-server-validation-summary{margin:0 0 12px} #cbi-${UCI_PACKAGE}-server > h3:nth-child(1){display:none} #cbi-${UCI_PACKAGE}-server > .cbi-section-remove{margin-bottom:-32px} #cbi-${UCI_PACKAGE}-server .cbi-section-actions > div{display:inline-flex;align-items:center;gap:4px} #cbi-${UCI_PACKAGE}-server .cbi-section-actions{text-align:right} -@media (max-width:720px){.pdk-server-info-modal__link-row{flex-direction:column}.pdk-server-info-modal__link-row .btn{align-self:flex-start}} + +.pdk-server-info-modal{display:flex;flex-direction:column;gap:14px;width:560px;max-width:100%;box-sizing:border-box} +.pdk-server-info-modal__container{display:flex;gap:24px;align-items:flex-start;width:100%;box-sizing:border-box} +.pdk-server-info-modal__qr-col{display:flex;flex-direction:column;align-items:center;gap:12px;flex-shrink:0;width:180px} +.pdk-server-info-modal__qr-image{width:180px;height:180px;display:block;image-rendering:pixelated} +.pdk-server-info-modal__details-col{display:flex;flex-direction:column;gap:16px;flex-grow:1;min-width:0;box-sizing:border-box} +.pdk-server-info-modal__details-grid{display:flex;flex-direction:column;gap:10px;background:rgba(128,128,128,0.08);padding:14px;border:1px solid rgba(128,128,128,0.15);box-sizing:border-box} +.pdk-server-info-modal__detail-item{display:flex;justify-content:space-between;align-items:center;gap:16px} +.pdk-server-info-modal__detail-label{font-size:11px;opacity:0.65;text-transform:uppercase;letter-spacing:0.05em;font-weight:700} +.pdk-server-info-modal__detail-value{font-size:13px;font-weight:500} +.pdk-server-info-modal__detail-value--title{font-weight:600} +.pdk-server-info-modal__detail-value--mono{font-family:monospace;font-size:12px;background:rgba(128,128,128,0.12);padding:2px 6px;border-radius:4px;word-break:break-all} +.pdk-server-info-modal__badge{display:inline-flex;align-items:center;padding:2px 8px;font-size:11px;font-weight:600;border-radius:4px;border:1px solid var(--border-color,rgba(128,128,128,0.25));background:rgba(128,128,128,0.08);line-height:1.2} +.pdk-server-info-modal__link-section{display:flex;flex-direction:column;gap:8px;box-sizing:border-box} +.pdk-server-info-modal__link{width:100% !important;max-width:100% !important;font-family:monospace;font-size:11px;padding:8px 10px;resize:none;min-height:54px;box-sizing:border-box;margin:0 !important;line-height:1.4;word-break:break-all;float:none !important;position:static !important;border-radius:0 !important;background-color:transparent !important} +.pdk-server-info-modal__copy-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;align-self:flex-start;padding:3px 10px !important;font-size:11px !important;height:auto !important;min-height:24px !important;float:none !important;position:static !important;margin:0 !important} + +@media (max-width:640px){ +.pdk-server-info-modal{width:100%} +.pdk-server-info-modal__container{flex-direction:column;align-items:center;gap:20px} +.pdk-server-info-modal__qr-col{width:100%;max-width:180px} +.pdk-server-info-modal__details-col{width:100%} +} `, ), ); @@ -1142,6 +1158,12 @@ function iconSvg(name) { ]); } + if (name === "check") { + return svgEl("svg", attrs, [ + svgEl("polyline", { points: "20 6 9 17 4 12" }), + ]); + } + if (name === "info") { return svgEl("svg", attrs, [ svgEl("circle", { cx: "12", cy: "12", r: "10" }), @@ -1160,27 +1182,21 @@ function iconSvg(name) { ]); } -function markButtonDone(button) { - if (!button) { - return; - } - - button.classList.add("pdk-server-icon-button--done"); - window.setTimeout(() => { - button.classList.remove("pdk-server-icon-button--done"); - }, 700); -} - -function copyText(text, button) { +function copyText(text) { const textarea = document.createElement("textarea"); textarea.value = text; + textarea.style.position = "fixed"; + textarea.style.top = "0"; + textarea.style.left = "0"; + textarea.style.opacity = "0"; document.body.appendChild(textarea); textarea.select(); try { document.execCommand("copy"); - markButtonDone(button); + main.showToast(_("Successfully copied!"), "success"); } catch (error) { + main.showToast(_("Failed to copy!"), "error"); console.warn("Failed to copy server client link", error); } @@ -1195,41 +1211,108 @@ function renderInfoClientLink(sectionId) { } const qr = qrSvgDataUri(link); + const protocol = getProtocol(sectionId); + const security = getEffectiveSecurity(sectionId); + const host = getPublicHost(sectionId); + const port = uci.get(UCI_PACKAGE, sectionId, "listen_port") || ""; + const name = getServerName(sectionId); - return E("div", { class: "pdk-server-info-modal__block" }, [ - E("strong", {}, _("Client link QR code")), - E("div", { class: "pdk-server-qr-modal" }, [ + const securitySuffix = + security && security !== "none" ? ` + ${getSecurityLabel(security)}` : ""; + const protocolText = `${getProtocolLabel(protocol)}${securitySuffix}`; + + return E("div", { class: "pdk-server-info-modal__container" }, [ + // Left column: QR code + E("div", { class: "pdk-server-info-modal__qr-col" }, [ qr ? E("img", { - class: "pdk-server-qr-modal__image", + class: "pdk-server-info-modal__qr-image", src: qr, alt: _("Client link QR code"), }) : E("em", {}, _("QR code is too large")), ]), - E("strong", {}, _("Client link")), - E("div", { class: "pdk-server-info-modal__link-row" }, [ - E( - "textarea", - { - class: "cbi-input-textarea pdk-server-info-modal__link", - readonly: "readonly", - rows: 3, - }, - link, - ), - E( - "button", - { - class: "btn cbi-button cbi-button-neutral", - type: "button", - click: (ev) => { - ev.preventDefault(); - copyText(link, ev.currentTarget); + + // Right column: Details and Copy Box + E("div", { class: "pdk-server-info-modal__details-col" }, [ + E("div", { class: "pdk-server-info-modal__details-grid" }, [ + E("div", { class: "pdk-server-info-modal__detail-item" }, [ + E( + "span", + { class: "pdk-server-info-modal__detail-label" }, + _("Server name"), + ), + E( + "span", + { + class: + "pdk-server-info-modal__detail-value pdk-server-info-modal__detail-value--title", + }, + name, + ), + ]), + E("div", { class: "pdk-server-info-modal__detail-item" }, [ + E( + "span", + { class: "pdk-server-info-modal__detail-label" }, + _("Type"), + ), + E( + "span", + { + class: + "pdk-server-info-modal__detail-value pdk-server-info-modal__badge", + }, + protocolText, + ), + ]), + E("div", { class: "pdk-server-info-modal__detail-item" }, [ + E( + "span", + { class: "pdk-server-info-modal__detail-label" }, + _("Address"), + ), + E( + "span", + { + class: + "pdk-server-info-modal__detail-value pdk-server-info-modal__detail-value--mono", + }, + `${host}:${port}`, + ), + ]), + ]), + + E("div", { class: "pdk-server-info-modal__link-section" }, [ + E( + "span", + { class: "pdk-server-info-modal__detail-label" }, + _("Client link"), + ), + E( + "textarea", + { + class: "cbi-input-textarea pdk-server-info-modal__link", + readonly: "readonly", + rows: 3, + click: (ev) => ev.currentTarget.select(), }, - }, - [iconSvg("copy"), " ", _("Copy")], - ), + link, + ), + E( + "button", + { + class: + "btn cbi-button cbi-button-neutral pdk-server-info-modal__copy-btn", + type: "button", + click: (ev) => { + ev.preventDefault(); + copyText(link); + }, + }, + [iconSvg("copy"), " ", E("span", {}, _("Copy"))], + ), + ]), ]), ]); } diff --git a/luci-app-podkop-plus/po/ru/podkop_plus.po b/luci-app-podkop-plus/po/ru/podkop_plus.po index 5952ad43..b1cfb1a9 100644 --- a/luci-app-podkop-plus/po/ru/podkop_plus.po +++ b/luci-app-podkop-plus/po/ru/podkop_plus.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PODKOP PLUS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-29 05:03+0300\n" -"PO-Revision-Date: 2026-05-29 05:03+0300\n" +"POT-Creation-Date: 2026-05-29 21:05+0300\n" +"PO-Revision-Date: 2026-05-29 21:05+0300\n" "Last-Translator: ushan0v\n" "Language-Team: none\n" "Language: ru\n" @@ -26,12 +26,12 @@ msgstr "✔ Работает" msgid "✘ Stopped" msgstr "✘ Остановлен" -msgid "Accept routes" -msgstr "Принимать маршруты" - msgid "Accept external proxy connections and route them with sing-box." msgstr "Принимает внешние прокси-подключения и маршрутизирует их через sing-box." +msgid "Accept routes" +msgstr "Принимать маршруты" + msgid "Action" msgstr "Действие" @@ -59,6 +59,9 @@ msgstr "Добавляйте URL или локальные пути к спис msgid "Additional marking rules found" msgstr "Найдены дополнительные правила маркировки" +msgid "Address" +msgstr "Адрес" + msgid "Advertise exit node" msgstr "Анонсировать exit node" @@ -201,7 +204,7 @@ msgid "CIDR must be between 0 and 32" msgstr "CIDR должен быть между 0 и 32" msgid "Client fingerprint" -msgstr "Client fingerprint" +msgstr "Отпечаток клиента" msgid "Client link" msgstr "Ссылка клиента" @@ -233,9 +236,6 @@ msgstr "Путь к файлу конфигурации" msgid "Configuration for Podkop Plus service" msgstr "Настройки сервиса Podkop Plus" -msgid "Connection statistics are unavailable" -msgstr "Статистика подключений недоступна" - msgid "Connection URL" msgstr "URL подключения" @@ -264,7 +264,7 @@ msgid "Delay value cannot be empty" msgstr "Значение задержки не может быть пустым" msgid "Delete" -msgstr "" +msgstr "Удалить" msgid "Detect server country" msgstr "Определять страну сервера" @@ -461,6 +461,9 @@ msgstr "Полностью маршрутизированные IP-адреса" msgid "Get global check" msgstr "Получить глобальную проверку" +msgid "GitHub release" +msgstr "Релиз на GitHub" + msgid "Global check" msgstr "Глобальная проверка" @@ -1110,7 +1113,7 @@ msgid "Server name" msgstr "Имя сервера" msgid "Server name / SNI" -msgstr "Server name / SNI" +msgstr "Имя сервера / SNI" msgid "Servers" msgstr "Серверы" @@ -1379,9 +1382,6 @@ msgstr "Обновления" msgid "Uplink" msgstr "Исходящий" -msgid "Upload" -msgstr "Загрузка" - msgid "Uploaded" msgstr "Отдано" diff --git a/luci-app-podkop-plus/po/templates/podkop_plus.pot b/luci-app-podkop-plus/po/templates/podkop_plus.pot index 4742644d..ee8e9e8e 100644 --- a/luci-app-podkop-plus/po/templates/podkop_plus.pot +++ b/luci-app-podkop-plus/po/templates/podkop_plus.pot @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PODKOP PLUS\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-05-29 02:03+0300\n" -"PO-Revision-Date: 2026-05-29 02:03+0300\n" +"POT-Creation-Date: 2026-05-29 18:05+0300\n" +"PO-Revision-Date: 2026-05-29 18:05+0300\n" "Last-Translator: ushan0v \n" "Language-Team: LANGUAGE \n" "Language: \n" @@ -31,21 +31,20 @@ msgstr "" msgid "✘ Stopped" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2372 -msgid "Accept routes" -msgstr "" - #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:130 msgid "Accept external proxy connections and route them with sing-box." msgstr "" +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2376 +msgid "Accept routes" +msgstr "" + #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2492 #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2524 msgid "Action" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1248 -#: src/podkop/tabs/monitoring/initController.ts:501 +#: src/podkop/tabs/monitoring/initController.ts:555 #: src/podkop/tabs/monitoring/render.ts:20 msgid "Active" msgstr "" @@ -58,7 +57,7 @@ msgstr "" msgid "Add a section" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:135 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:136 msgid "Add a server inbound" msgstr "" @@ -78,15 +77,19 @@ msgstr "" msgid "Additional marking rules found" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2355 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1273 +msgid "Address" +msgstr "" + +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2359 msgid "Advertise exit node" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2365 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2369 msgid "Advertise routes" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:464 +#: src/podkop/tabs/monitoring/initController.ts:518 #: src/podkop/tabs/monitoring/render.ts:39 msgid "All" msgstr "" @@ -107,11 +110,11 @@ msgstr "" msgid "Allows limiting the list of servers for URLTest" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2051 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2055 msgid "ALPN" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2260 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2264 msgid "Alter ID" msgstr "" @@ -240,15 +243,15 @@ msgstr "" msgid "Cannot receive checks result" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1737 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1741 msgid "Cannot save server" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2061 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2065 msgid "Certificate path" msgstr "" -#: src/podkop/tabs/updates/initController.ts:306 +#: src/podkop/tabs/updates/initController.ts:324 msgid "Check update" msgstr "" @@ -290,27 +293,26 @@ msgstr "" msgid "CIDR must be between 0 and 32" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2159 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2163 msgid "Client fingerprint" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1293 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1290 msgid "Client link" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1277 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1210 msgid "Client link is not available yet" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1283 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1289 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1231 msgid "Client link QR code" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1339 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1335 #: src/partials/modal/renderModal.ts:195 -#: src/podkop/tabs/monitoring/initController.ts:645 -#: src/podkop/tabs/monitoring/initController.ts:695 +#: src/podkop/tabs/monitoring/initController.ts:699 +#: src/podkop/tabs/monitoring/initController.ts:749 msgid "Close" msgstr "" @@ -319,12 +321,12 @@ msgstr "" msgid "Close all connections" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:612 -#: src/podkop/tabs/monitoring/initController.ts:613 +#: src/podkop/tabs/monitoring/initController.ts:666 +#: src/podkop/tabs/monitoring/initController.ts:667 msgid "Close connection" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:507 +#: src/podkop/tabs/monitoring/initController.ts:561 #: src/podkop/tabs/monitoring/render.ts:29 msgid "Closed" msgstr "" @@ -341,19 +343,15 @@ msgstr "" msgid "Configuration for Podkop Plus service" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1262 -msgid "Connection statistics are unavailable" -msgstr "" - #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2619 msgid "Connection URL" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:748 +#: src/podkop/tabs/monitoring/initController.ts:802 msgid "Connections are unavailable" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1314 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1313 #: src/partials/modal/renderModal.ts:190 msgid "Copy" msgstr "" @@ -367,7 +365,7 @@ msgstr "" msgid "Currently unavailable" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:167 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:168 msgid "Dashboard" msgstr "" @@ -383,7 +381,7 @@ msgstr "" msgid "Delay value cannot be empty" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1355 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1351 msgid "Delete" msgstr "" @@ -391,7 +389,7 @@ msgstr "" msgid "Detect server country" msgstr "" -#: src/podkop/tabs/updates/initController.ts:61 +#: src/podkop/tabs/updates/initController.ts:62 msgid "Dev" msgstr "" @@ -404,12 +402,11 @@ msgstr "" msgid "DHCP has DNS server" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:155 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:156 msgid "Diagnostics" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1984 -#: src/podkop/tabs/monitoring/initController.ts:119 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1988 msgid "Direct" msgstr "" @@ -496,7 +493,6 @@ msgstr "" msgid "Downlink" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1250 #: src/partials/modal/renderModal.ts:185 msgid "Download" msgstr "" @@ -513,8 +509,8 @@ msgstr "" msgid "Download lists/updates/subscriptions via Proxy/VPN" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:638 #: src/podkop/tabs/monitoring/initController.ts:692 +#: src/podkop/tabs/monitoring/initController.ts:746 msgid "Downloaded" msgstr "" @@ -529,12 +525,12 @@ msgid "Duplicate value" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:68 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1348 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1344 msgid "Edit rule action" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2482 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1900 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1904 msgid "Enable" msgstr "" @@ -622,24 +618,25 @@ msgstr "" msgid "External nfqws config files bypass Podkop Plus queue management and explicit validation." msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:1010 -#: src/podkop/tabs/monitoring/initController.ts:1025 +#: src/podkop/tabs/monitoring/initController.ts:1064 +#: src/podkop/tabs/monitoring/initController.ts:1079 msgid "Failed to close connection" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:1044 -#: src/podkop/tabs/monitoring/initController.ts:1057 +#: src/podkop/tabs/monitoring/initController.ts:1098 +#: src/podkop/tabs/monitoring/initController.ts:1111 msgid "Failed to close connections" msgstr "" +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1199 #: src/helpers/copyToClipboard.ts:12 msgid "Failed to copy!" msgstr "" #: src/podkop/methods/shell/index.ts:97 #: src/podkop/methods/shell/index.ts:273 -#: src/podkop/tabs/updates/initController.ts:241 -#: src/podkop/tabs/updates/initController.ts:285 +#: src/podkop/tabs/updates/initController.ts:254 +#: src/podkop/tabs/updates/initController.ts:303 msgid "Failed to execute" msgstr "" @@ -648,12 +645,12 @@ msgstr "" msgid "Failed to update subscriptions" msgstr "" -#: src/podkop/methods/custom/getDashboardSections.ts:259 +#: src/podkop/methods/custom/getDashboardSections.ts:307 #: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:93 msgid "Fastest" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1738 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1742 msgid "Fix the highlighted fields and save again." msgstr "" @@ -665,11 +662,15 @@ msgstr "" msgid "Get global check" msgstr "" +#: src/podkop/tabs/updates/initController.ts:490 +msgid "GitHub release" +msgstr "" + #: src/podkop/tabs/diagnostic/initController.ts:415 msgid "Global check" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2211 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2215 msgid "gRPC service" msgstr "" @@ -677,8 +678,8 @@ msgstr "" msgid "Hide filtered servers" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:628 -#: src/podkop/tabs/monitoring/initController.ts:688 +#: src/podkop/tabs/monitoring/initController.ts:682 +#: src/podkop/tabs/monitoring/initController.ts:742 msgid "Host" msgstr "" @@ -686,7 +687,7 @@ msgstr "" msgid "HTTP error" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2204 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2208 msgid "HTTP hosts" msgstr "" @@ -702,29 +703,29 @@ msgstr "" msgid "Include server in URLTest" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1356 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1352 msgid "Information" msgstr "" -#: src/podkop/tabs/updates/initController.ts:77 -#: src/podkop/tabs/updates/initController.ts:381 -#: src/podkop/tabs/updates/initController.ts:410 +#: src/podkop/tabs/updates/initController.ts:78 +#: src/podkop/tabs/updates/initController.ts:402 +#: src/podkop/tabs/updates/initController.ts:432 msgid "Install" msgstr "" -#: src/podkop/tabs/updates/initController.ts:74 +#: src/podkop/tabs/updates/initController.ts:75 msgid "Install %s" msgstr "" -#: src/podkop/tabs/updates/initController.ts:329 +#: src/podkop/tabs/updates/initController.ts:347 msgid "Install extended" msgstr "" -#: src/podkop/tabs/updates/initController.ts:322 +#: src/podkop/tabs/updates/initController.ts:340 msgid "Install stable" msgstr "" -#: src/podkop/tabs/updates/initController.ts:137 +#: src/podkop/tabs/updates/initController.ts:150 msgid "Installed version is newer than release" msgstr "" @@ -757,11 +758,11 @@ msgstr "" msgid "Invalid format. Use X.X.X.X or X.X.X.X/Y" msgstr "" -#: src/validators/validateHysteriaUrl.ts:76 +#: src/validators/validateHysteriaUrl.ts:107 msgid "Invalid HY2 URL: insecure must be 0 or 1" msgstr "" -#: src/validators/validateHysteriaUrl.ts:62 +#: src/validators/validateHysteriaUrl.ts:93 msgid "Invalid HY2 URL: invalid port number" msgstr "" @@ -793,19 +794,19 @@ msgstr "" msgid "Invalid HY2 URL: must start with hysteria2:// or hy2://" msgstr "" -#: src/validators/validateHysteriaUrl.ts:99 +#: src/validators/validateHysteriaUrl.ts:130 msgid "Invalid HY2 URL: obfs-password required when obfs is set" msgstr "" -#: src/validators/validateHysteriaUrl.ts:115 +#: src/validators/validateHysteriaUrl.ts:146 msgid "Invalid HY2 URL: parsing failed" msgstr "" -#: src/validators/validateHysteriaUrl.ts:108 +#: src/validators/validateHysteriaUrl.ts:139 msgid "Invalid HY2 URL: sni cannot be empty" msgstr "" -#: src/validators/validateHysteriaUrl.ts:88 +#: src/validators/validateHysteriaUrl.ts:119 msgid "Invalid HY2 URL: unsupported obfs type" msgstr "" @@ -948,7 +949,7 @@ msgstr "" msgid "JSON outbound" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2076 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2080 msgid "Key path" msgstr "" @@ -956,11 +957,11 @@ msgstr "" msgid "Keyword must not contain spaces" msgstr "" -#: src/podkop/tabs/updates/initController.ts:54 +#: src/podkop/tabs/updates/initController.ts:55 msgid "Latest" msgstr "" -#: src/podkop/tabs/updates/initController.ts:140 +#: src/podkop/tabs/updates/initController.ts:153 msgid "Latest version is installed" msgstr "" @@ -972,16 +973,15 @@ msgstr "" msgid "List Update Frequency" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1956 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1960 msgid "Listen address" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1963 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1967 msgid "Listen port" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1255 -#: src/podkop/tabs/monitoring/initController.ts:738 +#: src/podkop/tabs/monitoring/initController.ts:792 #: src/podkop/tabs/monitoring/render.ts:88 msgid "Loading connections" msgstr "" @@ -1030,7 +1030,7 @@ msgstr "" msgid "Memory Usage" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2218 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2222 msgid "Method" msgstr "" @@ -1050,7 +1050,7 @@ msgstr "" msgid "Monitored Interfaces" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:179 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:180 msgid "Monitoring" msgstr "" @@ -1078,11 +1078,11 @@ msgstr "" msgid "NFQWS strategy cannot be empty" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:762 +#: src/podkop/tabs/monitoring/initController.ts:816 msgid "No active connections" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:763 +#: src/podkop/tabs/monitoring/initController.ts:817 msgid "No closed connections" msgstr "" @@ -1099,9 +1099,9 @@ msgid "No rules use Zapret" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:427 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2006 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2273 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2282 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2010 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2277 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2286 msgid "None" msgstr "" @@ -1109,9 +1109,9 @@ msgstr "" msgid "Not implement yet" msgstr "" -#: src/podkop/tabs/updates/initController.ts:347 -#: src/podkop/tabs/updates/initController.ts:365 -#: src/podkop/tabs/updates/initController.ts:394 +#: src/podkop/tabs/updates/initController.ts:366 +#: src/podkop/tabs/updates/initController.ts:385 +#: src/podkop/tabs/updates/initController.ts:415 msgid "Not installed" msgstr "" @@ -1128,11 +1128,11 @@ msgstr "" msgid "Not running" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2281 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2285 msgid "Obfuscation" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2304 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2308 msgid "Obfuscation password" msgstr "" @@ -1177,7 +1177,7 @@ msgstr "" msgid "Outbound JSON cannot be empty" msgstr "" -#: src/podkop/tabs/updates/initController.ts:58 +#: src/podkop/tabs/updates/initController.ts:59 msgid "Outdated" msgstr "" @@ -1185,7 +1185,7 @@ msgstr "" msgid "Output Network Interface" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2244 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2248 msgid "Password" msgstr "" @@ -1209,7 +1209,7 @@ msgstr "" msgid "Path must end with cache.db" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:520 +#: src/podkop/tabs/monitoring/initController.ts:574 #: src/podkop/tabs/monitoring/render.ts:70 #: src/podkop/tabs/monitoring/render.ts:71 msgid "Pause updates" @@ -1239,7 +1239,7 @@ msgstr "" msgid "Podkop Plus manages the nfqws process lifecycle itself, so daemon mode is not allowed here." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1983 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1987 msgid "Podkop Plus rules" msgstr "" @@ -1288,7 +1288,7 @@ msgid "Port for the local mixed proxy of this section" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1336 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1416 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1420 msgid "Port must be between 1 and 65535" msgstr "" @@ -1300,8 +1300,8 @@ msgstr "" msgid "Ports" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1906 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1940 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1910 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1944 msgid "Protocol" msgstr "" @@ -1317,39 +1317,39 @@ msgstr "" msgid "Proxy traffic is routed via FakeIP" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1970 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1974 msgid "Public host" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1291 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1233 msgid "QR code is too large" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2094 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2098 msgid "Reality fake site" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2105 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2109 msgid "Reality fake site port" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2148 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2152 msgid "Reality max time difference" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2116 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2120 msgid "Reality private key" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2123 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2127 msgid "Reality public key" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2129 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2133 msgid "Reality short ID" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1604 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1608 msgid "Reality short ID must contain 1-8 hex digits" msgstr "" @@ -1361,8 +1361,8 @@ msgstr "" msgid "Regional options cannot be used together" msgstr "" -#: src/podkop/tabs/updates/initController.ts:372 -#: src/podkop/tabs/updates/initController.ts:401 +#: src/podkop/tabs/updates/initController.ts:393 +#: src/podkop/tabs/updates/initController.ts:423 msgid "Remove" msgstr "" @@ -1394,12 +1394,12 @@ msgstr "" msgid "Restart Podkop Plus" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:520 +#: src/podkop/tabs/monitoring/initController.ts:574 msgid "Resume updates" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:632 -#: src/podkop/tabs/monitoring/initController.ts:690 +#: src/podkop/tabs/monitoring/initController.ts:686 +#: src/podkop/tabs/monitoring/initController.ts:744 msgid "Route" msgstr "" @@ -1407,11 +1407,11 @@ msgstr "" msgid "Routing Excluded IPs" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1982 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1986 msgid "Routing mode" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1991 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1995 msgid "Routing section" msgstr "" @@ -1479,7 +1479,7 @@ msgstr "" msgid "Sections" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2003 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2007 msgid "Security" msgstr "" @@ -1539,11 +1539,11 @@ msgstr "" msgid "Select the WAN interfaces to be monitored" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1985 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1989 msgid "Selected section" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:134 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:135 msgid "Server" msgstr "" @@ -1551,15 +1551,16 @@ msgstr "" msgid "Server filtering for URLTest" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1328 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1322 msgid "Server information" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1917 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1243 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1921 msgid "Server name" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2032 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2036 msgid "Server name / SNI" msgstr "" @@ -1583,7 +1584,7 @@ msgstr "" msgid "Services info" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:143 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:144 #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2479 msgid "Settings" msgstr "" @@ -1629,8 +1630,8 @@ msgstr "" msgid "Sing-box version is compatible (newer than 1.12.4)" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:644 -#: src/podkop/tabs/monitoring/initController.ts:694 +#: src/podkop/tabs/monitoring/initController.ts:698 +#: src/podkop/tabs/monitoring/initController.ts:748 msgid "Source" msgstr "" @@ -1642,12 +1643,12 @@ msgstr "" msgid "Source Network Interface" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1497 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1501 msgid "Specify a file path" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1508 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1520 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1512 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1524 msgid "Specify different files" msgstr "" @@ -1719,6 +1720,7 @@ msgstr "" msgid "Subscription URL cannot be empty" msgstr "" +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1197 #: src/helpers/copyToClipboard.ts:10 msgid "Successfully copied!" msgstr "" @@ -1735,15 +1737,15 @@ msgstr "" msgid "Table exist" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2320 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2324 msgid "Tailscale auth key" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2329 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2333 msgid "Tailscale control URL" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2337 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2341 msgid "Tailscale hostname" msgstr "" @@ -1772,11 +1774,11 @@ msgstr "" msgid "There are rules using Zapret" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1431 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1436 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1491 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1595 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2267 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1435 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1440 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1495 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1599 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2271 msgid "This field is required" msgstr "" @@ -1800,8 +1802,8 @@ msgstr "" msgid "This option requires a value." msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:635 -#: src/podkop/tabs/monitoring/initController.ts:691 +#: src/podkop/tabs/monitoring/initController.ts:689 +#: src/podkop/tabs/monitoring/initController.ts:745 msgid "Time" msgstr "" @@ -1809,7 +1811,6 @@ msgstr "" msgid "Time in seconds for DNS record caching (default: 60)" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1268 #: src/podkop/tabs/dashboard/initController.ts:474 #: src/podkop/tabs/dashboard/partials/renderSections.ts:216 msgid "Traffic" @@ -1823,19 +1824,19 @@ msgstr "" msgid "Transparent proxy mode is incompatible with action=byedpi because Podkop Plus connects to ciadpi through SOCKS." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2170 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2174 msgid "Transport" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2194 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2198 msgid "Transport host" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2181 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2185 msgid "Transport path" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1549 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1553 msgid "Transport path must start with /" msgstr "" @@ -1851,8 +1852,9 @@ msgstr "" msgid "TTL value cannot be empty" msgstr "" -#: src/podkop/tabs/monitoring/initController.ts:629 -#: src/podkop/tabs/monitoring/initController.ts:689 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1258 +#: src/podkop/tabs/monitoring/initController.ts:683 +#: src/podkop/tabs/monitoring/initController.ts:743 msgid "Type" msgstr "" @@ -1901,7 +1903,7 @@ msgstr "" #: src/podkop/services/systemInfo.service.ts:16 #: src/podkop/services/systemInfo.service.ts:18 #: src/podkop/services/systemInfo.service.ts:19 -#: src/podkop/tabs/updates/initController.ts:174 +#: src/podkop/tabs/updates/initController.ts:187 msgid "unknown" msgstr "" @@ -1923,11 +1925,11 @@ msgstr "" msgid "Unknown NFQWS flag." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1616 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1620 msgid "Unsupported security mode for this protocol" msgstr "" -#: src/podkop/tabs/updates/initController.ts:133 +#: src/podkop/tabs/updates/initController.ts:146 msgid "Update is available" msgstr "" @@ -1936,7 +1938,7 @@ msgstr "" msgid "Update subscriptions" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:191 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:192 msgid "Updates" msgstr "" @@ -1945,12 +1947,8 @@ msgstr "" msgid "Uplink" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1249 -msgid "Upload" -msgstr "" - -#: src/podkop/tabs/monitoring/initController.ts:641 -#: src/podkop/tabs/monitoring/initController.ts:693 +#: src/podkop/tabs/monitoring/initController.ts:695 +#: src/podkop/tabs/monitoring/initController.ts:747 msgid "Uploaded" msgstr "" @@ -1974,30 +1972,30 @@ msgstr "" msgid "URLTest URL" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1471 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1477 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1558 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1475 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1481 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1562 msgid "Use a domain name or IPv4 address" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1543 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1547 msgid "Use a duration like 30s, 5m, or 1h30m" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2269 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2273 msgid "Use a non-negative integer" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1530 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1532 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1534 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1536 msgid "Use an HTTP or HTTPS URL" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1484 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1488 msgid "Use an IPv4 listen address" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1590 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1594 msgid "Use CIDR prefixes like 192.168.1.0/24" msgstr "" @@ -2006,7 +2004,7 @@ msgstr "" msgid "Use format: URL | User-Agent" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1564 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1568 msgid "Use letters, digits, dots, underscores, or hyphens" msgstr "" @@ -2021,7 +2019,7 @@ msgstr "" msgid "Use sing-box duration format like 1d, 12h or 30m" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2228 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2232 msgid "Username" msgstr "" @@ -2033,7 +2031,7 @@ msgstr "" #: src/validators/validateDns.ts:18 #: src/validators/validateDomain.ts:13 #: src/validators/validateDomain.ts:30 -#: src/validators/validateHysteriaUrl.ts:113 +#: src/validators/validateHysteriaUrl.ts:144 #: src/validators/validateIp.ts:8 #: src/validators/validateOutboundJson.ts:7 #: src/validators/validatePath.ts:16 @@ -2052,11 +2050,11 @@ msgstr "" msgid "Validation errors:" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1440 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:1444 msgid "Value must not contain control characters" msgstr "" -#: src/podkop/tabs/updates/initController.ts:467 +#: src/podkop/tabs/updates/initController.ts:515 msgid "Version" msgstr "" @@ -2069,7 +2067,7 @@ msgstr "" msgid "Visible name of this section" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2272 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/server.js:2276 msgid "VLESS flow" msgstr "" diff --git a/podkop/files/usr/bin/podkop b/podkop/files/usr/bin/podkop index 6f1eaa8c..b101d4e6 100755 --- a/podkop/files/usr/bin/podkop +++ b/podkop/files/usr/bin/podkop @@ -8778,8 +8778,8 @@ show_sing_box_version() { echo "$version" } -fetch_latest_podkop_version() { - local owner repo response tag +fetch_latest_podkop_release_json() { + local owner repo owner="${PODKOP_RELEASE_REPO%%/*}" repo="${PODKOP_RELEASE_REPO#*/}" @@ -8787,7 +8787,13 @@ fetch_latest_podkop_version() { [ -n "$repo" ] || return 1 [ "$owner" != "$repo" ] || return 1 - response="$(updates_fetch_github_release_json "$owner" "$repo")" || return 1 + updates_fetch_github_release_json "$owner" "$repo" +} + +fetch_latest_podkop_version() { + local response tag + + response="$(fetch_latest_podkop_release_json)" || return 1 tag="$(printf '%s' "$response" | json_utils_ucode object-get-default tag_name "" 2>/dev/null)" [ -n "$tag" ] || return 1 diff --git a/podkop/files/usr/lib/json_utils.uc b/podkop/files/usr/lib/json_utils.uc index 14a80d28..06695dff 100644 --- a/podkop/files/usr/lib/json_utils.uc +++ b/podkop/files/usr/lib/json_utils.uc @@ -355,7 +355,7 @@ function select_byedpi_asset_from_release(release, asset_ext, arch_candidates) { let name = as_string(asset.name || ""); let url = as_string(asset.browser_download_url || ""); if (url != "" && byedpi_asset_matches(name, arch, asset_ext)) { - print(arch, "\t", name, "\t", url, "\n"); + print(arch, "\t", name, "\t", url, "\t", as_string(release.html_url || ""), "\n"); return true; } } diff --git a/podkop/files/usr/lib/updater.sh b/podkop/files/usr/lib/updater.sh index a53f3f80..eb9ca023 100644 --- a/podkop/files/usr/lib/updater.sh +++ b/podkop/files/usr/lib/updater.sh @@ -9,12 +9,15 @@ UPDATES_ZAPRET_BUNDLE_NAME="" UPDATES_ZAPRET_PACKAGE_FILE="" UPDATES_ZAPRET_PACKAGE_NAME="" UPDATES_ZAPRET_PACKAGE_VERSION="" +UPDATES_ZAPRET_RELEASE_URL="" UPDATES_BYEDPI_ARCH="" UPDATES_BYEDPI_PACKAGE_URL="" UPDATES_BYEDPI_PACKAGE_NAME="" UPDATES_BYEDPI_PACKAGE_FILE="" UPDATES_BYEDPI_PACKAGE_VERSION="" +UPDATES_BYEDPI_RELEASE_URL="" UPDATES_PODKOP_BACKEND_URL="" +UPDATES_PODKOP_RELEASE_URL="" UPDATES_PODKOP_BACKEND_NAME="" UPDATES_PODKOP_BACKEND_FILE="" UPDATES_PODKOP_APP_URL="" @@ -24,6 +27,7 @@ UPDATES_PODKOP_I18N_URL="" UPDATES_PODKOP_I18N_NAME="" UPDATES_PODKOP_I18N_FILE="" UPDATES_SING_BOX_EXTENDED_RELEASE_TAG="" +UPDATES_SING_BOX_EXTENDED_RELEASE_URL="" UPDATES_SING_BOX_EXTENDED_ARCH_SUFFIX="" UPDATES_SING_BOX_EXTENDED_ASSET_URL="" UPDATES_SING_BOX_EXTENDED_ASSET_NAME="" @@ -117,6 +121,7 @@ updates_json_response() { local latest_version="${6:-}" local changed="${7:-0}" local status="${8:-}" + local release_url="${9:-}" json_utils_ucode object-json \ success b "$success" \ @@ -126,7 +131,8 @@ updates_json_response() { current_version s "$current_version" \ latest_version s "$latest_version" \ changed n "$changed" \ - status s "$status" + status s "$status" \ + release_url s "$release_url" } updates_success() { @@ -759,8 +765,9 @@ updates_check_success() { local component="$1" local current_version="$2" local latest_version="$3" + local release_url="${4:-}" - updates_check_success_compared "$component" "$current_version" "$latest_version" "$current_version" "$latest_version" + updates_check_success_compared "$component" "$current_version" "$latest_version" "$current_version" "$latest_version" "$release_url" } updates_check_success_compared() { @@ -769,6 +776,7 @@ updates_check_success_compared() { local latest_version="$3" local compare_current_version="$4" local compare_latest_version="$5" + local release_url="${6:-}" local compare_result status message compare_result="$(updates_compare_versions "$compare_current_version" "$compare_latest_version" 2>/dev/null || true)" @@ -791,7 +799,18 @@ updates_check_success_compared() { ;; esac - updates_success "$component" "check_update" "$message" "$current_version" "$latest_version" 0 "$status" + updates_success "$component" "check_update" "$message" "$current_version" "$latest_version" 0 "$status" "$release_url" +} + +updates_fetch_podkop_latest_release_metadata() { + local release_json tag release_url + + release_json="$(fetch_latest_podkop_release_json)" || return 1 + tag="$(printf '%s' "$release_json" | json_utils_ucode object-get-default tag_name "" 2>/dev/null)" + [ -n "$tag" ] || return 1 + release_url="$(printf '%s' "$release_json" | json_utils_ucode object-get-default html_url "" 2>/dev/null)" + + printf '%s\t%s\n' "$tag" "$release_url" } updates_ensure_package_tool() { @@ -1037,6 +1056,7 @@ updates_resolve_podkop_plus_release() { local owner repo asset_ext release_json release_tag UPDATES_PODKOP_BACKEND_URL="" + UPDATES_PODKOP_RELEASE_URL="" UPDATES_PODKOP_BACKEND_NAME="" UPDATES_PODKOP_APP_URL="" UPDATES_PODKOP_APP_NAME="" @@ -1056,6 +1076,7 @@ updates_resolve_podkop_plus_release() { [ -n "$release_json" ] || return 1 release_tag="$(printf '%s' "$release_json" | json_utils_ucode object-get-default tag_name "" 2>/dev/null)" [ "$release_tag" = "$latest_version" ] || return 1 + UPDATES_PODKOP_RELEASE_URL="$(printf '%s' "$release_json" | json_utils_ucode object-get-default html_url "" 2>/dev/null)" UPDATES_PODKOP_BACKEND_NAME="$(updates_select_release_asset_name "$release_json" "podkop-plus" "$asset_ext")" UPDATES_PODKOP_APP_NAME="$(updates_select_release_asset_name "$release_json" "luci-app-podkop-plus" "$asset_ext")" @@ -1111,8 +1132,10 @@ updates_resolve_zapret_release() { UPDATES_ZAPRET_BUNDLE_URL="" UPDATES_ZAPRET_BUNDLE_NAME="" UPDATES_ZAPRET_PACKAGE_VERSION="" + UPDATES_ZAPRET_RELEASE_URL="" release_json="$(updates_fetch_github_release_json "remittor" "zapret-openwrt")" || return 1 + UPDATES_ZAPRET_RELEASE_URL="$(printf '%s' "$release_json" | json_utils_ucode object-get-default html_url "" 2>/dev/null)" for arch in $UPDATES_ARCH_CANDIDATES; do candidate_name="$(printf '%s' "$release_json" | json_utils_ucode release-asset-name-by-suffix "_${arch}.zip" 2>/dev/null)" @@ -1168,6 +1191,7 @@ updates_resolve_byedpi_release() { UPDATES_BYEDPI_PACKAGE_URL="" UPDATES_BYEDPI_PACKAGE_NAME="" UPDATES_BYEDPI_PACKAGE_VERSION="" + UPDATES_BYEDPI_RELEASE_URL="" asset_ext="ipk" updates_is_apk && asset_ext="apk" @@ -1182,6 +1206,7 @@ updates_resolve_byedpi_release() { UPDATES_BYEDPI_ARCH="$(printf '%s\n' "$resolved" | cut -f1)" UPDATES_BYEDPI_PACKAGE_NAME="$(printf '%s\n' "$resolved" | cut -f2)" UPDATES_BYEDPI_PACKAGE_URL="$(printf '%s\n' "$resolved" | cut -f3)" + UPDATES_BYEDPI_RELEASE_URL="$(printf '%s\n' "$resolved" | cut -f4)" [ -n "$UPDATES_BYEDPI_ARCH" ] || return 1 [ -n "$UPDATES_BYEDPI_PACKAGE_NAME" ] || return 1 @@ -1229,7 +1254,7 @@ updates_install_zapret() { [ "$installed" -eq 1 ] || updates_fail "zapret" "$action" "zapret is not installed" "$current_version" "$UPDATES_ZAPRET_PACKAGE_VERSION" normalized_current="$(updates_normalize_zapret_version "$current_version")" normalized_latest="$(updates_normalize_zapret_version "$UPDATES_ZAPRET_PACKAGE_VERSION")" - updates_check_success_compared "zapret" "$current_version" "$UPDATES_ZAPRET_PACKAGE_VERSION" "$normalized_current" "$normalized_latest" + updates_check_success_compared "zapret" "$current_version" "$UPDATES_ZAPRET_PACKAGE_VERSION" "$normalized_current" "$normalized_latest" "$UPDATES_ZAPRET_RELEASE_URL" fi updates_ensure_package_tool "unzip" "unzip" || updates_fail "zapret" "$action" "Failed to install unzip" @@ -1262,7 +1287,7 @@ updates_install_byedpi() { if [ "$action" = "check_update" ]; then [ "$installed" -eq 1 ] || updates_fail "byedpi" "$action" "ByeDPI is not installed" "$current_version" "$UPDATES_BYEDPI_PACKAGE_VERSION" - updates_check_success "byedpi" "$current_version" "$UPDATES_BYEDPI_PACKAGE_VERSION" + updates_check_success "byedpi" "$current_version" "$UPDATES_BYEDPI_PACKAGE_VERSION" "$UPDATES_BYEDPI_RELEASE_URL" fi updates_download_byedpi_package || updates_fail "byedpi" "$action" "Failed to download ByeDPI package" @@ -1364,6 +1389,7 @@ updates_resolve_sing_box_extended_release() { local response tag release_json asset_pattern UPDATES_SING_BOX_EXTENDED_RELEASE_TAG="" + UPDATES_SING_BOX_EXTENDED_RELEASE_URL="" UPDATES_SING_BOX_EXTENDED_ASSET_URL="" UPDATES_SING_BOX_EXTENDED_ASSET_NAME="" @@ -1375,6 +1401,7 @@ updates_resolve_sing_box_extended_release() { [ -n "$tag" ] || return 1 UPDATES_SING_BOX_EXTENDED_RELEASE_TAG="$tag" release_json="$(printf '%s' "$response" | json_utils_ucode release-by-tag "$tag" 2>/dev/null)" + UPDATES_SING_BOX_EXTENDED_RELEASE_URL="$(printf '%s' "$release_json" | json_utils_ucode object-get-default html_url "" 2>/dev/null)" asset_pattern="linux-${UPDATES_SING_BOX_EXTENDED_ARCH_SUFFIX}.tar.gz" UPDATES_SING_BOX_EXTENDED_ASSET_URL="$(printf '%s' "$release_json" | json_utils_ucode release-asset-url-by-suffix "$asset_pattern" 2>/dev/null)" @@ -1395,7 +1422,7 @@ updates_install_sing_box_extended() { if [ "$action" = "check_update" ]; then is_sing_box_extended "$current_version" || updates_fail "sing_box" "$action" "sing-box-extended is not installed" "$current_version" "$latest_version" - updates_check_success "sing_box" "$normalized_current" "$normalized_latest" + updates_check_success "sing_box" "$normalized_current" "$normalized_latest" "$UPDATES_SING_BOX_EXTENDED_RELEASE_URL" fi archive_file="$UPDATES_TMP_DIR/$UPDATES_SING_BOX_EXTENDED_ASSET_NAME" @@ -1474,9 +1501,11 @@ updates_install_stable_sing_box() { } updates_check_podkop_plus() { - local latest_version compare_result status message now + local release_metadata latest_version release_url compare_result status message now - latest_version="$(fetch_latest_podkop_version)" + release_metadata="$(updates_fetch_podkop_latest_release_metadata 2>/dev/null || true)" + latest_version="$(printf '%s\n' "$release_metadata" | cut -f1)" + release_url="$(printf '%s\n' "$release_metadata" | cut -f2)" [ -n "$latest_version" ] || latest_version="unknown" if [ "$latest_version" = "unknown" ]; then @@ -1491,7 +1520,7 @@ updates_check_podkop_plus() { if ! is_podkop_release_version "$PODKOP_VERSION"; then updates_log "Podkop Plus current version is not a release version ($PODKOP_VERSION)" - updates_success "podkop" "check_update" "Installed version is newer than release" "$PODKOP_VERSION" "$latest_version" 0 "dev" + updates_success "podkop" "check_update" "Installed version is newer than release" "$PODKOP_VERSION" "$latest_version" 0 "dev" "$release_url" fi compare_result="$(podkop_release_version_compare "$PODKOP_VERSION" "$latest_version" 2>/dev/null || true)" @@ -1515,7 +1544,7 @@ updates_check_podkop_plus() { ;; esac - updates_success "podkop" "check_update" "$message" "$PODKOP_VERSION" "$latest_version" 0 "$status" + updates_success "podkop" "check_update" "$message" "$PODKOP_VERSION" "$latest_version" 0 "$status" "$release_url" } updates_install_podkop_plus() { @@ -1562,7 +1591,7 @@ updates_install_podkop_plus() { new_version="$(updates_get_installed_package_version "podkop-plus")" [ -n "$new_version" ] || new_version="$latest_version" updates_log "Podkop Plus updated to $new_version" - updates_success "podkop" "install" "Podkop Plus has been installed" "$new_version" "$latest_version" 1 "latest" + updates_success "podkop" "install" "Podkop Plus has been installed" "$new_version" "$latest_version" 1 "latest" "$UPDATES_PODKOP_RELEASE_URL" } component_action() {