From 820fa6a1c5b3867b5a548788e66728a6aa9f777e Mon Sep 17 00:00:00 2001 From: ushan0v Date: Sun, 12 Apr 2026 03:38:06 +0300 Subject: [PATCH] Make podkop-plus coexist cleanly with the original podkop --- fe-app-podkop/distribute-locales.js | 8 +- fe-app-podkop/generate-po.js | 2 +- fe-app-podkop/generate-pot.js | 2 +- fe-app-podkop/locales/calls.json | 372 ++++++++--------- .../locales/{podkop.pot => podkop_plus.pot} | 376 +++++++++--------- .../{podkop.ru.po => podkop_plus.ru.po} | 4 +- fe-app-podkop/src/constants.ts | 5 + .../methods/custom/getConfigSections.ts | 5 +- .../src/podkop/tabs/dashboard/styles.ts | 6 +- .../src/podkop/tabs/diagnostic/styles.ts | 6 +- fe-app-podkop/src/styles.ts | 33 +- fe-app-podkop/watch-upload.js | 2 +- install.sh | 156 ++++++-- luci-app-podkop-plus/Makefile | 11 +- .../resources/view/podkop/dashboard.js | 2 +- .../resources/view/podkop/diagnostic.js | 2 +- .../luci-static/resources/view/podkop/main.js | 278 ++++++------- .../luci-static/resources/view/podkop/node.js | 2 +- .../resources/view/podkop/podkop.js | 25 +- .../resources/view/podkop/ruleset.js | 6 +- .../resources/view/podkop/section.js | 38 +- .../resources/view/podkop/settings.js | 8 +- luci-app-podkop-plus/msgmerge.sh | 6 +- .../po/ru/{podkop.po => podkop_plus.po} | 4 +- .../templates/{podkop.pot => podkop_plus.pot} | 376 +++++++++--------- .../luci/menu.d/luci-app-podkop-plus.json | 4 +- .../rpcd/acl.d/luci-app-podkop-plus.json | 4 +- luci-app-podkop-plus/xgettext.sh | 4 +- podkop/files/etc/init.d/podkop | 2 +- podkop/files/usr/bin/podkop | 57 ++- podkop/files/usr/lib/constants.sh | 6 +- podkop/files/usr/lib/zapret.sh | 13 +- scripts/build-openwrt-packages-wsl.sh | 22 +- scripts/dev-deploy-openwrt.ps1 | 55 ++- 34 files changed, 1016 insertions(+), 886 deletions(-) rename fe-app-podkop/locales/{podkop.pot => podkop_plus.pot} (92%) rename fe-app-podkop/locales/{podkop.ru.po => podkop_plus.ru.po} (99%) rename luci-app-podkop-plus/po/ru/{podkop.po => podkop_plus.po} (99%) rename luci-app-podkop-plus/po/templates/{podkop.pot => podkop_plus.pot} (92%) diff --git a/fe-app-podkop/distribute-locales.js b/fe-app-podkop/distribute-locales.js index b55b492d..dd6e287c 100644 --- a/fe-app-podkop/distribute-locales.js +++ b/fe-app-podkop/distribute-locales.js @@ -14,17 +14,17 @@ async function main() { for (const file of files) { const filePath = path.join(sourceDir, file); - if (file === 'podkop.pot') { - const potTarget = path.join(targetRoot, 'templates', 'podkop.pot'); + if (file === 'podkop_plus.pot') { + const potTarget = path.join(targetRoot, 'templates', 'podkop_plus.pot'); await fs.mkdir(path.dirname(potTarget), { recursive: true }); await fs.copyFile(filePath, potTarget); console.log(`✅ Copied POT: ${filePath} → ${potTarget}`); } - const match = file.match(/^podkop\.([a-zA-Z_]+)\.po$/); + const match = file.match(/^podkop_plus\.([a-zA-Z_]+)\.po$/); if (match) { const lang = match[1]; - const poTarget = path.join(targetRoot, lang, 'podkop.po'); + const poTarget = path.join(targetRoot, lang, 'podkop_plus.po'); await fs.mkdir(path.dirname(poTarget), { recursive: true }); await fs.copyFile(filePath, poTarget); console.log(`✅ Copied ${lang.toUpperCase()}: ${filePath} → ${poTarget}`); diff --git a/fe-app-podkop/generate-po.js b/fe-app-podkop/generate-po.js index f0d9951c..945179c9 100644 --- a/fe-app-podkop/generate-po.js +++ b/fe-app-podkop/generate-po.js @@ -8,7 +8,7 @@ if (!lang) { } const callsPath = 'locales/calls.json'; -const poPath = `locales/podkop.${lang}.po`; +const poPath = `locales/podkop_plus.${lang}.po`; function getGitUser() { try { diff --git a/fe-app-podkop/generate-pot.js b/fe-app-podkop/generate-pot.js index 96913ee4..389ceac5 100644 --- a/fe-app-podkop/generate-pot.js +++ b/fe-app-podkop/generate-pot.js @@ -2,7 +2,7 @@ import fs from 'fs/promises'; import { execSync } from 'child_process'; const inputFile = 'locales/calls.json'; -const outputFile = 'locales/podkop.pot'; +const outputFile = 'locales/podkop_plus.pot'; const projectId = 'PODKOP PLUS'; function getGitUser() { diff --git a/fe-app-podkop/locales/calls.json b/fe-app-podkop/locales/calls.json index 64ae4e4b..84c6e446 100644 --- a/fe-app-podkop/locales/calls.json +++ b/fe-app-podkop/locales/calls.json @@ -35,7 +35,7 @@ "call": "A latency-tested group of proxy URLs for this section", "key": "A latency-tested group of proxy URLs for this section", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1700" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1702" ] }, { @@ -49,15 +49,15 @@ "call": "A manual group of proxy URLs for this section", "key": "A manual group of proxy URLs for this section", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1682" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1684" ] }, { "call": "Action", "key": "Action", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1524", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1556" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1526", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1558" ] }, { @@ -71,14 +71,14 @@ "call": "Add a section", "key": "Add a section", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:384" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:387" ] }, { "call": "Add URLs or local paths to .srs lists", "key": "Add URLs or local paths to .srs lists", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2084" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2086" ] }, { @@ -92,14 +92,14 @@ "call": "Allows access to YACD from the WAN. Make sure to open the appropriate port in your firewall.", "key": "Allows access to YACD from the WAN. Make sure to open the appropriate port in your firewall.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:247" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:249" ] }, { "call": "An error occurred while saving the form:", "key": "An error occurred while saving the form:", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:139" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:142" ] }, { @@ -107,21 +107,21 @@ "key": "Applicable for SOCKS and Shadowsocks links", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:170", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1795" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1797" ] }, { "call": "At least one valid domain must be specified.", "key": "At least one valid domain must be specified.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:834" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:836" ] }, { "call": "At least one valid IP or subnet must be specified.", "key": "At least one valid IP or subnet must be specified.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:845" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:847" ] }, { @@ -142,14 +142,14 @@ "call": "Backend validation failed: %s", "key": "Backend validation failed: %s", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:936" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:938" ] }, { "call": "Binary file", "key": "Binary file", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:21" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:23" ] }, { @@ -163,7 +163,7 @@ "call": "Bootstrap DNS server", "key": "Bootstrap DNS server", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:45" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:47" ] }, { @@ -184,21 +184,21 @@ "call": "Built-in rule sets", "key": "Built-in rule sets", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1989" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1991" ] }, { "call": "Cache File Path", "key": "Cache File Path", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:352" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:354" ] }, { "call": "Cache file path cannot be empty", "key": "Cache file path cannot be empty", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:366" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:368" ] }, { @@ -271,35 +271,35 @@ "call": "Conditions", "key": "Conditions", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1512" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1514" ] }, { "call": "Config File Path", "key": "Config File Path", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:339" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:341" ] }, { "call": "Configuration for Podkop Plus service", "key": "Configuration for Podkop Plus service", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:370" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:373" ] }, { "call": "Connection", "key": "Connection", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1637" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1639" ] }, { "call": "Connection Type", "key": "Connection Type", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1620" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1622" ] }, { @@ -307,7 +307,7 @@ "key": "Connection URL", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:19", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1623" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1625" ] }, { @@ -328,7 +328,7 @@ "call": "Dashboard", "key": "Dashboard", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:415" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:418" ] }, { @@ -342,14 +342,14 @@ "call": "Delay in milliseconds before reloading Podkop Plus after interface UP", "key": "Delay in milliseconds before reloading Podkop Plus after interface UP", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:222" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:224" ] }, { "call": "Delay value cannot be empty", "key": "Delay value cannot be empty", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:229" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:231" ] }, { @@ -363,15 +363,15 @@ "call": "Diagnostics", "key": "Diagnostics", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:403" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:406" ] }, { "call": "Direct", "key": "Direct", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:64", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:71" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:66", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:73" ] }, { @@ -385,21 +385,21 @@ "call": "Disable QUIC", "key": "Disable QUIC", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:265" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:267" ] }, { "call": "Disable the QUIC protocol to improve compatibility or fix issues with video streaming", "key": "Disable the QUIC protocol to improve compatibility or fix issues with video streaming", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:266" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:268" ] }, { "call": "Dismiss", "key": "Dismiss", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:146" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:149" ] }, { @@ -414,8 +414,8 @@ "key": "DNS over HTTPS (DoH)", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:227", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1860", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:15" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1862", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:17" ] }, { @@ -423,15 +423,15 @@ "key": "DNS over TLS (DoT)", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:228", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1861", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:16" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1863", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:18" ] }, { "call": "DNS protocol", "key": "DNS protocol", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1858" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1860" ] }, { @@ -445,21 +445,21 @@ "call": "DNS Protocol Type", "key": "DNS Protocol Type", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:12" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:14" ] }, { "call": "DNS Rewrite TTL", "key": "DNS Rewrite TTL", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:68" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:70" ] }, { "call": "DNS server", "key": "DNS server", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1876" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1878" ] }, { @@ -467,7 +467,7 @@ "key": "DNS Server", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:238", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:24" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:26" ] }, { @@ -488,28 +488,28 @@ "call": "Domain keyword", "key": "Domain keyword", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1959" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1961" ] }, { "call": "Domain regex", "key": "Domain regex", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1966" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1968" ] }, { "call": "Domains", "key": "Domains", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1931" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1933" ] }, { "call": "Dont Touch My DHCP!", "key": "Dont Touch My DHCP!", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:330" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:332" ] }, { @@ -531,51 +531,51 @@ "call": "Download external rule sets through one of the enabled proxy sections", "key": "Download external rule sets through one of the enabled proxy sections", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:298" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:300" ] }, { "call": "Download Lists via Proxy/VPN", "key": "Download Lists via Proxy/VPN", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:288" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:290" ] }, { "call": "Download Lists via specific proxy section", "key": "Download Lists via specific proxy section", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:297" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:299" ] }, { "call": "Download Node", "key": "Download Node", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:61" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:63" ] }, { "call": "Downloading all lists via specific Proxy/VPN", "key": "Downloading all lists via specific Proxy/VPN", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:289" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:291" ] }, { "call": "Drag rows to change priority. The rule at the top is checked first.", "key": "Drag rows to change priority. The rule at the top is checked first.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:378" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:381" ] }, { "call": "Duplicate value", "key": "Duplicate value", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:367", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:382", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:402" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:369", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:384", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:404" ] }, { @@ -583,8 +583,8 @@ "key": "Enable", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:8", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:8", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1514" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:10", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1516" ] }, { @@ -598,7 +598,7 @@ "call": "Enable a dedicated DNS resolver when this section uses an interface", "key": "Enable a dedicated DNS resolver when this section uses an interface", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1847" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1849" ] }, { @@ -612,28 +612,28 @@ "call": "Enable Mixed Proxy", "key": "Enable Mixed Proxy", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1898" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1900" ] }, { "call": "Enable Output Network Interface", "key": "Enable Output Network Interface", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:126" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:128" ] }, { "call": "Enable YACD", "key": "Enable YACD", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:237" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:239" ] }, { "call": "Enable YACD WAN Access", "key": "Enable YACD WAN Access", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:246" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:248" ] }, { @@ -641,7 +641,7 @@ "key": "Enter a complete sing-box outbound object", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:52", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1660" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1662" ] }, { @@ -649,7 +649,7 @@ "key": "Every 3 minutes", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:103", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1721" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1723" ] }, { @@ -657,7 +657,7 @@ "key": "Every 30 seconds", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:101", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1719" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1721" ] }, { @@ -665,7 +665,7 @@ "key": "Every 5 minutes", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:104", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1722" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1724" ] }, { @@ -673,49 +673,49 @@ "key": "Every minute", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:102", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1720" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1722" ] }, { "call": "Exact full domain", "key": "Exact full domain", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1945" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1947" ] }, { "call": "Exclude NTP", "key": "Exclude NTP", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:406" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:408" ] }, { "call": "Exclude NTP protocol traffic from the tunnel to prevent it from being routed through the proxy or VPN", "key": "Exclude NTP protocol traffic from the tunnel to prevent it from being routed through the proxy or VPN", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:407" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:409" ] }, { "call": "Expecting: %s", "key": "Expecting: %s", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:42" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:45" ] }, { "call": "Expose this section as a local HTTP+SOCKS proxy", "key": "Expose this section as a local HTTP+SOCKS proxy", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1899" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1901" ] }, { "call": "External nfqws config files bypass Podkop Plus queue management and explicit validation.", "key": "External nfqws config files bypass Podkop Plus queue management and explicit validation.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:997" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:999" ] }, { @@ -749,7 +749,7 @@ "call": "Format", "key": "Format", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:20" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:22" ] }, { @@ -770,14 +770,14 @@ "call": "How often this remote rule set should be refreshed", "key": "How often this remote rule set should be refreshed", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:85" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:87" ] }, { "call": "How to configure the proxy connection for this section", "key": "How to configure the proxy connection for this section", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1621" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1623" ] }, { @@ -793,29 +793,29 @@ "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:23", "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:179", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1627", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1806" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1629", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1808" ] }, { "call": "Interface Monitoring", "key": "Interface Monitoring", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:189" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:191" ] }, { "call": "Interface Monitoring Delay", "key": "Interface Monitoring Delay", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:221" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:223" ] }, { "call": "Interface monitoring for Bad WAN", "key": "Interface monitoring for Bad WAN", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:190" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:192" ] }, { @@ -956,7 +956,7 @@ "call": "Invalid port number. Must be between 1 and 65535", "key": "Invalid port number. Must be between 1 and 65535", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1926", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1928", "src/validators/validateShadowsocksUrl.ts:85" ] }, @@ -964,7 +964,7 @@ "call": "Invalid regular expression", "key": "Invalid regular expression", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:310" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:312" ] }, { @@ -1140,7 +1140,7 @@ "call": "IPs", "key": "IPs", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1938" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1940" ] }, { @@ -1154,7 +1154,7 @@ "call": "Keyword must not contain spaces", "key": "Keyword must not contain spaces", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:320" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:322" ] }, { @@ -1168,28 +1168,28 @@ "call": "List Update Frequency", "key": "List Update Frequency", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:276" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:278" ] }, { "call": "Local", "key": "Local", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:14" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:16" ] }, { "call": "Local file path to a sing-box rule set", "key": "Local file path to a sing-box rule set", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:31" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:33" ] }, { "call": "Log Level", "key": "Log Level", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:388" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:390" ] }, { @@ -1203,42 +1203,42 @@ "call": "Match destination IPs or subnets", "key": "Match destination IPs or subnets", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1939" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1941" ] }, { "call": "Match domains containing a substring", "key": "Match domains containing a substring", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1960" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1962" ] }, { "call": "Match domains including all subdomains", "key": "Match domains including all subdomains", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1932" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1934" ] }, { "call": "Match domains using a regular expression", "key": "Match domains using a regular expression", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1967" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1969" ] }, { "call": "Match only one exact full domain name", "key": "Match only one exact full domain name", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1946" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1948" ] }, { "call": "Match source IPs or subnets", "key": "Match source IPs or subnets", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1974" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1976" ] }, { @@ -1246,7 +1246,7 @@ "key": "Maximum response time delta in milliseconds", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:114", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1733" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1735" ] }, { @@ -1260,14 +1260,14 @@ "call": "Mixed Proxy Port", "key": "Mixed Proxy Port", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1910" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1912" ] }, { "call": "Monitored Interfaces", "key": "Monitored Interfaces", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:198" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:200" ] }, { @@ -1275,21 +1275,21 @@ "key": "Must be a number in the range of 50 - 1000", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:136", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1755" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1757" ] }, { "call": "NFQWS Strategy", "key": "NFQWS Strategy", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1586" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1588" ] }, { "call": "NFQWS strategy cannot be empty", "key": "NFQWS strategy cannot be empty", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1127" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1129" ] }, { @@ -1367,14 +1367,14 @@ "call": "Optional node used to download this remote rule set", "key": "Optional node used to download this remote rule set", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:62" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:64" ] }, { "call": "Optional values must be attached with '=' here; a separate token would be ignored by nfqws.", "key": "Optional values must be attached with '=' here; a separate token would be ignored by nfqws.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1205" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1207" ] }, { @@ -1383,8 +1383,8 @@ "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:22", "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:51", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1626", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1659" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1628", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1661" ] }, { @@ -1398,14 +1398,14 @@ "call": "Output Network Interface", "key": "Output Network Interface", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:135" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:137" ] }, { "call": "Path", "key": "Path", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:30" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:32" ] }, { @@ -1419,21 +1419,21 @@ "call": "Path must be absolute (start with /)", "key": "Path must be absolute (start with /)", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:370" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:372" ] }, { "call": "Path must contain at least one directory (like /tmp/cache.db)", "key": "Path must contain at least one directory (like /tmp/cache.db)", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:379" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:381" ] }, { "call": "Path must end with cache.db", "key": "Path must end with cache.db", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:374" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:376" ] }, { @@ -1452,35 +1452,35 @@ "call": "Podkop Plus manages the nfqws process lifecycle itself, so daemon mode is not allowed here.", "key": "Podkop Plus manages the nfqws process lifecycle itself, so daemon mode is not allowed here.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1015" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1017" ] }, { "call": "Podkop Plus Settings", "key": "Podkop Plus Settings", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:369" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:372" ] }, { "call": "Podkop Plus will not modify your DHCP configuration", "key": "Podkop Plus will not modify your DHCP configuration", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:331" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:333" ] }, { "call": "Port cannot be empty", "key": "Port cannot be empty", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1918" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1920" ] }, { "call": "Port for the local mixed proxy of this section", "key": "Port for the local mixed proxy of this section", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1911" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1913" ] }, { @@ -1508,28 +1508,28 @@ "call": "Regional options cannot be used together", "key": "Regional options cannot be used together", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2028" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2030" ] }, { "call": "Remote", "key": "Remote", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:15" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:17" ] }, { "call": "Remote URL to a sing-box rule set", "key": "Remote URL to a sing-box rule set", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:47" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:49" ] }, { "call": "Resolver for interface outbound", "key": "Resolver for interface outbound", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1846" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1848" ] }, { @@ -1543,14 +1543,14 @@ "call": "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE.", "key": "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1000" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1002" ] }, { "call": "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE.", "key": "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1003" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1005" ] }, { @@ -1578,30 +1578,30 @@ "call": "Routing Excluded IPs", "key": "Routing Excluded IPs", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:417" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:419" ] }, { "call": "Rule set must be a direct .srs URL or a local .srs path", "key": "Rule set must be a direct .srs URL or a local .srs path", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1466", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1475", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1478" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1468", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1477", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1480" ] }, { "call": "Rule set URL", "key": "Rule set URL", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:46" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:48" ] }, { "call": "Rule sets", "key": "Rule sets", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2083" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2085" ] }, { @@ -1657,119 +1657,119 @@ "call": "Russia inside restrictions", "key": "Russia inside restrictions", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2047" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2049" ] }, { "call": "Save error", "key": "Save error", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:138" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:141" ] }, { "call": "Secret key for authenticating remote access to YACD when WAN access is enabled.", "key": "Secret key for authenticating remote access to YACD when WAN access is enabled.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:257" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:259" ] }, { "call": "Section", "key": "Section", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:383" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:386" ] }, { "call": "Section name", "key": "Section name", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1543" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1545" ] }, { "call": "Sections", "key": "Sections", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:377" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:380" ] }, { "call": "Select a predefined list for routing", "key": "Select a predefined list for routing", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1990" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1992" ] }, { "call": "Select DNS protocol to use", "key": "Select DNS protocol to use", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:13" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:15" ] }, { "call": "Select how often the domain or subnet lists are updated automatically", "key": "Select how often the domain or subnet lists are updated automatically", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:277" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:279" ] }, { "call": "Select or enter DNS server address", "key": "Select or enter DNS server address", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:25" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:27" ] }, { "call": "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing", "key": "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:353" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:355" ] }, { "call": "Select path for sing-box config file. Change this ONLY if you know what you are doing", "key": "Select path for sing-box config file. Change this ONLY if you know what you are doing", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:340" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:342" ] }, { "call": "Select the log level for sing-box", "key": "Select the log level for sing-box", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:389" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:391" ] }, { "call": "Select the network interface from which the traffic will originate", "key": "Select the network interface from which the traffic will originate", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:90" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:92" ] }, { "call": "Select the network interface to which the traffic will originate", "key": "Select the network interface to which the traffic will originate", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:136" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:138" ] }, { "call": "Select the WAN interfaces to be monitored", "key": "Select the WAN interfaces to be monitored", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:199" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:201" ] }, { "call": "Selector connections", "key": "Selector connections", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1681" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1683" ] }, { @@ -1783,7 +1783,7 @@ "call": "Service list", "key": "Service list", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1993" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1995" ] }, { @@ -1797,8 +1797,8 @@ "call": "Settings", "key": "Settings", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:391", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1511" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:394", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1513" ] }, { @@ -1855,28 +1855,28 @@ "call": "Source file", "key": "Source file", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:22" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:24" ] }, { "call": "Source IPs", "key": "Source IPs", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1973" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1975" ] }, { "call": "Source Network Interface", "key": "Source Network Interface", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:89" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:91" ] }, { "call": "Specify a local IP address to be excluded from routing", "key": "Specify a local IP address to be excluded from routing", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:418" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:420" ] }, { @@ -1932,21 +1932,21 @@ "call": "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here.", "key": "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1012" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1014" ] }, { "call": "The DNS server used to look up the IP address of an upstream DNS server", "key": "The DNS server used to look up the IP address of an upstream DNS server", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:46" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:48" ] }, { "call": "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here.", "key": "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1009" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1011" ] }, { @@ -1961,35 +1961,35 @@ "call": "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here.", "key": "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1018" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1020" ] }, { "call": "This field must start a working nfqws strategy; --version exits immediately and is not allowed here.", "key": "This field must start a working nfqws strategy; --version exits immediately and is not allowed here.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1021" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1023" ] }, { "call": "This flag does not accept a value.", "key": "This flag does not accept a value.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1190" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1192" ] }, { "call": "This option requires a value.", "key": "This option requires a value.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1221" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1223" ] }, { "call": "Time in seconds for DNS record caching (default: 60)", "key": "Time in seconds for DNS record caching (default: 60)", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:69" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:71" ] }, { @@ -2017,28 +2017,28 @@ "call": "TTL must be a positive number", "key": "TTL must be a positive number", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:80" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:82" ] }, { "call": "TTL value cannot be empty", "key": "TTL value cannot be empty", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:75" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:77" ] }, { "call": "Type", "key": "Type", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:13" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:15" ] }, { "call": "UDP (Unprotected DNS)", "key": "UDP (Unprotected DNS)", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:17" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:19" ] }, { @@ -2046,28 +2046,28 @@ "key": "UDP over TCP", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:169", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1794" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1796" ] }, { "call": "Unable to validate the NFQWS strategy through the backend parser.", "key": "Unable to validate the NFQWS strategy through the backend parser.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:932" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:934" ] }, { "call": "Unexpected standalone token. Use explicit flags such as --name or --name=value.", "key": "Unexpected standalone token. Use explicit flags such as --name or --name=value.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1170" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1172" ] }, { "call": "unique UCI identifier", "key": "unique UCI identifier", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:42" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:45" ] }, { @@ -2095,14 +2095,14 @@ "call": "Unknown NFQWS flag.", "key": "Unknown NFQWS flag.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1181" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1183" ] }, { "call": "Update interval", "key": "Update interval", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:84" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:86" ] }, { @@ -2131,14 +2131,14 @@ "call": "URLTest connections", "key": "URLTest connections", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1699" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1701" ] }, { "call": "URLTest interval", "key": "URLTest interval", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1717" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1719" ] }, { @@ -2159,7 +2159,7 @@ "call": "URLTest tolerance", "key": "URLTest tolerance", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1732" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1734" ] }, { @@ -2174,7 +2174,7 @@ "key": "URLTest URL", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:139", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1762" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1764" ] }, { @@ -2188,7 +2188,7 @@ "call": "Use a network interface as the outbound for this section", "key": "Use a network interface as the outbound for this section", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1807" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1809" ] }, { @@ -2215,9 +2215,9 @@ "call": "Validation errors:", "key": "Validation errors:", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:374", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:394", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:398" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:376", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:396", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:400" ] }, { @@ -2232,7 +2232,7 @@ "call": "Visible name of this section", "key": "Visible name of this section", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1544" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1546" ] }, { @@ -2240,57 +2240,57 @@ "key": "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links", "places": [ "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:32", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1638" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1640" ] }, { "call": "Warning: %s cannot be used together with %s. Previous selections have been removed.", "key": "Warning: %s cannot be used together with %s. Previous selections have been removed.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2030" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2032" ] }, { "call": "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection.", "key": "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2049" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2051" ] }, { "call": "What Podkop Plus should do when this section matches", "key": "What Podkop Plus should do when this section matches", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1557" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1559" ] }, { "call": "YACD Secret Key", "key": "YACD Secret Key", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:256" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:258" ] }, { "call": "You can select Output Network Interface, by default autodetect", "key": "You can select Output Network Interface, by default autodetect", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:127" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:129" ] }, { "call": "Zapret (package not installed)", "key": "Zapret (package not installed)", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:235", - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:282" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:237", + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:284" ] }, { "call": "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies.", "key": "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies.", "places": [ - "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1006" + "../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1008" ] }, { diff --git a/fe-app-podkop/locales/podkop.pot b/fe-app-podkop/locales/podkop_plus.pot similarity index 92% rename from fe-app-podkop/locales/podkop.pot rename to fe-app-podkop/locales/podkop_plus.pot index d6567ef5..ae706386 100644 --- a/fe-app-podkop/locales/podkop.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-04-11 18:49+0300\n" -"PO-Revision-Date: 2026-04-11 18:49+0300\n" +"POT-Creation-Date: 2026-04-11 22:33+0300\n" +"PO-Revision-Date: 2026-04-11 22:33+0300\n" "Last-Translator: ushan0v \n" "Language-Team: LANGUAGE \n" "Language: \n" @@ -36,7 +36,7 @@ msgstr "" msgid "A latency-tested group of proxy URLs for this node" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1700 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1702 msgid "A latency-tested group of proxy URLs for this section" msgstr "" @@ -44,12 +44,12 @@ msgstr "" msgid "A manual group of proxy URLs for this node" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1682 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1684 msgid "A manual group of proxy URLs for this section" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1524 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1556 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1526 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1558 msgid "Action" msgstr "" @@ -57,11 +57,11 @@ msgstr "" msgid "Active Connections" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:384 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:387 msgid "Add a section" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2084 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2086 msgid "Add URLs or local paths to .srs lists" msgstr "" @@ -69,24 +69,24 @@ msgstr "" msgid "Additional marking rules found" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:247 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:249 msgid "Allows access to YACD from the WAN. Make sure to open the appropriate port in your firewall." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:139 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:142 msgid "An error occurred while saving the form:" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:170 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1795 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1797 msgid "Applicable for SOCKS and Shadowsocks links" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:834 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:836 msgid "At least one valid domain must be specified." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:845 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:847 msgid "At least one valid IP or subnet must be specified." msgstr "" @@ -98,11 +98,11 @@ msgstr "" msgid "Available actions" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:936 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:938 msgid "Backend validation failed: %s" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:21 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:23 msgid "Binary file" msgstr "" @@ -110,7 +110,7 @@ msgstr "" msgid "Bootsrap DNS" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:45 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:47 msgid "Bootstrap DNS server" msgstr "" @@ -122,15 +122,15 @@ msgstr "" msgid "Browser is using FakeIP correctly" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1989 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1991 msgid "Built-in rule sets" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:352 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:354 msgid "Cache File Path" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:366 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:368 msgid "Cache file path cannot be empty" msgstr "" @@ -176,28 +176,28 @@ msgstr "" msgid "Close" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1512 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1514 msgid "Conditions" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:339 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:341 msgid "Config File Path" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:370 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:373 msgid "Configuration for Podkop Plus service" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1637 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1639 msgid "Connection" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1620 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1622 msgid "Connection Type" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:19 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1623 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1625 msgid "Connection URL" msgstr "" @@ -209,7 +209,7 @@ msgstr "" msgid "Currently unavailable" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:415 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:418 msgid "Dashboard" msgstr "" @@ -217,11 +217,11 @@ msgstr "" msgid "Dashboard currently unavailable" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:222 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:224 msgid "Delay in milliseconds before reloading Podkop Plus after interface UP" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:229 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:231 msgid "Delay value cannot be empty" msgstr "" @@ -229,12 +229,12 @@ msgstr "" msgid "DHCP has DNS server" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:403 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:406 msgid "Diagnostics" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:64 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:71 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:66 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:73 msgid "Direct" msgstr "" @@ -242,15 +242,15 @@ msgstr "" msgid "Disable autostart" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:265 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:267 msgid "Disable QUIC" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:266 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:268 msgid "Disable the QUIC protocol to improve compatibility or fix issues with video streaming" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:146 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:149 msgid "Dismiss" msgstr "" @@ -259,18 +259,18 @@ msgid "DNS on router" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:227 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1860 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:15 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1862 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:17 msgid "DNS over HTTPS (DoH)" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:228 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1861 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:16 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1863 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:18 msgid "DNS over TLS (DoT)" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1858 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1860 msgid "DNS protocol" msgstr "" @@ -278,20 +278,20 @@ msgstr "" msgid "DNS Protocol" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:12 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:14 msgid "DNS Protocol Type" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:68 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:70 msgid "DNS Rewrite TTL" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1876 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1878 msgid "DNS server" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:238 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:24 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:26 msgid "DNS Server" msgstr "" @@ -303,19 +303,19 @@ msgstr "" msgid "Do not panic, everything can be fixed, just..." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1959 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1961 msgid "Domain keyword" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1966 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1968 msgid "Domain regex" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1931 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1933 msgid "Domains" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:330 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:332 msgid "Dont Touch My DHCP!" msgstr "" @@ -328,39 +328,39 @@ msgstr "" msgid "Download" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:298 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:300 msgid "Download external rule sets through one of the enabled proxy sections" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:288 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:290 msgid "Download Lists via Proxy/VPN" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:297 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:299 msgid "Download Lists via specific proxy section" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:61 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:63 msgid "Download Node" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:289 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:291 msgid "Downloading all lists via specific Proxy/VPN" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:378 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:381 msgid "Drag rows to change priority. The rule at the top is checked first." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:367 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:382 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:402 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:369 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:384 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:404 msgid "Duplicate value" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:8 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:8 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1514 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:10 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1516 msgid "Enable" msgstr "" @@ -368,7 +368,7 @@ msgstr "" msgid "Enable a dedicated DNS resolver when this node uses an interface" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1847 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1849 msgid "Enable a dedicated DNS resolver when this section uses an interface" msgstr "" @@ -376,68 +376,68 @@ msgstr "" msgid "Enable autostart" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1898 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1900 msgid "Enable Mixed Proxy" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:126 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:128 msgid "Enable Output Network Interface" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:237 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:239 msgid "Enable YACD" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:246 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:248 msgid "Enable YACD WAN Access" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:52 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1660 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1662 msgid "Enter a complete sing-box outbound object" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:103 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1721 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1723 msgid "Every 3 minutes" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:101 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1719 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1721 msgid "Every 30 seconds" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:104 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1722 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1724 msgid "Every 5 minutes" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:102 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1720 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1722 msgid "Every minute" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1945 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1947 msgid "Exact full domain" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:406 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:408 msgid "Exclude NTP" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:407 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:409 msgid "Exclude NTP protocol traffic from the tunnel to prevent it from being routed through the proxy or VPN" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:42 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:45 msgid "Expecting: %s" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1899 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1901 msgid "Expose this section as a local HTTP+SOCKS proxy" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:997 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:999 msgid "External nfqws config files bypass Podkop Plus queue management and explicit validation." msgstr "" @@ -459,7 +459,7 @@ msgstr "" msgid "Fastest" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:20 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:22 msgid "Format" msgstr "" @@ -471,11 +471,11 @@ msgstr "" msgid "Global check" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:85 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:87 msgid "How often this remote rule set should be refreshed" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1621 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1623 msgid "How to configure the proxy connection for this section" msgstr "" @@ -485,20 +485,20 @@ msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:23 #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:179 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1627 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1806 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1629 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1808 msgid "Interface" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:189 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:191 msgid "Interface Monitoring" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:221 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:223 msgid "Interface Monitoring Delay" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:190 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:192 msgid "Interface monitoring for Bad WAN" msgstr "" @@ -579,12 +579,12 @@ msgstr "" msgid "Invalid path format. Path must start with \"/\" and contain valid characters" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1926 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1928 #: src/validators/validateShadowsocksUrl.ts:85 msgid "Invalid port number. Must be between 1 and 65535" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:310 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:312 msgid "Invalid regular expression" msgstr "" @@ -685,7 +685,7 @@ msgstr "" msgid "IP address 0.0.0.0 is not allowed" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1938 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1940 msgid "IPs" msgstr "" @@ -693,7 +693,7 @@ msgstr "" msgid "Issues detected" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:320 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:322 msgid "Keyword must not contain spaces" msgstr "" @@ -701,19 +701,19 @@ msgstr "" msgid "Latest" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:276 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:278 msgid "List Update Frequency" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:14 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:16 msgid "Local" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:31 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:33 msgid "Local file path to a sing-box rule set" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:388 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:390 msgid "Log Level" msgstr "" @@ -721,32 +721,32 @@ msgstr "" msgid "Main DNS" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1939 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1941 msgid "Match destination IPs or subnets" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1960 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1962 msgid "Match domains containing a substring" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1932 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1934 msgid "Match domains including all subdomains" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1967 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1969 msgid "Match domains using a regular expression" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1946 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1948 msgid "Match only one exact full domain name" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1974 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1976 msgid "Match source IPs or subnets" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:114 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1733 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1735 msgid "Maximum response time delta in milliseconds" msgstr "" @@ -754,24 +754,24 @@ msgstr "" msgid "Memory Usage" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1910 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1912 msgid "Mixed Proxy Port" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:198 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:200 msgid "Monitored Interfaces" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:136 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1755 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1757 msgid "Must be a number in the range of 50 - 1000" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1586 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1588 msgid "NFQWS Strategy" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1127 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1129 msgid "NFQWS strategy cannot be empty" msgstr "" @@ -819,18 +819,18 @@ msgstr "" msgid "Operation timed out" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:62 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:64 msgid "Optional node used to download this remote rule set" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1205 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1207 msgid "Optional values must be attached with '=' here; a separate token would be ignored by nfqws." msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:22 #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:51 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1626 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1659 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1628 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1661 msgid "Outbound JSON" msgstr "" @@ -838,11 +838,11 @@ msgstr "" msgid "Outdated" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:135 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:137 msgid "Output Network Interface" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:30 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:32 msgid "Path" msgstr "" @@ -850,15 +850,15 @@ msgstr "" msgid "Path cannot be empty" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:370 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:372 msgid "Path must be absolute (start with /)" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:379 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:381 msgid "Path must contain at least one directory (like /tmp/cache.db)" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:374 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:376 msgid "Path must end with cache.db" msgstr "" @@ -871,23 +871,23 @@ msgstr "" msgid "Pending" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1015 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1017 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/podkop.js:369 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:372 msgid "Podkop Plus Settings" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:331 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:333 msgid "Podkop Plus will not modify your DHCP configuration" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1918 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1920 msgid "Port cannot be empty" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1911 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1913 msgid "Port for the local mixed proxy of this section" msgstr "" @@ -903,19 +903,19 @@ msgstr "" msgid "Proxy traffic is routed via FakeIP" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2028 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2030 msgid "Regional options cannot be used together" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:15 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:17 msgid "Remote" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:47 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:49 msgid "Remote URL to a sing-box rule set" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1846 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1848 msgid "Resolver for interface outbound" msgstr "" @@ -923,11 +923,11 @@ msgstr "" msgid "Resolver For Interface Outbound" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1000 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1002 msgid "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1003 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1005 msgid "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE." msgstr "" @@ -943,21 +943,21 @@ msgstr "" msgid "Router DNS is routed through sing-box" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:417 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:419 msgid "Routing Excluded IPs" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1466 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1475 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1478 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1468 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1477 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1480 msgid "Rule set must be a direct .srs URL or a local .srs path" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:46 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:48 msgid "Rule set URL" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2083 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2085 msgid "Rule sets" msgstr "" @@ -989,71 +989,71 @@ msgstr "" msgid "Run Diagnostic" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2047 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2049 msgid "Russia inside restrictions" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:138 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:141 msgid "Save error" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:257 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:259 msgid "Secret key for authenticating remote access to YACD when WAN access is enabled." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:383 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:386 msgid "Section" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1543 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1545 msgid "Section name" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:377 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:380 msgid "Sections" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1990 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1992 msgid "Select a predefined list for routing" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:13 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:15 msgid "Select DNS protocol to use" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:277 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:279 msgid "Select how often the domain or subnet lists are updated automatically" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:25 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:27 msgid "Select or enter DNS server address" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:353 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:355 msgid "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:340 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:342 msgid "Select path for sing-box config file. Change this ONLY if you know what you are doing" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:389 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:391 msgid "Select the log level for sing-box" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:90 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:92 msgid "Select the network interface from which the traffic will originate" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:136 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:138 msgid "Select the network interface to which the traffic will originate" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:199 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:201 msgid "Select the WAN interfaces to be monitored" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1681 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1683 msgid "Selector connections" msgstr "" @@ -1061,7 +1061,7 @@ msgstr "" msgid "Selector Links" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1993 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1995 msgid "Service list" msgstr "" @@ -1069,8 +1069,8 @@ msgstr "" msgid "Services info" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:391 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1511 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:394 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1513 msgid "Settings" msgstr "" @@ -1103,19 +1103,19 @@ msgstr "" msgid "Sing-box version is compatible (newer than 1.12.4)" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:22 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:24 msgid "Source file" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1973 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1975 msgid "Source IPs" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:89 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:91 msgid "Source Network Interface" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:418 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:420 msgid "Specify a local IP address to be excluded from routing" msgstr "" @@ -1147,15 +1147,15 @@ msgstr "" msgid "Test latency" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1012 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1014 msgid "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:46 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:48 msgid "The DNS server used to look up the IP address of an upstream DNS server" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1009 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1011 msgid "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here." msgstr "" @@ -1164,23 +1164,23 @@ msgstr "" msgid "There are rules using zapret" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1018 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1020 msgid "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1021 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1023 msgid "This field must start a working nfqws strategy; --version exits immediately and is not allowed here." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1190 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1192 msgid "This flag does not accept a value." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1221 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1223 msgid "This option requires a value." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:69 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:71 msgid "Time in seconds for DNS record caching (default: 60)" msgstr "" @@ -1196,36 +1196,36 @@ msgstr "" msgid "Troubleshooting" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:80 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:82 msgid "TTL must be a positive number" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:75 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:77 msgid "TTL value cannot be empty" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:13 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:15 msgid "Type" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:17 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:19 msgid "UDP (Unprotected DNS)" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:169 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1794 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1796 msgid "UDP over TCP" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:932 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:934 msgid "Unable to validate the NFQWS strategy through the backend parser." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1170 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1172 msgid "Unexpected standalone token. Use explicit flags such as --name or --name=value." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:42 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:45 msgid "unique UCI identifier" msgstr "" @@ -1244,11 +1244,11 @@ msgstr "" msgid "Unknown error" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1181 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1183 msgid "Unknown NFQWS flag." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:84 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:86 msgid "Update interval" msgstr "" @@ -1265,11 +1265,11 @@ msgstr "" msgid "URL must use one of the following protocols:" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1699 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1701 msgid "URLTest connections" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1717 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1719 msgid "URLTest interval" msgstr "" @@ -1281,7 +1281,7 @@ msgstr "" msgid "URLTest Links" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1732 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1734 msgid "URLTest tolerance" msgstr "" @@ -1290,7 +1290,7 @@ msgid "URLTest Tolerance" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:139 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1762 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1764 msgid "URLTest URL" msgstr "" @@ -1298,7 +1298,7 @@ msgstr "" msgid "Use a network interface as the outbound for this node" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1807 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1809 msgid "Use a network interface as the outbound for this section" msgstr "" @@ -1319,9 +1319,9 @@ msgstr "" msgid "Valid" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:374 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:394 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:398 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:376 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:396 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:400 msgid "Validation errors:" msgstr "" @@ -1330,41 +1330,41 @@ msgstr "" msgid "View logs" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1544 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1546 msgid "Visible name of this section" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:32 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1638 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1640 msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2030 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2032 msgid "Warning: %s cannot be used together with %s. Previous selections have been removed." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2049 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2051 msgid "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1557 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1559 msgid "What Podkop Plus should do when this section matches" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:256 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:258 msgid "YACD Secret Key" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:127 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:129 msgid "You can select Output Network Interface, by default autodetect" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:235 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:282 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:237 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:284 msgid "Zapret (package not installed)" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1006 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1008 msgid "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies." msgstr "" diff --git a/fe-app-podkop/locales/podkop.ru.po b/fe-app-podkop/locales/podkop_plus.ru.po similarity index 99% rename from fe-app-podkop/locales/podkop.ru.po rename to fe-app-podkop/locales/podkop_plus.ru.po index b8db8e28..55badb48 100644 --- a/fe-app-podkop/locales/podkop.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-04-11 21:49+0300\n" -"PO-Revision-Date: 2026-04-11 21:49+0300\n" +"POT-Creation-Date: 2026-04-11 01:33+0300\n" +"PO-Revision-Date: 2026-04-11 01:33+0300\n" "Last-Translator: ushan0v\n" "Language-Team: none\n" "Language: ru\n" diff --git a/fe-app-podkop/src/constants.ts b/fe-app-podkop/src/constants.ts index 6f840d14..35f5a572 100644 --- a/fe-app-podkop/src/constants.ts +++ b/fe-app-podkop/src/constants.ts @@ -4,6 +4,11 @@ export const STATUS_COLORS = { WARNING: '#ff9800', }; +export const PODKOP_UCI_PACKAGE = 'podkop_plus'; +export const PODKOP_LUCI_VIEW_NAMESPACE = 'podkop_plus'; +export const PODKOP_LUCI_VIEW_DIR = `/www/luci-static/resources/view/${PODKOP_LUCI_VIEW_NAMESPACE}`; +export const PODKOP_LUCI_I18N_DOMAIN = 'podkop_plus'; +export const PODKOP_CBI_PREFIX = PODKOP_UCI_PACKAGE; export const PODKOP_LUCI_APP_VERSION = '__COMPILED_VERSION_VARIABLE__'; export const FAKEIP_CHECK_DOMAIN = 'fakeip.podkop.fyi'; export const IP_CHECK_DOMAIN = 'ip.podkop.fyi'; diff --git a/fe-app-podkop/src/podkop/methods/custom/getConfigSections.ts b/fe-app-podkop/src/podkop/methods/custom/getConfigSections.ts index bdb13c46..ef7cf6df 100644 --- a/fe-app-podkop/src/podkop/methods/custom/getConfigSections.ts +++ b/fe-app-podkop/src/podkop/methods/custom/getConfigSections.ts @@ -1,5 +1,8 @@ import { Podkop } from '../../types'; +import { PODKOP_UCI_PACKAGE } from '../../../constants'; export async function getConfigSections(): Promise { - return uci.load('podkop').then(() => uci.sections('podkop')); + return uci + .load(PODKOP_UCI_PACKAGE) + .then(() => uci.sections(PODKOP_UCI_PACKAGE)); } diff --git a/fe-app-podkop/src/podkop/tabs/dashboard/styles.ts b/fe-app-podkop/src/podkop/tabs/dashboard/styles.ts index 32066e5b..c2e7e79e 100644 --- a/fe-app-podkop/src/podkop/tabs/dashboard/styles.ts +++ b/fe-app-podkop/src/podkop/tabs/dashboard/styles.ts @@ -1,10 +1,12 @@ // language=CSS +import { PODKOP_CBI_PREFIX } from '../../../constants'; + export const styles = ` -#cbi-podkop-dashboard-_mount_node > div { +#cbi-${PODKOP_CBI_PREFIX}-dashboard-_mount_node > div { width: 100%; } -#cbi-podkop-dashboard > h3 { +#cbi-${PODKOP_CBI_PREFIX}-dashboard > h3 { display: none; } diff --git a/fe-app-podkop/src/podkop/tabs/diagnostic/styles.ts b/fe-app-podkop/src/podkop/tabs/diagnostic/styles.ts index def1d781..b0bff73d 100644 --- a/fe-app-podkop/src/podkop/tabs/diagnostic/styles.ts +++ b/fe-app-podkop/src/podkop/tabs/diagnostic/styles.ts @@ -1,11 +1,13 @@ // language=CSS +import { PODKOP_CBI_PREFIX } from '../../../constants'; + export const styles = ` -#cbi-podkop-diagnostic-_mount_node > div { +#cbi-${PODKOP_CBI_PREFIX}-diagnostic-_mount_node > div { width: 100%; } -#cbi-podkop-diagnostic > h3 { +#cbi-${PODKOP_CBI_PREFIX}-diagnostic > h3 { display: none; } diff --git a/fe-app-podkop/src/styles.ts b/fe-app-podkop/src/styles.ts index 24bb9487..8f26952a 100644 --- a/fe-app-podkop/src/styles.ts +++ b/fe-app-podkop/src/styles.ts @@ -1,6 +1,7 @@ // language=CSS import { DashboardTab, DiagnosticTab } from './podkop'; import { PartialStyles } from './partials'; +import { PODKOP_CBI_PREFIX } from './constants'; export const GlobalStyles = ` ${DashboardTab.styles} @@ -9,55 +10,55 @@ ${PartialStyles} /* Hide extra H3 for settings tab */ -#cbi-podkop-settings > h3 { +#cbi-${PODKOP_CBI_PREFIX}-settings > h3 { display: none; } /* Hide extra H3 for rules tab */ -#cbi-podkop-rule > h3:nth-child(1) { +#cbi-${PODKOP_CBI_PREFIX}-rule > h3:nth-child(1) { display: none; } /* Hide extra H3 for nodes tab */ -#cbi-podkop-node > h3:nth-child(1) { +#cbi-${PODKOP_CBI_PREFIX}-node > h3:nth-child(1) { display: none; } /* Hide extra H3 for rule set tab */ -#cbi-podkop-ruleset > h3:nth-child(1) { +#cbi-${PODKOP_CBI_PREFIX}-ruleset > h3:nth-child(1) { display: none; } /* Vertical align for remove rule action button */ -#cbi-podkop-rule > .cbi-section-remove { +#cbi-${PODKOP_CBI_PREFIX}-rule > .cbi-section-remove { margin-bottom: -32px; } -#cbi-podkop-rule .cbi-section-actions > div { +#cbi-${PODKOP_CBI_PREFIX}-rule .cbi-section-actions > div { display: inline-flex; align-items: center; gap: 4px; } /* Rule reorder visuals */ -#cbi-podkop-rule { +#cbi-${PODKOP_CBI_PREFIX}-rule { position: relative; } -#cbi-podkop-rule .cbi-section-table-row { +#cbi-${PODKOP_CBI_PREFIX}-rule .cbi-section-table-row { position: relative; } -#cbi-podkop-rule .cbi-section-table-row.placeholder { +#cbi-${PODKOP_CBI_PREFIX}-rule .cbi-section-table-row.placeholder { opacity: 1; } -#cbi-podkop-rule .cbi-section-table-row.placeholder em { +#cbi-${PODKOP_CBI_PREFIX}-rule .cbi-section-table-row.placeholder em { font-style: italic; } -#cbi-podkop-rule .cbi-section-table-row.drag-over-above::after, -#cbi-podkop-rule .cbi-section-table-row.drag-over-below::after { +#cbi-${PODKOP_CBI_PREFIX}-rule .cbi-section-table-row.drag-over-above::after, +#cbi-${PODKOP_CBI_PREFIX}-rule .cbi-section-table-row.drag-over-below::after { content: ''; position: absolute; left: 10px; @@ -69,17 +70,17 @@ ${PartialStyles} z-index: 2; } -#cbi-podkop-rule .cbi-section-table-row.drag-over-above::after { +#cbi-${PODKOP_CBI_PREFIX}-rule .cbi-section-table-row.drag-over-above::after { top: -1px; } -#cbi-podkop-rule .cbi-section-table-row.drag-over-below::after { +#cbi-${PODKOP_CBI_PREFIX}-rule .cbi-section-table-row.drag-over-below::after { bottom: -1px; } /* Vertical align for remove node action button */ -#cbi-podkop-node > .cbi-section-remove, -#cbi-podkop-ruleset > .cbi-section-remove { +#cbi-${PODKOP_CBI_PREFIX}-node > .cbi-section-remove, +#cbi-${PODKOP_CBI_PREFIX}-ruleset > .cbi-section-remove { margin-bottom: -32px; } diff --git a/fe-app-podkop/watch-upload.js b/fe-app-podkop/watch-upload.js index ce9ca3ba..f3f1a243 100644 --- a/fe-app-podkop/watch-upload.js +++ b/fe-app-podkop/watch-upload.js @@ -19,7 +19,7 @@ const config = { const syncDirs = [ { local: path.resolve(process.env.LOCAL_DIR_FE ?? '../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop'), - remote: process.env.REMOTE_DIR_FE ?? '/www/luci-static/resources/view/podkop', + remote: process.env.REMOTE_DIR_FE ?? '/www/luci-static/resources/view/podkop_plus', }, { local: path.resolve(process.env.LOCAL_DIR_BIN ?? '../podkop/files/usr/bin/'), diff --git a/install.sh b/install.sh index 1836f12a..0c3d93a7 100755 --- a/install.sh +++ b/install.sh @@ -16,6 +16,7 @@ ZAPRET_ARCH_CANDIDATES="" ZAPRET_ALREADY_PRESENT=0 ZAPRET_REQUESTED=0 ZAPRET_SKIPPED_REASON="" +PODKOP_PLUS_I18N_REQUESTED=0 PODKOP_PLUS_RELEASE_JSON="" PODKOP_PLUS_RELEASE_TAG="" @@ -380,28 +381,62 @@ resolve_podkop_plus_release() { [ -n "$PODKOP_PLUS_RELEASE_TAG" ] || fail "Failed to detect the Podkop Plus release tag" PODKOP_PLUS_PACKAGE_URL="$(printf '%s' "$PODKOP_PLUS_RELEASE_JSON" | jq -r --arg ext "$asset_ext" '.assets[] | select((.name | startswith("luci-app-podkop-plus_")) and (.name | endswith("." + $ext))) | .browser_download_url' | sed -n '1p')" - PODKOP_PLUS_I18N_URL="$(printf '%s' "$PODKOP_PLUS_RELEASE_JSON" | jq -r --arg ext "$asset_ext" '.assets[] | select((.name | startswith("luci-i18n-podkop-plus-ru_")) and (.name | endswith("." + $ext))) | .browser_download_url' | sed -n '1p')" - [ -n "$PODKOP_PLUS_PACKAGE_URL" ] || fail "The Podkop Plus release does not contain a luci-app-podkop-plus .$asset_ext package" - [ -n "$PODKOP_PLUS_I18N_URL" ] || fail "The Podkop Plus release does not contain a luci-i18n-podkop-plus-ru .$asset_ext package" PODKOP_PLUS_PACKAGE_NAME="$(basename "$PODKOP_PLUS_PACKAGE_URL")" - PODKOP_PLUS_I18N_NAME="$(basename "$PODKOP_PLUS_I18N_URL")" PODKOP_PLUS_PACKAGE_VERSION="$(extract_package_version "$PODKOP_PLUS_PACKAGE_NAME")" + + PODKOP_PLUS_I18N_URL="" + PODKOP_PLUS_I18N_NAME="" + + if [ "$PODKOP_PLUS_I18N_REQUESTED" -eq 1 ]; then + PODKOP_PLUS_I18N_URL="$(printf '%s' "$PODKOP_PLUS_RELEASE_JSON" | jq -r --arg ext "$asset_ext" '.assets[] | select((.name | startswith("luci-i18n-podkop-plus-ru_")) and (.name | endswith("." + $ext))) | .browser_download_url' | sed -n '1p')" + [ -n "$PODKOP_PLUS_I18N_URL" ] || fail "The Podkop Plus release does not contain a luci-i18n-podkop-plus-ru .$asset_ext package" + PODKOP_PLUS_I18N_NAME="$(basename "$PODKOP_PLUS_I18N_URL")" + fi } -detect_installed_podkop_version() { +detect_installed_podkop_plus_version() { version="" if command_exists podkop-plus; then version="$(podkop-plus show_version 2>/dev/null | head -n 1)" fi - if [ -z "$version" ] && command_exists podkop; then - version="$(podkop show_version 2>/dev/null | head -n 1)" + printf '%s' "$version" +} + +is_original_podkop_present() { + pkg_is_installed "podkop" || + pkg_is_installed "luci-app-podkop" || + [ -x /etc/init.d/podkop ] || + [ -x /usr/bin/podkop ] || + [ -d /usr/lib/podkop ] || + [ -f /usr/share/luci/menu.d/luci-app-podkop.json ] || + [ -f /usr/share/rpcd/acl.d/luci-app-podkop.json ] +} + +migrate_podkop_plus_config_if_needed() { + [ -f /etc/config/podkop_plus ] && return 0 + [ -f /etc/config/podkop ] || return 0 + + if ! pkg_is_installed "luci-app-podkop-plus" && + [ ! -x /etc/init.d/podkop-plus ] && + [ ! -x /usr/bin/podkop-plus ] && + [ ! -d /usr/lib/podkop-plus ]; then + return 0 fi - printf '%s' "$version" + if is_original_podkop_present; then + warn "Detected the original Podkop installation together with a shared legacy config at /etc/config/podkop." + warn "Podkop Plus will not import this shared config automatically. The new version will use /etc/config/podkop_plus." + return 0 + fi + + cp /etc/config/podkop /etc/config/podkop_plus || fail "Failed to migrate the Podkop Plus config to /etc/config/podkop_plus" + chmod 0644 /etc/config/podkop_plus || true + + msg "Migrated the Podkop Plus config to /etc/config/podkop_plus" } reset_legacy_config_if_needed() { @@ -410,32 +445,35 @@ reset_legacy_config_if_needed() { default_config_url="" default_config_tmp="" - [ -f /etc/config/podkop ] || return 0 + [ -f /etc/config/podkop_plus ] || return 0 - current_version="$(detect_installed_podkop_version)" + current_version="$(detect_installed_podkop_plus_version)" if [ -n "$current_version" ] && version_ge "$current_version" "0.7.0"; then return 0 fi - if ! pkg_is_installed "podkop" && ! pkg_is_installed "luci-app-podkop" && [ ! -x /etc/init.d/podkop ]; then + if ! pkg_is_installed "luci-app-podkop-plus" && + [ ! -x /etc/init.d/podkop-plus ] && + [ ! -x /usr/bin/podkop-plus ] && + [ ! -d /usr/lib/podkop-plus ]; then return 0 fi - warn "Detected a legacy podkop installation." - warn "The current config will be backed up to /etc/config/podkop-070. and replaced with the Podkop Plus default config." + warn "Detected a legacy Podkop Plus installation." + warn "The current config will be backed up to /etc/config/podkop_plus-070. and replaced with the Podkop Plus default config." - confirm_prompt "Continue and reset /etc/config/podkop?" || fail "Installation cancelled by user" + confirm_prompt "Continue and reset /etc/config/podkop_plus?" || fail "Installation cancelled by user" - backup_path="/etc/config/podkop-070.$(date +%Y%m%d%H%M%S 2>/dev/null || echo "$$")" - mv /etc/config/podkop "$backup_path" || fail "Failed to back up /etc/config/podkop" + backup_path="/etc/config/podkop_plus-070.$(date +%Y%m%d%H%M%S 2>/dev/null || echo "$$")" + mv /etc/config/podkop_plus "$backup_path" || fail "Failed to back up /etc/config/podkop_plus" default_config_url="https://raw.githubusercontent.com/${REPO_OWNER}/${REPO_NAME}/${PODKOP_PLUS_RELEASE_TAG}/podkop/files/etc/config/podkop" - default_config_tmp="$TMP_DIR/default-podkop-config" + default_config_tmp="$TMP_DIR/default-podkop-plus-config" download_with_retry "$default_config_url" "$default_config_tmp" "default Podkop Plus config" || fail "Failed to download the default Podkop Plus config" - cp "$default_config_tmp" /etc/config/podkop || fail "Failed to restore /etc/config/podkop" - chmod 0644 /etc/config/podkop || true + cp "$default_config_tmp" /etc/config/podkop_plus || fail "Failed to restore /etc/config/podkop_plus" + chmod 0644 /etc/config/podkop_plus || true msg "A fresh Podkop Plus config was installed. Backup saved to $backup_path" } @@ -476,19 +514,26 @@ remove_old_sing_box_if_needed() { remember_autostart_state() { if [ -x /etc/init.d/podkop-plus ] && /etc/init.d/podkop-plus enabled >/dev/null 2>&1; then PODKOP_WAS_ENABLED=1 - return 0 - fi - - if [ -x /etc/init.d/podkop ] && /etc/init.d/podkop enabled >/dev/null 2>&1; then - PODKOP_WAS_ENABLED=1 fi } stop_conflicting_services() { [ -x /etc/init.d/podkop-plus ] && /etc/init.d/podkop-plus stop >/dev/null 2>&1 || true [ -x /etc/init.d/podkop-plus ] && /etc/init.d/podkop-plus disable >/dev/null 2>&1 || true - [ -x /etc/init.d/podkop ] && /etc/init.d/podkop stop >/dev/null 2>&1 || true - [ -x /etc/init.d/podkop ] && /etc/init.d/podkop disable >/dev/null 2>&1 || true +} + +deactivate_original_podkop_if_present() { + [ -x /etc/init.d/podkop ] || return 0 + + if /etc/init.d/podkop running >/dev/null 2>&1; then + warn "Detected a running original Podkop service. Stopping it before installing Podkop Plus." + /etc/init.d/podkop stop >/dev/null 2>&1 || warn "Failed to stop the original Podkop service." + fi + + if /etc/init.d/podkop enabled >/dev/null 2>&1; then + warn "Detected an enabled original Podkop autostart. Disabling it before installing Podkop Plus." + /etc/init.d/podkop disable >/dev/null 2>&1 || warn "Failed to disable original Podkop autostart." + fi } cleanup_legacy_installation() { @@ -496,19 +541,18 @@ cleanup_legacy_installation() { stop_conflicting_services pkg_remove_matching_prefix "luci-i18n-podkop-plus" - pkg_remove_matching_prefix "luci-i18n-podkop-" pkg_remove_if_installed "luci-app-podkop-plus" - pkg_remove_if_installed "luci-app-podkop" - pkg_remove_if_installed "podkop" - rm -rf /usr/lib/podkop-plus /usr/lib/podkop /www/luci-static/resources/view/podkop - rm -f /etc/init.d/podkop-plus /etc/init.d/podkop - rm -f /usr/bin/podkop-plus /usr/bin/podkop + rm -rf /usr/lib/podkop-plus /www/luci-static/resources/view/podkop_plus + rm -f /etc/init.d/podkop-plus + rm -f /usr/bin/podkop-plus rm -f /usr/share/luci/menu.d/luci-app-podkop-plus.json rm -f /usr/share/rpcd/acl.d/luci-app-podkop-plus.json - rm -f /usr/share/luci/menu.d/luci-app-podkop.json - rm -f /usr/share/rpcd/acl.d/luci-app-podkop.json - rm -f /etc/uci-defaults/50_luci-podkop-plus /etc/uci-defaults/50_luci-podkop + rm -f /etc/uci-defaults/50_luci-podkop-plus + rm -f /usr/lib/lua/luci/i18n/podkop_plus.ru.lmo + rm -f /usr/lib/lua/luci/i18n/podkop_plus.en.lmo + rm -f /usr/lib/lua/luci/i18n/podkop_plus.ru.lua + rm -f /usr/lib/lua/luci/i18n/podkop_plus.en.lua } append_arch_candidate() { @@ -715,12 +759,25 @@ decide_zapret_installation() { warn "Continuing without zapret." } +decide_i18n_installation() { + if confirm_prompt "Установить русский язык интерфейса? (Install the Russian interface language package?)"; then + PODKOP_PLUS_I18N_REQUESTED=1 + return 0 + fi + + warn "Continuing without the Russian interface language package." +} + download_podkop_plus_packages() { PODKOP_PLUS_PACKAGE_FILE="$TMP_DIR/$PODKOP_PLUS_PACKAGE_NAME" - PODKOP_PLUS_I18N_FILE="$TMP_DIR/$PODKOP_PLUS_I18N_NAME" + PODKOP_PLUS_I18N_FILE="" download_with_retry "$PODKOP_PLUS_PACKAGE_URL" "$PODKOP_PLUS_PACKAGE_FILE" "$PODKOP_PLUS_PACKAGE_NAME" || fail "Failed to download $PODKOP_PLUS_PACKAGE_NAME" - download_with_retry "$PODKOP_PLUS_I18N_URL" "$PODKOP_PLUS_I18N_FILE" "$PODKOP_PLUS_I18N_NAME" || fail "Failed to download $PODKOP_PLUS_I18N_NAME" + + if [ -n "$PODKOP_PLUS_I18N_URL" ]; then + PODKOP_PLUS_I18N_FILE="$TMP_DIR/$PODKOP_PLUS_I18N_NAME" + download_with_retry "$PODKOP_PLUS_I18N_URL" "$PODKOP_PLUS_I18N_FILE" "$PODKOP_PLUS_I18N_NAME" || fail "Failed to download $PODKOP_PLUS_I18N_NAME" + fi } download_and_extract_zapret_package() { @@ -771,7 +828,11 @@ download_and_extract_zapret_package() { } install_packages() { - set -- "$PODKOP_PLUS_PACKAGE_FILE" "$PODKOP_PLUS_I18N_FILE" + set -- "$PODKOP_PLUS_PACKAGE_FILE" + + if [ -n "$PODKOP_PLUS_I18N_FILE" ]; then + set -- "$@" "$PODKOP_PLUS_I18N_FILE" + fi if [ -n "$ZAPRET_PACKAGE_FILE" ]; then pkg_remove_if_installed "zapret" @@ -803,17 +864,28 @@ main() { sync_time check_system + decide_zapret_installation + decide_i18n_installation + + deactivate_original_podkop_if_present + pkg_list_update || fail "Failed to update package lists" ensure_bootstrap_tool "jq" "jq" - ensure_bootstrap_tool "unzip" "unzip" + + if [ "$ZAPRET_REQUESTED" -eq 1 ]; then + ensure_bootstrap_tool "unzip" "unzip" + fi resolve_podkop_plus_release + migrate_podkop_plus_config_if_needed reset_legacy_config_if_needed remove_conflicting_dns_proxy remove_old_sing_box_if_needed - resolve_arch_candidates - decide_zapret_installation - resolve_zapret_release + + if [ "$ZAPRET_REQUESTED" -eq 1 ]; then + resolve_arch_candidates + resolve_zapret_release + fi cleanup_legacy_installation download_podkop_plus_packages diff --git a/luci-app-podkop-plus/Makefile b/luci-app-podkop-plus/Makefile index eda07449..3d90e759 100644 --- a/luci-app-podkop-plus/Makefile +++ b/luci-app-podkop-plus/Makefile @@ -16,7 +16,6 @@ LUCI_PKGARCH:=all LUCI_LANG.ru:=Русский (Russian) LUCI_LANG.en:=English LUCI_MAINTAINER:=ushan0v -CONFLICTS:=luci-app-podkop podkop luci-i18n-podkop-ru PKG_LICENSE:=GPL-2.0-or-later LUCI_LANGUAGES:=en ru @@ -38,23 +37,23 @@ exit 0 endef define Package/$(PKG_NAME)/conffiles -/etc/config/podkop +/etc/config/podkop_plus endef define Package/$(PKG_NAME)/install - $(INSTALL_DIR) $(1)$(HTDOCS) - $(CP) $(PKG_BUILD_DIR)/htdocs/* $(1)$(HTDOCS)/ + $(INSTALL_DIR) $(1)$(HTDOCS)/luci-static/resources/view/podkop_plus + $(CP) $(PKG_BUILD_DIR)/htdocs/luci-static/resources/view/podkop/* $(1)$(HTDOCS)/luci-static/resources/view/podkop_plus/ $(INSTALL_DIR) $(1)/ $(CP) $(PKG_BUILD_DIR)/root/* $(1)/ $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ../podkop/files/etc/init.d/podkop $(1)/etc/init.d/podkop-plus $(INSTALL_DIR) $(1)/etc/config - $(INSTALL_CONF) ../podkop/files/etc/config/podkop $(1)/etc/config/podkop + $(INSTALL_CONF) ../podkop/files/etc/config/podkop $(1)/etc/config/podkop_plus $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) ../podkop/files/usr/bin/podkop $(1)/usr/bin/podkop-plus $(INSTALL_DIR) $(1)/usr/lib/podkop-plus $(CP) ../podkop/files/usr/lib/* $(1)/usr/lib/podkop-plus/ - sed -i -e 's/__COMPILED_VERSION_VARIABLE__/$(PODKOP_PACKAGE_VERSION)/g' $(1)$(HTDOCS)/luci-static/resources/view/podkop/main.js || true + sed -i -e 's/__COMPILED_VERSION_VARIABLE__/$(PODKOP_PACKAGE_VERSION)/g' $(1)$(HTDOCS)/luci-static/resources/view/podkop_plus/main.js || true sed -i -e 's/__COMPILED_VERSION_VARIABLE__/$(PODKOP_PACKAGE_VERSION)/g' $(1)/usr/lib/podkop-plus/constants.sh || true endef diff --git a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/dashboard.js b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/dashboard.js index 6fd97cfe..af256018 100644 --- a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/dashboard.js +++ b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/dashboard.js @@ -4,7 +4,7 @@ "require ui"; "require uci"; "require fs"; -"require view.podkop.main as main"; +"require view.podkop_plus.main as main"; function createDashboardContent(section) { const o = section.option(form.DummyValue, "_mount_node"); diff --git a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/diagnostic.js b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/diagnostic.js index e6ac146d..a945bba3 100644 --- a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/diagnostic.js +++ b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/diagnostic.js @@ -4,7 +4,7 @@ "require ui"; "require uci"; "require fs"; -"require view.podkop.main as main"; +"require view.podkop_plus.main as main"; function createDiagnosticContent(section) { const o = section.option(form.DummyValue, "_mount_node"); 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 1d11834b..776bec7d 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 @@ -565,9 +565,127 @@ function parseValueList(value) { return value.split(/\n/).map((line) => line.split("//")[0].split("#")[0]).join(" ").split(/[,\s]+/).map((s) => s.trim()).filter(Boolean); } +// src/constants.ts +var STATUS_COLORS = { + SUCCESS: "#4caf50", + ERROR: "#f44336", + WARNING: "#ff9800" +}; +var PODKOP_UCI_PACKAGE = "podkop_plus"; +var PODKOP_LUCI_VIEW_NAMESPACE = "podkop_plus"; +var PODKOP_LUCI_VIEW_DIR = `/www/luci-static/resources/view/${PODKOP_LUCI_VIEW_NAMESPACE}`; +var PODKOP_LUCI_I18N_DOMAIN = "podkop_plus"; +var PODKOP_CBI_PREFIX = PODKOP_UCI_PACKAGE; +var PODKOP_LUCI_APP_VERSION = "__COMPILED_VERSION_VARIABLE__"; +var FAKEIP_CHECK_DOMAIN = "fakeip.podkop.fyi"; +var IP_CHECK_DOMAIN = "ip.podkop.fyi"; +var REGIONAL_OPTIONS = [ + "russia_inside", + "russia_outside", + "ukraine_inside" +]; +var ALLOWED_WITH_RUSSIA_INSIDE = [ + "russia_inside", + "meta", + "twitter", + "discord", + "telegram", + "cloudflare", + "google_ai", + "google_play", + "hetzner", + "ovh", + "hodca", + "roblox", + "digitalocean", + "cloudfront" +]; +var DOMAIN_LIST_OPTIONS = { + russia_inside: "Russia inside", + russia_outside: "Russia outside", + ukraine_inside: "Ukraine", + geoblock: "Geo Block", + block: "Block", + porn: "Porn", + news: "News", + anime: "Anime", + youtube: "Youtube", + discord: "Discord", + meta: "Meta", + twitter: "Twitter (X)", + hdrezka: "HDRezka", + tiktok: "Tik-Tok", + telegram: "Telegram", + cloudflare: "Cloudflare", + google_ai: "Google AI", + google_play: "Google Play", + hodca: "H.O.D.C.A", + roblox: "Roblox", + hetzner: "Hetzner ASN", + ovh: "OVH ASN", + digitalocean: "Digital Ocean ASN", + cloudfront: "CloudFront ASN" +}; +var UPDATE_INTERVAL_OPTIONS = { + "1h": "Every hour", + "3h": "Every 3 hours", + "12h": "Every 12 hours", + "1d": "Every day", + "3d": "Every 3 days" +}; +var DNS_SERVER_OPTIONS = { + "1.1.1.1": "1.1.1.1 (Cloudflare)", + "8.8.8.8": "8.8.8.8 (Google)", + "9.9.9.9": "9.9.9.9 (Quad9)", + "dns.adguard-dns.com": "dns.adguard-dns.com (AdGuard Default)", + "unfiltered.adguard-dns.com": "unfiltered.adguard-dns.com (AdGuard Unfiltered)", + "family.adguard-dns.com": "family.adguard-dns.com (AdGuard Family)" +}; +var BOOTSTRAP_DNS_SERVER_OPTIONS = { + "77.88.8.8": "77.88.8.8 (Yandex DNS)", + "77.88.8.1": "77.88.8.1 (Yandex DNS)", + "1.1.1.1": "1.1.1.1 (Cloudflare DNS)", + "1.0.0.1": "1.0.0.1 (Cloudflare DNS)", + "8.8.8.8": "8.8.8.8 (Google DNS)", + "8.8.4.4": "8.8.4.4 (Google DNS)", + "9.9.9.9": "9.9.9.9 (Quad9 DNS)", + "9.9.9.11": "9.9.9.11 (Quad9 DNS)" +}; +var DIAGNOSTICS_UPDATE_INTERVAL = 1e4; +var CACHE_TIMEOUT = DIAGNOSTICS_UPDATE_INTERVAL - 1e3; +var ERROR_POLL_INTERVAL = 1e4; +var COMMAND_TIMEOUT = 1e4; +var FETCH_TIMEOUT = 1e4; +var BUTTON_FEEDBACK_TIMEOUT = 1e3; +var DIAGNOSTICS_INITIAL_DELAY = 100; +var COMMAND_SCHEDULING = { + P0_PRIORITY: 0, + // Highest priority (no delay) + P1_PRIORITY: 100, + // Very high priority + P2_PRIORITY: 300, + // High priority + P3_PRIORITY: 500, + // Above average + P4_PRIORITY: 700, + // Standard priority + P5_PRIORITY: 900, + // Below average + P6_PRIORITY: 1100, + // Low priority + P7_PRIORITY: 1300, + // Very low priority + P8_PRIORITY: 1500, + // Background execution + P9_PRIORITY: 1700, + // Idle mode execution + P10_PRIORITY: 1900 + // Lowest priority +}; + // src/podkop/methods/custom/getConfigSections.ts async function getConfigSections() { - return uci.load("podkop").then(() => uci.sections("podkop")); + return uci.load(PODKOP_UCI_PACKAGE).then(() => uci.sections(PODKOP_UCI_PACKAGE)); } // src/podkop/methods/shell/callBaseMethod.ts @@ -907,119 +1025,6 @@ var CustomPodkopMethods = { getClashApiSecret }; -// src/constants.ts -var STATUS_COLORS = { - SUCCESS: "#4caf50", - ERROR: "#f44336", - WARNING: "#ff9800" -}; -var PODKOP_LUCI_APP_VERSION = "__COMPILED_VERSION_VARIABLE__"; -var FAKEIP_CHECK_DOMAIN = "fakeip.podkop.fyi"; -var IP_CHECK_DOMAIN = "ip.podkop.fyi"; -var REGIONAL_OPTIONS = [ - "russia_inside", - "russia_outside", - "ukraine_inside" -]; -var ALLOWED_WITH_RUSSIA_INSIDE = [ - "russia_inside", - "meta", - "twitter", - "discord", - "telegram", - "cloudflare", - "google_ai", - "google_play", - "hetzner", - "ovh", - "hodca", - "roblox", - "digitalocean", - "cloudfront" -]; -var DOMAIN_LIST_OPTIONS = { - russia_inside: "Russia inside", - russia_outside: "Russia outside", - ukraine_inside: "Ukraine", - geoblock: "Geo Block", - block: "Block", - porn: "Porn", - news: "News", - anime: "Anime", - youtube: "Youtube", - discord: "Discord", - meta: "Meta", - twitter: "Twitter (X)", - hdrezka: "HDRezka", - tiktok: "Tik-Tok", - telegram: "Telegram", - cloudflare: "Cloudflare", - google_ai: "Google AI", - google_play: "Google Play", - hodca: "H.O.D.C.A", - roblox: "Roblox", - hetzner: "Hetzner ASN", - ovh: "OVH ASN", - digitalocean: "Digital Ocean ASN", - cloudfront: "CloudFront ASN" -}; -var UPDATE_INTERVAL_OPTIONS = { - "1h": "Every hour", - "3h": "Every 3 hours", - "12h": "Every 12 hours", - "1d": "Every day", - "3d": "Every 3 days" -}; -var DNS_SERVER_OPTIONS = { - "1.1.1.1": "1.1.1.1 (Cloudflare)", - "8.8.8.8": "8.8.8.8 (Google)", - "9.9.9.9": "9.9.9.9 (Quad9)", - "dns.adguard-dns.com": "dns.adguard-dns.com (AdGuard Default)", - "unfiltered.adguard-dns.com": "unfiltered.adguard-dns.com (AdGuard Unfiltered)", - "family.adguard-dns.com": "family.adguard-dns.com (AdGuard Family)" -}; -var BOOTSTRAP_DNS_SERVER_OPTIONS = { - "77.88.8.8": "77.88.8.8 (Yandex DNS)", - "77.88.8.1": "77.88.8.1 (Yandex DNS)", - "1.1.1.1": "1.1.1.1 (Cloudflare DNS)", - "1.0.0.1": "1.0.0.1 (Cloudflare DNS)", - "8.8.8.8": "8.8.8.8 (Google DNS)", - "8.8.4.4": "8.8.4.4 (Google DNS)", - "9.9.9.9": "9.9.9.9 (Quad9 DNS)", - "9.9.9.11": "9.9.9.11 (Quad9 DNS)" -}; -var DIAGNOSTICS_UPDATE_INTERVAL = 1e4; -var CACHE_TIMEOUT = DIAGNOSTICS_UPDATE_INTERVAL - 1e3; -var ERROR_POLL_INTERVAL = 1e4; -var COMMAND_TIMEOUT = 1e4; -var FETCH_TIMEOUT = 1e4; -var BUTTON_FEEDBACK_TIMEOUT = 1e3; -var DIAGNOSTICS_INITIAL_DELAY = 100; -var COMMAND_SCHEDULING = { - P0_PRIORITY: 0, - // Highest priority (no delay) - P1_PRIORITY: 100, - // Very high priority - P2_PRIORITY: 300, - // High priority - P3_PRIORITY: 500, - // Above average - P4_PRIORITY: 700, - // Standard priority - P5_PRIORITY: 900, - // Below average - P6_PRIORITY: 1100, - // Low priority - P7_PRIORITY: 1300, - // Very low priority - P8_PRIORITY: 1500, - // Background execution - P9_PRIORITY: 1700, - // Idle mode execution - P10_PRIORITY: 1900 - // Lowest priority -}; - // src/podkop/api.ts async function createBaseApiRequest(fetchFn, options) { const wrappedFn = () => options?.timeoutMs && options?.operationName ? withTimeout( @@ -2481,11 +2486,11 @@ async function initController() { // src/podkop/tabs/dashboard/styles.ts var styles = ` -#cbi-podkop-dashboard-_mount_node > div { +#cbi-${PODKOP_CBI_PREFIX}-dashboard-_mount_node > div { width: 100%; } -#cbi-podkop-dashboard > h3 { +#cbi-${PODKOP_CBI_PREFIX}-dashboard > h3 { display: none; } @@ -4888,11 +4893,11 @@ async function initController2() { // src/podkop/tabs/diagnostic/styles.ts var styles4 = ` -#cbi-podkop-diagnostic-_mount_node > div { +#cbi-${PODKOP_CBI_PREFIX}-diagnostic-_mount_node > div { width: 100%; } -#cbi-podkop-diagnostic > h3 { +#cbi-${PODKOP_CBI_PREFIX}-diagnostic > h3 { display: none; } @@ -5091,55 +5096,55 @@ ${PartialStyles} /* Hide extra H3 for settings tab */ -#cbi-podkop-settings > h3 { +#cbi-${PODKOP_CBI_PREFIX}-settings > h3 { display: none; } /* Hide extra H3 for rules tab */ -#cbi-podkop-rule > h3:nth-child(1) { +#cbi-${PODKOP_CBI_PREFIX}-rule > h3:nth-child(1) { display: none; } /* Hide extra H3 for nodes tab */ -#cbi-podkop-node > h3:nth-child(1) { +#cbi-${PODKOP_CBI_PREFIX}-node > h3:nth-child(1) { display: none; } /* Hide extra H3 for rule set tab */ -#cbi-podkop-ruleset > h3:nth-child(1) { +#cbi-${PODKOP_CBI_PREFIX}-ruleset > h3:nth-child(1) { display: none; } /* Vertical align for remove rule action button */ -#cbi-podkop-rule > .cbi-section-remove { +#cbi-${PODKOP_CBI_PREFIX}-rule > .cbi-section-remove { margin-bottom: -32px; } -#cbi-podkop-rule .cbi-section-actions > div { +#cbi-${PODKOP_CBI_PREFIX}-rule .cbi-section-actions > div { display: inline-flex; align-items: center; gap: 4px; } /* Rule reorder visuals */ -#cbi-podkop-rule { +#cbi-${PODKOP_CBI_PREFIX}-rule { position: relative; } -#cbi-podkop-rule .cbi-section-table-row { +#cbi-${PODKOP_CBI_PREFIX}-rule .cbi-section-table-row { position: relative; } -#cbi-podkop-rule .cbi-section-table-row.placeholder { +#cbi-${PODKOP_CBI_PREFIX}-rule .cbi-section-table-row.placeholder { opacity: 1; } -#cbi-podkop-rule .cbi-section-table-row.placeholder em { +#cbi-${PODKOP_CBI_PREFIX}-rule .cbi-section-table-row.placeholder em { font-style: italic; } -#cbi-podkop-rule .cbi-section-table-row.drag-over-above::after, -#cbi-podkop-rule .cbi-section-table-row.drag-over-below::after { +#cbi-${PODKOP_CBI_PREFIX}-rule .cbi-section-table-row.drag-over-above::after, +#cbi-${PODKOP_CBI_PREFIX}-rule .cbi-section-table-row.drag-over-below::after { content: ''; position: absolute; left: 10px; @@ -5151,17 +5156,17 @@ ${PartialStyles} z-index: 2; } -#cbi-podkop-rule .cbi-section-table-row.drag-over-above::after { +#cbi-${PODKOP_CBI_PREFIX}-rule .cbi-section-table-row.drag-over-above::after { top: -1px; } -#cbi-podkop-rule .cbi-section-table-row.drag-over-below::after { +#cbi-${PODKOP_CBI_PREFIX}-rule .cbi-section-table-row.drag-over-below::after { bottom: -1px; } /* Vertical align for remove node action button */ -#cbi-podkop-node > .cbi-section-remove, -#cbi-podkop-ruleset > .cbi-section-remove { +#cbi-${PODKOP_CBI_PREFIX}-node > .cbi-section-remove, +#cbi-${PODKOP_CBI_PREFIX}-ruleset > .cbi-section-remove { margin-bottom: -32px; } @@ -5421,7 +5426,12 @@ return baseclass.extend({ FETCH_TIMEOUT, IP_CHECK_DOMAIN, Logger, + PODKOP_CBI_PREFIX, PODKOP_LUCI_APP_VERSION, + PODKOP_LUCI_I18N_DOMAIN, + PODKOP_LUCI_VIEW_DIR, + PODKOP_LUCI_VIEW_NAMESPACE, + PODKOP_UCI_PACKAGE, PodkopShellMethods, REGIONAL_OPTIONS, RemoteFakeIPMethods, diff --git a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js index 85e57681..8500f74e 100644 --- a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js +++ b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js @@ -2,7 +2,7 @@ "require form"; "require baseclass"; "require tools.widgets as widgets"; -"require view.podkop.main as main"; +"require view.podkop_plus.main as main"; function createNodeContent(section) { let o = section.option(form.Flag, "enabled", _("Enable")); diff --git a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js index 00ae1dcb..d4bed4ca 100644 --- a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js +++ b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js @@ -4,19 +4,22 @@ "require baseclass"; "require uci"; "require ui"; -"require view.podkop.main as main"; +"require view.podkop_plus.main as main"; // Global settings -"require view.podkop.settings as settings"; +"require view.podkop_plus.settings as settings"; // Sections -"require view.podkop.section as section"; +"require view.podkop_plus.section as section"; // Dashboard -"require view.podkop.dashboard as dashboard"; +"require view.podkop_plus.dashboard as dashboard"; // Diagnostic -"require view.podkop.diagnostic as diagnostic"; +"require view.podkop_plus.diagnostic as diagnostic"; + +const UCI_PACKAGE = main.PODKOP_UCI_PACKAGE; +const CBI_PREFIX = main.PODKOP_CBI_PREFIX; function renderSectionAdd(sectionRef, extra_class) { const el = form.GridSection.prototype.renderSectionAdd.apply(sectionRef, [ @@ -53,7 +56,7 @@ function renderSectionAdd(sectionRef, extra_class) { } function repaintRuleRowColors() { - const container = document.getElementById("cbi-podkop-rule"); + const container = document.getElementById(`cbi-${CBI_PREFIX}-rule`); if (!container) { return; } @@ -62,7 +65,7 @@ function repaintRuleRowColors() { container.querySelectorAll(".cbi-section-table-row"), ).filter( (row) => - row.closest("#cbi-podkop-rule") === container && + row.closest(`#cbi-${CBI_PREFIX}-rule`) === container && !row.classList.contains("placeholder"), ); @@ -278,7 +281,7 @@ function installRulePendingChanges(sectionRef) { } function installRuleRowInteractionSync() { - const container = document.getElementById("cbi-podkop-rule"); + const container = document.getElementById(`cbi-${CBI_PREFIX}-rule`); if (!container || container.__pdkRowColorSyncBound) { return; } @@ -332,11 +335,11 @@ function configureGridSection(sectionRef, type, title, addTitle) { sectionRef.rowcolors = true; sectionRef.nodescriptions = true; sectionRef.modaltitle = function (section_id) { - const label = uci.get("podkop", section_id, "label"); + const label = uci.get(UCI_PACKAGE, section_id, "label"); return section_id ? `${title}: ${label || section_id}` : addTitle; }; sectionRef.sectiontitle = function (section_id) { - return uci.get("podkop", section_id, "label") || section_id; + return uci.get(UCI_PACKAGE, section_id, "label") || section_id; }; sectionRef.renderSectionAdd = function (extra_class) { return renderSectionAdd(sectionRef, extra_class); @@ -365,7 +368,7 @@ const EntryPoint = { main.injectGlobalStyles(); const podkopMap = new form.Map( - "podkop", + UCI_PACKAGE, _("Podkop Plus Settings"), _("Configuration for Podkop Plus service"), ); diff --git a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js index 6adae9cb..94a2d20c 100644 --- a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js +++ b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js @@ -2,7 +2,9 @@ "require form"; "require baseclass"; "require uci"; -"require view.podkop.main as main"; +"require view.podkop_plus.main as main"; + +const UCI_PACKAGE = main.PODKOP_UCI_PACKAGE; function createRulesetContent(section) { let o = section.option(form.Flag, "enabled", _("Enable")); @@ -69,7 +71,7 @@ function createRulesetContent(section) { delete this.vallist; this.value("", _("Direct")); - uci.sections("podkop", "node", (node) => { + uci.sections(UCI_PACKAGE, "node", (node) => { if (node[".name"] !== section_id && node.enabled !== "0") { this.value(node[".name"], node[".name"]); } diff --git a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js index 5b60a6de..81925394 100644 --- a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js +++ b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js @@ -5,7 +5,9 @@ "require ui"; "require tools.widgets as widgets"; "require uci"; -"require view.podkop.main as main"; +"require view.podkop_plus.main as main"; + +const UCI_PACKAGE = main.PODKOP_UCI_PACKAGE; function valuesToText(values) { if (!values) { @@ -204,12 +206,12 @@ function isZapretInstalledForUi() { } function getRuleResolvedAction(section_id) { - const action = uci.get("podkop", section_id, "action"); + const action = uci.get(UCI_PACKAGE, section_id, "action"); if (action) { return `${action}`; } - const connectionType = uci.get("podkop", section_id, "connection_type"); + const connectionType = uci.get(UCI_PACKAGE, section_id, "connection_type"); switch (connectionType) { case "proxy": case "vpn": @@ -285,16 +287,16 @@ function disableUnavailableZapretOption(node) { } function getConfigListValues(section_id, key) { - return normalizeOptionValues(uci.get("podkop", section_id, key)); + return normalizeOptionValues(uci.get(UCI_PACKAGE, section_id, key)); } function writeListOption(section_id, key, values) { const normalized = normalizeOptionValues(values); if (normalized.length) { - uci.set("podkop", section_id, key, normalized); + uci.set(UCI_PACKAGE, section_id, key, normalized); } else { - uci.unset("podkop", section_id, key); + uci.unset(UCI_PACKAGE, section_id, key); } } @@ -1382,14 +1384,14 @@ function addDynamicConditionField(section, config) { return values; } - const legacyText = uci.get("podkop", section_id, `${config.key}_text`); + const legacyText = uci.get(UCI_PACKAGE, section_id, `${config.key}_text`); return legacyText ? main.parseValueList(legacyText) : []; }; o.write = function (section_id, value) { writeListOption(section_id, config.key, value); - uci.unset("podkop", section_id, `${config.key}_text`); - uci.unset("podkop", section_id, `${config.key}_text_mode`); + uci.unset(UCI_PACKAGE, section_id, `${config.key}_text`); + uci.unset(UCI_PACKAGE, section_id, `${config.key}_text_mode`); }; } @@ -1417,25 +1419,25 @@ function addTextConditionField(section, config) { configureTextareaOption(o, config.textAnalyze); o.load = function (section_id) { - const textValue = uci.get("podkop", section_id, `${config.key}_text`); + const textValue = uci.get(UCI_PACKAGE, section_id, `${config.key}_text`); if (textValue) { return textValue; } - return valuesToText(uci.get("podkop", section_id, config.key)); + return valuesToText(uci.get(UCI_PACKAGE, section_id, config.key)); }; o.write = function (section_id, value) { const normalized = value ? `${value}`.trim() : ""; if (normalized.length) { - uci.set("podkop", section_id, `${config.key}_text`, normalized); + uci.set(UCI_PACKAGE, section_id, `${config.key}_text`, normalized); } else { - uci.unset("podkop", section_id, `${config.key}_text`); + uci.unset(UCI_PACKAGE, section_id, `${config.key}_text`); } - uci.unset("podkop", section_id, config.key); - uci.unset("podkop", section_id, `${config.key}_text_mode`); + uci.unset(UCI_PACKAGE, section_id, config.key); + uci.unset(UCI_PACKAGE, section_id, `${config.key}_text_mode`); }; } @@ -1546,7 +1548,7 @@ function createSectionContent(section) { o.rmempty = false; o.modalonly = true; o.load = function (section_id) { - return uci.get("podkop", section_id, "label") || section_id; + return uci.get(UCI_PACKAGE, section_id, "label") || section_id; }; o = section.taboption( @@ -1591,7 +1593,7 @@ function createSectionContent(section) { o.textarea = true; o.modalonly = true; o.load = function (section_id) { - const value = uci.get("podkop", section_id, "nfqws_opt"); + const value = uci.get(UCI_PACKAGE, section_id, "nfqws_opt"); if (!value || value === ZAPRET_LEGACY_DEFAULT_NFQWS_OPT) { return ZAPRET_DEFAULT_NFQWS_OPT; } @@ -1605,7 +1607,7 @@ function createSectionContent(section) { ? ZAPRET_DEFAULT_NFQWS_OPT : normalized; - uci.set("podkop", section_id, "nfqws_opt", nextValue); + uci.set(UCI_PACKAGE, section_id, "nfqws_opt", nextValue); }; o.validate = function (_section_id, value) { const analysis = analyzeNfqwsStrategy(value); diff --git a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js index 199103dc..572978cb 100644 --- a/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js +++ b/luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js @@ -3,7 +3,9 @@ "require uci"; "require baseclass"; "require tools.widgets as widgets"; -"require view.podkop.main as main"; +"require view.podkop_plus.main as main"; + +const UCI_PACKAGE = main.PODKOP_UCI_PACKAGE; function createSettingsContent(section) { let o = section.option( @@ -301,10 +303,10 @@ function createSettingsContent(section) { o.rmempty = false; o.depends("download_lists_via_proxy", "1"); o.cfgvalue = function (section_id) { - return uci.get("podkop", section_id, "download_lists_via_proxy_section"); + return uci.get(UCI_PACKAGE, section_id, "download_lists_via_proxy_section"); }; o.load = function () { - const sections = this.map?.data?.state?.values?.podkop ?? {}; + const sections = this.map?.data?.state?.values?.[UCI_PACKAGE] ?? {}; this.keylist = []; this.vallist = []; diff --git a/luci-app-podkop-plus/msgmerge.sh b/luci-app-podkop-plus/msgmerge.sh index 06e57061..92ee06ed 100644 --- a/luci-app-podkop-plus/msgmerge.sh +++ b/luci-app-podkop-plus/msgmerge.sh @@ -2,7 +2,7 @@ set -euo pipefail PODIR="po" -POTFILE="$PODIR/templates/podkop.pot" +POTFILE="$PODIR/templates/podkop_plus.pot" WIDTH=120 if [ $# -ne 1 ]; then @@ -11,7 +11,7 @@ if [ $# -ne 1 ]; then fi LANG="$1" -POFILE="$PODIR/$LANG/podkop.po" +POFILE="$PODIR/$LANG/podkop_plus.po" if [ ! -f "$POTFILE" ]; then echo "Template $POTFILE not found. Run xgettext first." @@ -27,4 +27,4 @@ else msginit --no-translator --no-location --locale="$LANG" --width="$WIDTH" --input="$POTFILE" --output-file="$POFILE" fi -echo "Translation file for $LANG updated." \ No newline at end of file +echo "Translation file for $LANG updated." diff --git a/luci-app-podkop-plus/po/ru/podkop.po b/luci-app-podkop-plus/po/ru/podkop_plus.po similarity index 99% rename from luci-app-podkop-plus/po/ru/podkop.po rename to luci-app-podkop-plus/po/ru/podkop_plus.po index b8db8e28..55badb48 100644 --- a/luci-app-podkop-plus/po/ru/podkop.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-04-11 21:49+0300\n" -"PO-Revision-Date: 2026-04-11 21:49+0300\n" +"POT-Creation-Date: 2026-04-11 01:33+0300\n" +"PO-Revision-Date: 2026-04-11 01:33+0300\n" "Last-Translator: ushan0v\n" "Language-Team: none\n" "Language: ru\n" diff --git a/luci-app-podkop-plus/po/templates/podkop.pot b/luci-app-podkop-plus/po/templates/podkop_plus.pot similarity index 92% rename from luci-app-podkop-plus/po/templates/podkop.pot rename to luci-app-podkop-plus/po/templates/podkop_plus.pot index d6567ef5..ae706386 100644 --- a/luci-app-podkop-plus/po/templates/podkop.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-04-11 18:49+0300\n" -"PO-Revision-Date: 2026-04-11 18:49+0300\n" +"POT-Creation-Date: 2026-04-11 22:33+0300\n" +"PO-Revision-Date: 2026-04-11 22:33+0300\n" "Last-Translator: ushan0v \n" "Language-Team: LANGUAGE \n" "Language: \n" @@ -36,7 +36,7 @@ msgstr "" msgid "A latency-tested group of proxy URLs for this node" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1700 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1702 msgid "A latency-tested group of proxy URLs for this section" msgstr "" @@ -44,12 +44,12 @@ msgstr "" msgid "A manual group of proxy URLs for this node" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1682 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1684 msgid "A manual group of proxy URLs for this section" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1524 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1556 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1526 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1558 msgid "Action" msgstr "" @@ -57,11 +57,11 @@ msgstr "" msgid "Active Connections" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:384 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:387 msgid "Add a section" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2084 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2086 msgid "Add URLs or local paths to .srs lists" msgstr "" @@ -69,24 +69,24 @@ msgstr "" msgid "Additional marking rules found" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:247 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:249 msgid "Allows access to YACD from the WAN. Make sure to open the appropriate port in your firewall." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:139 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:142 msgid "An error occurred while saving the form:" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:170 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1795 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1797 msgid "Applicable for SOCKS and Shadowsocks links" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:834 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:836 msgid "At least one valid domain must be specified." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:845 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:847 msgid "At least one valid IP or subnet must be specified." msgstr "" @@ -98,11 +98,11 @@ msgstr "" msgid "Available actions" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:936 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:938 msgid "Backend validation failed: %s" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:21 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:23 msgid "Binary file" msgstr "" @@ -110,7 +110,7 @@ msgstr "" msgid "Bootsrap DNS" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:45 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:47 msgid "Bootstrap DNS server" msgstr "" @@ -122,15 +122,15 @@ msgstr "" msgid "Browser is using FakeIP correctly" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1989 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1991 msgid "Built-in rule sets" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:352 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:354 msgid "Cache File Path" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:366 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:368 msgid "Cache file path cannot be empty" msgstr "" @@ -176,28 +176,28 @@ msgstr "" msgid "Close" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1512 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1514 msgid "Conditions" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:339 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:341 msgid "Config File Path" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:370 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:373 msgid "Configuration for Podkop Plus service" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1637 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1639 msgid "Connection" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1620 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1622 msgid "Connection Type" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:19 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1623 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1625 msgid "Connection URL" msgstr "" @@ -209,7 +209,7 @@ msgstr "" msgid "Currently unavailable" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:415 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:418 msgid "Dashboard" msgstr "" @@ -217,11 +217,11 @@ msgstr "" msgid "Dashboard currently unavailable" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:222 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:224 msgid "Delay in milliseconds before reloading Podkop Plus after interface UP" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:229 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:231 msgid "Delay value cannot be empty" msgstr "" @@ -229,12 +229,12 @@ msgstr "" msgid "DHCP has DNS server" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:403 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:406 msgid "Diagnostics" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:64 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:71 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:66 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:73 msgid "Direct" msgstr "" @@ -242,15 +242,15 @@ msgstr "" msgid "Disable autostart" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:265 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:267 msgid "Disable QUIC" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:266 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:268 msgid "Disable the QUIC protocol to improve compatibility or fix issues with video streaming" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:146 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:149 msgid "Dismiss" msgstr "" @@ -259,18 +259,18 @@ msgid "DNS on router" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:227 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1860 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:15 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1862 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:17 msgid "DNS over HTTPS (DoH)" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:228 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1861 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:16 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1863 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:18 msgid "DNS over TLS (DoT)" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1858 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1860 msgid "DNS protocol" msgstr "" @@ -278,20 +278,20 @@ msgstr "" msgid "DNS Protocol" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:12 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:14 msgid "DNS Protocol Type" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:68 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:70 msgid "DNS Rewrite TTL" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1876 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1878 msgid "DNS server" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:238 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:24 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:26 msgid "DNS Server" msgstr "" @@ -303,19 +303,19 @@ msgstr "" msgid "Do not panic, everything can be fixed, just..." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1959 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1961 msgid "Domain keyword" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1966 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1968 msgid "Domain regex" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1931 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1933 msgid "Domains" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:330 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:332 msgid "Dont Touch My DHCP!" msgstr "" @@ -328,39 +328,39 @@ msgstr "" msgid "Download" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:298 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:300 msgid "Download external rule sets through one of the enabled proxy sections" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:288 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:290 msgid "Download Lists via Proxy/VPN" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:297 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:299 msgid "Download Lists via specific proxy section" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:61 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:63 msgid "Download Node" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:289 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:291 msgid "Downloading all lists via specific Proxy/VPN" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:378 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:381 msgid "Drag rows to change priority. The rule at the top is checked first." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:367 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:382 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:402 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:369 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:384 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:404 msgid "Duplicate value" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:8 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:8 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1514 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:10 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1516 msgid "Enable" msgstr "" @@ -368,7 +368,7 @@ msgstr "" msgid "Enable a dedicated DNS resolver when this node uses an interface" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1847 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1849 msgid "Enable a dedicated DNS resolver when this section uses an interface" msgstr "" @@ -376,68 +376,68 @@ msgstr "" msgid "Enable autostart" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1898 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1900 msgid "Enable Mixed Proxy" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:126 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:128 msgid "Enable Output Network Interface" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:237 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:239 msgid "Enable YACD" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:246 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:248 msgid "Enable YACD WAN Access" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:52 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1660 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1662 msgid "Enter a complete sing-box outbound object" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:103 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1721 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1723 msgid "Every 3 minutes" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:101 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1719 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1721 msgid "Every 30 seconds" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:104 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1722 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1724 msgid "Every 5 minutes" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:102 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1720 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1722 msgid "Every minute" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1945 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1947 msgid "Exact full domain" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:406 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:408 msgid "Exclude NTP" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:407 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:409 msgid "Exclude NTP protocol traffic from the tunnel to prevent it from being routed through the proxy or VPN" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:42 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:45 msgid "Expecting: %s" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1899 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1901 msgid "Expose this section as a local HTTP+SOCKS proxy" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:997 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:999 msgid "External nfqws config files bypass Podkop Plus queue management and explicit validation." msgstr "" @@ -459,7 +459,7 @@ msgstr "" msgid "Fastest" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:20 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:22 msgid "Format" msgstr "" @@ -471,11 +471,11 @@ msgstr "" msgid "Global check" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:85 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:87 msgid "How often this remote rule set should be refreshed" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1621 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1623 msgid "How to configure the proxy connection for this section" msgstr "" @@ -485,20 +485,20 @@ msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:23 #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:179 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1627 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1806 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1629 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1808 msgid "Interface" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:189 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:191 msgid "Interface Monitoring" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:221 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:223 msgid "Interface Monitoring Delay" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:190 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:192 msgid "Interface monitoring for Bad WAN" msgstr "" @@ -579,12 +579,12 @@ msgstr "" msgid "Invalid path format. Path must start with \"/\" and contain valid characters" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1926 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1928 #: src/validators/validateShadowsocksUrl.ts:85 msgid "Invalid port number. Must be between 1 and 65535" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:310 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:312 msgid "Invalid regular expression" msgstr "" @@ -685,7 +685,7 @@ msgstr "" msgid "IP address 0.0.0.0 is not allowed" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1938 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1940 msgid "IPs" msgstr "" @@ -693,7 +693,7 @@ msgstr "" msgid "Issues detected" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:320 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:322 msgid "Keyword must not contain spaces" msgstr "" @@ -701,19 +701,19 @@ msgstr "" msgid "Latest" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:276 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:278 msgid "List Update Frequency" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:14 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:16 msgid "Local" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:31 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:33 msgid "Local file path to a sing-box rule set" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:388 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:390 msgid "Log Level" msgstr "" @@ -721,32 +721,32 @@ msgstr "" msgid "Main DNS" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1939 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1941 msgid "Match destination IPs or subnets" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1960 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1962 msgid "Match domains containing a substring" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1932 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1934 msgid "Match domains including all subdomains" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1967 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1969 msgid "Match domains using a regular expression" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1946 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1948 msgid "Match only one exact full domain name" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1974 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1976 msgid "Match source IPs or subnets" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:114 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1733 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1735 msgid "Maximum response time delta in milliseconds" msgstr "" @@ -754,24 +754,24 @@ msgstr "" msgid "Memory Usage" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1910 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1912 msgid "Mixed Proxy Port" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:198 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:200 msgid "Monitored Interfaces" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:136 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1755 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1757 msgid "Must be a number in the range of 50 - 1000" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1586 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1588 msgid "NFQWS Strategy" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1127 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1129 msgid "NFQWS strategy cannot be empty" msgstr "" @@ -819,18 +819,18 @@ msgstr "" msgid "Operation timed out" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:62 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:64 msgid "Optional node used to download this remote rule set" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1205 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1207 msgid "Optional values must be attached with '=' here; a separate token would be ignored by nfqws." msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:22 #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:51 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1626 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1659 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1628 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1661 msgid "Outbound JSON" msgstr "" @@ -838,11 +838,11 @@ msgstr "" msgid "Outdated" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:135 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:137 msgid "Output Network Interface" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:30 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:32 msgid "Path" msgstr "" @@ -850,15 +850,15 @@ msgstr "" msgid "Path cannot be empty" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:370 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:372 msgid "Path must be absolute (start with /)" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:379 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:381 msgid "Path must contain at least one directory (like /tmp/cache.db)" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:374 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:376 msgid "Path must end with cache.db" msgstr "" @@ -871,23 +871,23 @@ msgstr "" msgid "Pending" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1015 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1017 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/podkop.js:369 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:372 msgid "Podkop Plus Settings" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:331 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:333 msgid "Podkop Plus will not modify your DHCP configuration" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1918 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1920 msgid "Port cannot be empty" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1911 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1913 msgid "Port for the local mixed proxy of this section" msgstr "" @@ -903,19 +903,19 @@ msgstr "" msgid "Proxy traffic is routed via FakeIP" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2028 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2030 msgid "Regional options cannot be used together" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:15 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:17 msgid "Remote" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:47 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:49 msgid "Remote URL to a sing-box rule set" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1846 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1848 msgid "Resolver for interface outbound" msgstr "" @@ -923,11 +923,11 @@ msgstr "" msgid "Resolver For Interface Outbound" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1000 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1002 msgid "Resource selection by hostname inside nfqws is not supported here; sing-box selects resources before NFQUEUE." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1003 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1005 msgid "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE." msgstr "" @@ -943,21 +943,21 @@ msgstr "" msgid "Router DNS is routed through sing-box" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:417 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:419 msgid "Routing Excluded IPs" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1466 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1475 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1478 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1468 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1477 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1480 msgid "Rule set must be a direct .srs URL or a local .srs path" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:46 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:48 msgid "Rule set URL" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2083 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2085 msgid "Rule sets" msgstr "" @@ -989,71 +989,71 @@ msgstr "" msgid "Run Diagnostic" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2047 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2049 msgid "Russia inside restrictions" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:138 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:141 msgid "Save error" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:257 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:259 msgid "Secret key for authenticating remote access to YACD when WAN access is enabled." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:383 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:386 msgid "Section" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1543 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1545 msgid "Section name" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:377 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:380 msgid "Sections" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1990 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1992 msgid "Select a predefined list for routing" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:13 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:15 msgid "Select DNS protocol to use" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:277 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:279 msgid "Select how often the domain or subnet lists are updated automatically" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:25 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:27 msgid "Select or enter DNS server address" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:353 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:355 msgid "Select or enter path for sing-box cache file. Change this ONLY if you know what you are doing" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:340 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:342 msgid "Select path for sing-box config file. Change this ONLY if you know what you are doing" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:389 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:391 msgid "Select the log level for sing-box" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:90 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:92 msgid "Select the network interface from which the traffic will originate" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:136 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:138 msgid "Select the network interface to which the traffic will originate" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:199 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:201 msgid "Select the WAN interfaces to be monitored" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1681 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1683 msgid "Selector connections" msgstr "" @@ -1061,7 +1061,7 @@ msgstr "" msgid "Selector Links" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1993 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1995 msgid "Service list" msgstr "" @@ -1069,8 +1069,8 @@ msgstr "" msgid "Services info" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:391 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1511 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:394 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1513 msgid "Settings" msgstr "" @@ -1103,19 +1103,19 @@ msgstr "" msgid "Sing-box version is compatible (newer than 1.12.4)" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:22 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:24 msgid "Source file" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1973 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1975 msgid "Source IPs" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:89 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:91 msgid "Source Network Interface" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:418 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:420 msgid "Specify a local IP address to be excluded from routing" msgstr "" @@ -1147,15 +1147,15 @@ msgstr "" msgid "Test latency" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1012 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1014 msgid "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:46 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:48 msgid "The DNS server used to look up the IP address of an upstream DNS server" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1009 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1011 msgid "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here." msgstr "" @@ -1164,23 +1164,23 @@ msgstr "" msgid "There are rules using zapret" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1018 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1020 msgid "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1021 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1023 msgid "This field must start a working nfqws strategy; --version exits immediately and is not allowed here." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1190 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1192 msgid "This flag does not accept a value." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1221 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1223 msgid "This option requires a value." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:69 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:71 msgid "Time in seconds for DNS record caching (default: 60)" msgstr "" @@ -1196,36 +1196,36 @@ msgstr "" msgid "Troubleshooting" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:80 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:82 msgid "TTL must be a positive number" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:75 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:77 msgid "TTL value cannot be empty" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:13 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:15 msgid "Type" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:17 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:19 msgid "UDP (Unprotected DNS)" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:169 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1794 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1796 msgid "UDP over TCP" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:932 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:934 msgid "Unable to validate the NFQWS strategy through the backend parser." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1170 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1172 msgid "Unexpected standalone token. Use explicit flags such as --name or --name=value." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:42 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/podkop.js:45 msgid "unique UCI identifier" msgstr "" @@ -1244,11 +1244,11 @@ msgstr "" msgid "Unknown error" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1181 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1183 msgid "Unknown NFQWS flag." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:84 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:86 msgid "Update interval" msgstr "" @@ -1265,11 +1265,11 @@ msgstr "" msgid "URL must use one of the following protocols:" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1699 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1701 msgid "URLTest connections" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1717 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1719 msgid "URLTest interval" msgstr "" @@ -1281,7 +1281,7 @@ msgstr "" msgid "URLTest Links" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1732 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1734 msgid "URLTest tolerance" msgstr "" @@ -1290,7 +1290,7 @@ msgid "URLTest Tolerance" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:139 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1762 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1764 msgid "URLTest URL" msgstr "" @@ -1298,7 +1298,7 @@ msgstr "" msgid "Use a network interface as the outbound for this node" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1807 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1809 msgid "Use a network interface as the outbound for this section" msgstr "" @@ -1319,9 +1319,9 @@ msgstr "" msgid "Valid" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:374 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:394 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:398 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:376 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:396 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:400 msgid "Validation errors:" msgstr "" @@ -1330,41 +1330,41 @@ msgstr "" msgid "View logs" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1544 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1546 msgid "Visible name of this section" msgstr "" #: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:32 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1638 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1640 msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2030 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2032 msgid "Warning: %s cannot be used together with %s. Previous selections have been removed." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2049 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2051 msgid "Warning: Russia inside can only be used with %s. %s already in Russia inside and have been removed from selection." msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1557 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1559 msgid "What Podkop Plus should do when this section matches" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:256 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:258 msgid "YACD Secret Key" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:127 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/settings.js:129 msgid "You can select Output Network Interface, by default autodetect" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:235 -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:282 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:237 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:284 msgid "Zapret (package not installed)" msgstr "" -#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1006 +#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1008 msgid "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies." msgstr "" diff --git a/luci-app-podkop-plus/root/usr/share/luci/menu.d/luci-app-podkop-plus.json b/luci-app-podkop-plus/root/usr/share/luci/menu.d/luci-app-podkop-plus.json index 999047b6..511e25ce 100644 --- a/luci-app-podkop-plus/root/usr/share/luci/menu.d/luci-app-podkop-plus.json +++ b/luci-app-podkop-plus/root/usr/share/luci/menu.d/luci-app-podkop-plus.json @@ -4,11 +4,11 @@ "order": 42, "action": { "type": "view", - "path": "podkop/podkop" + "path": "podkop_plus/podkop" }, "depends": { "acl": [ "luci-app-podkop-plus" ], - "uci": { "podkop": true } + "uci": { "podkop_plus": true } } } } diff --git a/luci-app-podkop-plus/root/usr/share/rpcd/acl.d/luci-app-podkop-plus.json b/luci-app-podkop-plus/root/usr/share/rpcd/acl.d/luci-app-podkop-plus.json index 8648ed44..aa31ea0a 100644 --- a/luci-app-podkop-plus/root/usr/share/rpcd/acl.d/luci-app-podkop-plus.json +++ b/luci-app-podkop-plus/root/usr/share/rpcd/acl.d/luci-app-podkop-plus.json @@ -16,12 +16,12 @@ ] }, "uci": [ - "podkop" + "podkop_plus" ] }, "write": { "uci": [ - "podkop" + "podkop_plus" ] } } diff --git a/luci-app-podkop-plus/xgettext.sh b/luci-app-podkop-plus/xgettext.sh index 0db78fbd..273dad1d 100644 --- a/luci-app-podkop-plus/xgettext.sh +++ b/luci-app-podkop-plus/xgettext.sh @@ -2,7 +2,7 @@ set -euo pipefail SRC_DIR="htdocs/luci-static/resources/view/podkop" -OUT_POT="po/templates/podkop.pot" +OUT_POT="po/templates/podkop_plus.pot" ENCODING="UTF-8" WIDTH=120 @@ -24,4 +24,4 @@ xgettext --language=JavaScript \ --package-name="PODKOP" \ "${FILES[@]}" -echo "POT template generated: $OUT_POT" \ No newline at end of file +echo "POT template generated: $OUT_POT" diff --git a/podkop/files/etc/init.d/podkop b/podkop/files/etc/init.d/podkop index 0c3d8acc..17f9f74a 100755 --- a/podkop/files/etc/init.d/podkop +++ b/podkop/files/etc/init.d/podkop @@ -6,7 +6,7 @@ USE_PROCD=1 script=$(readlink "$initscript") NAME="$(basename ${script:-$initscript})" -CONFIG_NAME="podkop" +CONFIG_NAME="podkop_plus" PODKOP_BIN="/usr/bin/podkop-plus" PODKOP_SERVICE_INIT="/etc/init.d/podkop-plus" PODKOP_RELOAD_LOCK_DIR="/var/run/podkop-plus.reload.lock" diff --git a/podkop/files/usr/bin/podkop b/podkop/files/usr/bin/podkop index 7048aa26..b2687caf 100755 --- a/podkop/files/usr/bin/podkop +++ b/podkop/files/usr/bin/podkop @@ -40,7 +40,7 @@ PODKOP_RELOAD_STATE_FORMAT=1 PODKOP_NFT_POPULATE_ENABLED=1 PODKOP_ZAPRET_MISSING_WARNING_EMITTED=0 -config_load "$PODKOP_CONFIG" +config_load "$PODKOP_CONFIG_NAME" ensure_runtime_dirs() { mkdir -p "$TMP_SING_BOX_FOLDER" @@ -538,7 +538,7 @@ commit_podkop_config() { # and stopping. Mark these commits so the init trigger can ignore the # self-induced config.change event instead of scheduling another reload. : > "$PODKOP_INTERNAL_CONFIG_TRIGGER_GUARD" - uci commit "podkop" && config_load "$PODKOP_CONFIG" + uci commit "$PODKOP_CONFIG_NAME" && config_load "$PODKOP_CONFIG_NAME" } migrate_legacy_section_to_rule() { @@ -551,16 +551,16 @@ migrate_legacy_section_to_rule() { [ -z "$label" ] && label="$section" - uci set "podkop.$section=rule" - uci set "podkop.$section.label=$label" - uci set "podkop.$section.enabled=1" + uci set "$PODKOP_CONFIG_NAME.$section=rule" + uci set "$PODKOP_CONFIG_NAME.$section.label=$label" + uci set "$PODKOP_CONFIG_NAME.$section.enabled=1" if [ -n "$action" ]; then - uci set "podkop.$section.action=$action" + uci set "$PODKOP_CONFIG_NAME.$section.action=$action" fi if [ -n "$proxy_config_type" ]; then - uci set "podkop.$section.proxy_config_type=$proxy_config_type" + uci set "$PODKOP_CONFIG_NAME.$section.proxy_config_type=$proxy_config_type" fi legacy_migration_changed=1 @@ -610,15 +610,15 @@ migrate_builtin_rulesets_to_community_lists() { [ "$moved" -eq 1 ] || return 0 log "Migrating built-in rule sets from rule_set to community_lists for '$section'" - uci -q delete "podkop.$section.rule_set" - uci -q delete "podkop.$section.community_lists" + uci -q delete "$PODKOP_CONFIG_NAME.$section.rule_set" + uci -q delete "$PODKOP_CONFIG_NAME.$section.community_lists" for reference in $next_community_lists; do - uci add_list "podkop.$section.community_lists=$reference" + uci add_list "$PODKOP_CONFIG_NAME.$section.community_lists=$reference" done for reference in $next_rule_set; do - uci add_list "podkop.$section.rule_set=$reference" + uci add_list "$PODKOP_CONFIG_NAME.$section.rule_set=$reference" done legacy_migration_changed=1 @@ -636,7 +636,7 @@ migrate_legacy_zapret_nfqws_default() { [ "$nfqws_opt" = "$ZAPRET_LEGACY_DEFAULT_NFQWS_OPT" ] || return 0 log "Migrating legacy built-in NFQWS strategy for '$section' to the Podkop Plus compatible default" - uci set "podkop.$section.nfqws_opt=$ZAPRET_DEFAULT_NFQWS_OPT" + uci set "$PODKOP_CONFIG_NAME.$section.nfqws_opt=$ZAPRET_DEFAULT_NFQWS_OPT" legacy_migration_changed=1 } @@ -795,7 +795,7 @@ start() { dnsmasq_configure fi - uci_set "podkop" "settings" "shutdown_correctly" 0 + uci_set "$PODKOP_CONFIG_NAME" "settings" "shutdown_correctly" 0 commit_podkop_config capture_reload_state write_reload_state @@ -810,7 +810,7 @@ stop() { stop_main - uci_set "podkop" "settings" "shutdown_correctly" 1 + uci_set "$PODKOP_CONFIG_NAME" "settings" "shutdown_correctly" 1 commit_podkop_config clear_reload_state } @@ -1007,26 +1007,17 @@ uninstall() { package_manager_remove_if_installed "luci-i18n-podkop-plus-ru" package_manager_remove_if_installed "luci-app-podkop-plus" - package_manager_remove_if_installed "luci-i18n-podkop-ru" - package_manager_remove_if_installed "luci-app-podkop" - package_manager_remove_if_installed "podkop" rm -rf /usr/lib/podkop-plus - rm -rf /usr/lib/podkop - rm -rf /www/luci-static/resources/view/podkop + rm -rf "$PODKOP_LUCI_VIEW_DIR" rm -f "$PODKOP_SERVICE_INIT" rm -f "$PODKOP_BIN" - rm -f /etc/init.d/podkop - rm -f /usr/bin/podkop rm -f /usr/share/luci/menu.d/luci-app-podkop-plus.json rm -f /usr/share/rpcd/acl.d/luci-app-podkop-plus.json - rm -f /usr/share/luci/menu.d/luci-app-podkop.json - rm -f /usr/share/rpcd/acl.d/luci-app-podkop.json rm -f /etc/uci-defaults/50_luci-podkop-plus - rm -f /etc/uci-defaults/50_luci-podkop - rm -f /usr/lib/lua/luci/i18n/podkop.*.lmo - rm -f /usr/lib/lua/luci/i18n/podkop.ru.lua - rm -f /usr/lib/lua/luci/i18n/podkop.en.lua + rm -f "/usr/lib/lua/luci/i18n/${PODKOP_LUCI_I18N_DOMAIN}."*.lmo + rm -f "/usr/lib/lua/luci/i18n/${PODKOP_LUCI_I18N_DOMAIN}.ru.lua" + rm -f "/usr/lib/lua/luci/i18n/${PODKOP_LUCI_I18N_DOMAIN}.en.lua" rm -f /var/luci-indexcache* rm -f /tmp/luci-indexcache* [ -x /etc/init.d/rpcd ] && /etc/init.d/rpcd reload >/dev/null 2>&1 || true @@ -1038,7 +1029,7 @@ uninstall() { migration() { legacy_migration_changed=0 - if ! uci show podkop | grep -q "=section"; then + if ! uci show "$PODKOP_CONFIG_NAME" | grep -q "=section"; then config_foreach migrate_builtin_rulesets_to_community_lists "rule" config_foreach migrate_legacy_zapret_nfqws_default "rule" if [ "$legacy_migration_changed" -eq 1 ]; then @@ -3137,13 +3128,13 @@ get_first_outbound_section() { get_sections_by_connection_type() { local connection_type="$1" - uci show podkop | grep "\.connection_type='$connection_type'" | cut -d'.' -f2 + uci show "$PODKOP_CONFIG_NAME" | grep "\.connection_type='$connection_type'" | cut -d'.' -f2 } section_by_connection_type_exists() { local connection_type="$1" - if uci show podkop | grep -q "\.connection_type='$connection_type'"; then + if uci show "$PODKOP_CONFIG_NAME" | grep -q "\.connection_type='$connection_type'"; then return 0 else return 1 @@ -3374,7 +3365,7 @@ check_logs() { fi local logs - logs=$(logread | grep -E "podkop-plus|podkop|sing-box") + logs=$(logread | grep -E "podkop-plus|sing-box") if [ -z "$logs" ]; then nolog "Logs not found" @@ -3561,8 +3552,8 @@ get_system_info() { podkop_latest_version="$(get_podkop_latest_version)" [ -n "$podkop_latest_version" ] || podkop_latest_version="unknown" - if [ -f /www/luci-static/resources/view/podkop/main.js ]; then - luci_app_version=$(grep 'var PODKOP_LUCI_APP_VERSION' /www/luci-static/resources/view/podkop/main.js | cut -d'"' -f2) + if [ -f "$PODKOP_LUCI_VIEW_DIR/main.js" ]; then + luci_app_version=$(grep 'var PODKOP_LUCI_APP_VERSION' "$PODKOP_LUCI_VIEW_DIR/main.js" | cut -d'"' -f2) else luci_app_version="not installed" fi diff --git a/podkop/files/usr/lib/constants.sh b/podkop/files/usr/lib/constants.sh index 5863e7c2..67649d24 100644 --- a/podkop/files/usr/lib/constants.sh +++ b/podkop/files/usr/lib/constants.sh @@ -2,12 +2,16 @@ PODKOP_APP_NAME="Podkop Plus" PODKOP_VERSION="__COMPILED_VERSION_VARIABLE__" -PODKOP_CONFIG="/etc/config/podkop" +PODKOP_CONFIG_NAME="podkop_plus" +PODKOP_CONFIG="/etc/config/$PODKOP_CONFIG_NAME" PODKOP_BIN="/usr/bin/podkop-plus" PODKOP_SERVICE_NAME="podkop-plus" PODKOP_SERVICE_INIT="/etc/init.d/podkop-plus" PODKOP_LIB_DIR="/usr/lib/podkop-plus" PODKOP_RELEASE_REPO="ushan0v/podkop-plus" +PODKOP_LUCI_VIEW_NAMESPACE="podkop_plus" +PODKOP_LUCI_VIEW_DIR="/www/luci-static/resources/view/$PODKOP_LUCI_VIEW_NAMESPACE" +PODKOP_LUCI_I18N_DOMAIN="podkop_plus" ## Common RESOLV_CONF="/etc/resolv.conf" DNS_RESOLVERS="1.1.1.1 1.0.0.1 8.8.8.8 8.8.4.4 9.9.9.9 9.9.9.11 94.140.14.14 94.140.15.15 208.67.220.220 208.67.222.222 77.88.8.1 77.88.8.8" diff --git a/podkop/files/usr/lib/zapret.sh b/podkop/files/usr/lib/zapret.sh index 9a7bf561..fe261a18 100644 --- a/podkop/files/usr/lib/zapret.sh +++ b/podkop/files/usr/lib/zapret.sh @@ -920,8 +920,17 @@ zapret_standalone_uci_config_present() { } sync_zapret_standalone_config() { - [ -x "$ZAPRET_SOURCE_BASE_DIR/renew-cfg.sh" ] || return 0 - "$ZAPRET_SOURCE_BASE_DIR/renew-cfg.sh" sync >/dev/null 2>&1 + if [ -x "$ZAPRET_SOURCE_BASE_DIR/sync_config.sh" ]; then + "$ZAPRET_SOURCE_BASE_DIR/sync_config.sh" >/dev/null 2>&1 + return $? + fi + + if [ -x "$ZAPRET_SOURCE_BASE_DIR/renew-cfg.sh" ]; then + "$ZAPRET_SOURCE_BASE_DIR/renew-cfg.sh" sync >/dev/null 2>&1 + return $? + fi + + return 0 } neutralize_zapret_standalone_defaults() { diff --git a/scripts/build-openwrt-packages-wsl.sh b/scripts/build-openwrt-packages-wsl.sh index ef2c1edc..3e77d993 100644 --- a/scripts/build-openwrt-packages-wsl.sh +++ b/scripts/build-openwrt-packages-wsl.sh @@ -228,24 +228,34 @@ build_app_root() { cp -a "$ROOT_DIR/luci-app-podkop-plus/htdocs/." "$output_root/www/" fi + if [[ -d "$output_root/www/luci-static/resources/view/podkop" ]]; then + rm -rf "$output_root/www/luci-static/resources/view/podkop_plus" + mv "$output_root/www/luci-static/resources/view/podkop" \ + "$output_root/www/luci-static/resources/view/podkop_plus" + fi + if [[ -d "$ROOT_DIR/luci-app-podkop-plus/root" ]]; then cp -a "$ROOT_DIR/luci-app-podkop-plus/root/." "$output_root/" fi install -m 0755 "$ROOT_DIR/podkop/files/etc/init.d/podkop" "$output_root/etc/init.d/podkop-plus" - install -m 0644 "$ROOT_DIR/podkop/files/etc/config/podkop" "$output_root/etc/config/podkop" + install -m 0644 "$ROOT_DIR/podkop/files/etc/config/podkop" "$output_root/etc/config/podkop_plus" install -m 0755 "$ROOT_DIR/podkop/files/usr/bin/podkop" "$output_root/usr/bin/podkop-plus" cp -a "$ROOT_DIR/podkop/files/usr/lib/." "$output_root/usr/lib/podkop-plus/" + if [[ -f "$output_root/www/luci-static/resources/view/podkop_plus/main.js" ]]; then + sed -i -e "s/__COMPILED_VERSION_VARIABLE__/${RELEASE_VERSION}/g" \ + "$output_root/www/luci-static/resources/view/podkop_plus/main.js" + fi + sed -i -e "s/__COMPILED_VERSION_VARIABLE__/${RELEASE_VERSION}/g" \ - "$output_root/www/luci-static/resources/view/podkop/main.js" \ "$output_root/usr/lib/podkop-plus/constants.sh" } build_i18n_root() { local output_root="$1" local po2lmo_bin="$2" - local lmo_path="$output_root/usr/lib/lua/luci/i18n/podkop.ru.lmo" + local lmo_path="$output_root/usr/lib/lua/luci/i18n/podkop_plus.ru.lmo" rm -rf "$output_root" make_dir "$output_root/etc/uci-defaults" @@ -255,7 +265,7 @@ build_i18n_root() { uci set luci.languages.ru='Русский (Russian)'; uci commit luci EOF - "$po2lmo_bin" "$ROOT_DIR/luci-app-podkop-plus/po/ru/podkop.po" "$lmo_path" + "$po2lmo_bin" "$ROOT_DIR/luci-app-podkop-plus/po/ru/podkop_plus.po" "$lmo_path" } generate_apk_metadata_files() { @@ -306,7 +316,7 @@ Description: ${APP_DESCRIPTION} EOF cat > "$control_dir/conffiles" <<'EOF' -/etc/config/podkop +/etc/config/podkop_plus EOF cat > "$control_dir/postinst" <<'EOF' @@ -692,7 +702,7 @@ main() { build_app_root "$app_root" build_i18n_root "$i18n_root" "$po2lmo_bin" - generate_apk_metadata_files "luci-app-podkop-plus" "$app_root" "/etc/config/podkop" + generate_apk_metadata_files "luci-app-podkop-plus" "$app_root" "/etc/config/podkop_plus" generate_apk_metadata_files "luci-i18n-podkop-plus-ru" "$i18n_root" app_size="$(installed_size_bytes "$app_root")" diff --git a/scripts/dev-deploy-openwrt.ps1 b/scripts/dev-deploy-openwrt.ps1 index a012b4f7..46eb08aa 100644 --- a/scripts/dev-deploy-openwrt.ps1 +++ b/scripts/dev-deploy-openwrt.ps1 @@ -605,33 +605,43 @@ replace_dir() { mv "$tmp" "$dest" } +if [ -x /etc/init.d/podkop ]; then + /etc/init.d/podkop running >/dev/null 2>&1 && /etc/init.d/podkop stop >/dev/null 2>&1 || true + /etc/init.d/podkop enabled >/dev/null 2>&1 && /etc/init.d/podkop disable >/dev/null 2>&1 || true +fi [ -x /etc/init.d/podkop-plus ] && /etc/init.d/podkop-plus stop >/dev/null 2>&1 || true -[ -x /etc/init.d/podkop ] && /etc/init.d/podkop stop >/dev/null 2>&1 || true -[ -x /etc/init.d/podkop ] && /etc/init.d/podkop disable >/dev/null 2>&1 || true replace_file "$BUNDLE_DIR/etc/init.d/podkop-plus" "/etc/init.d/podkop-plus" 0755 replace_file "$BUNDLE_DIR/usr/bin/podkop-plus" "/usr/bin/podkop-plus" 0755 replace_dir "$BUNDLE_DIR/usr/lib/podkop-plus" "/usr/lib/podkop-plus" -replace_dir "$BUNDLE_DIR/www/luci-static/resources/view/podkop" "/www/luci-static/resources/view/podkop" +replace_dir "$BUNDLE_DIR/www/luci-static/resources/view/podkop_plus" "/www/luci-static/resources/view/podkop_plus" replace_file "$BUNDLE_DIR/usr/share/luci/menu.d/luci-app-podkop-plus.json" "/usr/share/luci/menu.d/luci-app-podkop-plus.json" 0644 replace_file "$BUNDLE_DIR/usr/share/rpcd/acl.d/luci-app-podkop-plus.json" "/usr/share/rpcd/acl.d/luci-app-podkop-plus.json" 0644 -replace_file "$BUNDLE_DIR/usr/lib/lua/luci/i18n/podkop.ru.lmo" "/usr/lib/lua/luci/i18n/podkop.ru.lmo" 0644 +replace_file "$BUNDLE_DIR/usr/lib/lua/luci/i18n/podkop_plus.ru.lmo" "/usr/lib/lua/luci/i18n/podkop_plus.ru.lmo" 0644 replace_file "$BUNDLE_DIR/etc/uci-defaults/50_luci-podkop-plus" "/etc/uci-defaults/50_luci-podkop-plus" 0755 -if [ ! -f /etc/config/podkop ]; then - replace_file "$BUNDLE_DIR/etc/config/podkop" "/etc/config/podkop" 0644 -fi +is_original_podkop_present() { + opkg list-installed 2>/dev/null | grep -Eq '^podkop([[:space:]-]|$)' || + opkg list-installed 2>/dev/null | grep -Eq '^luci-app-podkop([[:space:]-]|$)' || + [ -x /etc/init.d/podkop ] || + [ -x /usr/bin/podkop ] || + [ -d /usr/lib/podkop ] || + [ -f /usr/share/luci/menu.d/luci-app-podkop.json ] || + [ -f /usr/share/rpcd/acl.d/luci-app-podkop.json ] +} -rm -f /etc/init.d/podkop -rm -f /usr/bin/podkop -rm -f /usr/share/luci/menu.d/luci-app-podkop.json -rm -f /usr/share/rpcd/acl.d/luci-app-podkop.json -rm -rf /usr/lib/podkop -rm -f /usr/lib/lua/luci/i18n/podkop.ru.lua -rm -f /usr/lib/lua/luci/i18n/podkop.en.lua -rm -f /usr/lib/lua/luci/i18n/podkop.en.lmo +if [ ! -f /etc/config/podkop_plus ]; then + if [ -f /etc/config/podkop ] && + { [ -x /etc/init.d/podkop-plus ] || [ -x /usr/bin/podkop-plus ] || [ -d /usr/lib/podkop-plus ]; } && + ! is_original_podkop_present; then + cp /etc/config/podkop /etc/config/podkop_plus + chmod 0644 /etc/config/podkop_plus || true + else + replace_file "$BUNDLE_DIR/etc/config/podkop_plus" "/etc/config/podkop_plus" 0644 + fi +fi rm -f /var/luci-indexcache* /tmp/luci-indexcache* [ -x /etc/init.d/rpcd ] && /etc/init.d/rpcd reload >/dev/null 2>&1 || true @@ -669,7 +679,7 @@ wait_for_service() { /etc/init.d/podkop-plus restart >/dev/null 2>&1 || true echo "System LuCI language: $(uci -q get luci.main.lang || echo auto)" -echo "Podkop RU catalog: $( [ -f /usr/lib/lua/luci/i18n/podkop.ru.lmo ] && echo installed || echo absent )" +echo "Podkop Plus RU catalog: $( [ -f /usr/lib/lua/luci/i18n/podkop_plus.ru.lmo ] && echo installed || echo absent )" echo "Autostart enabled: $(/etc/init.d/podkop-plus enabled >/dev/null 2>&1 && echo yes || echo no)" echo "Service status:" if ! wait_for_service; then @@ -689,7 +699,7 @@ function New-DeployBundle { $bundleFiles = @{ 'podkop/files/etc/init.d/podkop' = 'etc/init.d/podkop-plus' - 'podkop/files/etc/config/podkop' = 'etc/config/podkop' + 'podkop/files/etc/config/podkop' = 'etc/config/podkop_plus' 'podkop/files/usr/bin/podkop' = 'usr/bin/podkop-plus' 'luci-app-podkop-plus/root/usr/share/luci/menu.d/luci-app-podkop-plus.json' = 'usr/share/luci/menu.d/luci-app-podkop-plus.json' 'luci-app-podkop-plus/root/usr/share/rpcd/acl.d/luci-app-podkop-plus.json' = 'usr/share/rpcd/acl.d/luci-app-podkop-plus.json' @@ -704,13 +714,16 @@ function New-DeployBundle { } Copy-Tree -Source (Assert-RepoPath 'podkop/files/usr/lib') -Destination (Join-Path $StageRoot 'usr/lib/podkop-plus') - Copy-Tree -Source (Assert-RepoPath 'luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop') -Destination (Join-Path $StageRoot 'www/luci-static/resources/view/podkop') + Copy-Tree -Source (Assert-RepoPath 'luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop') -Destination (Join-Path $StageRoot 'www/luci-static/resources/view/podkop_plus') Replace-VersionPlaceholder -Path (Join-Path $StageRoot 'usr/lib/podkop-plus/constants.sh') -Version $Version - Replace-VersionPlaceholder -Path (Join-Path $StageRoot 'www/luci-static/resources/view/podkop/main.js') -Version $Version + $mainJsPath = Join-Path $StageRoot 'www/luci-static/resources/view/podkop_plus/main.js' + if (Test-Path -LiteralPath $mainJsPath) { + Replace-VersionPlaceholder -Path $mainJsPath -Version $Version + } - $poPath = Assert-RepoPath 'luci-app-podkop-plus\po\ru\podkop.po' - $lmoPath = Join-Path $StageRoot 'usr/lib/lua/luci/i18n/podkop.ru.lmo' + $poPath = Assert-RepoPath 'luci-app-podkop-plus\po\ru\podkop_plus.po' + $lmoPath = Join-Path $StageRoot 'usr/lib/lua/luci/i18n/podkop_plus.ru.lmo' New-Item -ItemType Directory -Path (Split-Path -Parent $lmoPath) -Force | Out-Null Convert-PoToLmo -PoPath $poPath -LmoPath $lmoPath