Make zapret optional and handle missing package gracefully
This commit is contained in:
@@ -28,4 +28,4 @@ sh <(wget -O - https://raw.githubusercontent.com/ushan0v/podkop-plus/main/instal
|
||||
- ручное управление очередью и fwmark: `--qnum`, `--dpi-desync-fwmark`;
|
||||
- режимы, которые ломают lifecycle процесса: `--daemon`;
|
||||
- режимы, которые не должны быть итоговой стратегией запуска: `--dry-run`, `--version`;
|
||||
- внешние конфиги вида `@file` или `$file`, которые обходят встроенную валидацию и управление очередями.
|
||||
- внешние конфиги вида `@file` или `$file`, которые обходят встроенную валидацию и управление очередями.
|
||||
|
||||
+187
-131
@@ -5,6 +5,13 @@
|
||||
"places": [
|
||||
"src/podkop/tabs/dashboard/initController.ts:345",
|
||||
"src/podkop/tabs/dashboard/initController.ts:356",
|
||||
"src/podkop/tabs/dashboard/initController.ts:369"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "✘ Not installed",
|
||||
"key": "✘ Not installed",
|
||||
"places": [
|
||||
"src/podkop/tabs/dashboard/initController.ts:367"
|
||||
]
|
||||
},
|
||||
@@ -14,7 +21,7 @@
|
||||
"places": [
|
||||
"src/podkop/tabs/dashboard/initController.ts:346",
|
||||
"src/podkop/tabs/dashboard/initController.ts:357",
|
||||
"src/podkop/tabs/dashboard/initController.ts:368"
|
||||
"src/podkop/tabs/dashboard/initController.ts:370"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -28,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:1551"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1700"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -42,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:1533"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1682"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Action",
|
||||
"key": "Action",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1401",
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1426"
|
||||
"../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"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -71,7 +78,7 @@
|
||||
"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:1935"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2084"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -100,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:1646"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1795"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:681"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:834"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:692"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:845"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -135,7 +142,7 @@
|
||||
"call": "Backend validation failed: %s",
|
||||
"key": "Backend validation failed: %s",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:783"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:936"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -145,6 +152,14 @@
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/ruleset.js:21"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Block",
|
||||
"key": "Block",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:229",
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:262"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Bootsrap DNS",
|
||||
"key": "Bootsrap DNS",
|
||||
@@ -177,7 +192,7 @@
|
||||
"call": "Built-in rule sets",
|
||||
"key": "Built-in rule sets",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1840"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1989"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -228,7 +243,6 @@
|
||||
"call": "Checks failed",
|
||||
"key": "Checks failed",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:38",
|
||||
"src/podkop/tabs/diagnostic/helpers/getMeta.ts:26"
|
||||
]
|
||||
},
|
||||
@@ -236,7 +250,8 @@
|
||||
"call": "Checks passed",
|
||||
"key": "Checks passed",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:38",
|
||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:40",
|
||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:82",
|
||||
"src/podkop/tabs/diagnostic/helpers/getMeta.ts:13"
|
||||
]
|
||||
},
|
||||
@@ -265,7 +280,7 @@
|
||||
"call": "Conditions",
|
||||
"key": "Conditions",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1389"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1512"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -286,14 +301,14 @@
|
||||
"call": "Connection",
|
||||
"key": "Connection",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1492"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1637"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Connection Type",
|
||||
"key": "Connection Type",
|
||||
"places": [
|
||||
"../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:1620"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -301,7 +316,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:1478"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1623"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -408,7 +423,7 @@
|
||||
"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:1711",
|
||||
"../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"
|
||||
]
|
||||
},
|
||||
@@ -417,7 +432,7 @@
|
||||
"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:1712",
|
||||
"../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"
|
||||
]
|
||||
},
|
||||
@@ -425,7 +440,7 @@
|
||||
"call": "DNS protocol",
|
||||
"key": "DNS protocol",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1709"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1858"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -453,7 +468,7 @@
|
||||
"call": "DNS server",
|
||||
"key": "DNS server",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1727"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1876"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -482,21 +497,21 @@
|
||||
"call": "Domain keyword",
|
||||
"key": "Domain keyword",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1810"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1959"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Domain regex",
|
||||
"key": "Domain regex",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1817"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1966"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Domains",
|
||||
"key": "Domains",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1782"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1931"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -567,9 +582,9 @@
|
||||
"call": "Duplicate value",
|
||||
"key": "Duplicate value",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:248",
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:263",
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:283"
|
||||
"../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"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -578,7 +593,7 @@
|
||||
"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:1391"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1514"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -592,7 +607,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:1698"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1847"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -606,7 +621,7 @@
|
||||
"call": "Enable Mixed Proxy",
|
||||
"key": "Enable Mixed Proxy",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1749"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1898"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -635,7 +650,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:1514"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1660"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -643,7 +658,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:1572"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1721"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -651,7 +666,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:1570"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1719"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -659,7 +674,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:1573"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1722"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -667,14 +682,14 @@
|
||||
"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:1571"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1720"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Exact full domain",
|
||||
"key": "Exact full domain",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1796"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1945"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -702,14 +717,14 @@
|
||||
"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:1750"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1899"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:844"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:997"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -723,12 +738,12 @@
|
||||
"call": "Failed to execute!",
|
||||
"key": "Failed to execute!",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:250",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:254",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:300",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:304",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:341",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:345"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:251",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:255",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:301",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:305",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:342",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:346"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -757,7 +772,7 @@
|
||||
"call": "Global check",
|
||||
"key": "Global check",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:245"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:246"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -771,7 +786,7 @@
|
||||
"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:1476"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1621"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -787,8 +802,8 @@
|
||||
"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:1482",
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1657"
|
||||
"../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"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -950,7 +965,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:1777",
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1926",
|
||||
"src/validators/validateShadowsocksUrl.ts:85"
|
||||
]
|
||||
},
|
||||
@@ -958,7 +973,7 @@
|
||||
"call": "Invalid regular expression",
|
||||
"key": "Invalid regular expression",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:191"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:310"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1134,7 +1149,7 @@
|
||||
"call": "IPs",
|
||||
"key": "IPs",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1789"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1938"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1148,14 +1163,14 @@
|
||||
"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:201"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:320"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Latest",
|
||||
"key": "Latest",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:501"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:502"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1197,42 +1212,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:1790"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1939"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:1811"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1960"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:1783"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1932"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:1818"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1967"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:1797"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1946"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:1825"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1974"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1240,7 +1255,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:1584"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1733"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1254,7 +1269,7 @@
|
||||
"call": "Mixed Proxy Port",
|
||||
"key": "Mixed Proxy Port",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1761"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1910"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1269,21 +1284,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:1606"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1755"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "NFQWS Strategy",
|
||||
"key": "NFQWS Strategy",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1441"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1586"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:974"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1127"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1293,6 +1308,13 @@
|
||||
"src/podkop/tabs/diagnostic/checks/runNftCheck.ts:105"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "No rules use zapret",
|
||||
"key": "No rules use zapret",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:45"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Node Type",
|
||||
"key": "Node Type",
|
||||
@@ -1307,6 +1329,13 @@
|
||||
"src/podkop/tabs/diagnostic/partials/renderCheckSection.ts:189"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "not installed",
|
||||
"key": "not installed",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:523"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Not responding",
|
||||
"key": "Not responding",
|
||||
@@ -1320,12 +1349,12 @@
|
||||
"call": "Not running",
|
||||
"key": "Not running",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:56",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:64",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:72",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:80",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:88",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:96"
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:57",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:65",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:73",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:81",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:89",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:97"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1353,7 +1382,7 @@
|
||||
"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:1052"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1205"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1362,15 +1391,15 @@
|
||||
"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:1481",
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1513"
|
||||
"../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"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Outdated",
|
||||
"key": "Outdated",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:491"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:492"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1419,12 +1448,12 @@
|
||||
"call": "Pending",
|
||||
"key": "Pending",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:112",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:120",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:128",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:136",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:144",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:152"
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:113",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:121",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:129",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:137",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:145",
|
||||
"src/podkop/tabs/diagnostic/diagnostic.store.ts:153"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1438,7 +1467,7 @@
|
||||
"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:862"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1015"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1459,14 +1488,22 @@
|
||||
"call": "Port cannot be empty",
|
||||
"key": "Port cannot be empty",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1769"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1918"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:1762"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1911"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Proxy",
|
||||
"key": "Proxy",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:238",
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:260"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1494,7 +1531,7 @@
|
||||
"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:1879"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2028"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1515,7 +1552,7 @@
|
||||
"call": "Resolver for interface outbound",
|
||||
"key": "Resolver for interface outbound",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1697"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1846"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1529,14 +1566,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:847"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1000"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:850"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1003"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1571,9 +1608,9 @@
|
||||
"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:1313",
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1322",
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1325"
|
||||
"../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"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1587,7 +1624,7 @@
|
||||
"call": "Rule sets",
|
||||
"key": "Rule sets",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1934"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2083"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1643,7 +1680,7 @@
|
||||
"call": "Russia inside restrictions",
|
||||
"key": "Russia inside restrictions",
|
||||
"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:2047"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1671,7 +1708,7 @@
|
||||
"call": "Section name",
|
||||
"key": "Section name",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1413"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1543"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1685,7 +1722,7 @@
|
||||
"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:1841"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1990"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1756,14 +1793,14 @@
|
||||
"key": "Selector",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:20",
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1479"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1624"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Selector connections",
|
||||
"key": "Selector connections",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1532"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1681"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1777,7 +1814,7 @@
|
||||
"call": "Service list",
|
||||
"key": "Service list",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1844"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1993"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1792,14 +1829,14 @@
|
||||
"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:1388"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1511"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Show sing-box config",
|
||||
"key": "Show sing-box config",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:329",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:330",
|
||||
"src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:116"
|
||||
]
|
||||
},
|
||||
@@ -1863,7 +1900,7 @@
|
||||
"call": "Source IPs",
|
||||
"key": "Source IPs",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1824"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1973"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1933,7 +1970,7 @@
|
||||
"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:859"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1012"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1947,35 +1984,43 @@
|
||||
"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:856"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1009"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "There are rules using zapret",
|
||||
"key": "There are rules using zapret",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:69",
|
||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:92"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:865"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1018"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:868"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1021"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:1037"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1190"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:1068"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1221"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2032,7 +2077,7 @@
|
||||
"key": "UDP",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:229",
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1713"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1862"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2047,21 +2092,21 @@
|
||||
"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:1645"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1794"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:779"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:932"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:1017"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1170"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2080,9 +2125,9 @@
|
||||
"src/podkop/tabs/diagnostic/initController.ts:28",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:29",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:30",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:31",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:32",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:463"
|
||||
"src/podkop/tabs/diagnostic/initController.ts:33",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:464"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2096,7 +2141,7 @@
|
||||
"call": "Unknown NFQWS flag.",
|
||||
"key": "Unknown NFQWS flag.",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1028"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1181"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2133,21 +2178,21 @@
|
||||
"key": "URLTest",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:21",
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1480"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1625"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "URLTest connections",
|
||||
"key": "URLTest connections",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1550"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1699"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "URLTest interval",
|
||||
"key": "URLTest interval",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1568"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1717"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2168,7 +2213,7 @@
|
||||
"call": "URLTest tolerance",
|
||||
"key": "URLTest tolerance",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1583"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1732"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2183,7 +2228,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:1613"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1762"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2197,7 +2242,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:1658"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1807"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2224,16 +2269,16 @@
|
||||
"call": "Validation errors:",
|
||||
"key": "Validation errors:",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:255",
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:275",
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:279"
|
||||
"../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"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "View logs",
|
||||
"key": "View logs",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/initController.ts:289",
|
||||
"src/podkop/tabs/diagnostic/initController.ts:290",
|
||||
"src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:107"
|
||||
]
|
||||
},
|
||||
@@ -2241,7 +2286,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:1414"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1544"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2249,28 +2294,28 @@
|
||||
"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:1493"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1638"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:1881"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2030"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:1900"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2049"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:1427"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1557"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2291,28 +2336,39 @@
|
||||
"call": "Zapret",
|
||||
"key": "Zapret",
|
||||
"places": [
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:234",
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:246",
|
||||
"src/podkop/tabs/dashboard/initController.ts:365"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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:853"
|
||||
"../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1006"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Zapret installed",
|
||||
"key": "Zapret installed",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:43"
|
||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:87"
|
||||
]
|
||||
},
|
||||
{
|
||||
"call": "Zapret not installed",
|
||||
"key": "Zapret not installed",
|
||||
"places": [
|
||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:43"
|
||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:59",
|
||||
"src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:64"
|
||||
]
|
||||
}
|
||||
]
|
||||
+169
-134
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP PLUS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-04-07 18:03+0300\n"
|
||||
"PO-Revision-Date: 2026-04-07 18:03+0300\n"
|
||||
"POT-Creation-Date: 2026-04-11 18:16+0300\n"
|
||||
"PO-Revision-Date: 2026-04-11 18:16+0300\n"
|
||||
"Last-Translator: ushan0v <ushan0v@users.noreply.github.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
@@ -18,13 +18,17 @@ msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:345
|
||||
#: src/podkop/tabs/dashboard/initController.ts:356
|
||||
#: src/podkop/tabs/dashboard/initController.ts:367
|
||||
#: src/podkop/tabs/dashboard/initController.ts:369
|
||||
msgid "✔ Running"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:367
|
||||
msgid "✘ Not installed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:346
|
||||
#: src/podkop/tabs/dashboard/initController.ts:357
|
||||
#: src/podkop/tabs/dashboard/initController.ts:368
|
||||
#: src/podkop/tabs/dashboard/initController.ts:370
|
||||
msgid "✘ Stopped"
|
||||
msgstr ""
|
||||
|
||||
@@ -32,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:1551
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1700
|
||||
msgid "A latency-tested group of proxy URLs for this section"
|
||||
msgstr ""
|
||||
|
||||
@@ -40,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:1533
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1682
|
||||
msgid "A manual group of proxy URLs for this section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1401
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1426
|
||||
#: ../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
|
||||
msgid "Action"
|
||||
msgstr ""
|
||||
|
||||
@@ -57,7 +61,7 @@ msgstr ""
|
||||
msgid "Add a section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1935
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2084
|
||||
msgid "Add URLs or local paths to .srs lists"
|
||||
msgstr ""
|
||||
|
||||
@@ -74,15 +78,15 @@ 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:1646
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1795
|
||||
msgid "Applicable for SOCKS and Shadowsocks links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:681
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:834
|
||||
msgid "At least one valid domain must be specified."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:692
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:845
|
||||
msgid "At least one valid IP or subnet must be specified."
|
||||
msgstr ""
|
||||
|
||||
@@ -94,7 +98,7 @@ msgstr ""
|
||||
msgid "Available actions"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:783
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:936
|
||||
msgid "Backend validation failed: %s"
|
||||
msgstr ""
|
||||
|
||||
@@ -102,6 +106,11 @@ msgstr ""
|
||||
msgid "Binary file"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:229
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:262
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:65
|
||||
msgid "Bootsrap DNS"
|
||||
msgstr ""
|
||||
@@ -118,7 +127,7 @@ msgstr ""
|
||||
msgid "Browser is using FakeIP correctly"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1840
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1989
|
||||
msgid "Built-in rule sets"
|
||||
msgstr ""
|
||||
|
||||
@@ -151,12 +160,12 @@ msgstr ""
|
||||
msgid "checks"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:38
|
||||
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:26
|
||||
msgid "Checks failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:38
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:40
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:82
|
||||
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:13
|
||||
msgid "Checks passed"
|
||||
msgstr ""
|
||||
@@ -173,7 +182,7 @@ msgstr ""
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1389
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1512
|
||||
msgid "Conditions"
|
||||
msgstr ""
|
||||
|
||||
@@ -185,16 +194,16 @@ msgstr ""
|
||||
msgid "Configuration for Podkop Plus service"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1492
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1637
|
||||
msgid "Connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../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:1620
|
||||
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:1478
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1623
|
||||
msgid "Connection URL"
|
||||
msgstr ""
|
||||
|
||||
@@ -256,18 +265,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:1711
|
||||
#: ../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
|
||||
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:1712
|
||||
#: ../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
|
||||
msgid "DNS over TLS (DoT)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1709
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1858
|
||||
msgid "DNS protocol"
|
||||
msgstr ""
|
||||
|
||||
@@ -283,7 +292,7 @@ msgstr ""
|
||||
msgid "DNS Rewrite TTL"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1727
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1876
|
||||
msgid "DNS server"
|
||||
msgstr ""
|
||||
|
||||
@@ -300,15 +309,15 @@ msgstr ""
|
||||
msgid "Do not panic, everything can be fixed, just..."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1810
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1959
|
||||
msgid "Domain keyword"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1817
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1966
|
||||
msgid "Domain regex"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1782
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1931
|
||||
msgid "Domains"
|
||||
msgstr ""
|
||||
|
||||
@@ -349,15 +358,15 @@ msgstr ""
|
||||
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:248
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:263
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:283
|
||||
#: ../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
|
||||
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:1391
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1514
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
@@ -365,7 +374,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:1698
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1847
|
||||
msgid "Enable a dedicated DNS resolver when this section uses an interface"
|
||||
msgstr ""
|
||||
|
||||
@@ -373,7 +382,7 @@ msgstr ""
|
||||
msgid "Enable autostart"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1749
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1898
|
||||
msgid "Enable Mixed Proxy"
|
||||
msgstr ""
|
||||
|
||||
@@ -390,31 +399,31 @@ 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:1514
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1660
|
||||
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:1572
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1721
|
||||
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:1570
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1719
|
||||
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:1573
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1722
|
||||
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:1571
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1720
|
||||
msgid "Every minute"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1796
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1945
|
||||
msgid "Exact full domain"
|
||||
msgstr ""
|
||||
|
||||
@@ -430,11 +439,11 @@ msgstr ""
|
||||
msgid "Expecting: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1750
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1899
|
||||
msgid "Expose this section as a local HTTP+SOCKS proxy"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:844
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:997
|
||||
msgid "External nfqws config files bypass Podkop Plus queue management and explicit validation."
|
||||
msgstr ""
|
||||
|
||||
@@ -442,12 +451,12 @@ msgstr ""
|
||||
msgid "Failed to copy!"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:250
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:254
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:300
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:304
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:341
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:345
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:251
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:255
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:301
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:305
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:342
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:346
|
||||
msgid "Failed to execute!"
|
||||
msgstr ""
|
||||
|
||||
@@ -464,7 +473,7 @@ msgstr ""
|
||||
msgid "Get global check"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:245
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:246
|
||||
msgid "Global check"
|
||||
msgstr ""
|
||||
|
||||
@@ -472,7 +481,7 @@ msgstr ""
|
||||
msgid "How often this remote rule set should be refreshed"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1476
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1621
|
||||
msgid "How to configure the proxy connection for this section"
|
||||
msgstr ""
|
||||
|
||||
@@ -482,8 +491,8 @@ 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:1482
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1657
|
||||
#: ../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
|
||||
msgid "Interface"
|
||||
msgstr ""
|
||||
|
||||
@@ -576,12 +585,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:1777
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1926
|
||||
#: 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:191
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:310
|
||||
msgid "Invalid regular expression"
|
||||
msgstr ""
|
||||
|
||||
@@ -682,7 +691,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:1789
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1938
|
||||
msgid "IPs"
|
||||
msgstr ""
|
||||
|
||||
@@ -690,11 +699,11 @@ msgstr ""
|
||||
msgid "Issues detected"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:201
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:320
|
||||
msgid "Keyword must not contain spaces"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:501
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:502
|
||||
msgid "Latest"
|
||||
msgstr ""
|
||||
|
||||
@@ -718,32 +727,32 @@ msgstr ""
|
||||
msgid "Main DNS"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1790
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1939
|
||||
msgid "Match destination IPs or subnets"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1811
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1960
|
||||
msgid "Match domains containing a substring"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1783
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1932
|
||||
msgid "Match domains including all subdomains"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1818
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1967
|
||||
msgid "Match domains using a regular expression"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1797
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1946
|
||||
msgid "Match only one exact full domain name"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1825
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1974
|
||||
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:1584
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1733
|
||||
msgid "Maximum response time delta in milliseconds"
|
||||
msgstr ""
|
||||
|
||||
@@ -751,7 +760,7 @@ msgstr ""
|
||||
msgid "Memory Usage"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1761
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1910
|
||||
msgid "Mixed Proxy Port"
|
||||
msgstr ""
|
||||
|
||||
@@ -760,15 +769,15 @@ 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:1606
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1755
|
||||
msgid "Must be a number in the range of 50 - 1000"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1441
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1586
|
||||
msgid "NFQWS Strategy"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:974
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1127
|
||||
msgid "NFQWS strategy cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
@@ -776,6 +785,10 @@ msgstr ""
|
||||
msgid "No other marking rules found"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:45
|
||||
msgid "No rules use zapret"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:16
|
||||
msgid "Node Type"
|
||||
msgstr ""
|
||||
@@ -784,18 +797,22 @@ msgstr ""
|
||||
msgid "Not implement yet"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:523
|
||||
msgid "not installed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:75
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:81
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:100
|
||||
msgid "Not responding"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:56
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:64
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:72
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:80
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:88
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:96
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:57
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:65
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:73
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:81
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:89
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:97
|
||||
msgid "Not running"
|
||||
msgstr ""
|
||||
|
||||
@@ -811,18 +828,18 @@ msgstr ""
|
||||
msgid "Optional node used to download this remote rule set"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1052
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1205
|
||||
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:1481
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1513
|
||||
#: ../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
|
||||
msgid "Outbound JSON"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:491
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:492
|
||||
msgid "Outdated"
|
||||
msgstr ""
|
||||
|
||||
@@ -850,12 +867,12 @@ msgstr ""
|
||||
msgid "Path must end with cache.db"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:112
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:120
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:128
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:136
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:144
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:152
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:113
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:121
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:129
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:137
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:145
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:153
|
||||
msgid "Pending"
|
||||
msgstr ""
|
||||
|
||||
@@ -863,7 +880,7 @@ msgstr ""
|
||||
msgid "Podkop Plus"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:862
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1015
|
||||
msgid "Podkop Plus manages the nfqws process lifecycle itself, so daemon mode is not allowed here."
|
||||
msgstr ""
|
||||
|
||||
@@ -875,14 +892,19 @@ msgstr ""
|
||||
msgid "Podkop Plus will not modify your DHCP configuration"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1769
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1918
|
||||
msgid "Port cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: ../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:1911
|
||||
msgid "Port for the local mixed proxy of this section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:238
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:260
|
||||
msgid "Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:31
|
||||
msgid "Proxy Configuration URL"
|
||||
msgstr ""
|
||||
@@ -895,7 +917,7 @@ msgstr ""
|
||||
msgid "Proxy traffic is routed via FakeIP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1879
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2028
|
||||
msgid "Regional options cannot be used together"
|
||||
msgstr ""
|
||||
|
||||
@@ -907,7 +929,7 @@ msgstr ""
|
||||
msgid "Remote URL to a sing-box rule set"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1697
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1846
|
||||
msgid "Resolver for interface outbound"
|
||||
msgstr ""
|
||||
|
||||
@@ -915,11 +937,11 @@ msgstr ""
|
||||
msgid "Resolver For Interface Outbound"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:847
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1000
|
||||
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:850
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1003
|
||||
msgid "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE."
|
||||
msgstr ""
|
||||
|
||||
@@ -939,9 +961,9 @@ msgstr ""
|
||||
msgid "Routing Excluded IPs"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1313
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1322
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1325
|
||||
#: ../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
|
||||
msgid "Rule set must be a direct .srs URL or a local .srs path"
|
||||
msgstr ""
|
||||
|
||||
@@ -949,7 +971,7 @@ msgstr ""
|
||||
msgid "Rule set URL"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1934
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2083
|
||||
msgid "Rule sets"
|
||||
msgstr ""
|
||||
|
||||
@@ -981,7 +1003,7 @@ msgstr ""
|
||||
msgid "Run Diagnostic"
|
||||
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:2047
|
||||
msgid "Russia inside restrictions"
|
||||
msgstr ""
|
||||
|
||||
@@ -997,7 +1019,7 @@ msgstr ""
|
||||
msgid "Section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1413
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1543
|
||||
msgid "Section name"
|
||||
msgstr ""
|
||||
|
||||
@@ -1005,7 +1027,7 @@ msgstr ""
|
||||
msgid "Sections"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1841
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1990
|
||||
msgid "Select a predefined list for routing"
|
||||
msgstr ""
|
||||
|
||||
@@ -1046,11 +1068,11 @@ msgid "Select the WAN interfaces to be monitored"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:20
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1479
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1624
|
||||
msgid "Selector"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1532
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1681
|
||||
msgid "Selector connections"
|
||||
msgstr ""
|
||||
|
||||
@@ -1058,7 +1080,7 @@ msgstr ""
|
||||
msgid "Selector Links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1844
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1993
|
||||
msgid "Service list"
|
||||
msgstr ""
|
||||
|
||||
@@ -1067,11 +1089,11 @@ 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:1388
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1511
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:329
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:330
|
||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:116
|
||||
msgid "Show sing-box config"
|
||||
msgstr ""
|
||||
@@ -1108,7 +1130,7 @@ msgstr ""
|
||||
msgid "Source file"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1824
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1973
|
||||
msgid "Source IPs"
|
||||
msgstr ""
|
||||
|
||||
@@ -1148,7 +1170,7 @@ msgstr ""
|
||||
msgid "Test latency"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:859
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1012
|
||||
msgid "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here."
|
||||
msgstr ""
|
||||
|
||||
@@ -1156,23 +1178,28 @@ msgstr ""
|
||||
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:856
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1009
|
||||
msgid "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:865
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:69
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:92
|
||||
msgid "There are rules using zapret"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1018
|
||||
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:868
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1021
|
||||
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:1037
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1190
|
||||
msgid "This flag does not accept a value."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1068
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1221
|
||||
msgid "This option requires a value."
|
||||
msgstr ""
|
||||
|
||||
@@ -1205,7 +1232,7 @@ msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:229
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1713
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1862
|
||||
msgid "UDP"
|
||||
msgstr ""
|
||||
|
||||
@@ -1214,15 +1241,15 @@ 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:1645
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1794
|
||||
msgid "UDP over TCP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:779
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:932
|
||||
msgid "Unable to validate the NFQWS strategy through the backend parser."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1017
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1170
|
||||
msgid "Unexpected standalone token. Use explicit flags such as --name or --name=value."
|
||||
msgstr ""
|
||||
|
||||
@@ -1235,9 +1262,9 @@ msgstr ""
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:28
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:29
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:30
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:31
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:32
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:463
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:33
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:464
|
||||
msgid "unknown"
|
||||
msgstr ""
|
||||
|
||||
@@ -1245,7 +1272,7 @@ msgstr ""
|
||||
msgid "Unknown error"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1028
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1181
|
||||
msgid "Unknown NFQWS flag."
|
||||
msgstr ""
|
||||
|
||||
@@ -1267,15 +1294,15 @@ msgid "URL must use one of the following protocols:"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:21
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1480
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1625
|
||||
msgid "URLTest"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1550
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1699
|
||||
msgid "URLTest connections"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1568
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1717
|
||||
msgid "URLTest interval"
|
||||
msgstr ""
|
||||
|
||||
@@ -1287,7 +1314,7 @@ msgstr ""
|
||||
msgid "URLTest Links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1583
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1732
|
||||
msgid "URLTest tolerance"
|
||||
msgstr ""
|
||||
|
||||
@@ -1296,7 +1323,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:1613
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1762
|
||||
msgid "URLTest URL"
|
||||
msgstr ""
|
||||
|
||||
@@ -1304,7 +1331,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:1658
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1807
|
||||
msgid "Use a network interface as the outbound for this section"
|
||||
msgstr ""
|
||||
|
||||
@@ -1325,35 +1352,35 @@ msgstr ""
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:255
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:275
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:279
|
||||
#: ../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
|
||||
msgid "Validation errors:"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:289
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:290
|
||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:107
|
||||
msgid "View logs"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1414
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1544
|
||||
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:1493
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1638
|
||||
msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1881
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2030
|
||||
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:1900
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2049
|
||||
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:1427
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1557
|
||||
msgid "What Podkop Plus should do when this section matches"
|
||||
msgstr ""
|
||||
|
||||
@@ -1365,18 +1392,26 @@ msgstr ""
|
||||
msgid "You can select Output Network Interface, by default autodetect"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:234
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:246
|
||||
#: src/podkop/tabs/dashboard/initController.ts:365
|
||||
msgid "Zapret"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:853
|
||||
#: ../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
|
||||
msgid "Zapret (package not installed)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1006
|
||||
msgid "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies."
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:43
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:87
|
||||
msgid "Zapret installed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:43
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:59
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:64
|
||||
msgid "Zapret not installed"
|
||||
msgstr ""
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP PLUS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-04-07 21:03+0300\n"
|
||||
"PO-Revision-Date: 2026-04-07 21:03+0300\n"
|
||||
"POT-Creation-Date: 2026-04-11 21:16+0300\n"
|
||||
"PO-Revision-Date: 2026-04-11 21:16+0300\n"
|
||||
"Last-Translator: ushan0v\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ru\n"
|
||||
@@ -20,6 +20,9 @@ msgstr ""
|
||||
msgid "✔ Running"
|
||||
msgstr "✔ Работает"
|
||||
|
||||
msgid "✘ Not installed"
|
||||
msgstr "✘ Не установлен"
|
||||
|
||||
msgid "✘ Stopped"
|
||||
msgstr "✘ Остановлен"
|
||||
|
||||
@@ -77,6 +80,9 @@ msgstr "Backend-проверка завершилась ошибкой: %s"
|
||||
msgid "Binary file"
|
||||
msgstr "Бинарный файл"
|
||||
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bootsrap DNS"
|
||||
msgstr "Bootstrap DNS"
|
||||
|
||||
@@ -551,12 +557,18 @@ msgstr "Стратегия NFQWS не может быть пустой"
|
||||
msgid "No other marking rules found"
|
||||
msgstr "Другие правила маркировки не найдены"
|
||||
|
||||
msgid "No rules use zapret"
|
||||
msgstr "Нет правил использующих zapret"
|
||||
|
||||
msgid "Node Type"
|
||||
msgstr "Тип узла"
|
||||
|
||||
msgid "Not implement yet"
|
||||
msgstr "Ещё не реализовано"
|
||||
|
||||
msgid "not installed"
|
||||
msgstr "не установлен"
|
||||
|
||||
msgid "Not responding"
|
||||
msgstr "Не отвечает"
|
||||
|
||||
@@ -620,6 +632,9 @@ msgstr "Порт не может быть пустым"
|
||||
msgid "Port for the local mixed proxy of this section"
|
||||
msgstr "Порт локального смешанного прокси для этой секции"
|
||||
|
||||
msgid "Proxy"
|
||||
msgstr ""
|
||||
|
||||
msgid "Proxy Configuration URL"
|
||||
msgstr "URL конфигурации прокси"
|
||||
|
||||
@@ -824,6 +839,9 @@ msgstr "DNS-сервер, используемый для поиска IP-адр
|
||||
msgid "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here."
|
||||
msgstr "Номер NFQUEUE назначается Podkop Plus для каждого правила и не должен переопределяться здесь."
|
||||
|
||||
msgid "There are rules using zapret"
|
||||
msgstr "Есть правила использующие zapret"
|
||||
|
||||
msgid "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here."
|
||||
msgstr "Это поле должно запускать рабочую стратегию nfqws; --dry-run сразу завершает процесс и здесь запрещён."
|
||||
|
||||
@@ -959,6 +977,9 @@ msgstr "Вы можете выбрать выходной сетевой инт
|
||||
msgid "Zapret"
|
||||
msgstr "Zapret"
|
||||
|
||||
msgid "Zapret (package not installed)"
|
||||
msgstr "Zapret (пакет не установлен)"
|
||||
|
||||
msgid "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies."
|
||||
msgstr "Шаблоны hostlist zapret здесь не поддерживаются, потому что Podkop Plus не разворачивает их для per-rule стратегий NFQWS."
|
||||
|
||||
|
||||
@@ -34,10 +34,7 @@ export async function fetchServicesInfo() {
|
||||
}
|
||||
|
||||
const podkop = getSettledMethodResponse('getStatus', podkopResult);
|
||||
const singbox = getSettledMethodResponse(
|
||||
'getSingBoxStatus',
|
||||
singboxResult,
|
||||
);
|
||||
const singbox = getSettledMethodResponse('getSingBoxStatus', singboxResult);
|
||||
const zapret = getSettledMethodResponse('getZapretStatus', zapretResult);
|
||||
|
||||
store.set({
|
||||
@@ -49,6 +46,7 @@ export async function fetchServicesInfo() {
|
||||
podkopRunning: podkop.success ? podkop.data.running : 0,
|
||||
podkopEnabled: podkop.success ? podkop.data.enabled : 0,
|
||||
zapret: zapret.success ? zapret.data.ready : 0,
|
||||
zapretInstalled: zapret.success ? zapret.data.installed : 0,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -4,6 +4,40 @@ import { logger } from './logger.service';
|
||||
import { PodkopLogWatcher } from './podkopLogWatcher.service';
|
||||
import { PodkopShellMethods } from '../methods';
|
||||
|
||||
const LOG_NOTIFICATION_DEDUPE_WINDOW_MS = 15000;
|
||||
const recentErrorNotifications = new Map<string, number>();
|
||||
|
||||
function getNotificationKey(line: string) {
|
||||
const lower = line.toLowerCase();
|
||||
const errorIndex = lower.indexOf('[error]');
|
||||
const fatalIndex = lower.indexOf('[fatal]');
|
||||
const markerIndex =
|
||||
errorIndex >= 0 && fatalIndex >= 0
|
||||
? Math.min(errorIndex, fatalIndex)
|
||||
: Math.max(errorIndex, fatalIndex);
|
||||
|
||||
return (markerIndex >= 0 ? line.slice(markerIndex) : line).trim();
|
||||
}
|
||||
|
||||
function shouldNotifyAboutLogLine(line: string) {
|
||||
const key = getNotificationKey(line);
|
||||
const now = Date.now();
|
||||
const lastShownAt = recentErrorNotifications.get(key) ?? 0;
|
||||
|
||||
recentErrorNotifications.forEach((shownAt, storedKey) => {
|
||||
if (now - shownAt > LOG_NOTIFICATION_DEDUPE_WINDOW_MS) {
|
||||
recentErrorNotifications.delete(storedKey);
|
||||
}
|
||||
});
|
||||
|
||||
if (now - lastShownAt < LOG_NOTIFICATION_DEDUPE_WINDOW_MS) {
|
||||
return false;
|
||||
}
|
||||
|
||||
recentErrorNotifications.set(key, now);
|
||||
return true;
|
||||
}
|
||||
|
||||
export function coreService() {
|
||||
TabServiceInstance.onChange((activeId, tabs) => {
|
||||
logger.info('[TAB]', activeId);
|
||||
@@ -31,14 +65,11 @@ export function coreService() {
|
||||
intervalMs: 3000,
|
||||
onNewLog: (line) => {
|
||||
if (
|
||||
line.toLowerCase().includes('[error]') ||
|
||||
line.toLowerCase().includes('[fatal]')
|
||||
(line.toLowerCase().includes('[error]') ||
|
||||
line.toLowerCase().includes('[fatal]')) &&
|
||||
shouldNotifyAboutLogLine(line)
|
||||
) {
|
||||
ui.addNotification(
|
||||
'Podkop Plus Error',
|
||||
E('div', {}, line),
|
||||
'error',
|
||||
);
|
||||
ui.addNotification('Podkop Plus Error', E('div', {}, line), 'error');
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
@@ -164,6 +164,7 @@ export interface StoreType {
|
||||
podkopRunning: number;
|
||||
podkopEnabled: number;
|
||||
zapret: number;
|
||||
zapretInstalled: number;
|
||||
};
|
||||
};
|
||||
sectionsWidget: {
|
||||
@@ -193,6 +194,7 @@ export interface StoreType {
|
||||
luci_app_version: string;
|
||||
sing_box_version: string;
|
||||
zapret_version: string;
|
||||
zapret_installed: number;
|
||||
openwrt_version: string;
|
||||
device_model: string;
|
||||
};
|
||||
@@ -221,7 +223,13 @@ const initialStore: StoreType = {
|
||||
servicesInfoWidget: {
|
||||
loading: true,
|
||||
failed: false,
|
||||
data: { singbox: 0, podkopRunning: 0, podkopEnabled: 0, zapret: 0 },
|
||||
data: {
|
||||
singbox: 0,
|
||||
podkopRunning: 0,
|
||||
podkopEnabled: 0,
|
||||
zapret: 0,
|
||||
zapretInstalled: 0,
|
||||
},
|
||||
},
|
||||
sectionsWidget: {
|
||||
loading: true,
|
||||
|
||||
@@ -363,13 +363,17 @@ async function renderServicesInfoWidget() {
|
||||
},
|
||||
{
|
||||
key: _('Zapret'),
|
||||
value: servicesInfoWidget.data.zapret
|
||||
? _('✔ Running')
|
||||
: _('✘ Stopped'),
|
||||
value: !servicesInfoWidget.data.zapretInstalled
|
||||
? _('✘ Not installed')
|
||||
: servicesInfoWidget.data.zapret
|
||||
? _('✔ Running')
|
||||
: _('✘ Stopped'),
|
||||
attributes: {
|
||||
class: servicesInfoWidget.data.zapret
|
||||
? 'pdk_dashboard-page__widgets-section__item__row--success'
|
||||
: 'pdk_dashboard-page__widgets-section__item__row--error',
|
||||
class:
|
||||
servicesInfoWidget.data.zapretInstalled &&
|
||||
servicesInfoWidget.data.zapret
|
||||
? 'pdk_dashboard-page__widgets-section__item__row--success'
|
||||
: 'pdk_dashboard-page__widgets-section__item__row--error',
|
||||
},
|
||||
},
|
||||
],
|
||||
|
||||
@@ -14,9 +14,9 @@ export async function runZapretCheck() {
|
||||
items: [],
|
||||
});
|
||||
|
||||
const zapretChecks = await PodkopShellMethods.checkZapretRuntime();
|
||||
const zapretStatus = await PodkopShellMethods.getZapretStatus();
|
||||
|
||||
if (!zapretChecks.success) {
|
||||
if (!zapretStatus.success) {
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
@@ -29,24 +29,76 @@ export async function runZapretCheck() {
|
||||
throw new Error('Zapret checks failed');
|
||||
}
|
||||
|
||||
const installed = Boolean(zapretChecks.data.zapret_installed);
|
||||
const installed = Boolean(zapretStatus.data.installed);
|
||||
const hasZapretRules = Number(zapretStatus.data.enabled_rule_count || 0) > 0;
|
||||
|
||||
if (installed) {
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _('Checks passed'),
|
||||
state: 'success',
|
||||
items: [
|
||||
{
|
||||
state: 'success',
|
||||
key: _('Zapret installed'),
|
||||
value: '',
|
||||
},
|
||||
{
|
||||
state: 'success',
|
||||
key: hasZapretRules
|
||||
? _('There are rules using zapret')
|
||||
: _('No rules use zapret'),
|
||||
value: '',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (hasZapretRules) {
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _('Zapret not installed'),
|
||||
state: 'error',
|
||||
items: [
|
||||
{
|
||||
state: 'error',
|
||||
key: _('Zapret not installed'),
|
||||
value: '',
|
||||
},
|
||||
{
|
||||
state: 'error',
|
||||
key: _('There are rules using zapret'),
|
||||
value: '',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: installed ? _('Checks passed') : _('Checks failed'),
|
||||
state: installed ? 'success' : 'error',
|
||||
description: _('Zapret not installed'),
|
||||
state: 'warning',
|
||||
items: [
|
||||
{
|
||||
state: installed ? 'success' : 'error',
|
||||
key: installed ? _('Zapret installed') : _('Zapret not installed'),
|
||||
state: 'warning',
|
||||
key: _('Zapret not installed'),
|
||||
value: '',
|
||||
},
|
||||
{
|
||||
state: 'success',
|
||||
key: _('No rules use zapret'),
|
||||
value: '',
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
if (!installed) {
|
||||
throw new Error('Zapret checks failed');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ export const initialDiagnosticStore: Pick<
|
||||
luci_app_version: 'loading',
|
||||
sing_box_version: 'loading',
|
||||
zapret_version: 'loading',
|
||||
zapret_installed: 0,
|
||||
openwrt_version: 'loading',
|
||||
device_model: 'loading',
|
||||
},
|
||||
|
||||
@@ -28,6 +28,7 @@ const UNKNOWN_DIAGNOSTICS_SYSTEM_INFO = {
|
||||
luci_app_version: _('unknown'),
|
||||
sing_box_version: _('unknown'),
|
||||
zapret_version: _('unknown'),
|
||||
zapret_installed: 0,
|
||||
openwrt_version: _('unknown'),
|
||||
device_model: _('unknown'),
|
||||
};
|
||||
@@ -517,7 +518,9 @@ function renderDiagnosticSystemInfoWidget() {
|
||||
},
|
||||
{
|
||||
key: 'Zapret',
|
||||
value: diagnosticsSystemInfo.zapret_version,
|
||||
value: diagnosticsSystemInfo.zapret_installed
|
||||
? diagnosticsSystemInfo.zapret_version
|
||||
: _('not installed'),
|
||||
},
|
||||
{
|
||||
key: 'OS',
|
||||
|
||||
@@ -187,6 +187,7 @@ export namespace Podkop {
|
||||
luci_app_version: string;
|
||||
sing_box_version: string;
|
||||
zapret_version: string;
|
||||
zapret_installed: 0 | 1;
|
||||
openwrt_version: string;
|
||||
device_model: string;
|
||||
}
|
||||
|
||||
+197
-59
@@ -4,14 +4,7 @@
|
||||
REPO_OWNER="ushan0v"
|
||||
REPO_NAME="podkop-plus"
|
||||
|
||||
PODKOP_PLUS_RELEASE_TAG="${PODKOP_PLUS_RELEASE_TAG:-}"
|
||||
PODKOP_PLUS_SOURCE_REF="${PODKOP_PLUS_SOURCE_REF:-}"
|
||||
ZAPRET_RELEASE_TAG="${ZAPRET_RELEASE_TAG:-}"
|
||||
|
||||
DOWNLOAD_RETRIES="${DOWNLOAD_RETRIES:-3}"
|
||||
REQUIRED_SPACE_KB=15360
|
||||
PODKOP_PLUS_ASSUME_YES="${PODKOP_PLUS_ASSUME_YES:-0}"
|
||||
PODKOP_PLUS_KEEP_EXISTING_ZAPRET="${PODKOP_PLUS_KEEP_EXISTING_ZAPRET:-0}"
|
||||
|
||||
PKG_IS_APK=0
|
||||
FETCHER=""
|
||||
@@ -20,8 +13,12 @@ PODKOP_WAS_ENABLED=0
|
||||
TARGET_ARCH=""
|
||||
ZAPRET_ARCH=""
|
||||
ZAPRET_ARCH_CANDIDATES=""
|
||||
ZAPRET_ALREADY_PRESENT=0
|
||||
ZAPRET_REQUESTED=0
|
||||
ZAPRET_SKIPPED_REASON=""
|
||||
|
||||
PODKOP_PLUS_RELEASE_JSON=""
|
||||
PODKOP_PLUS_RELEASE_TAG=""
|
||||
PODKOP_PLUS_PACKAGE_URL=""
|
||||
PODKOP_PLUS_PACKAGE_NAME=""
|
||||
PODKOP_PLUS_PACKAGE_FILE=""
|
||||
@@ -57,6 +54,24 @@ cleanup() {
|
||||
[ -n "$TMP_DIR" ] && rm -rf "$TMP_DIR"
|
||||
}
|
||||
|
||||
clear_zapret_download_state() {
|
||||
ZAPRET_RELEASE_JSON=""
|
||||
ZAPRET_RELEASE_TAG_RESOLVED=""
|
||||
ZAPRET_BUNDLE_URL=""
|
||||
ZAPRET_BUNDLE_NAME=""
|
||||
ZAPRET_PACKAGE_NAME=""
|
||||
ZAPRET_PACKAGE_FILE=""
|
||||
ZAPRET_PACKAGE_VERSION=""
|
||||
ZAPRET_ARCH=""
|
||||
}
|
||||
|
||||
read_openwrt_release_value() {
|
||||
key="$1"
|
||||
|
||||
[ -f /etc/openwrt_release ] || return 0
|
||||
sed -n "s/^${key}='\(.*\)'/\1/p" /etc/openwrt_release 2>/dev/null | head -n 1
|
||||
}
|
||||
|
||||
command_exists() {
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
@@ -117,9 +132,10 @@ download_with_retry() {
|
||||
output_path="$2"
|
||||
label="$3"
|
||||
attempt=1
|
||||
max_attempts=3
|
||||
|
||||
while [ "$attempt" -le "$DOWNLOAD_RETRIES" ]; do
|
||||
msg "Downloading $label ($attempt/$DOWNLOAD_RETRIES)"
|
||||
while [ "$attempt" -le "$max_attempts" ]; do
|
||||
msg "Downloading $label ($attempt/$max_attempts)"
|
||||
|
||||
if download_file_once "$url" "$output_path" && [ -s "$output_path" ]; then
|
||||
return 0
|
||||
@@ -151,6 +167,10 @@ pkg_is_installed() {
|
||||
fi
|
||||
}
|
||||
|
||||
is_zapret_present() {
|
||||
pkg_is_installed "zapret" || [ -x /opt/zapret/nfq/nfqws ]
|
||||
}
|
||||
|
||||
pkg_list_update() {
|
||||
if [ "$PKG_IS_APK" -eq 1 ]; then
|
||||
apk update
|
||||
@@ -241,7 +261,7 @@ check_system() {
|
||||
model="$(cat /tmp/sysinfo/model 2>/dev/null || true)"
|
||||
[ -n "$model" ] && msg "Router model: $model"
|
||||
|
||||
release="$(sed -n "s/^DISTRIB_RELEASE='\(.*\)'/\1/p" /etc/openwrt_release | head -n 1)"
|
||||
release="$(read_openwrt_release_value "DISTRIB_RELEASE")"
|
||||
major="$(printf '%s' "$release" | sed 's/[^0-9].*$//' | cut -d. -f1)"
|
||||
|
||||
if [ -n "$major" ] && [ "$major" -lt 24 ]; then
|
||||
@@ -260,10 +280,6 @@ confirm_prompt() {
|
||||
prompt_text="$1"
|
||||
answer=""
|
||||
|
||||
if [ "$PODKOP_PLUS_ASSUME_YES" = "1" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
printf '%s [y/N]: ' "$prompt_text"
|
||||
read -r answer || return 1
|
||||
|
||||
@@ -332,16 +348,9 @@ extract_package_version() {
|
||||
fetch_github_release_json() {
|
||||
owner="$1"
|
||||
repo="$2"
|
||||
tag="$3"
|
||||
url=""
|
||||
response=""
|
||||
message=""
|
||||
|
||||
if [ -n "$tag" ]; then
|
||||
url="https://api.github.com/repos/${owner}/${repo}/releases/tags/${tag}"
|
||||
else
|
||||
url="https://api.github.com/repos/${owner}/${repo}/releases/latest"
|
||||
fi
|
||||
url="https://api.github.com/repos/${owner}/${repo}/releases/latest"
|
||||
|
||||
response="$(http_get "$url" 2>/dev/null || true)"
|
||||
[ -n "$response" ] || fail "Failed to query GitHub release metadata for ${owner}/${repo}"
|
||||
@@ -351,12 +360,9 @@ fetch_github_release_json() {
|
||||
message="$(printf '%s' "$response" | jq -r '.message // empty')"
|
||||
case "$message" in
|
||||
*"API rate limit"*|*"rate limit exceeded"*)
|
||||
fail "GitHub API rate limit reached. Try again later or set PODKOP_PLUS_RELEASE_TAG/ZAPRET_RELEASE_TAG manually."
|
||||
fail "GitHub API rate limit reached. Try again later."
|
||||
;;
|
||||
"Not Found")
|
||||
if [ -n "$tag" ]; then
|
||||
fail "GitHub release tag not found: ${owner}/${repo}@${tag}"
|
||||
fi
|
||||
fail "No published releases found for ${owner}/${repo}"
|
||||
;;
|
||||
esac
|
||||
@@ -369,12 +375,10 @@ resolve_podkop_plus_release() {
|
||||
|
||||
[ "$PKG_IS_APK" -eq 1 ] && asset_ext="apk"
|
||||
|
||||
PODKOP_PLUS_RELEASE_JSON="$(fetch_github_release_json "$REPO_OWNER" "$REPO_NAME" "$PODKOP_PLUS_RELEASE_TAG")"
|
||||
PODKOP_PLUS_RELEASE_JSON="$(fetch_github_release_json "$REPO_OWNER" "$REPO_NAME")"
|
||||
PODKOP_PLUS_RELEASE_TAG="$(printf '%s' "$PODKOP_PLUS_RELEASE_JSON" | jq -r '.tag_name // empty')"
|
||||
[ -n "$PODKOP_PLUS_RELEASE_TAG" ] || fail "Failed to detect the Podkop Plus release tag"
|
||||
|
||||
[ -n "$PODKOP_PLUS_SOURCE_REF" ] || PODKOP_PLUS_SOURCE_REF="$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')"
|
||||
|
||||
@@ -426,7 +430,7 @@ reset_legacy_config_if_needed() {
|
||||
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"
|
||||
|
||||
default_config_url="https://raw.githubusercontent.com/${REPO_OWNER}/${REPO_NAME}/${PODKOP_PLUS_SOURCE_REF}/podkop/files/etc/config/podkop"
|
||||
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"
|
||||
|
||||
download_with_retry "$default_config_url" "$default_config_tmp" "default Podkop Plus config" || fail "Failed to download the default Podkop Plus config"
|
||||
@@ -512,6 +516,12 @@ append_arch_candidate() {
|
||||
|
||||
[ -n "$candidate" ] || return 0
|
||||
|
||||
case "$candidate" in
|
||||
all|noarch)
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
case " $ZAPRET_ARCH_CANDIDATES " in
|
||||
*" $candidate "*)
|
||||
return 0
|
||||
@@ -525,66 +535,143 @@ append_arch_candidate() {
|
||||
fi
|
||||
}
|
||||
|
||||
append_arch_candidate_variants() {
|
||||
candidate="$1"
|
||||
base_candidate=""
|
||||
|
||||
[ -n "$candidate" ] || return 0
|
||||
|
||||
append_arch_candidate "$candidate"
|
||||
|
||||
case "$candidate" in
|
||||
*+*)
|
||||
append_arch_candidate "${candidate%%+*}"
|
||||
;;
|
||||
esac
|
||||
|
||||
for suffix in _musl _uclibc _glibc -musl -uclibc -glibc .musl .uclibc .glibc; do
|
||||
case "$candidate" in
|
||||
*"$suffix")
|
||||
base_candidate="${candidate%"$suffix"}"
|
||||
append_arch_candidate "$base_candidate"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
add_arch_family_fallbacks() {
|
||||
arch="$1"
|
||||
|
||||
append_arch_candidate "$arch"
|
||||
append_arch_candidate_variants "$arch"
|
||||
|
||||
case "$arch" in
|
||||
aarch64_*)
|
||||
append_arch_candidate "aarch64_generic"
|
||||
append_arch_candidate_variants "aarch64_generic"
|
||||
;;
|
||||
riscv64_*)
|
||||
append_arch_candidate "riscv64_generic"
|
||||
append_arch_candidate_variants "riscv64_generic"
|
||||
;;
|
||||
arm_cortex-a7_neon-vfpv4)
|
||||
append_arch_candidate "arm_cortex-a7_vfpv4"
|
||||
append_arch_candidate "arm_cortex-a7"
|
||||
append_arch_candidate_variants "arm_cortex-a7_vfpv4"
|
||||
append_arch_candidate_variants "arm_cortex-a7"
|
||||
;;
|
||||
arm_cortex-a7_*)
|
||||
append_arch_candidate "arm_cortex-a7"
|
||||
append_arch_candidate_variants "arm_cortex-a7"
|
||||
;;
|
||||
arm_cortex-a9_*)
|
||||
append_arch_candidate "arm_cortex-a9"
|
||||
append_arch_candidate_variants "arm_cortex-a9"
|
||||
;;
|
||||
mipsel_24kc_24kf)
|
||||
append_arch_candidate "mipsel_24kc"
|
||||
append_arch_candidate_variants "mipsel_24kc"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
resolve_arch_candidates() {
|
||||
arch_list=""
|
||||
apk_arch_list=""
|
||||
release_arch=""
|
||||
|
||||
if [ "$PKG_IS_APK" -eq 1 ]; then
|
||||
arch_list="$(apk --print-arch 2>/dev/null || true)"
|
||||
if [ -f /etc/apk/arch ]; then
|
||||
apk_arch_list="$(tr '\r\n' ' ' </etc/apk/arch)"
|
||||
[ -n "$apk_arch_list" ] && arch_list="$arch_list $apk_arch_list"
|
||||
fi
|
||||
|
||||
apk_arch_list="$(apk --print-arch 2>/dev/null || true)"
|
||||
[ -n "$apk_arch_list" ] && arch_list="$arch_list $apk_arch_list"
|
||||
else
|
||||
arch_list="$(opkg print-architecture 2>/dev/null | awk '$1 == "arch" && $2 !~ /^(all|noarch)$/ {print $2 " " $3}' | sort -k2,2nr | awk '{print $1}')"
|
||||
fi
|
||||
|
||||
if [ -z "$arch_list" ]; then
|
||||
release_arch="$(read_openwrt_release_value "DISTRIB_ARCH")"
|
||||
[ -n "$release_arch" ] && arch_list="$arch_list $release_arch"
|
||||
|
||||
if [ -z "$(printf '%s' "$arch_list" | tr -d '[:space:]')" ]; then
|
||||
arch_list="$(uname -m 2>/dev/null || true)"
|
||||
fi
|
||||
|
||||
for arch in $arch_list; do
|
||||
case "$arch" in
|
||||
all|noarch)
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
|
||||
[ -n "$TARGET_ARCH" ] || TARGET_ARCH="$arch"
|
||||
add_arch_family_fallbacks "$arch"
|
||||
done
|
||||
|
||||
[ -n "$TARGET_ARCH" ] || fail "Failed to detect the router package architecture"
|
||||
msg "Detected zapret architecture candidates: $ZAPRET_ARCH_CANDIDATES"
|
||||
}
|
||||
|
||||
resolve_zapret_release() {
|
||||
candidate_name=""
|
||||
message=""
|
||||
url="https://api.github.com/repos/remittor/zapret-openwrt/releases/latest"
|
||||
|
||||
if [ "$PODKOP_PLUS_KEEP_EXISTING_ZAPRET" = "1" ] && pkg_is_installed "zapret"; then
|
||||
warn "Keeping the existing zapret package because PODKOP_PLUS_KEEP_EXISTING_ZAPRET=1"
|
||||
clear_zapret_download_state
|
||||
|
||||
[ "$ZAPRET_REQUESTED" -eq 1 ] || return 0
|
||||
|
||||
ZAPRET_RELEASE_JSON="$(http_get "$url" 2>/dev/null || true)"
|
||||
if [ -z "$ZAPRET_RELEASE_JSON" ]; then
|
||||
warn "Failed to query zapret release metadata. Continuing without zapret."
|
||||
ZAPRET_SKIPPED_REASON="release metadata unavailable"
|
||||
return 0
|
||||
fi
|
||||
|
||||
ZAPRET_RELEASE_JSON="$(fetch_github_release_json "remittor" "zapret-openwrt" "$ZAPRET_RELEASE_TAG")"
|
||||
if ! printf '%s' "$ZAPRET_RELEASE_JSON" | jq -e . >/dev/null 2>&1; then
|
||||
warn "GitHub returned an invalid zapret release response. Continuing without zapret."
|
||||
ZAPRET_SKIPPED_REASON="invalid release metadata"
|
||||
clear_zapret_download_state
|
||||
return 0
|
||||
fi
|
||||
|
||||
message="$(printf '%s' "$ZAPRET_RELEASE_JSON" | jq -r '.message // empty')"
|
||||
case "$message" in
|
||||
*"API rate limit"*|*"rate limit exceeded"*)
|
||||
warn "GitHub API rate limit reached while resolving zapret. Continuing without zapret."
|
||||
ZAPRET_SKIPPED_REASON="GitHub API rate limit"
|
||||
clear_zapret_download_state
|
||||
return 0
|
||||
;;
|
||||
"Not Found")
|
||||
warn "No published releases found for remittor/zapret-openwrt. Continuing without zapret."
|
||||
ZAPRET_SKIPPED_REASON="release not found"
|
||||
clear_zapret_download_state
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
|
||||
ZAPRET_RELEASE_TAG_RESOLVED="$(printf '%s' "$ZAPRET_RELEASE_JSON" | jq -r '.tag_name // empty')"
|
||||
[ -n "$ZAPRET_RELEASE_TAG_RESOLVED" ] || fail "Failed to detect the zapret release tag"
|
||||
if [ -z "$ZAPRET_RELEASE_TAG_RESOLVED" ]; then
|
||||
warn "Failed to detect the zapret release tag. Continuing without zapret."
|
||||
ZAPRET_SKIPPED_REASON="release tag unavailable"
|
||||
clear_zapret_download_state
|
||||
return 0
|
||||
fi
|
||||
|
||||
for arch in $ZAPRET_ARCH_CANDIDATES; do
|
||||
candidate_name="$(printf '%s' "$ZAPRET_RELEASE_JSON" | jq -r --arg arch "$arch" '.assets[] | select(.name | endswith("_" + $arch + ".zip")) | .name' | sed -n '1p')"
|
||||
@@ -596,10 +683,36 @@ resolve_zapret_release() {
|
||||
fi
|
||||
done
|
||||
|
||||
[ -n "$ZAPRET_BUNDLE_NAME" ] || fail "No zapret package was found for architecture: $TARGET_ARCH. Tried: $ZAPRET_ARCH_CANDIDATES"
|
||||
if [ -z "$ZAPRET_BUNDLE_NAME" ]; then
|
||||
warn "No zapret package was found for architecture: $TARGET_ARCH. Tried: $ZAPRET_ARCH_CANDIDATES. Continuing without zapret."
|
||||
ZAPRET_SKIPPED_REASON="package not found for architecture"
|
||||
clear_zapret_download_state
|
||||
return 0
|
||||
fi
|
||||
|
||||
ZAPRET_BUNDLE_URL="$(printf '%s' "$ZAPRET_RELEASE_JSON" | jq -r --arg name "$ZAPRET_BUNDLE_NAME" '.assets[] | select(.name == $name) | .browser_download_url' | sed -n '1p')"
|
||||
[ -n "$ZAPRET_BUNDLE_URL" ] || fail "Failed to resolve the zapret download URL for $ZAPRET_BUNDLE_NAME"
|
||||
if [ -z "$ZAPRET_BUNDLE_URL" ]; then
|
||||
warn "Failed to resolve the zapret download URL for $ZAPRET_BUNDLE_NAME. Continuing without zapret."
|
||||
ZAPRET_SKIPPED_REASON="download URL unavailable"
|
||||
clear_zapret_download_state
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
decide_zapret_installation() {
|
||||
if is_zapret_present; then
|
||||
ZAPRET_ALREADY_PRESENT=1
|
||||
msg "Detected an existing zapret installation. Skipping zapret installation."
|
||||
return 0
|
||||
fi
|
||||
|
||||
if confirm_prompt "Install optional zapret package?"; then
|
||||
ZAPRET_REQUESTED=1
|
||||
return 0
|
||||
fi
|
||||
|
||||
ZAPRET_SKIPPED_REASON="installation declined by user"
|
||||
warn "Continuing without zapret."
|
||||
}
|
||||
|
||||
download_podkop_plus_packages() {
|
||||
@@ -617,7 +730,12 @@ download_and_extract_zapret_package() {
|
||||
[ -n "$ZAPRET_BUNDLE_URL" ] || return 0
|
||||
|
||||
bundle_file="$TMP_DIR/$ZAPRET_BUNDLE_NAME"
|
||||
download_with_retry "$ZAPRET_BUNDLE_URL" "$bundle_file" "$ZAPRET_BUNDLE_NAME" || fail "Failed to download $ZAPRET_BUNDLE_NAME"
|
||||
if ! download_with_retry "$ZAPRET_BUNDLE_URL" "$bundle_file" "$ZAPRET_BUNDLE_NAME"; then
|
||||
warn "Failed to download $ZAPRET_BUNDLE_NAME. Continuing without zapret."
|
||||
ZAPRET_SKIPPED_REASON="download failed"
|
||||
clear_zapret_download_state
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ "$PKG_IS_APK" -eq 1 ]; then
|
||||
inner_package_path="$(unzip -l "$bundle_file" | awk '{print $4}' | grep -E '^apk/zapret-.*\.apk$' | sed -n '1p')"
|
||||
@@ -626,24 +744,41 @@ download_and_extract_zapret_package() {
|
||||
[ -n "$inner_package_path" ] || inner_package_path="$(unzip -l "$bundle_file" | awk '{print $4}' | grep -E '^zapret_.*\.ipk$' | sed -n '1p')"
|
||||
fi
|
||||
|
||||
[ -n "$inner_package_path" ] || fail "Failed to locate the zapret package inside $ZAPRET_BUNDLE_NAME"
|
||||
if [ -z "$inner_package_path" ]; then
|
||||
warn "Failed to locate the zapret package inside $ZAPRET_BUNDLE_NAME. Continuing without zapret."
|
||||
ZAPRET_SKIPPED_REASON="package archive layout is unsupported"
|
||||
clear_zapret_download_state
|
||||
return 0
|
||||
fi
|
||||
|
||||
ZAPRET_PACKAGE_NAME="$(basename "$inner_package_path")"
|
||||
ZAPRET_PACKAGE_FILE="$TMP_DIR/$ZAPRET_PACKAGE_NAME"
|
||||
ZAPRET_PACKAGE_VERSION="$(extract_package_version "$ZAPRET_PACKAGE_NAME")"
|
||||
|
||||
unzip -p "$bundle_file" "$inner_package_path" > "$ZAPRET_PACKAGE_FILE" || fail "Failed to extract $ZAPRET_PACKAGE_NAME"
|
||||
[ -s "$ZAPRET_PACKAGE_FILE" ] || fail "The extracted zapret package is empty"
|
||||
}
|
||||
|
||||
install_packages() {
|
||||
if [ "$PODKOP_PLUS_KEEP_EXISTING_ZAPRET" = "1" ] && pkg_is_installed "zapret"; then
|
||||
pkg_install_files "$PODKOP_PLUS_PACKAGE_FILE" "$PODKOP_PLUS_I18N_FILE" || fail "Podkop Plus package installation failed"
|
||||
if ! unzip -p "$bundle_file" "$inner_package_path" > "$ZAPRET_PACKAGE_FILE"; then
|
||||
warn "Failed to extract $ZAPRET_PACKAGE_NAME. Continuing without zapret."
|
||||
ZAPRET_SKIPPED_REASON="package extraction failed"
|
||||
clear_zapret_download_state
|
||||
return 0
|
||||
fi
|
||||
|
||||
pkg_remove_if_installed "zapret"
|
||||
pkg_install_files "$ZAPRET_PACKAGE_FILE" "$PODKOP_PLUS_PACKAGE_FILE" "$PODKOP_PLUS_I18N_FILE" || fail "Package installation failed"
|
||||
if [ ! -s "$ZAPRET_PACKAGE_FILE" ]; then
|
||||
warn "The extracted zapret package is empty. Continuing without zapret."
|
||||
ZAPRET_SKIPPED_REASON="empty package archive"
|
||||
clear_zapret_download_state
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
install_packages() {
|
||||
set -- "$PODKOP_PLUS_PACKAGE_FILE" "$PODKOP_PLUS_I18N_FILE"
|
||||
|
||||
if [ -n "$ZAPRET_PACKAGE_FILE" ]; then
|
||||
pkg_remove_if_installed "zapret"
|
||||
set -- "$ZAPRET_PACKAGE_FILE" "$@"
|
||||
fi
|
||||
|
||||
pkg_install_files "$@" || fail "Package installation failed"
|
||||
}
|
||||
|
||||
post_install() {
|
||||
@@ -673,6 +808,7 @@ main() {
|
||||
remove_conflicting_dns_proxy
|
||||
remove_old_sing_box_if_needed
|
||||
resolve_arch_candidates
|
||||
decide_zapret_installation
|
||||
resolve_zapret_release
|
||||
|
||||
cleanup_legacy_installation
|
||||
@@ -687,8 +823,10 @@ main() {
|
||||
if [ -n "$ZAPRET_PACKAGE_VERSION" ]; then
|
||||
msg "zapret $ZAPRET_PACKAGE_VERSION installed for architecture $ZAPRET_ARCH"
|
||||
msg "zapret source: remittor/zapret-openwrt@${ZAPRET_RELEASE_TAG_RESOLVED}"
|
||||
elif [ "$PODKOP_PLUS_KEEP_EXISTING_ZAPRET" = "1" ] && pkg_is_installed "zapret"; then
|
||||
warn "Keeping the existing zapret package"
|
||||
elif [ "$ZAPRET_ALREADY_PRESENT" -eq 1 ]; then
|
||||
msg "Using the existing zapret installation"
|
||||
elif [ -n "$ZAPRET_SKIPPED_REASON" ]; then
|
||||
warn "zapret was not installed: $ZAPRET_SKIPPED_REASON"
|
||||
fi
|
||||
|
||||
warn "Open LuCI and review your rules before enabling Podkop Plus"
|
||||
|
||||
@@ -1198,6 +1198,7 @@ var initialDiagnosticStore = {
|
||||
luci_app_version: "loading",
|
||||
sing_box_version: "loading",
|
||||
zapret_version: "loading",
|
||||
zapret_installed: 0,
|
||||
openwrt_version: "loading",
|
||||
device_model: "loading"
|
||||
},
|
||||
@@ -1445,7 +1446,13 @@ var initialStore = {
|
||||
servicesInfoWidget: {
|
||||
loading: true,
|
||||
failed: false,
|
||||
data: { singbox: 0, podkopRunning: 0, podkopEnabled: 0, zapret: 0 }
|
||||
data: {
|
||||
singbox: 0,
|
||||
podkopRunning: 0,
|
||||
podkopEnabled: 0,
|
||||
zapret: 0,
|
||||
zapretInstalled: 0
|
||||
}
|
||||
},
|
||||
sectionsWidget: {
|
||||
loading: true,
|
||||
@@ -1617,6 +1624,30 @@ var PodkopLogWatcher = class _PodkopLogWatcher {
|
||||
};
|
||||
|
||||
// src/podkop/services/core.service.ts
|
||||
var LOG_NOTIFICATION_DEDUPE_WINDOW_MS = 15e3;
|
||||
var recentErrorNotifications = /* @__PURE__ */ new Map();
|
||||
function getNotificationKey(line) {
|
||||
const lower = line.toLowerCase();
|
||||
const errorIndex = lower.indexOf("[error]");
|
||||
const fatalIndex = lower.indexOf("[fatal]");
|
||||
const markerIndex = errorIndex >= 0 && fatalIndex >= 0 ? Math.min(errorIndex, fatalIndex) : Math.max(errorIndex, fatalIndex);
|
||||
return (markerIndex >= 0 ? line.slice(markerIndex) : line).trim();
|
||||
}
|
||||
function shouldNotifyAboutLogLine(line) {
|
||||
const key = getNotificationKey(line);
|
||||
const now = Date.now();
|
||||
const lastShownAt = recentErrorNotifications.get(key) ?? 0;
|
||||
recentErrorNotifications.forEach((shownAt, storedKey) => {
|
||||
if (now - shownAt > LOG_NOTIFICATION_DEDUPE_WINDOW_MS) {
|
||||
recentErrorNotifications.delete(storedKey);
|
||||
}
|
||||
});
|
||||
if (now - lastShownAt < LOG_NOTIFICATION_DEDUPE_WINDOW_MS) {
|
||||
return false;
|
||||
}
|
||||
recentErrorNotifications.set(key, now);
|
||||
return true;
|
||||
}
|
||||
function coreService() {
|
||||
TabServiceInstance.onChange((activeId, tabs) => {
|
||||
logger.info("[TAB]", activeId);
|
||||
@@ -1639,12 +1670,8 @@ function coreService() {
|
||||
{
|
||||
intervalMs: 3e3,
|
||||
onNewLog: (line) => {
|
||||
if (line.toLowerCase().includes("[error]") || line.toLowerCase().includes("[fatal]")) {
|
||||
ui.addNotification(
|
||||
"Podkop Plus Error",
|
||||
E("div", {}, line),
|
||||
"error"
|
||||
);
|
||||
if ((line.toLowerCase().includes("[error]") || line.toLowerCase().includes("[fatal]")) && shouldNotifyAboutLogLine(line)) {
|
||||
ui.addNotification("Podkop Plus Error", E("div", {}, line), "error");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2048,10 +2075,7 @@ async function fetchServicesInfo() {
|
||||
return;
|
||||
}
|
||||
const podkop = getSettledMethodResponse("getStatus", podkopResult);
|
||||
const singbox = getSettledMethodResponse(
|
||||
"getSingBoxStatus",
|
||||
singboxResult
|
||||
);
|
||||
const singbox = getSettledMethodResponse("getSingBoxStatus", singboxResult);
|
||||
const zapret = getSettledMethodResponse("getZapretStatus", zapretResult);
|
||||
store.set({
|
||||
servicesInfoWidget: {
|
||||
@@ -2061,7 +2085,8 @@ async function fetchServicesInfo() {
|
||||
singbox: singbox.success ? singbox.data.running : 0,
|
||||
podkopRunning: podkop.success ? podkop.data.running : 0,
|
||||
podkopEnabled: podkop.success ? podkop.data.enabled : 0,
|
||||
zapret: zapret.success ? zapret.data.ready : 0
|
||||
zapret: zapret.success ? zapret.data.ready : 0,
|
||||
zapretInstalled: zapret.success ? zapret.data.installed : 0
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -2364,9 +2389,9 @@ async function renderServicesInfoWidget() {
|
||||
},
|
||||
{
|
||||
key: _("Zapret"),
|
||||
value: servicesInfoWidget.data.zapret ? _("\u2714 Running") : _("\u2718 Stopped"),
|
||||
value: !servicesInfoWidget.data.zapretInstalled ? _("\u2718 Not installed") : servicesInfoWidget.data.zapret ? _("\u2714 Running") : _("\u2718 Stopped"),
|
||||
attributes: {
|
||||
class: servicesInfoWidget.data.zapret ? "pdk_dashboard-page__widgets-section__item__row--success" : "pdk_dashboard-page__widgets-section__item__row--error"
|
||||
class: servicesInfoWidget.data.zapretInstalled && servicesInfoWidget.data.zapret ? "pdk_dashboard-page__widgets-section__item__row--success" : "pdk_dashboard-page__widgets-section__item__row--error"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -2915,8 +2940,8 @@ async function runZapretCheck() {
|
||||
state: "loading",
|
||||
items: []
|
||||
});
|
||||
const zapretChecks = await PodkopShellMethods.checkZapretRuntime();
|
||||
if (!zapretChecks.success) {
|
||||
const zapretStatus = await PodkopShellMethods.getZapretStatus();
|
||||
if (!zapretStatus.success) {
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
@@ -2927,24 +2952,71 @@ async function runZapretCheck() {
|
||||
});
|
||||
throw new Error("Zapret checks failed");
|
||||
}
|
||||
const installed = Boolean(zapretChecks.data.zapret_installed);
|
||||
const installed = Boolean(zapretStatus.data.installed);
|
||||
const hasZapretRules = Number(zapretStatus.data.enabled_rule_count || 0) > 0;
|
||||
if (installed) {
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _("Checks passed"),
|
||||
state: "success",
|
||||
items: [
|
||||
{
|
||||
state: "success",
|
||||
key: _("Zapret installed"),
|
||||
value: ""
|
||||
},
|
||||
{
|
||||
state: "success",
|
||||
key: hasZapretRules ? _("There are rules using zapret") : _("No rules use zapret"),
|
||||
value: ""
|
||||
}
|
||||
]
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (hasZapretRules) {
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: _("Zapret not installed"),
|
||||
state: "error",
|
||||
items: [
|
||||
{
|
||||
state: "error",
|
||||
key: _("Zapret not installed"),
|
||||
value: ""
|
||||
},
|
||||
{
|
||||
state: "error",
|
||||
key: _("There are rules using zapret"),
|
||||
value: ""
|
||||
}
|
||||
]
|
||||
});
|
||||
return;
|
||||
}
|
||||
updateCheckStore({
|
||||
order,
|
||||
code,
|
||||
title,
|
||||
description: installed ? _("Checks passed") : _("Checks failed"),
|
||||
state: installed ? "success" : "error",
|
||||
description: _("Zapret not installed"),
|
||||
state: "warning",
|
||||
items: [
|
||||
{
|
||||
state: installed ? "success" : "error",
|
||||
key: installed ? _("Zapret installed") : _("Zapret not installed"),
|
||||
state: "warning",
|
||||
key: _("Zapret not installed"),
|
||||
value: ""
|
||||
},
|
||||
{
|
||||
state: "success",
|
||||
key: _("No rules use zapret"),
|
||||
value: ""
|
||||
}
|
||||
]
|
||||
});
|
||||
if (!installed) {
|
||||
throw new Error("Zapret checks failed");
|
||||
}
|
||||
}
|
||||
|
||||
// src/partials/button/styles.ts
|
||||
@@ -4260,6 +4332,7 @@ var UNKNOWN_DIAGNOSTICS_SYSTEM_INFO = {
|
||||
luci_app_version: _("unknown"),
|
||||
sing_box_version: _("unknown"),
|
||||
zapret_version: _("unknown"),
|
||||
zapret_installed: 0,
|
||||
openwrt_version: _("unknown"),
|
||||
device_model: _("unknown")
|
||||
};
|
||||
@@ -4684,7 +4757,7 @@ function renderDiagnosticSystemInfoWidget() {
|
||||
},
|
||||
{
|
||||
key: "Zapret",
|
||||
value: diagnosticsSystemInfo.zapret_version
|
||||
value: diagnosticsSystemInfo.zapret_installed ? diagnosticsSystemInfo.zapret_version : _("not installed")
|
||||
},
|
||||
{
|
||||
key: "OS",
|
||||
|
||||
@@ -164,6 +164,125 @@ const NFQWS_REQUIRED_ARG_OPTIONS = new Set([
|
||||
"--wssize-cutoff",
|
||||
"--wssize-forced-cutoff",
|
||||
]);
|
||||
const zapretAvailabilityState = {
|
||||
loaded: false,
|
||||
installed: true,
|
||||
};
|
||||
let zapretAvailabilityPromise = null;
|
||||
|
||||
function ensureZapretAvailabilityLoaded() {
|
||||
if (zapretAvailabilityState.loaded) {
|
||||
return Promise.resolve(zapretAvailabilityState);
|
||||
}
|
||||
|
||||
if (zapretAvailabilityPromise) {
|
||||
return zapretAvailabilityPromise;
|
||||
}
|
||||
|
||||
zapretAvailabilityPromise = main.PodkopShellMethods.getZapretStatus()
|
||||
.then((result) => {
|
||||
zapretAvailabilityState.loaded = true;
|
||||
zapretAvailabilityState.installed = Boolean(
|
||||
result && result.success && result.data && result.data.installed,
|
||||
);
|
||||
return zapretAvailabilityState;
|
||||
})
|
||||
.catch(() => {
|
||||
zapretAvailabilityState.loaded = true;
|
||||
zapretAvailabilityState.installed = true;
|
||||
return zapretAvailabilityState;
|
||||
})
|
||||
.finally(() => {
|
||||
zapretAvailabilityPromise = null;
|
||||
});
|
||||
|
||||
return zapretAvailabilityPromise;
|
||||
}
|
||||
|
||||
function isZapretInstalledForUi() {
|
||||
return zapretAvailabilityState.installed;
|
||||
}
|
||||
|
||||
function getRuleResolvedAction(section_id) {
|
||||
const action = uci.get("podkop", section_id, "action");
|
||||
if (action) {
|
||||
return `${action}`;
|
||||
}
|
||||
|
||||
const connectionType = uci.get("podkop", section_id, "connection_type");
|
||||
switch (connectionType) {
|
||||
case "proxy":
|
||||
case "vpn":
|
||||
return "proxy";
|
||||
case "block":
|
||||
return "block";
|
||||
case "exclusion":
|
||||
return "direct";
|
||||
default:
|
||||
return "proxy";
|
||||
}
|
||||
}
|
||||
|
||||
function getActionOptionLabel(action) {
|
||||
switch (`${action}`) {
|
||||
case "block":
|
||||
return _("Block");
|
||||
case "direct":
|
||||
return "Direct";
|
||||
case "zapret":
|
||||
return isZapretInstalledForUi()
|
||||
? _("Zapret")
|
||||
: _("Zapret (package not installed)");
|
||||
case "proxy":
|
||||
default:
|
||||
return _("Proxy");
|
||||
}
|
||||
}
|
||||
|
||||
function getRuleActionDisplayValue(section_id) {
|
||||
const action = getRuleResolvedAction(section_id);
|
||||
|
||||
if (action === "zapret") {
|
||||
return _("Zapret");
|
||||
}
|
||||
|
||||
return getActionOptionLabel(action);
|
||||
}
|
||||
|
||||
function getRuleActionDisplayMarkup(section_id) {
|
||||
return getRuleActionDisplayValue(section_id);
|
||||
}
|
||||
|
||||
function populateActionOptionValues(option) {
|
||||
delete option.keylist;
|
||||
delete option.vallist;
|
||||
|
||||
option.value("proxy", _("Proxy"));
|
||||
option.value("direct", "Direct");
|
||||
option.value("block", _("Block"));
|
||||
option.value("zapret", getActionOptionLabel("zapret"));
|
||||
}
|
||||
|
||||
function disableUnavailableZapretOption(node) {
|
||||
if (!node || isZapretInstalledForUi()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const select =
|
||||
typeof node.querySelector === "function"
|
||||
? node.querySelector("select")
|
||||
: null;
|
||||
if (!select || !select.options) {
|
||||
return;
|
||||
}
|
||||
|
||||
Array.from(select.options).forEach((option) => {
|
||||
if (option.value === "zapret") {
|
||||
option.disabled = true;
|
||||
option.textContent = _("Zapret (package not installed)");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function getConfigListValues(section_id, key) {
|
||||
return normalizeOptionValues(uci.get("podkop", section_id, key));
|
||||
@@ -360,7 +479,10 @@ function applyTextareaInputAttributes(textarea) {
|
||||
|
||||
if (nextMinHeight > 0) {
|
||||
if (storedMinHeight <= 0) {
|
||||
textarea.setAttribute("data-pdk-default-min-height", `${nextMinHeight}`);
|
||||
textarea.setAttribute(
|
||||
"data-pdk-default-min-height",
|
||||
`${nextMinHeight}`,
|
||||
);
|
||||
}
|
||||
|
||||
textarea.style.minHeight = `${nextMinHeight}px`;
|
||||
@@ -1383,36 +1505,6 @@ function getCustomRulesetReferences(section_id) {
|
||||
);
|
||||
}
|
||||
|
||||
function getRuleActionDisplayValue(section_id) {
|
||||
const action = uci.get("podkop", section_id, "action");
|
||||
if (action) {
|
||||
switch (`${action}`) {
|
||||
case "block":
|
||||
return "Block";
|
||||
case "direct":
|
||||
return "Direct";
|
||||
case "zapret":
|
||||
return "Zapret";
|
||||
case "proxy":
|
||||
default:
|
||||
return "Proxy";
|
||||
}
|
||||
}
|
||||
|
||||
const connectionType = uci.get("podkop", section_id, "connection_type");
|
||||
switch (connectionType) {
|
||||
case "proxy":
|
||||
case "vpn":
|
||||
return "Proxy";
|
||||
case "block":
|
||||
return "Block";
|
||||
case "exclusion":
|
||||
return "Direct";
|
||||
default:
|
||||
return "Proxy";
|
||||
}
|
||||
}
|
||||
|
||||
function createSectionContent(section) {
|
||||
let o;
|
||||
|
||||
@@ -1432,6 +1524,13 @@ function createSectionContent(section) {
|
||||
_("Action"),
|
||||
);
|
||||
o.modalonly = false;
|
||||
o.rawhtml = true;
|
||||
o.load = function () {
|
||||
return ensureZapretAvailabilityLoaded();
|
||||
};
|
||||
o.cfgvalue = function (section_id) {
|
||||
return getRuleActionDisplayMarkup(section_id);
|
||||
};
|
||||
o.textvalue = function (section_id) {
|
||||
return getRuleActionDisplayValue(section_id);
|
||||
};
|
||||
@@ -1457,13 +1556,28 @@ function createSectionContent(section) {
|
||||
_("Action"),
|
||||
_("What Podkop Plus should do when this section matches"),
|
||||
);
|
||||
o.value("proxy", "Proxy");
|
||||
o.value("direct", "Direct");
|
||||
o.value("block", "Block");
|
||||
o.value("zapret", "Zapret");
|
||||
populateActionOptionValues(o);
|
||||
o.default = "proxy";
|
||||
o.rmempty = false;
|
||||
o.modalonly = true;
|
||||
o.load = function () {
|
||||
return ensureZapretAvailabilityLoaded().then(() => {
|
||||
populateActionOptionValues(this);
|
||||
});
|
||||
};
|
||||
{
|
||||
const originalRenderWidget = o.renderWidget;
|
||||
o.renderWidget = function (section_id, option_index, cfgvalue) {
|
||||
const node = originalRenderWidget.call(
|
||||
this,
|
||||
section_id,
|
||||
option_index,
|
||||
cfgvalue,
|
||||
);
|
||||
disableUnavailableZapretOption(node);
|
||||
return node;
|
||||
};
|
||||
}
|
||||
|
||||
o = section.taboption(
|
||||
"settings",
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP PLUS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-04-07 21:03+0300\n"
|
||||
"PO-Revision-Date: 2026-04-07 21:03+0300\n"
|
||||
"POT-Creation-Date: 2026-04-11 21:16+0300\n"
|
||||
"PO-Revision-Date: 2026-04-11 21:16+0300\n"
|
||||
"Last-Translator: ushan0v\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ru\n"
|
||||
@@ -20,6 +20,9 @@ msgstr ""
|
||||
msgid "✔ Running"
|
||||
msgstr "✔ Работает"
|
||||
|
||||
msgid "✘ Not installed"
|
||||
msgstr "✘ Не установлен"
|
||||
|
||||
msgid "✘ Stopped"
|
||||
msgstr "✘ Остановлен"
|
||||
|
||||
@@ -77,6 +80,9 @@ msgstr "Backend-проверка завершилась ошибкой: %s"
|
||||
msgid "Binary file"
|
||||
msgstr "Бинарный файл"
|
||||
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
msgid "Bootsrap DNS"
|
||||
msgstr "Bootstrap DNS"
|
||||
|
||||
@@ -551,12 +557,18 @@ msgstr "Стратегия NFQWS не может быть пустой"
|
||||
msgid "No other marking rules found"
|
||||
msgstr "Другие правила маркировки не найдены"
|
||||
|
||||
msgid "No rules use zapret"
|
||||
msgstr "Нет правил использующих zapret"
|
||||
|
||||
msgid "Node Type"
|
||||
msgstr "Тип узла"
|
||||
|
||||
msgid "Not implement yet"
|
||||
msgstr "Ещё не реализовано"
|
||||
|
||||
msgid "not installed"
|
||||
msgstr "не установлен"
|
||||
|
||||
msgid "Not responding"
|
||||
msgstr "Не отвечает"
|
||||
|
||||
@@ -620,6 +632,9 @@ msgstr "Порт не может быть пустым"
|
||||
msgid "Port for the local mixed proxy of this section"
|
||||
msgstr "Порт локального смешанного прокси для этой секции"
|
||||
|
||||
msgid "Proxy"
|
||||
msgstr ""
|
||||
|
||||
msgid "Proxy Configuration URL"
|
||||
msgstr "URL конфигурации прокси"
|
||||
|
||||
@@ -824,6 +839,9 @@ msgstr "DNS-сервер, используемый для поиска IP-адр
|
||||
msgid "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here."
|
||||
msgstr "Номер NFQUEUE назначается Podkop Plus для каждого правила и не должен переопределяться здесь."
|
||||
|
||||
msgid "There are rules using zapret"
|
||||
msgstr "Есть правила использующие zapret"
|
||||
|
||||
msgid "This field must start a working nfqws strategy; --dry-run exits immediately and is not allowed here."
|
||||
msgstr "Это поле должно запускать рабочую стратегию nfqws; --dry-run сразу завершает процесс и здесь запрещён."
|
||||
|
||||
@@ -959,6 +977,9 @@ msgstr "Вы можете выбрать выходной сетевой инт
|
||||
msgid "Zapret"
|
||||
msgstr "Zapret"
|
||||
|
||||
msgid "Zapret (package not installed)"
|
||||
msgstr "Zapret (пакет не установлен)"
|
||||
|
||||
msgid "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies."
|
||||
msgstr "Шаблоны hostlist zapret здесь не поддерживаются, потому что Podkop Plus не разворачивает их для per-rule стратегий NFQWS."
|
||||
|
||||
|
||||
@@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PODKOP PLUS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-04-07 18:03+0300\n"
|
||||
"PO-Revision-Date: 2026-04-07 18:03+0300\n"
|
||||
"POT-Creation-Date: 2026-04-11 18:16+0300\n"
|
||||
"PO-Revision-Date: 2026-04-11 18:16+0300\n"
|
||||
"Last-Translator: ushan0v <ushan0v@users.noreply.github.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
@@ -18,13 +18,17 @@ msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:345
|
||||
#: src/podkop/tabs/dashboard/initController.ts:356
|
||||
#: src/podkop/tabs/dashboard/initController.ts:367
|
||||
#: src/podkop/tabs/dashboard/initController.ts:369
|
||||
msgid "✔ Running"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:367
|
||||
msgid "✘ Not installed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/dashboard/initController.ts:346
|
||||
#: src/podkop/tabs/dashboard/initController.ts:357
|
||||
#: src/podkop/tabs/dashboard/initController.ts:368
|
||||
#: src/podkop/tabs/dashboard/initController.ts:370
|
||||
msgid "✘ Stopped"
|
||||
msgstr ""
|
||||
|
||||
@@ -32,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:1551
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1700
|
||||
msgid "A latency-tested group of proxy URLs for this section"
|
||||
msgstr ""
|
||||
|
||||
@@ -40,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:1533
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1682
|
||||
msgid "A manual group of proxy URLs for this section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1401
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1426
|
||||
#: ../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
|
||||
msgid "Action"
|
||||
msgstr ""
|
||||
|
||||
@@ -57,7 +61,7 @@ msgstr ""
|
||||
msgid "Add a section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1935
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2084
|
||||
msgid "Add URLs or local paths to .srs lists"
|
||||
msgstr ""
|
||||
|
||||
@@ -74,15 +78,15 @@ 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:1646
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1795
|
||||
msgid "Applicable for SOCKS and Shadowsocks links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:681
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:834
|
||||
msgid "At least one valid domain must be specified."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:692
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:845
|
||||
msgid "At least one valid IP or subnet must be specified."
|
||||
msgstr ""
|
||||
|
||||
@@ -94,7 +98,7 @@ msgstr ""
|
||||
msgid "Available actions"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:783
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:936
|
||||
msgid "Backend validation failed: %s"
|
||||
msgstr ""
|
||||
|
||||
@@ -102,6 +106,11 @@ msgstr ""
|
||||
msgid "Binary file"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:229
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:262
|
||||
msgid "Block"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runDnsCheck.ts:65
|
||||
msgid "Bootsrap DNS"
|
||||
msgstr ""
|
||||
@@ -118,7 +127,7 @@ msgstr ""
|
||||
msgid "Browser is using FakeIP correctly"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1840
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1989
|
||||
msgid "Built-in rule sets"
|
||||
msgstr ""
|
||||
|
||||
@@ -151,12 +160,12 @@ msgstr ""
|
||||
msgid "checks"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:38
|
||||
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:26
|
||||
msgid "Checks failed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:38
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:40
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:82
|
||||
#: src/podkop/tabs/diagnostic/helpers/getMeta.ts:13
|
||||
msgid "Checks passed"
|
||||
msgstr ""
|
||||
@@ -173,7 +182,7 @@ msgstr ""
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1389
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1512
|
||||
msgid "Conditions"
|
||||
msgstr ""
|
||||
|
||||
@@ -185,16 +194,16 @@ msgstr ""
|
||||
msgid "Configuration for Podkop Plus service"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1492
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1637
|
||||
msgid "Connection"
|
||||
msgstr ""
|
||||
|
||||
#: ../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:1620
|
||||
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:1478
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1623
|
||||
msgid "Connection URL"
|
||||
msgstr ""
|
||||
|
||||
@@ -256,18 +265,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:1711
|
||||
#: ../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
|
||||
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:1712
|
||||
#: ../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
|
||||
msgid "DNS over TLS (DoT)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1709
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1858
|
||||
msgid "DNS protocol"
|
||||
msgstr ""
|
||||
|
||||
@@ -283,7 +292,7 @@ msgstr ""
|
||||
msgid "DNS Rewrite TTL"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1727
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1876
|
||||
msgid "DNS server"
|
||||
msgstr ""
|
||||
|
||||
@@ -300,15 +309,15 @@ msgstr ""
|
||||
msgid "Do not panic, everything can be fixed, just..."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1810
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1959
|
||||
msgid "Domain keyword"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1817
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1966
|
||||
msgid "Domain regex"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1782
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1931
|
||||
msgid "Domains"
|
||||
msgstr ""
|
||||
|
||||
@@ -349,15 +358,15 @@ msgstr ""
|
||||
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:248
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:263
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:283
|
||||
#: ../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
|
||||
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:1391
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1514
|
||||
msgid "Enable"
|
||||
msgstr ""
|
||||
|
||||
@@ -365,7 +374,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:1698
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1847
|
||||
msgid "Enable a dedicated DNS resolver when this section uses an interface"
|
||||
msgstr ""
|
||||
|
||||
@@ -373,7 +382,7 @@ msgstr ""
|
||||
msgid "Enable autostart"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1749
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1898
|
||||
msgid "Enable Mixed Proxy"
|
||||
msgstr ""
|
||||
|
||||
@@ -390,31 +399,31 @@ 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:1514
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1660
|
||||
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:1572
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1721
|
||||
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:1570
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1719
|
||||
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:1573
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1722
|
||||
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:1571
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1720
|
||||
msgid "Every minute"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1796
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1945
|
||||
msgid "Exact full domain"
|
||||
msgstr ""
|
||||
|
||||
@@ -430,11 +439,11 @@ msgstr ""
|
||||
msgid "Expecting: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1750
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1899
|
||||
msgid "Expose this section as a local HTTP+SOCKS proxy"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:844
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:997
|
||||
msgid "External nfqws config files bypass Podkop Plus queue management and explicit validation."
|
||||
msgstr ""
|
||||
|
||||
@@ -442,12 +451,12 @@ msgstr ""
|
||||
msgid "Failed to copy!"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:250
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:254
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:300
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:304
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:341
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:345
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:251
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:255
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:301
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:305
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:342
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:346
|
||||
msgid "Failed to execute!"
|
||||
msgstr ""
|
||||
|
||||
@@ -464,7 +473,7 @@ msgstr ""
|
||||
msgid "Get global check"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:245
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:246
|
||||
msgid "Global check"
|
||||
msgstr ""
|
||||
|
||||
@@ -472,7 +481,7 @@ msgstr ""
|
||||
msgid "How often this remote rule set should be refreshed"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1476
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1621
|
||||
msgid "How to configure the proxy connection for this section"
|
||||
msgstr ""
|
||||
|
||||
@@ -482,8 +491,8 @@ 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:1482
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1657
|
||||
#: ../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
|
||||
msgid "Interface"
|
||||
msgstr ""
|
||||
|
||||
@@ -576,12 +585,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:1777
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1926
|
||||
#: 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:191
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:310
|
||||
msgid "Invalid regular expression"
|
||||
msgstr ""
|
||||
|
||||
@@ -682,7 +691,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:1789
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1938
|
||||
msgid "IPs"
|
||||
msgstr ""
|
||||
|
||||
@@ -690,11 +699,11 @@ msgstr ""
|
||||
msgid "Issues detected"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:201
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:320
|
||||
msgid "Keyword must not contain spaces"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:501
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:502
|
||||
msgid "Latest"
|
||||
msgstr ""
|
||||
|
||||
@@ -718,32 +727,32 @@ msgstr ""
|
||||
msgid "Main DNS"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1790
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1939
|
||||
msgid "Match destination IPs or subnets"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1811
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1960
|
||||
msgid "Match domains containing a substring"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1783
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1932
|
||||
msgid "Match domains including all subdomains"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1818
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1967
|
||||
msgid "Match domains using a regular expression"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1797
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1946
|
||||
msgid "Match only one exact full domain name"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1825
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1974
|
||||
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:1584
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1733
|
||||
msgid "Maximum response time delta in milliseconds"
|
||||
msgstr ""
|
||||
|
||||
@@ -751,7 +760,7 @@ msgstr ""
|
||||
msgid "Memory Usage"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1761
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1910
|
||||
msgid "Mixed Proxy Port"
|
||||
msgstr ""
|
||||
|
||||
@@ -760,15 +769,15 @@ 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:1606
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1755
|
||||
msgid "Must be a number in the range of 50 - 1000"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1441
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1586
|
||||
msgid "NFQWS Strategy"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:974
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1127
|
||||
msgid "NFQWS strategy cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
@@ -776,6 +785,10 @@ msgstr ""
|
||||
msgid "No other marking rules found"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:45
|
||||
msgid "No rules use zapret"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:16
|
||||
msgid "Node Type"
|
||||
msgstr ""
|
||||
@@ -784,18 +797,22 @@ msgstr ""
|
||||
msgid "Not implement yet"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:523
|
||||
msgid "not installed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:75
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:81
|
||||
#: src/podkop/tabs/diagnostic/checks/runSectionsCheck.ts:100
|
||||
msgid "Not responding"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:56
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:64
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:72
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:80
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:88
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:96
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:57
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:65
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:73
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:81
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:89
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:97
|
||||
msgid "Not running"
|
||||
msgstr ""
|
||||
|
||||
@@ -811,18 +828,18 @@ msgstr ""
|
||||
msgid "Optional node used to download this remote rule set"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1052
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1205
|
||||
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:1481
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1513
|
||||
#: ../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
|
||||
msgid "Outbound JSON"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:491
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:492
|
||||
msgid "Outdated"
|
||||
msgstr ""
|
||||
|
||||
@@ -850,12 +867,12 @@ msgstr ""
|
||||
msgid "Path must end with cache.db"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:112
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:120
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:128
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:136
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:144
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:152
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:113
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:121
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:129
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:137
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:145
|
||||
#: src/podkop/tabs/diagnostic/diagnostic.store.ts:153
|
||||
msgid "Pending"
|
||||
msgstr ""
|
||||
|
||||
@@ -863,7 +880,7 @@ msgstr ""
|
||||
msgid "Podkop Plus"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:862
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1015
|
||||
msgid "Podkop Plus manages the nfqws process lifecycle itself, so daemon mode is not allowed here."
|
||||
msgstr ""
|
||||
|
||||
@@ -875,14 +892,19 @@ msgstr ""
|
||||
msgid "Podkop Plus will not modify your DHCP configuration"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1769
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1918
|
||||
msgid "Port cannot be empty"
|
||||
msgstr ""
|
||||
|
||||
#: ../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:1911
|
||||
msgid "Port for the local mixed proxy of this section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:238
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:260
|
||||
msgid "Proxy"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:31
|
||||
msgid "Proxy Configuration URL"
|
||||
msgstr ""
|
||||
@@ -895,7 +917,7 @@ msgstr ""
|
||||
msgid "Proxy traffic is routed via FakeIP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1879
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2028
|
||||
msgid "Regional options cannot be used together"
|
||||
msgstr ""
|
||||
|
||||
@@ -907,7 +929,7 @@ msgstr ""
|
||||
msgid "Remote URL to a sing-box rule set"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1697
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1846
|
||||
msgid "Resolver for interface outbound"
|
||||
msgstr ""
|
||||
|
||||
@@ -915,11 +937,11 @@ msgstr ""
|
||||
msgid "Resolver For Interface Outbound"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:847
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1000
|
||||
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:850
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1003
|
||||
msgid "Resource selection by IP or CIDR inside nfqws is not supported here; sing-box selects resources before NFQUEUE."
|
||||
msgstr ""
|
||||
|
||||
@@ -939,9 +961,9 @@ msgstr ""
|
||||
msgid "Routing Excluded IPs"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1313
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1322
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1325
|
||||
#: ../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
|
||||
msgid "Rule set must be a direct .srs URL or a local .srs path"
|
||||
msgstr ""
|
||||
|
||||
@@ -949,7 +971,7 @@ msgstr ""
|
||||
msgid "Rule set URL"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1934
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2083
|
||||
msgid "Rule sets"
|
||||
msgstr ""
|
||||
|
||||
@@ -981,7 +1003,7 @@ msgstr ""
|
||||
msgid "Run Diagnostic"
|
||||
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:2047
|
||||
msgid "Russia inside restrictions"
|
||||
msgstr ""
|
||||
|
||||
@@ -997,7 +1019,7 @@ msgstr ""
|
||||
msgid "Section"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1413
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1543
|
||||
msgid "Section name"
|
||||
msgstr ""
|
||||
|
||||
@@ -1005,7 +1027,7 @@ msgstr ""
|
||||
msgid "Sections"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1841
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1990
|
||||
msgid "Select a predefined list for routing"
|
||||
msgstr ""
|
||||
|
||||
@@ -1046,11 +1068,11 @@ msgid "Select the WAN interfaces to be monitored"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:20
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1479
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1624
|
||||
msgid "Selector"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1532
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1681
|
||||
msgid "Selector connections"
|
||||
msgstr ""
|
||||
|
||||
@@ -1058,7 +1080,7 @@ msgstr ""
|
||||
msgid "Selector Links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1844
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1993
|
||||
msgid "Service list"
|
||||
msgstr ""
|
||||
|
||||
@@ -1067,11 +1089,11 @@ 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:1388
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1511
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:329
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:330
|
||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:116
|
||||
msgid "Show sing-box config"
|
||||
msgstr ""
|
||||
@@ -1108,7 +1130,7 @@ msgstr ""
|
||||
msgid "Source file"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1824
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1973
|
||||
msgid "Source IPs"
|
||||
msgstr ""
|
||||
|
||||
@@ -1148,7 +1170,7 @@ msgstr ""
|
||||
msgid "Test latency"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:859
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1012
|
||||
msgid "The desync fwmark is managed by Podkop Plus for loop prevention and must not be overridden here."
|
||||
msgstr ""
|
||||
|
||||
@@ -1156,23 +1178,28 @@ msgstr ""
|
||||
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:856
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1009
|
||||
msgid "The NFQUEUE number is assigned by Podkop Plus for each rule and must not be overridden here."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:865
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:69
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:92
|
||||
msgid "There are rules using zapret"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1018
|
||||
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:868
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1021
|
||||
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:1037
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1190
|
||||
msgid "This flag does not accept a value."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1068
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1221
|
||||
msgid "This option requires a value."
|
||||
msgstr ""
|
||||
|
||||
@@ -1205,7 +1232,7 @@ msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:229
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1713
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1862
|
||||
msgid "UDP"
|
||||
msgstr ""
|
||||
|
||||
@@ -1214,15 +1241,15 @@ 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:1645
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1794
|
||||
msgid "UDP over TCP"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:779
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:932
|
||||
msgid "Unable to validate the NFQWS strategy through the backend parser."
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1017
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1170
|
||||
msgid "Unexpected standalone token. Use explicit flags such as --name or --name=value."
|
||||
msgstr ""
|
||||
|
||||
@@ -1235,9 +1262,9 @@ msgstr ""
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:28
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:29
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:30
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:31
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:32
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:463
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:33
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:464
|
||||
msgid "unknown"
|
||||
msgstr ""
|
||||
|
||||
@@ -1245,7 +1272,7 @@ msgstr ""
|
||||
msgid "Unknown error"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1028
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1181
|
||||
msgid "Unknown NFQWS flag."
|
||||
msgstr ""
|
||||
|
||||
@@ -1267,15 +1294,15 @@ msgid "URL must use one of the following protocols:"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/node.js:21
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1480
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1625
|
||||
msgid "URLTest"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1550
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1699
|
||||
msgid "URLTest connections"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1568
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1717
|
||||
msgid "URLTest interval"
|
||||
msgstr ""
|
||||
|
||||
@@ -1287,7 +1314,7 @@ msgstr ""
|
||||
msgid "URLTest Links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1583
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1732
|
||||
msgid "URLTest tolerance"
|
||||
msgstr ""
|
||||
|
||||
@@ -1296,7 +1323,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:1613
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1762
|
||||
msgid "URLTest URL"
|
||||
msgstr ""
|
||||
|
||||
@@ -1304,7 +1331,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:1658
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1807
|
||||
msgid "Use a network interface as the outbound for this section"
|
||||
msgstr ""
|
||||
|
||||
@@ -1325,35 +1352,35 @@ msgstr ""
|
||||
msgid "Valid"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:255
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:275
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:279
|
||||
#: ../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
|
||||
msgid "Validation errors:"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:289
|
||||
#: src/podkop/tabs/diagnostic/initController.ts:290
|
||||
#: src/podkop/tabs/diagnostic/partials/renderAvailableActions.ts:107
|
||||
msgid "View logs"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1414
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1544
|
||||
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:1493
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1638
|
||||
msgid "vless://, ss://, trojan://, socks4/5://, hy2/hysteria2:// links"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1881
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2030
|
||||
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:1900
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:2049
|
||||
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:1427
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1557
|
||||
msgid "What Podkop Plus should do when this section matches"
|
||||
msgstr ""
|
||||
|
||||
@@ -1365,18 +1392,26 @@ msgstr ""
|
||||
msgid "You can select Output Network Interface, by default autodetect"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:234
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:246
|
||||
#: src/podkop/tabs/dashboard/initController.ts:365
|
||||
msgid "Zapret"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:853
|
||||
#: ../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
|
||||
msgid "Zapret (package not installed)"
|
||||
msgstr ""
|
||||
|
||||
#: ../luci-app-podkop-plus/htdocs/luci-static/resources/view/podkop/section.js:1006
|
||||
msgid "Zapret hostlist templates are not supported here because Podkop Plus does not expand them for per-rule NFQWS strategies."
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:43
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:87
|
||||
msgid "Zapret installed"
|
||||
msgstr ""
|
||||
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:43
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:59
|
||||
#: src/podkop/tabs/diagnostic/checks/runZapretCheck.ts:64
|
||||
msgid "Zapret not installed"
|
||||
msgstr ""
|
||||
|
||||
@@ -38,6 +38,7 @@ PODKOP_RUNTIME_STATE_DIR="/var/run/podkop-plus"
|
||||
PODKOP_RELOAD_STATE_FILE="$PODKOP_RUNTIME_STATE_DIR/reload-state"
|
||||
PODKOP_RELOAD_STATE_FORMAT=1
|
||||
PODKOP_NFT_POPULATE_ENABLED=1
|
||||
PODKOP_ZAPRET_MISSING_WARNING_EMITTED=0
|
||||
|
||||
config_load "$PODKOP_CONFIG"
|
||||
|
||||
@@ -1182,6 +1183,16 @@ process_validate_rule() {
|
||||
|
||||
action="$(get_rule_action "$section")"
|
||||
if [ "$action" = "zapret" ]; then
|
||||
if ! is_zapret_installed; then
|
||||
if [ "$PODKOP_ZAPRET_MISSING_WARNING_EMITTED" -eq 0 ]; then
|
||||
log "There are enabled rules with action 'zapret', but the zapret package is not installed. These rules will be skipped." "error"
|
||||
PODKOP_ZAPRET_MISSING_WARNING_EMITTED=1
|
||||
fi
|
||||
config_list_foreach "$section" "community_lists" validate_service
|
||||
config_list_foreach "$section" "rule_set" validate_ruleset_reference
|
||||
return 0
|
||||
fi
|
||||
|
||||
validate_rule_nfqws_opt "$section"
|
||||
fi
|
||||
|
||||
@@ -1769,6 +1780,10 @@ configure_outbound_handler() {
|
||||
proxy_config_type="$(get_proxy_config_type "$section")"
|
||||
|
||||
if [ "$action" = "zapret" ]; then
|
||||
if ! is_zapret_installed; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
local routing_mark outbound_tag zapret_index
|
||||
|
||||
zapret_index="$(get_zapret_rule_index "$section")"
|
||||
@@ -2225,6 +2240,10 @@ configure_route_rule_handler() {
|
||||
action="$(get_rule_action "$section")"
|
||||
[ -n "$action" ] || return 0
|
||||
|
||||
if [ "$action" = "zapret" ] && ! is_zapret_installed; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
log "Configuring route rule '$section' with action '$action'"
|
||||
|
||||
if ! rule_has_primary_matchers "$section"; then
|
||||
@@ -3535,7 +3554,7 @@ get_podkop_latest_version() {
|
||||
}
|
||||
|
||||
get_system_info() {
|
||||
local podkop_version podkop_latest_version luci_app_version sing_box_version zapret_version openwrt_version device_model
|
||||
local podkop_version podkop_latest_version luci_app_version sing_box_version zapret_version zapret_installed openwrt_version device_model
|
||||
|
||||
podkop_version="$PODKOP_VERSION"
|
||||
|
||||
@@ -3555,7 +3574,9 @@ get_system_info() {
|
||||
sing_box_version="not installed"
|
||||
fi
|
||||
|
||||
if [ -x "$ZAPRET_SOURCE_NFQWS_BIN" ]; then
|
||||
zapret_installed=0
|
||||
if is_zapret_installed; then
|
||||
zapret_installed=1
|
||||
zapret_version="$(get_zapret_package_version)"
|
||||
[ -z "$zapret_version" ] && zapret_version="unknown"
|
||||
else
|
||||
@@ -3582,6 +3603,7 @@ get_system_info() {
|
||||
--arg luci_app_version "$luci_app_version" \
|
||||
--arg sing_box_version "$sing_box_version" \
|
||||
--arg zapret_version "$zapret_version" \
|
||||
--argjson zapret_installed "$zapret_installed" \
|
||||
--arg openwrt_version "$openwrt_version" \
|
||||
--arg device_model "$device_model" \
|
||||
'{
|
||||
@@ -3590,6 +3612,7 @@ get_system_info() {
|
||||
luci_app_version: $luci_app_version,
|
||||
sing_box_version: $sing_box_version,
|
||||
zapret_version: $zapret_version,
|
||||
zapret_installed: $zapret_installed,
|
||||
openwrt_version: $openwrt_version,
|
||||
device_model: $device_model
|
||||
}'
|
||||
@@ -4553,5 +4576,3 @@ validate_nfqws_strategy_json)
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
|
||||
@@ -436,6 +436,10 @@ run_nfqws_dry_run_validation() {
|
||||
local raw_opt="$1"
|
||||
local old_ifs output_file output summary needles rc
|
||||
|
||||
if ! is_zapret_installed; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
if ! prepare_zapret_runtime; then
|
||||
set_nfqws_validation_failure \
|
||||
"The Podkop Plus zapret runtime is unavailable. Install the upstream zapret package so $ZAPRET_SOURCE_NFQWS_BIN exists."
|
||||
@@ -650,6 +654,10 @@ prepare_zapret_runtime() {
|
||||
return 0
|
||||
}
|
||||
|
||||
is_zapret_installed() {
|
||||
[ -x "$ZAPRET_SOURCE_NFQWS_BIN" ]
|
||||
}
|
||||
|
||||
rewrite_zapret_runtime_paths() {
|
||||
local source_path runtime_path
|
||||
|
||||
@@ -869,9 +877,9 @@ build_generated_zapret_hostlist() {
|
||||
check_zapret_requirements() {
|
||||
has_enabled_zapret_rules || return 0
|
||||
|
||||
if [ ! -x "$ZAPRET_SOURCE_NFQWS_BIN" ]; then
|
||||
log "Action 'zapret' requires the upstream zapret runtime package. Missing binary: $ZAPRET_SOURCE_NFQWS_BIN. Aborted." "fatal"
|
||||
exit 1
|
||||
if ! is_zapret_installed; then
|
||||
log "Zapret package is not installed. Rules with action 'zapret' will be skipped until zapret is installed." "error"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if ! prepare_zapret_runtime; then
|
||||
@@ -1100,6 +1108,7 @@ _create_zapret_nft_rule_handler() {
|
||||
|
||||
create_zapret_nft_rules() {
|
||||
has_enabled_zapret_rules || return 0
|
||||
is_zapret_installed || return 0
|
||||
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle_output meta mark \& "$ZAPRET_DESYNC_MARK" == "$ZAPRET_DESYNC_MARK" return
|
||||
nft add rule inet "$NFT_TABLE_NAME" mangle_output meta mark \& "$ZAPRET_DESYNC_MARK_POSTNAT" == "$ZAPRET_DESYNC_MARK_POSTNAT" return
|
||||
@@ -1158,6 +1167,7 @@ _start_zapret_runtime_handler() {
|
||||
|
||||
start_zapret_runtime() {
|
||||
has_enabled_zapret_rules || return 0
|
||||
is_zapret_installed || return 0
|
||||
|
||||
stop_zapret_runtime
|
||||
check_zapret_requirements
|
||||
|
||||
Reference in New Issue
Block a user