fixed failing tests

This commit is contained in:
Giuliano Bellini s294739 2023-04-17 18:46:25 +02:00
commit 4fa8d13b8a
28 changed files with 940 additions and 180 deletions

View file

@ -97,6 +97,60 @@
"contributions": [
"translation"
]
},
{
"login": "DocRAID",
"name": "Limdongju",
"avatar_url": "https://avatars.githubusercontent.com/u/69478178?v=4",
"profile": "https://github.com/DocRAID",
"contributions": [
"translation"
]
},
{
"login": "fuzunspm",
"name": "Hüseyin Fahri Uzun",
"avatar_url": "https://avatars.githubusercontent.com/u/12132746?v=4",
"profile": "https://github.com/fuzunspm",
"contributions": [
"translation"
]
},
{
"login": "jauderho",
"name": "Jauder Ho",
"avatar_url": "https://avatars.githubusercontent.com/u/13562?v=4",
"profile": "https://github.com/jauderho",
"contributions": [
"infra"
]
},
{
"login": "amarao",
"name": "George Shuklin",
"avatar_url": "https://avatars.githubusercontent.com/u/652496?v=4",
"profile": "https://github.com/amarao",
"contributions": [
"translation"
]
},
{
"login": "franciscoBSalgueiro",
"name": "Francisco Salgueiro",
"avatar_url": "https://avatars.githubusercontent.com/u/92053465?v=4",
"profile": "https://github.com/franciscoBSalgueiro",
"contributions": [
"translation"
]
},
{
"login": "philclifford",
"name": "Phil Clifford",
"avatar_url": "https://avatars.githubusercontent.com/u/8797027?v=4",
"profile": "https://hachyderm.io/@phil8o",
"contributions": [
"platform"
]
}
],
"contributorsPerLine": 7,

View file

@ -5,6 +5,14 @@
version: 2
updates:
# Maintain dependencies for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
# Maintain dependencies for cargo
- package-ecosystem: cargo
directory: "/"
schedule:

View file

@ -21,7 +21,7 @@ jobs:
name: Rustfmt
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
profile: minimal
@ -37,7 +37,7 @@ jobs:
name: Clippy
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
profile: minimal

View file

@ -1,6 +1,20 @@
# Change Log
All Sniffnet releases with the relative changes are documented in this file.
## [1.1.4] - UNRELEASED
- Added new translations of the GUI:
* Portuguese 🇵🇹 ([#134](https://github.com/GyulyVGC/sniffnet/pull/134))
* Russian 🇷🇺 ([#151](https://github.com/GyulyVGC/sniffnet/pull/151))
* Korean 🇰🇷 ([#128](https://github.com/GyulyVGC/sniffnet/pull/128))
* Turkish 🇹🇷 ([#139](https://github.com/GyulyVGC/sniffnet/pull/139))
* ...the total number of supported languages is now 13 🎉
- Changed adapter buttons format and improved volume slider layout (see [#119](https://github.com/GyulyVGC/sniffnet/issues/119) for more details or to give me further suggestions)
- Scrollbars are now highlighted when hovering on the respective scrollable area
- Fixed problem causing a crash on macOS when starting Sniffnet's Homebrew package or building from source in release mode ([#109](https://github.com/GyulyVGC/sniffnet/issues/109) - [#137](https://github.com/GyulyVGC/sniffnet/issues/137))
## [1.1.3] - 2023-04-04
- Added Romanian translation 🇷🇴 ([#113](https://github.com/GyulyVGC/sniffnet/pull/113))

View file

@ -6,16 +6,26 @@ A big shout-out to all the contributors of Sniffnet ([emoji key](https://allcont
<table>
<tbody>
<tr>
<td align="center" valign="top" width="10%"><a href="https://github.com/Crirock"><img src="https://avatars.githubusercontent.com/u/101053125?v=4?s=60" width="60px;" alt="Cristiano"/><br /><sub><b>Cristiano</b></sub></a><br /><a href="https://github.com/GyulyVGC/sniffnet/commits?author=Crirock" title="Code">💻</a> <a href="#ideas-Crirock" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="10%"><a href="https://github.com/acolombier"><img src="https://avatars.githubusercontent.com/u/7086688?v=4?s=60" width="60px;" alt="Antoine Colombier"/><br /><sub><b>Antoine Colombier</b></sub></a><br /><a href="https://github.com/GyulyVGC/sniffnet/commits?author=acolombier" title="Tests">⚠️</a> <a href="#translation-acolombier" title="Translation">🌍</a></td>
<td align="center" valign="top" width="10%"><a href="https://github.com/colin99d"><img src="https://avatars.githubusercontent.com/u/72827203?v=4?s=60" width="60px;" alt="Colin Delahunty"/><br /><sub><b>Colin Delahunty</b></sub></a><br /><a href="https://github.com/GyulyVGC/sniffnet/commits?author=colin99d" title="Tests">⚠️</a></td>
<td align="center" valign="top" width="10%"><a href="https://github.com/AmadeusGraves"><img src="https://avatars.githubusercontent.com/u/18572939?v=4?s=60" width="60px;" alt="AmadeusGraves"/><br /><sub><b>AmadeusGraves</b></sub></a><br /><a href="#translation-AmadeusGraves" title="Translation">🌍</a></td>
<td align="center" valign="top" width="10%"><a href="https://github.com/Charpy"><img src="https://avatars.githubusercontent.com/u/4827568?v=4?s=60" width="60px;" alt="Charpy"/><br /><sub><b>Charpy</b></sub></a><br /><a href="#translation-Charpy" title="Translation">🌍</a></td>
<td align="center" valign="top" width="10%"><a href="https://github.com/Kiruyuto"><img src="https://avatars.githubusercontent.com/u/80201134?v=4?s=60" width="60px;" alt="Hubert"/><br /><sub><b>Hubert</b></sub></a><br /><a href="#translation-Kiruyuto" title="Translation">🌍</a></td>
<td align="center" valign="top" width="10%"><a href="https://github.com/luca3s"><img src="https://avatars.githubusercontent.com/u/41015240?v=4?s=60" width="60px;" alt="luca3s"/><br /><sub><b>luca3s</b></sub></a><br /><a href="#translation-luca3s" title="Translation">🌍</a></td>
<td align="center" valign="top" width="10%"><a href="https://github.com/cxw620"><img src="https://avatars.githubusercontent.com/u/70561268?v=4?s=60" width="60px;" alt="陈寒彤"/><br /><sub><b>陈寒彤</b></sub></a><br /><a href="#translation-cxw620" title="Translation">🌍</a></td>
<td align="center" valign="top" width="10%"><a href="http://catchts.com"><img src="https://avatars.githubusercontent.com/u/16646733?v=4?s=60" width="60px;" alt="yossarian"/><br /><sub><b>yossarian</b></sub></a><br /><a href="#translation-captain-yossarian" title="Translation">🌍</a></td>
<td align="center" valign="top" width="10%"><a href="https://github.com/ervinpopescu"><img src="https://avatars.githubusercontent.com/u/84532402?v=4?s=60" width="60px;" alt="ervinpopescu"/><br /><sub><b>ervinpopescu</b></sub></a><br /><a href="#translation-ervinpopescu" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Crirock"><img src="https://avatars.githubusercontent.com/u/101053125?v=4?s=100" width="100px;" alt="Cristiano"/><br /><sub><b>Cristiano</b></sub></a><br /><a href="https://github.com/GyulyVGC/sniffnet/commits?author=Crirock" title="Code">💻</a> <a href="#ideas-Crirock" title="Ideas, Planning, & Feedback">🤔</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/acolombier"><img src="https://avatars.githubusercontent.com/u/7086688?v=4?s=100" width="100px;" alt="Antoine Colombier"/><br /><sub><b>Antoine Colombier</b></sub></a><br /><a href="https://github.com/GyulyVGC/sniffnet/commits?author=acolombier" title="Tests">⚠️</a> <a href="#translation-acolombier" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/colin99d"><img src="https://avatars.githubusercontent.com/u/72827203?v=4?s=100" width="100px;" alt="Colin Delahunty"/><br /><sub><b>Colin Delahunty</b></sub></a><br /><a href="https://github.com/GyulyVGC/sniffnet/commits?author=colin99d" title="Tests">⚠️</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/AmadeusGraves"><img src="https://avatars.githubusercontent.com/u/18572939?v=4?s=100" width="100px;" alt="AmadeusGraves"/><br /><sub><b>AmadeusGraves</b></sub></a><br /><a href="#translation-AmadeusGraves" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Charpy"><img src="https://avatars.githubusercontent.com/u/4827568?v=4?s=100" width="100px;" alt="Charpy"/><br /><sub><b>Charpy</b></sub></a><br /><a href="#translation-Charpy" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Kiruyuto"><img src="https://avatars.githubusercontent.com/u/80201134?v=4?s=100" width="100px;" alt="Hubert"/><br /><sub><b>Hubert</b></sub></a><br /><a href="#translation-Kiruyuto" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/luca3s"><img src="https://avatars.githubusercontent.com/u/41015240?v=4?s=100" width="100px;" alt="luca3s"/><br /><sub><b>luca3s</b></sub></a><br /><a href="#translation-luca3s" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/cxw620"><img src="https://avatars.githubusercontent.com/u/70561268?v=4?s=100" width="100px;" alt="陈寒彤"/><br /><sub><b>陈寒彤</b></sub></a><br /><a href="#translation-cxw620" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://catchts.com"><img src="https://avatars.githubusercontent.com/u/16646733?v=4?s=100" width="100px;" alt="yossarian"/><br /><sub><b>yossarian</b></sub></a><br /><a href="#translation-captain-yossarian" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/ervinpopescu"><img src="https://avatars.githubusercontent.com/u/84532402?v=4?s=100" width="100px;" alt="ervinpopescu"/><br /><sub><b>ervinpopescu</b></sub></a><br /><a href="#translation-ervinpopescu" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/DocRAID"><img src="https://avatars.githubusercontent.com/u/69478178?v=4?s=100" width="100px;" alt="Limdongju"/><br /><sub><b>Limdongju</b></sub></a><br /><a href="#translation-DocRAID" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/fuzunspm"><img src="https://avatars.githubusercontent.com/u/12132746?v=4?s=100" width="100px;" alt="Hüseyin Fahri Uzun"/><br /><sub><b>Hüseyin Fahri Uzun</b></sub></a><br /><a href="#translation-fuzunspm" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/jauderho"><img src="https://avatars.githubusercontent.com/u/13562?v=4?s=100" width="100px;" alt="Jauder Ho"/><br /><sub><b>Jauder Ho</b></sub></a><br /><a href="#infra-jauderho" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/amarao"><img src="https://avatars.githubusercontent.com/u/652496?v=4?s=100" width="100px;" alt="George Shuklin"/><br /><sub><b>George Shuklin</b></sub></a><br /><a href="#translation-amarao" title="Translation">🌍</a></td>
</tr>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/franciscoBSalgueiro"><img src="https://avatars.githubusercontent.com/u/92053465?v=4?s=100" width="100px;" alt="Francisco Salgueiro"/><br /><sub><b>Francisco Salgueiro</b></sub></a><br /><a href="#translation-franciscoBSalgueiro" title="Translation">🌍</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://hachyderm.io/@phil8o"><img src="https://avatars.githubusercontent.com/u/8797027?v=4?s=100" width="100px;" alt="Phil Clifford"/><br /><sub><b>Phil Clifford</b></sub></a><br /><a href="#platform-philclifford" title="Packaging/porting to new platform">📦</a></td>
</tr>
</tbody>
</table>

198
Cargo.lock generated
View file

@ -24,6 +24,15 @@ version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046"
[[package]]
name = "addr2line"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
dependencies = [
"gimli",
]
[[package]]
name = "adler"
version = "1.0.2"
@ -129,6 +138,21 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "backtrace"
version = "0.3.67"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
dependencies = [
"addr2line",
"cc",
"cfg-if",
"libc",
"miniz_oxide",
"object",
"rustc-demangle",
]
[[package]]
name = "base64"
version = "0.21.0"
@ -269,12 +293,6 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "cfg_aliases"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
[[package]]
name = "chrono"
version = "0.4.24"
@ -395,6 +413,12 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
[[package]]
name = "com-rs"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf43edc576402991846b093a7ca18a3477e0ef9c588cde84964b5d3e43016642"
[[package]]
name = "combine"
version = "4.6.6"
@ -661,9 +685,9 @@ dependencies = [
[[package]]
name = "d3d12"
version = "0.5.0"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "827914e1f53b1e0e025ecd3d967a7836b7bcb54520f90e21ef8df7b4d88a2759"
checksum = "d8f0de2f5a8e7bd4a9eec0e3c781992a4ce1724f68aec7d7a3715344de8b39da"
dependencies = [
"bitflags",
"libloading 0.7.4",
@ -1166,6 +1190,12 @@ dependencies = [
"weezl",
]
[[package]]
name = "gimli"
version = "0.27.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
[[package]]
name = "glam"
version = "0.21.3"
@ -1190,6 +1220,18 @@ dependencies = [
"web-sys",
]
[[package]]
name = "glow"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4e007a07a24de5ecae94160f141029e9a347282cfe25d1d58d85d845cf3130f1"
dependencies = [
"js-sys",
"slotmap",
"wasm-bindgen",
"web-sys",
]
[[package]]
name = "glow_glyph"
version = "0.5.1"
@ -1197,7 +1239,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f4e62c64947b9a24fe20e2bba9ad819ecb506ef5c8df7ffc4737464c6df9510"
dependencies = [
"bytemuck",
"glow",
"glow 0.11.2",
"glyph_brush",
"log",
]
@ -1259,6 +1301,19 @@ dependencies = [
"bitflags",
]
[[package]]
name = "gpu-allocator"
version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce95f9e2e11c2c6fadfce42b5af60005db06576f231f5c92550fdded43c423e8"
dependencies = [
"backtrace",
"log",
"thiserror",
"winapi",
"windows",
]
[[package]]
name = "gpu-descriptor"
version = "0.2.3"
@ -1291,9 +1346,9 @@ dependencies = [
[[package]]
name = "h2"
version = "0.3.16"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d"
checksum = "66b91535aa35fea1523ad1b86cb6b53c28e0ae566ba4a460f4457e936cad7c6f"
dependencies = [
"bytes",
"fnv",
@ -1326,6 +1381,21 @@ dependencies = [
"ahash",
]
[[package]]
name = "hassle-rs"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90601c6189668c7345fc53842cb3f3a3d872203d523be1b3cb44a36a3e62fb85"
dependencies = [
"bitflags",
"com-rs",
"libc",
"libloading 0.7.4",
"thiserror",
"widestring",
"winapi",
]
[[package]]
name = "hermit-abi"
version = "0.2.6"
@ -1444,9 +1514,9 @@ dependencies = [
[[package]]
name = "iced"
version = "0.8.0"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d11492d829f0035ed3fa9217faccf16e57a5612a74dc7c49822c6f6a5ab1b829"
checksum = "efbddf356d01e9d41cd394a9d04d62bfd89650a30f12fda5839cabb8c4591c88"
dependencies = [
"iced_core",
"iced_futures",
@ -1461,9 +1531,9 @@ dependencies = [
[[package]]
name = "iced_core"
version = "0.8.0"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a571e43a4dea90e3a7a9f8bb40e4238d0847f9f9d862c87a6719e3e241dd6292"
checksum = "11e1942e28dedee756cc27e67e7a838cdc1e59fb6bf9627ec9f709ab3b135782"
dependencies = [
"bitflags",
"instant",
@ -1485,13 +1555,13 @@ dependencies = [
[[package]]
name = "iced_glow"
version = "0.7.0"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d237909aab71ad4b0f005784f9530d3b352eb95b3514bed1a6eb9fc019e9fe04"
checksum = "adc5b081015f5c75777c96ad75e2288916e7d444c97396d6d136517877ef9129"
dependencies = [
"bytemuck",
"euclid",
"glow",
"glow 0.11.2",
"glow_glyph",
"glyph_brush",
"iced_graphics",
@ -1501,9 +1571,9 @@ dependencies = [
[[package]]
name = "iced_graphics"
version = "0.7.0"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d58ad90b769e97bd245946b03c4932f82841c8645a7cee47d99115c8b341e8aa"
checksum = "338a6aff7db906537074ad0fe8b720cfdb9512cdfea43c628c76bd1cf50fdcc0"
dependencies = [
"bitflags",
"bytemuck",
@ -1520,9 +1590,9 @@ dependencies = [
[[package]]
name = "iced_lazy"
version = "0.5.0"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "370ffb291ff5609ca488a2596df98a049b2a4d572c621aa0b2c586694ca327cf"
checksum = "bdf1cb6b8cd90488d3a03fbf438ad42038cb83c81a0d61f3692c51875efdb818"
dependencies = [
"iced_native",
"ouroboros",
@ -1530,23 +1600,24 @@ dependencies = [
[[package]]
name = "iced_native"
version = "0.9.1"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9942cdcd78591e816aae558721942aa366b03ed7f3f964b51de23c68ec78be7"
checksum = "2b3dd42731b43f1ee0a028af35abefbb756956d093552d0f92f678628e6384fe"
dependencies = [
"iced_core",
"iced_futures",
"iced_style",
"num-traits",
"thiserror",
"twox-hash",
"unicode-segmentation",
]
[[package]]
name = "iced_style"
version = "0.7.0"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad5eb9547d32b9ff9b019526657974112b86baab58b2b91b1624316b309700b6"
checksum = "0e37333dc2991201140302cd0d4cea051bd37ca3671d5008ec85df86d232ff30"
dependencies = [
"iced_core",
"once_cell",
@ -1555,9 +1626,9 @@ dependencies = [
[[package]]
name = "iced_wgpu"
version = "0.9.0"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fbdcca29092b56f6715dfbc183796b627d3ead82883594e7d6babf5c76151c45"
checksum = "478803c56061f567ce5ddf223b20d11d3c118cc46bb0d0552370dc65cdc4cb9c"
dependencies = [
"bitflags",
"bytemuck",
@ -1576,9 +1647,9 @@ dependencies = [
[[package]]
name = "iced_winit"
version = "0.8.0"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ef7747251a0b4a417589c5a8139d1858edf88d05566018a1a0b772d0229ef68"
checksum = "8a59ea3a85149a6a1f9e92b6c740ce90f04e5c7d848cfd05742336863fceb955"
dependencies = [
"iced_futures",
"iced_graphics",
@ -2021,9 +2092,9 @@ checksum = "16cf681a23b4d0a43fc35024c176437f9dcd818db34e0f42ab456a0ee5ad497b"
[[package]]
name = "naga"
version = "0.10.0"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "262d2840e72dbe250e8cf2f522d080988dfca624c4112c096238a4845f591707"
checksum = "5eafe22a23b797c9bc227c6c896419b26b5bb88fa903417a3adaed08778850d5"
dependencies = [
"bit-set",
"bitflags",
@ -2293,6 +2364,15 @@ dependencies = [
"objc",
]
[[package]]
name = "object"
version = "0.30.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
dependencies = [
"memchr",
]
[[package]]
name = "oboe"
version = "0.5.0"
@ -2608,9 +2688,9 @@ checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142"
[[package]]
name = "plotters-iced"
version = "0.7.0"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc932e1abce0251e908cf30bde8e66c30db30753a30b1b72f64846824783e0bf"
checksum = "83affd565dbe7b16a6bb4935ab5d3a91abc88a8e75ca29a17306f298495c7c8e"
dependencies = [
"iced_graphics",
"iced_native",
@ -2905,6 +2985,12 @@ dependencies = [
"unicode-ident",
]
[[package]]
name = "rustc-demangle"
version = "0.1.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b"
[[package]]
name = "rustc-hash"
version = "1.1.0"
@ -3034,18 +3120,18 @@ checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a"
[[package]]
name = "serde"
version = "1.0.159"
version = "1.0.160"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065"
checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.159"
version = "1.0.160"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585"
checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
dependencies = [
"proc-macro2",
"quote",
@ -3810,15 +3896,17 @@ checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
[[package]]
name = "wgpu"
version = "0.14.2"
version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81f643110d228fd62a60c5ed2ab56c4d5b3704520bd50561174ec4ec74932937"
checksum = "d745a1b6d91d85c33defbb29f0eee0450e1d2614d987e14bf6baf26009d132d7"
dependencies = [
"arrayvec 0.7.2",
"cfg-if",
"js-sys",
"log",
"naga",
"parking_lot 0.12.1",
"profiling",
"raw-window-handle 0.5.0",
"smallvec",
"static_assertions",
@ -3832,14 +3920,13 @@ dependencies = [
[[package]]
name = "wgpu-core"
version = "0.14.2"
version = "0.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6000d1284ef8eec6076fd5544a73125fd7eb9b635f18dceeb829d826f41724ca"
checksum = "7131408d940e335792645a98f03639573b0480e9e2e7cddbbab74f7c6d9f3fff"
dependencies = [
"arrayvec 0.7.2",
"bit-vec",
"bitflags",
"cfg_aliases",
"codespan-reporting",
"fxhash",
"log",
@ -3856,9 +3943,9 @@ dependencies = [
[[package]]
name = "wgpu-hal"
version = "0.14.1"
version = "0.15.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3cc320a61acb26be4f549c9b1b53405c10a223fbfea363ec39474c32c348d12f"
checksum = "bdcf61a283adc744bb5453dd88ea91f3f86d5ca6b027661c6c73c7734ae0288b"
dependencies = [
"android_system_properties",
"arrayvec 0.7.2",
@ -3870,11 +3957,14 @@ dependencies = [
"d3d12",
"foreign-types 0.3.2",
"fxhash",
"glow",
"glow 0.12.1",
"gpu-alloc",
"gpu-allocator",
"gpu-descriptor",
"hassle-rs",
"js-sys",
"khronos-egl",
"libc",
"libloading 0.7.4",
"log",
"metal",
@ -3895,18 +3985,20 @@ dependencies = [
[[package]]
name = "wgpu-types"
version = "0.14.1"
version = "0.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fb6b28ef22cac17b9109b25b3bf8c9a103eeb293d7c5f78653979b09140375f6"
checksum = "32444e121b0bd00cb02c0de32fde457a9491bd44e03e7a5db6df9b1da2f6f110"
dependencies = [
"bitflags",
"js-sys",
"web-sys",
]
[[package]]
name = "wgpu_glyph"
version = "0.18.0"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0cafb82773e0f124a33674dab5de4dff73175aeb921949047ab014efb58fb446"
checksum = "e25440d5f32ec39de49c57c15c2d3f9133a7939b069b5ad07e5afd8b78fb8adc"
dependencies = [
"bytemuck",
"glyph_brush",
@ -3914,6 +4006,12 @@ dependencies = [
"wgpu",
]
[[package]]
name = "widestring"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983"
[[package]]
name = "winapi"
version = "0.3.9"

View file

@ -31,13 +31,13 @@ chrono = { version = "0.4.24", default_features = false, features = ["clock"] }
thousands = "0.2.0"
indexmap = "1.9.3"
plotters = { version = "0.3.4", default_features = false, features = ["area_series"] }
iced = { version = "0.8.0", features = ["tokio", "image"] }
iced_native = "0.9.1"
iced_lazy = "0.5.0"
plotters-iced = "0.7.0"
iced = { version = "0.9.0", features = ["tokio", "image"] }
iced_native = "0.10.1"
iced_lazy = "0.6.1"
plotters-iced = "0.8.0"
maxminddb = "0.23.0"
confy = "0.5.1"
serde = { version = "1.0.159", default_features = false, features = ["derive"] }
serde = { version = "1.0.160", default_features = false, features = ["derive"] }
rodio = { version = "0.17.1", default_features = false, features = ["mp3"] }
reqwest = { version = "0.11.16", features = ["json", "blocking"] }

View file

@ -302,6 +302,13 @@ If you have problems after having installed Sniffnet through the provided instal
it could be due to your OS not being compatible with the pre-built binaries I generated for you. <br>
Reach me out, and I'll try to generate an installer for your specific operating system.
### Rendering problems
In some cases, especially if you are running on an old architecture, the `wgpu` default renderer used by [iced](https://github.com/iced-rs/iced)
may cause some problems that could prevent you from running Sniffnet. <br>
In this case, you can try building the application from the [`glow-renderer`](https://github.com/GyulyVGC/sniffnet/tree/glow-renderer)
branch, which uses the `glow` renderer.
### ***In any case don't hesitate to [open an issue](https://github.com/GyulyVGC/sniffnet/issues), and I will do my best to help you!***
</details>

View file

@ -96,10 +96,12 @@ z
¿
Ê
Î
Ö
Ü
à
á
â
ã
ä
ç
è
@ -111,6 +113,7 @@ z
ñ
ó
ô
õ
ö
ù
ú
@ -120,9 +123,14 @@ z
ą
ć
ę
ğ
İ
ı
ł
ń
ś
Ş
ş
ź
ż
Ș
@ -132,16 +140,20 @@ z
В
Г
Д
Е
З
И
К
Л
М
Н
О
П
Р
С
Т
У
Ф
Ч
Ш
Щ
@ -172,13 +184,16 @@ z
ч
ш
щ
ъ
ы
ь
э
ю
я
ё
є
і
ї
⌘
⏎
❤
一
@ -370,4 +385,183 @@ z
页
题
黑
가
감
값
개
검
것
게
겠
겨
결
계
고
과
관
교
국
그
근
기
까
네
넷
눌
는
능
니
다
당
대
댑
데
뎁
도
되
된
될
됩
두
둘
드
들
따
때
라
랑
래
러
레
려
련
로
료
류
륨
른
를
리
림
링
마
만
말
면
모
몽
문
바
받
발
버
별
보
본
볼
부
분
사
삭
새
생
서
석
선
설
성
세
션
셨
소
속
송
수
숨
스
습
시
신
아
않
알
았
애
어
언
없
었
에
여
연
열
였
오
올
요
용
우
운
워
위
유
으
을
음
의
이
인
일
임
있
자
장
재
적
전
정
제
종
주
줄
중
즐
지
직
찰
찾
체
초
총
최
추
케
콜
크
킷
타
태
택
터
테
토
트
패
페
표
프
플
픽
필
하
한
할
합
해
현
화
확
환
활
효
,

View file

@ -31,8 +31,8 @@ pub fn ip_version_radios(
for option in IpVersion::ALL {
ret_val = ret_val.push(
Radio::new(
option,
option.get_radio_label(language),
option,
Some(active),
Message::IpVersionSelection,
)
@ -62,8 +62,8 @@ pub fn transport_protocol_radios(
for option in TransProtocol::ALL {
ret_val = ret_val.push(
Radio::new(
option,
option.get_radio_label(language),
option,
Some(active),
Message::TransportProtocolSelection,
)
@ -92,8 +92,8 @@ pub fn language_radios(
.align_items(Alignment::Center)
.push(
Radio::new(
*option,
format!("{} ({:?})", option.get_radio_label(), option),
*option,
Some(active),
Message::LanguageSelection,
)
@ -124,8 +124,8 @@ pub fn sound_packets_threshold_radios(
for option in Sound::ALL {
ret_val = ret_val.push(
Radio::new(
option,
option.get_radio_label(language),
option,
Some(packets_notification.sound),
|value| {
Message::UpdateNotificationSettings(
@ -161,8 +161,8 @@ pub fn sound_bytes_threshold_radios(
for option in Sound::ALL {
ret_val = ret_val.push(
Radio::new(
option,
option.get_radio_label(language),
option,
Some(bytes_notification.sound),
|value| {
Message::UpdateNotificationSettings(
@ -198,8 +198,8 @@ pub fn sound_favorite_radios(
for option in Sound::ALL {
ret_val = ret_val.push(
Radio::new(
option,
option.get_radio_label(language),
option,
Some(favorite_notification.sound),
|value| {
Message::UpdateNotificationSettings(
@ -241,8 +241,8 @@ pub fn chart_radios(
for option in ChartType::ALL {
ret_val = ret_val.push(
Radio::new(
option,
option.get_radio_label(language),
option,
Some(active),
Message::ChartSelection,
)
@ -276,8 +276,8 @@ pub fn report_radios(
for option in ReportType::ALL {
ret_val = ret_val.push(
Radio::new(
option,
option.get_radio_label(language),
option,
Some(active),
Message::ReportSelection,
)

View file

@ -3,7 +3,7 @@
//! It contains elements to select network adapter and traffic filters.
use iced::widget::{
button, horizontal_space, vertical_space, Column, Container, PickList, Radio, Row, Scrollable,
button, horizontal_space, vertical_space, Button, Column, Container, PickList, Row, Scrollable,
Text, Tooltip,
};
use iced::Length::FillPortion;
@ -138,7 +138,7 @@ fn button_start(style: StyleType, language: Language) -> Tooltip<'static, Messag
fn get_col_adapter(sniffer: &Sniffer, font: Font) -> Column<Message> {
let mut dev_str_list = vec![];
for dev in Device::list().expect("Error retrieving device list\r\n") {
let mut dev_str = "\n".to_string();
let mut dev_str = String::new();
let name = dev.name;
match dev.desc {
None => {
@ -165,7 +165,6 @@ fn get_col_adapter(sniffer: &Sniffer, font: Font) -> Column<Message> {
let address_string = addr.addr.to_string();
dev_str.push_str(&format!("\n {address_string}"));
}
dev_str.push_str("\n ");
dev_str_list.push((name, dev_str));
}
@ -183,27 +182,24 @@ fn get_col_adapter(sniffer: &Sniffer, font: Font) -> Column<Message> {
Scrollable::new(dev_str_list.iter().fold(
Column::new().padding(13).spacing(5),
|scroll_adapters, adapter| {
let name = &adapter.0;
let name = adapter.0.clone();
let description = adapter.1.clone();
scroll_adapters.push(
Container::new(
Radio::new(name, &adapter.1, Some(&sniffer.device.name), |name| {
Message::AdapterSelection(name.to_string())
})
.font(font)
.size(15)
Button::new(Text::new(description).font(font))
.padding([20, 30])
.width(Length::Fill)
.style(<StyleTuple as Into<
iced::theme::Radio,
>>::into(
StyleTuple(sniffer.style, ElementType::Standard),
)),
)
.padding(10)
.style(<StyleTuple as Into<
iced::theme::Container,
>>::into(
StyleTuple(sniffer.style, ElementType::BorderedRound),
)),
.style(
StyleTuple(
sniffer.style,
if name == sniffer.device.name {
ElementType::BorderedRoundSelected
} else {
ElementType::BorderedRound
},
)
.into(),
)
.on_press(Message::AdapterSelection(name)),
)
},
))

View file

@ -1,5 +1,4 @@
use iced::alignment::Horizontal;
use iced::widget::{Column, Container, Row, Text};
use iced::widget::{Column, Container, Row};
use iced::Length::Fixed;
use iced::{Alignment, Length};
use iced_native::widget::vertical_space;
@ -23,10 +22,13 @@ pub fn settings_language_page(sniffer: &Sniffer) -> Container<Message> {
language_radios(language_active, &Language::COL1, font, sniffer.style);
let col_language_radio_2 =
language_radios(language_active, &Language::COL2, font, sniffer.style);
let col_language_radio_3 =
language_radios(language_active, &Language::COL3, font, sniffer.style);
let row_language_radio = Row::new()
.spacing(50)
.push(col_language_radio_1)
.push(col_language_radio_2);
.push(col_language_radio_2)
.push(col_language_radio_3);
let content = Column::new()
.align_items(Alignment::Center)
@ -54,24 +56,8 @@ pub fn settings_language_page(sniffer: &Sniffer) -> Container<Message> {
.font(font)
.size(FONT_SIZE_SUBTITLE),
)
.push(vertical_space(Fixed(20.0)))
.push(row_language_radio)
.push(vertical_space(Fixed(30.0)))
.push(
Container::new(
Text::new(
"Would you like to add support for your native language?\n\n\
Give a look at Sniffnet issues on GitHub.",
)
.horizontal_alignment(Horizontal::Center)
.width(Length::Fixed(500.0))
.font(font),
)
.padding(10)
.style(<StyleTuple as Into<iced::theme::Container>>::into(
StyleTuple(sniffer.style, ElementType::BorderedRound),
)),
);
.push(row_language_radio);
Container::new(content)
.height(Fixed(400.0))

View file

@ -328,15 +328,15 @@ fn input_group_packets(
} else {
curr_threshold_str
},
move |value| {
let packets_notification =
PacketsNotification::from(&value, Some(packets_notification));
Message::UpdateNotificationSettings(
Notification::Packets(packets_notification),
false,
)
},
)
.on_input(move |value| {
let packets_notification =
PacketsNotification::from(&value, Some(packets_notification));
Message::UpdateNotificationSettings(
Notification::Packets(packets_notification),
false,
)
})
.padding([0, 0, 0, 10])
.font(font)
.width(Length::Fixed(100.0))
@ -377,15 +377,11 @@ fn input_group_bytes(
} else {
&curr_threshold_str
},
move |value| {
let bytes_notification =
BytesNotification::from(&value, Some(bytes_notification));
Message::UpdateNotificationSettings(
Notification::Bytes(bytes_notification),
false,
)
},
)
.on_input(move |value| {
let bytes_notification = BytesNotification::from(&value, Some(bytes_notification));
Message::UpdateNotificationSettings(Notification::Bytes(bytes_notification), false)
})
.padding([0, 0, 0, 10])
.font(font)
.width(Length::Fixed(100.0))
@ -429,9 +425,9 @@ fn volume_slider(language: Language, style: StyleType, volume: u8) -> Container<
ElementType::Standard,
))),
)
.push(horizontal_space(Length::Fixed(10.0)))
.push(horizontal_space(Length::Fixed(15.0)))
.push(
Text::new('Z'.to_string())
Text::new("Z")
.vertical_alignment(Vertical::Center)
.size(20)
.font(ICONS),

View file

@ -114,6 +114,16 @@ fn get_palette_container(
.height(Length::Fixed(130.0))
.width(Length::Fixed(360.0))
.padding(5)
.style(StyleTuple(style, ElementType::BorderedRound).into())
.style(
StyleTuple(
style,
if on_press.eq(&style) {
ElementType::BorderedRoundSelected
} else {
ElementType::BorderedRound
},
)
.into(),
)
.on_press(Message::Style(on_press))
}

View file

@ -46,12 +46,14 @@ mod tests {
#[test]
fn test_previous_running_page() {
assert_eq!(RunningPage::Overview.previous(), RunningPage::Notifications);
assert_eq!(RunningPage::Notifications.previous(), RunningPage::Overview);
assert_eq!(RunningPage::Notifications.previous(), RunningPage::Inspect);
assert_eq!(RunningPage::Inspect.previous(), RunningPage::Overview);
}
#[test]
fn test_next_running_page() {
assert_eq!(RunningPage::Overview.next(), RunningPage::Notifications);
assert_eq!(RunningPage::Overview.next(), RunningPage::Inspect);
assert_eq!(RunningPage::Inspect.next(), RunningPage::Notifications);
assert_eq!(RunningPage::Notifications.next(), RunningPage::Overview);
}
}

View file

@ -27,11 +27,16 @@ impl button::StyleSheet for StyleTuple {
StyleTuple(_, ElementType::Starred) => STARRED,
StyleTuple(_, ElementType::Badge) => colors.secondary,
StyleTuple(_, ElementType::BorderedRound) => colors.round_containers,
StyleTuple(_, ElementType::BorderedRoundSelected) => {
mix_colors(colors.primary, colors.buttons)
}
_ => colors.buttons,
})),
border_radius: match self {
StyleTuple(_, ElementType::TabActive | ElementType::TabInactive) => 0.0,
StyleTuple(_, ElementType::BorderedRound) => 12.0,
StyleTuple(_, ElementType::BorderedRound | ElementType::BorderedRoundSelected) => {
12.0
}
_ => BORDER_BUTTON_RADIUS,
},
border_width: match self {
@ -71,7 +76,9 @@ impl button::StyleSheet for StyleTuple {
})),
border_radius: match self {
StyleTuple(_, ElementType::TabActive | ElementType::TabInactive) => 0.0,
StyleTuple(_, ElementType::BorderedRound) => 12.0,
StyleTuple(_, ElementType::BorderedRound | ElementType::BorderedRoundSelected) => {
12.0
}
_ => BORDER_BUTTON_RADIUS,
},
border_width: match self {
@ -80,12 +87,14 @@ impl button::StyleSheet for StyleTuple {
ElementType::Starred
| ElementType::NotStarred
| ElementType::TabActive
| ElementType::TabInactive,
| ElementType::TabInactive
| ElementType::BorderedRound,
) => 0.0,
_ => BORDER_WIDTH,
},
border_color: match self {
StyleTuple(_, ElementType::Alert) => Color::new(1.0, 0.0, 0.0, 1.0),
StyleTuple(_, ElementType::BorderedRound) => colors.round_borders,
_ => colors.secondary,
},
text_color: match self {

View file

@ -33,7 +33,7 @@ impl iced::widget::scrollable::StyleSheet for StyleTuple {
}
}
fn hovered(&self, _: &Self::Style) -> Scrollbar {
fn hovered(&self, _: &Self::Style, is_mouse_over_scrollbar: bool) -> Scrollbar {
let colors = get_colors(self.0);
Scrollbar {
background: Some(Background::Color(colors.round_borders)),
@ -43,7 +43,11 @@ impl iced::widget::scrollable::StyleSheet for StyleTuple {
scroller: Scroller {
color: colors.secondary,
border_radius: BORDER_ROUNDED_RADIUS,
border_width: BORDER_WIDTH * 1.5,
border_width: if is_mouse_over_scrollbar {
BORDER_WIDTH * 1.25
} else {
BORDER_WIDTH * 1.75
},
border_color: Color::TRANSPARENT,
},
}

View file

@ -1,11 +1,12 @@
//! Slider style
use iced::widget::slider::Appearance;
use iced_native::widget::slider::Handle;
use iced_native::widget::slider::{Handle, Rail};
use iced_native::widget::vertical_slider::HandleShape;
use crate::get_colors;
use crate::gui::styles::style_constants::BORDER_WIDTH;
use crate::gui::styles::types::palette::mix_colors;
use crate::gui::styles::types::style_tuple::StyleTuple;
impl From<StyleTuple> for iced::theme::Slider {
@ -20,9 +21,12 @@ impl iced::widget::slider::StyleSheet for StyleTuple {
fn active(&self, _: &Self::Style) -> Appearance {
let colors = get_colors(self.0);
Appearance {
rail_colors: (colors.secondary, colors.primary),
rail: Rail {
colors: (colors.secondary, colors.buttons),
width: 3.0,
},
handle: Handle {
shape: HandleShape::Circle { radius: 7.0 },
shape: HandleShape::Circle { radius: 5.0 },
color: colors.primary,
border_width: BORDER_WIDTH,
border_color: colors.secondary,
@ -33,10 +37,13 @@ impl iced::widget::slider::StyleSheet for StyleTuple {
fn hovered(&self, _: &Self::Style) -> Appearance {
let colors = get_colors(self.0);
Appearance {
rail_colors: (colors.secondary, colors.secondary),
rail: Rail {
colors: (colors.secondary, colors.buttons),
width: 3.0,
},
handle: Handle {
shape: HandleShape::Circle { radius: 7.0 },
color: colors.secondary,
shape: HandleShape::Circle { radius: 8.0 },
color: mix_colors(colors.primary, colors.buttons),
border_width: BORDER_WIDTH,
border_color: colors.secondary,
},
@ -46,10 +53,13 @@ impl iced::widget::slider::StyleSheet for StyleTuple {
fn dragging(&self, _: &Self::Style) -> Appearance {
let colors = get_colors(self.0);
Appearance {
rail_colors: (colors.secondary, colors.secondary),
rail: Rail {
colors: (colors.secondary, colors.buttons),
width: 3.0,
},
handle: Handle {
shape: HandleShape::Circle { radius: 7.0 },
color: colors.secondary,
shape: HandleShape::Circle { radius: 8.0 },
color: mix_colors(colors.primary, colors.buttons),
border_width: BORDER_WIDTH,
border_color: colors.secondary,
},

View file

@ -1,5 +1,6 @@
//! Text Input style
use iced::widget::text_input;
use iced::widget::text_input::Appearance;
use iced::{Background, Color};
@ -22,6 +23,7 @@ impl iced::widget::text_input::StyleSheet for StyleTuple {
border_radius: 0.0,
border_width: 1.0,
border_color: colors.round_borders,
icon_color: colors.text_body,
}
}
@ -32,6 +34,7 @@ impl iced::widget::text_input::StyleSheet for StyleTuple {
border_radius: 0.0,
border_width: 1.0,
border_color: colors.secondary,
icon_color: colors.text_body,
}
}
@ -62,6 +65,15 @@ impl iced::widget::text_input::StyleSheet for StyleTuple {
border_radius: 0.0,
border_width: 1.0,
border_color: colors.secondary,
icon_color: colors.text_body,
}
}
fn disabled(&self, style: &Self::Style) -> Appearance {
text_input::StyleSheet::active(self, style)
}
fn disabled_color(&self, _style: &Self::Style) -> Color {
Color::BLACK
}
}

View file

@ -4,6 +4,7 @@ pub enum ElementType {
Standard,
Headers,
BorderedRound,
BorderedRoundSelected,
TabActive,
TabInactive,
Starred,

View file

@ -1131,14 +1131,14 @@ mod tests {
assert_eq!(sniffer.running_page, RunningPage::Overview);
// switch with closed setting => change running page
sniffer.update(Message::SwitchPage(true));
assert_eq!(sniffer.running_page, RunningPage::Notifications);
assert_eq!(sniffer.running_page, RunningPage::Inspect);
assert_eq!(sniffer.settings_page, None);
// switch with opened settings => change settings
sniffer.update(Message::OpenLastSettings);
assert_eq!(sniffer.running_page, RunningPage::Notifications);
assert_eq!(sniffer.running_page, RunningPage::Inspect);
assert_eq!(sniffer.settings_page, Some(SettingsPage::Notifications));
sniffer.update(Message::SwitchPage(true));
assert_eq!(sniffer.running_page, RunningPage::Notifications);
assert_eq!(sniffer.running_page, RunningPage::Inspect);
assert_eq!(sniffer.settings_page, Some(SettingsPage::Appearance));
}
}

View file

@ -3,7 +3,7 @@
use std::sync::{Arc, Condvar, Mutex};
use std::{panic, process, thread};
use iced::window::Position;
use iced::window::{PlatformSpecific, Position};
use iced::{window, Application, Settings};
use chart::types::chart_type::ChartType;
@ -106,6 +106,7 @@ pub fn main() -> iced::Result {
transparent: false,
always_on_top: false,
icon: None,
platform_specific: PlatformSpecific::default(),
},
flags: Sniffer::new(
current_capture_id1,

View file

@ -13,6 +13,10 @@ pub fn choose_adapters_translation(language: Language) -> Text<'static> {
Language::UK => "Вибрати мережевий адаптер для інспекції",
Language::ZH => "选择需要监控的网络适配器",
Language::RO => "Selectați adaptor de rețea pentru a inspecta",
Language::KO => "검사할 네트워크 어댑터 선택",
Language::TR => "İncelemek için bir ağ adaptörü seçiniz",
Language::RU => "Выберите сетевой адаптер для инспекции",
Language::PT => "Selecione o adaptador de rede a inspecionar",
})
}
@ -27,6 +31,10 @@ pub fn application_protocol_translation(language: Language) -> &'static str {
Language::UK => "Протокол аплікації",
Language::ZH => "目标应用层协议",
Language::RO => "Protocol aplicație",
Language::KO => "어플리케이션 프로토콜",
Language::TR => "Uygulama protokolü",
Language::RU => "Прикладной протокол",
Language::PT => "Protocolo de aplicação",
}
}
@ -41,18 +49,25 @@ pub fn select_filters_translation(language: Language) -> Text<'static> {
Language::UK => "Вибрати фільтри, які мають бути застосовані до мережевого трафіку",
Language::ZH => "选择需要监控的目标",
Language::RO => "Selectați filtre pentru traficul de rețea",
Language::KO => "네트워크 트레픽에 적용할 필터 선택",
Language::TR => "Ağ trafiğine uygulanacak filtreleri seçiniz",
Language::RU => "Выберите фильтры для применения к сетевому трафику",
Language::PT => "Selecione os filtros a serem aplicados no tráfego de rede",
})
}
pub fn start_translation(language: Language) -> &'static str {
match language {
Language::EN | Language::DE | Language::RO => "Start!",
Language::EN | Language::DE | Language::RO | Language::KO => "Start!",
Language::IT => "Avvia!",
Language::FR => "Commencer!",
Language::ES => "¡Empieza!",
Language::PL => "Rozpocznij!",
Language::UK => "Почати!",
Language::ZH => "开始!",
Language::TR => "Başla!",
Language::RU => "Начать!",
Language::PT => "Começar!",
}
}
@ -62,10 +77,13 @@ pub fn address_translation(language: Language) -> &'static str {
Language::IT => "\nIndirizzo:",
Language::FR | Language::DE => "\nAdresse:",
Language::ES => "\nDirección:",
Language::PL => "\nAdres:",
Language::PL | Language::TR => "\nAdres:",
Language::UK => "\nАдреса:",
Language::ZH => "\n网络地址:",
Language::RO => "\nAdresă:",
Language::KO => "\n주소:",
Language::RU => "\nАдрес:",
Language::PT => "\nEndereço:",
}
}
@ -80,6 +98,10 @@ pub fn addresses_translation(language: Language) -> &'static str {
Language::UK => "\nАдреси:",
Language::ZH => "\n网络地址:",
Language::RO => "\nAdrese:",
Language::KO => "\n주소:",
Language::TR => "\nAdresler:",
Language::RU => "\nАдреса:",
Language::PT => "\nEndereços:",
}
}
@ -94,6 +116,10 @@ pub fn ip_version_translation(language: Language) -> Text<'static> {
Language::UK => "Версія IP",
Language::ZH => "目标IP协议版本",
Language::RO => "Versiune IP",
Language::KO => "IP 버전",
Language::TR => "IP versiyonu",
Language::RU => "Версия IP",
Language::PT => "Versão de IP",
})
}
@ -102,12 +128,15 @@ pub fn transport_protocol_translation(language: Language) -> &'static str {
Language::EN => "Transport protocol",
Language::IT => "Protocollo di trasporto",
Language::FR => "Protocole de transport",
Language::ES => "Protocolo de transporte",
Language::ES | Language::PT => "Protocolo de transporte",
Language::PL => "Protokół transportowy",
Language::DE => "Netzwerkprotokoll",
Language::UK => "Транспортний протокол",
Language::ZH => "目标传输协议",
Language::RO => "Protocol de transport",
Language::KO => "전송 프로토콜",
Language::TR => "İletişim protokolü",
Language::RU => "Транспортный протокол",
}
}
@ -122,6 +151,10 @@ pub fn traffic_rate_translation(language: Language) -> Text<'static> {
Language::UK => "Швидкість руху:",
Language::ZH => "网络速率图:",
Language::RO => "Rata de trafic:",
Language::KO => "트레픽 속도:",
Language::TR => "Trafik oranı:",
Language::RU => "Cкорость трафика:",
Language::PT => "Taxa de tráfego:",
})
}
@ -136,6 +169,10 @@ pub fn relevant_connections_translation(language: Language) -> Text<'static> {
Language::UK => "Важливі підключення:",
Language::ZH => "连接详情:",
Language::RO => "Conexiuni relevante:",
Language::KO => "관련 연결:",
Language::TR => "İlgili bağlantılar:",
Language::RU => "Важные подключения:",
Language::PT => "Conexões relevantes:",
})
}
@ -150,6 +187,10 @@ pub fn settings_translation(language: Language) -> &'static str {
Language::UK => "Налаштування",
Language::ZH => "设置",
Language::RO => "Setări",
Language::KO => "설정",
Language::TR => "Ayarlar",
Language::RU => "Настройки",
Language::PT => "Configurações",
}
}
@ -164,6 +205,10 @@ pub fn yes_translation(language: Language) -> Text<'static> {
Language::UK => "Так",
Language::ZH => "是",
Language::RO => "Da",
Language::KO => "네",
Language::TR => "Evet",
Language::RU => "Да",
Language::PT => "Sim",
})
}
@ -178,6 +223,10 @@ pub fn ask_quit_translation(language: Language) -> Text<'static> {
Language::UK => "Чи справді хочеш закінчити аналіз?",
Language::ZH => "您确定退出当前监控吗?",
Language::RO => "Sunteți sigur că doriți să renunțați la această analiză?",
Language::KO => "정말로 분석을 종료하겠습니까?",
Language::TR => "Bu analizden çıkmak istediğine emin misin?",
Language::RU => "Вы уверены, что хотите выйти из текущего анализа?",
Language::PT => "Tem a certeza que deseja sair desta análise?",
})
}
@ -192,6 +241,10 @@ pub fn quit_analysis_translation(language: Language) -> String {
Language::UK => "Закінчити аналіз".to_string(),
Language::ZH => "退出监控".to_string(),
Language::RO => "Renunță la analiză".to_string(),
Language::KO => "분석종료".to_string(),
Language::TR => "Analizden çık".to_string(),
Language::RU => "Закончить анализ".to_string(),
Language::PT => "Sair da análise".to_string(),
}
}
@ -206,6 +259,10 @@ pub fn ask_clear_all_translation(language: Language) -> Text<'static> {
Language::UK => "Чи справді хочеш видалити всі повідомлення?",
Language::ZH => "确定清除所有通知?",
Language::RO => "Sigur doriți să ștergeți notificările?",
Language::KO => "알림을 삭제하시겠습니까?",
Language::TR => "Bildirimleri temizlemek istediğine emin misin?",
Language::RU => "Вы уверены, что хотите удлить все уведомления?",
Language::PT => "Tem a certeza que deseja eliminar as notificações?",
})
}
@ -220,6 +277,10 @@ pub fn clear_all_translation(language: Language) -> String {
Language::UK => "Видалити все".to_string(),
Language::ZH => "清除所有".to_string(),
Language::RO => "Ștergeți tot".to_string(),
Language::KO => "모두 지우기".to_string(),
Language::TR => "Hepsini temizle".to_string(),
Language::RU => "Очистить всё".to_string(),
Language::PT => "Limpar tudo".to_string(),
}
}
@ -234,6 +295,10 @@ pub fn hide_translation(language: Language) -> &'static str {
Language::UK => "Заховати",
Language::ZH => "隐藏",
Language::RO => "Ascundeți",
Language::KO => "숨기기",
Language::TR => "Gizle",
Language::RU => "Скрыть",
Language::PT => "Esconder",
}
}
@ -266,6 +331,18 @@ pub fn no_addresses_translation(language: Language, adapter: &str) -> Text<'stat
Language::RO => format!("Niciun trafic nu poate fi observat deoarece adaptorul selectat nu are adrese active...\n\n\
Adaptor de rețea: {adapter}\n\n\
Dacă sunteți sigur că sunteți conectat la internet, încercați să alegeți un alt adaptor."),
Language::KO => format!("선택한 어댑터에 유효한 주소가 없기 때문에 트래픽을 확인할 수 없습니다...\n\n\
네트워크 어뎁터: {adapter}\n\n\
인터넷이 연결되어있다면 다른 어댑터로 시도해보세요."),
Language::TR => format!("Seçtiğiniz adaptör aktif bir adrese sahip olmadığı için hiç bir trafik izlenemez...\n\n\
Ağ adaptörü: {adapter}\n\n\
Eğer gerçekten internete bağlı olduğunuza eminseniz, başka bir adaptör seçmeyi deneyiniz."),
Language::RU => format!("Наблюдение за трафиком не возможно, потому что Вы выбрали интерфейс без активного адреса...\n\n\
Сетевой интерфейс: {adapter}\n\n\
Если Вы уверены, что подключены к Интернету, попробуйте выбрать другой интерфейс."),
Language::PT => format!("Não é possível observar tráfego porque o adaptador que selecionou não tem endereços ativos...\n\n\
Adaptador de rede: {adapter}\n\n\
Se tiver a certeza que está ligado à internet, tente escolher um adaptador diferente."),
})
}
@ -297,7 +374,19 @@ pub fn waiting_translation(language: Language, adapter: &str) -> Text<'static> {
您确信您已成功连接到互联网, 并选择了当前正在使用的的网络适配器吗?"),
Language::RO => format!("Nu a fost observat încă trafic. Se așteaptă pachetele de rețea...\n\n\
Adaptor de rețea: {adapter}\n\n\
Ești sigur că ești conectat la internet și ai selectat adaptorul corect?")
Ești sigur că ești conectat la internet și ai selectat adaptorul corect?"),
Language::KO => format!("아직 트래픽이 관찰되지 않았습니다. 네트워크 패킷 대기 중...\n\n\
네트워크 어뎁터: {adapter}\n\n\
인터넷에 연결되어 있고 올바른 어댑터를 선택하셨습니까?"),
Language::TR => format!("Henüz bir trafik algılanamadı. Ağ paketleri için bekleniyor...\n\n\
Ağ adaptörü: {adapter}\n\n\
İnternete bağlı olduğunuza ve doğru adaptörü seçtiğinize emin misiniz?"),
Language::RU => format!("Трафик не обнаружен. Ожидаем сетевые пакеты...\n\n\
Сетевой интерфейс: {adapter}\n\n\
Вы уверены, что подключены к Интернету и выбрали правильный интерфейс?"),
Language::PT => format!("Ainda não foi observado tráfego. Aguardando por pacotes...\n\n\
Adaptador de rede: {adapter}\n\n\
Tem a certeza de que está ligado à internet e selecionou o adaptador correto?"),
})
}
@ -333,7 +422,19 @@ pub fn some_observed_translation(
当前已监测到一些数据包, 但其中并未包含您的目标数据包......\n\n{filters}"),
Language::RO => format!("Total pachete interceptate: {observed}\n\n\
Pachete filtrate: 0\n\n\
Unele pachete au fost interceptate, dar încă niciunul nu a fost selectat conform filtrelor pe care le-ați specificat...\n\n{filters}")
Unele pachete au fost interceptate, dar încă niciunul nu a fost selectat conform filtrelor pe care le-ați specificat...\n\n{filters}"),
Language::KO => format!("감지한 총 패킷: {observed}\n\n\
필터링된 패킷: 0\n\n\
일부 패킷이 감지되었지만, 지정한 필터에 따라 선택되지 않았습니다...\n\n{filters}"),
Language::TR => format!("Toplam yakalanan paketler: {observed}\n\n\
Filterelenen paketler: 0\n\n\
Bazı paketler yakalandı, fakat belirttiğiniz filtrelere göre hiç biri seçilmedi...\n\n{filters}"),
Language::RU => format!("Всего пакетов перехвачено: {observed}\n\n\
Фильтровано пакетов: 0\n\n\
Сетевые пакеты были перехвачены, но ни один из них не соответствует заданным фильтрам...\n\n{filters}"),
Language::PT => format!("Total de pacotes interceptados: {observed}\n\n\
Pacotes filtrados: 0\n\n\
Alguns pacotes foram interceptados, mas nenhum deles foi selecionado de acordo com os filtros especificados...\n\n{filters}"),
})
}
@ -358,6 +459,16 @@ pub fn filtered_packets_translation(
Language::RO => {
format!("Pachete filtrate:\n {filtered} ({percentage} din total)")
}
Language::KO => {
format!("필터링된 패킷:\n {filtered} ({percentage} 의 일부)")
}
Language::TR => format!("Filtrelenen paketler:\n {filtered} toplamın ({percentage})"),
Language::RU => {
format!("Отфильтровано пакетов:\n {filtered} ({percentage}% от общего числа)")
}
Language::PT => {
format!("Pacotes filtrados:\n {filtered} ({percentage} do total)")
}
})
}
@ -380,7 +491,17 @@ pub fn filtered_bytes_translation(
format!("目标网络流量计数:\n {filtered} (占所有网络流量的 {percentage})")
}
Language::RO => {
format!("Octeți filtrați::\n {filtered} ({percentage} din total)")
format!("Octeți filtrați:\n {filtered} ({percentage} din total)")
}
Language::KO => {
format!("필터링된 바이트:\n {filtered} ({percentage} 의 일부)")
}
Language::TR => format!("Filtrelenen bayt:\n {filtered} toplamın ({percentage})"),
Language::RU => {
format!("Отфильтровано байт:\n {filtered} ({percentage}% от общего числа)")
}
Language::PT => {
format!("Bytes filtrados:\n {filtered} ({percentage} do total)")
}
})
}
@ -396,6 +517,10 @@ pub fn filtered_application_translation(language: Language) -> Text<'static> {
Language::UK => "Відфільтровані пакети протоколу аплікації/програми:",
Language::ZH => "按应用层协议分类的目标数据包计数:",
Language::RO => "Pachete filtrate pe protocol de aplicație:",
Language::KO => "애플리케이션 프로토콜당 필터링된 패킷 수:",
Language::TR => "Uygulama protokolü bazında filtrelenen paketler:",
Language::RU => "Отфильтровано пакетов прикладного протокола:",
Language::PT => "Pacotes filtrados por protocolo de aplicação:",
})
}
@ -419,6 +544,14 @@ pub fn no_favorites_translation(language: Language) -> Text<'static> {
小贴士: 点击连接右侧的小星星即可收藏到这里哦.",
Language::RO => "Nimic de arătat în acest moment.\n\
Pentru a adăuga o conexiune la favorite, faceți clic pe simbolul stea din apropierea conexiunii.",
Language::KO => "현재는 보여줄게 없습니다.\n\
즐겨찾기에 연결을 추가하려면 별을 눌러주세요.",
Language::TR => "Şu an gösterecek bir şey yok.\n\
Favorilere bağlantı eklemek için, bağlantı yanındaki yıldız sembolüne tıklayınız.",
Language::RU => "Нечего показать в настоящий момент.\n\
Для добавления соединения в избранные, нажмите на символ звезды возле соединения.",
Language::PT => "Nada para mostrar de momento.\n\
Para adicionar uma conexão aos seus favoritos, clique na estrela perto da conexão.",
})
}
@ -460,6 +593,22 @@ pub fn error_translation(language: Language, error: &str) -> Text<'static> {
"A apărut o eroare! \n\n\
{error}"
),
Language::KO => format!(
"오류가 발생하였습니다! \n\n\
{error}"
),
Language::TR => format!(
"Bir hata oluştu! \n\n\
{error}"
),
Language::RU => format!(
"Произошла ошибка! \n\n\
{error}"
),
Language::PT => format!(
"Ocorreu um erro! \n\n\
{error}"
),
})
}
@ -468,12 +617,15 @@ pub fn both_translation(language: Language) -> &'static str {
Language::EN => "both",
Language::IT => "entrambi",
Language::FR => "les deux",
Language::ES => "ambos",
Language::ES | Language::PT => "ambos",
Language::PL => "oba",
Language::DE => "beide",
Language::UK => "обидва",
Language::ZH => "皆需",
Language::RO => "ambele",
Language::KO => "둘다",
Language::TR => "ikiside",
Language::RU => "оба",
}
}
@ -485,6 +637,7 @@ pub fn both_translation(language: Language) -> &'static str {
// Language::ES => "Todos los protocolos",
// Language::PL => "Wszystkie protokoły",
// Language::DE => "Alle Protokolle",
// Language::RU => "Все протоколы",
// }
// }
@ -493,12 +646,15 @@ pub fn all_translation(language: Language) -> &'static str {
Language::EN => "All",
Language::IT => "Tutti",
Language::FR => "Tous",
Language::ES => "Todos",
Language::ES | Language::PT => "Todos",
Language::PL => "Wszystkie",
Language::DE => "Alle",
Language::UK => "Усі",
Language::ZH => "所有",
Language::RO => "Toate",
Language::KO => "모두",
Language::TR => "Hepsi",
Language::RU => "Всё",
}
}
@ -513,6 +669,10 @@ pub fn packets_chart_translation(language: Language) -> &'static str {
Language::UK => "пакети на секунду",
Language::ZH => "数据包",
Language::RO => "pachete pe secundă",
Language::KO => "초당 패킷",
Language::TR => "saniye başı paket",
Language::RU => "пакектов в секунду",
Language::PT => "pacotes por segundo",
}
}
@ -521,12 +681,15 @@ pub fn bytes_chart_translation(language: Language) -> &'static str {
Language::EN => "bytes per second",
Language::IT => "byte al secondo",
Language::FR => "octets par seconde",
Language::ES => "bytes por segundo",
Language::ES | Language::PT => "bytes por segundo",
Language::PL => "bajty na sekundę",
Language::DE => "bytes pro Sekunde",
Language::UK => "байти на секунду",
Language::ZH => "网络流量",
Language::RO => "octeți pe secundă",
Language::KO => "초당 바이트",
Language::TR => "saniye başı bayt",
Language::RU => "байтов в секунду",
}
}
@ -541,6 +704,10 @@ pub fn recent_report_translation(language: Language) -> &'static str {
Language::UK => "найновіші",
Language::ZH => "按时间",
Language::RO => "cea mai recentă",
Language::KO => "가장 최근",
Language::TR => "en son",
Language::RU => "новейшие",
Language::PT => "mais recente",
}
}
@ -555,6 +722,10 @@ pub fn packets_report_translation(language: Language) -> &'static str {
Language::UK => "найбільше пакетів",
Language::ZH => "按数据包",
Language::RO => "cele mai multe pachete",
Language::KO => "대부분의 패킷",
Language::TR => "en çok paket",
Language::RU => "больше всего пакетов",
Language::PT => "mais pacotes",
}
}
@ -569,6 +740,10 @@ pub fn bytes_report_translation(language: Language) -> &'static str {
Language::UK => "найбільше байтів",
Language::ZH => "按流量",
Language::RO => "cei mai mulți octeți",
Language::KO => "대부분의 바이트",
Language::TR => "en çok bayt",
Language::RU => "больше всего байт",
Language::PT => "mais bytes",
}
}
@ -577,12 +752,15 @@ pub fn favorite_report_translation(language: Language) -> &'static str {
Language::EN => "favorites",
Language::IT => "preferiti",
Language::FR => "favoris",
Language::ES => "favoritos",
Language::ES | Language::PT => "favoritos",
Language::PL => "ulubione",
Language::DE => "Favoriten",
Language::UK => "улюблені",
Language::ZH => "收藏夹",
Language::RO => "favorite",
Language::KO => "즐겨찾기",
Language::TR => "favoriler",
Language::RU => "избранное",
}
}
@ -597,6 +775,10 @@ pub fn notifications_title_translation(language: Language) -> Text<'static> {
Language::UK => "Достосуй повідомлення",
Language::ZH => "自定义通知",
Language::RO => "Personalizați-vă notificările",
Language::KO => "사용자 지정 알림",
Language::TR => "Bildirimlerinizi özelleştirin",
Language::RU => "Настройка уведомлений",
Language::PT => "Personalize as suas notificações",
})
}
@ -611,6 +793,10 @@ pub fn appearance_title_translation(language: Language) -> Text<'static> {
Language::UK => "Вибери улюблену тему",
Language::ZH => "选择您喜欢的主题",
Language::RO => "Selectați tema preferată",
Language::KO => "태마를 선택하세요",
Language::TR => "Favori temanızı seçin",
Language::RU => "Выберите предпочительную тему",
Language::PT => "Escolha o seu tema favorito",
})
}
@ -625,6 +811,10 @@ pub fn languages_title_translation(language: Language) -> Text<'static> {
Language::UK => "Вибери мову",
Language::ZH => "选择显示语言",
Language::RO => "Selectați limba",
Language::KO => "언어를 선택하세요",
Language::TR => "Dilinizi seçin",
Language::RU => "Выберите язык",
Language::PT => "Selecione o seu idioma",
})
}
@ -639,6 +829,10 @@ pub fn active_filters_translation(language: Language) -> &'static str {
Language::UK => "Активні фільтри:",
Language::ZH => "活动的过滤器:",
Language::RO => "Filtre active:",
Language::KO => "활성화된 필터:",
Language::TR => "Aktif filtreler:",
Language::RU => "Выбранные фильтры:",
Language::PT => "Filtros ativos:",
}
}
@ -653,6 +847,10 @@ pub fn none_translation(language: Language) -> &'static str {
Language::UK => "бракує",
Language::ZH => "无",
Language::RO => "niciunul",
Language::KO => "없음",
Language::TR => "hiç biri",
Language::RU => "не выбран",
Language::PT => "nenhum",
}
}
@ -667,6 +865,10 @@ pub fn yeti_night_translation(language: Language) -> &'static str {
Language::UK => "Оригінальний, темний мотив Sniffnet",
Language::ZH => "Sniffnet暗黑",
Language::RO => "Tema întunecată originală Sniffnet",
Language::KO => "Sniffnet의 기본 다크테마",
Language::TR => "Sniffnet'in orjinal koyu teması",
Language::RU => "Оригинальная тёмная тема Sniffnet'а",
Language::PT => "Tema escuro original de Sniffnet",
}
}
@ -675,12 +877,15 @@ pub fn yeti_day_translation(language: Language) -> &'static str {
Language::EN => "Sniffnet's original light theme",
Language::IT => "Il tema chiaro originale di Sniffnet",
Language::FR => "Thème original clair de Sniffnet",
Language::ES => "Tema claro original de Sniffnet",
Language::ES | Language::PT => "Tema claro original de Sniffnet",
Language::PL => "Oryginalny, jasny motyw Sniffnet",
Language::DE => "Sniffnets urspüngliches, helles Design",
Language::UK => "Оригінальний, світлий мотив Sniffnet",
Language::ZH => "Sniffnet浅色",
Language::RO => "Tema deschisă originală Sniffnet",
Language::KO => "Sniffnet의 기본 라이트테마",
Language::TR => "Sniffnet'in orjinal açık teması",
Language::RU => "Оригинальная светая тема Sniffnet'а",
}
}
@ -695,6 +900,10 @@ pub fn deep_sea_translation(language: Language) -> &'static str {
Language::UK => "Проаналізувати мережевий рух",
Language::ZH => "潜入网络活动的海洋",
Language::RO => "Pentru a vă scufunda în traficul de rețea",
Language::KO => "네트워크 트레픽으로 바로가기",
Language::TR => "Ağ trafiğine dalmak",
Language::RU => "Для погружения в сетевой трафик",
Language::PT => "Para mergulhar no tráfego de rede",
}
}
@ -709,6 +918,10 @@ pub fn mon_amour_translation(language: Language) -> &'static str {
Language::UK => "Прекрасна тема для мрійників",
Language::ZH => "梦想家的主题",
Language::RO => "O temă minunată creată pentru visători",
Language::KO => "사랑스러운 몽환가들을 위한 테마",
Language::TR => "Hayal perestler için yapılmış güzel tema",
Language::RU => "Милая тема для мечтателей",
Language::PT => "Tema encantador feito para sonhadores",
}
}
@ -723,6 +936,10 @@ pub fn incoming_translation(language: Language) -> &'static str {
Language::UK => "Вхідні",
Language::ZH => "入站",
Language::RO => "de intrare",
Language::KO => "수신중",
Language::TR => "Gelen",
Language::RU => "Входящий",
Language::PT => "Entrando",
}
}
@ -737,6 +954,10 @@ pub fn outgoing_translation(language: Language) -> &'static str {
Language::UK => "Вихідні",
Language::ZH => "出站",
Language::RO => "de ieșire",
Language::KO => "발신중",
Language::TR => "Giden",
Language::RU => "Исходящий",
Language::PT => "Saindo",
}
}
@ -750,6 +971,10 @@ pub fn notifications_translation(language: Language) -> &'static str {
Language::UK => "Повідомлення",
Language::ZH => "通知",
Language::RO => "Notificări",
Language::KO => "알림",
Language::TR => "Bildirimler",
Language::RU => "Уведомления",
Language::PT => "Notificações",
}
}
@ -757,11 +982,12 @@ pub fn style_translation(language: Language) -> &'static str {
match language {
Language::EN | Language::FR => "Style",
Language::IT => "Stile",
Language::ES => "Estilo",
Language::ES | Language::PT => "Estilo",
Language::PL => "Styl",
Language::DE | Language::RO => "Stil",
Language::UK => "Стиль",
Language::DE | Language::RO | Language::TR => "Stil",
Language::UK | Language::RU => "Стиль",
Language::ZH => "主题",
Language::KO => "스타일",
}
}
@ -776,6 +1002,10 @@ pub fn language_translation(language: Language) -> &'static str {
Language::UK => "Мова",
Language::ZH => "语言",
Language::RO => "Limbă",
Language::KO => "언어",
Language::TR => "Dil",
Language::RU => "Язык",
Language::PT => "Língua",
}
}
@ -790,6 +1020,10 @@ pub fn overview_translation(language: Language) -> &'static str {
Language::UK => "Огляд",
Language::ZH => "概览",
Language::RO => "Prezentare generală",
Language::KO => "개요",
Language::TR => "Ön izleme",
Language::RU => "Обзор",
Language::PT => "Visão geral",
}
}
@ -804,6 +1038,10 @@ pub fn packets_threshold_translation(language: Language) -> &'static str {
Language::UK => "Повідом мене про переліміт пакетів",
Language::ZH => "超过设定的数据包数量阈值时通知我",
Language::RO => "Anunță-mă când este depășit un prag de pachete",
Language::KO => "패킷 임계값을 초과하면 알림",
Language::TR => "Paket eşiği aşıldığında beni bilgilendir",
Language::RU => "Уведомить, когда порог по частоте пакетов превышен",
Language::PT => "Notifique-me quando um limite de pacotes for excedido",
}
}
@ -818,6 +1056,10 @@ pub fn bytes_threshold_translation(language: Language) -> &'static str {
Language::UK => "Повідом мене про переліміт байтів",
Language::ZH => "超过设定的网络流量阈值时通知我",
Language::RO => "Anunță-mă când este depășit un prag de octeți",
Language::KO => "바이트 임계값을 초과하면 알림",
Language::TR => "Bayt eşiği aşıldığında beni bilgilendir",
Language::RU => "Уведомить, когда порог по полосе в байтах превышен",
Language::PT => "Notifique-me quando um limite de bytes for excedido",
}
}
@ -826,12 +1068,15 @@ pub fn per_second_translation(language: Language) -> &'static str {
Language::EN => "(per second)",
Language::IT => "(al secondo)",
Language::FR => "(par seconde)",
Language::ES => "(por segundo)",
Language::ES | Language::PT => "(por segundo)",
Language::PL => "(na sekundę)",
Language::DE => "(pro Sekunde)",
Language::UK => "(на секунду)",
Language::ZH => "(每秒) ",
Language::RO => "(pe secundă)",
Language::KO => "(초당)",
Language::TR => "(her saniye)",
Language::RU => "(в секунду)",
}
}
@ -846,6 +1091,10 @@ pub fn specify_multiples_translation(language: Language) -> &'static str {
Language::UK => "; можеш також вибрати 'K', 'M' i 'G'",
Language::ZH => "您可指定 'K', 'M', 'G'",
Language::RO => "; puteți specifica 'K', 'M', 'G'",
Language::KO => "; 지정가능합니다 'K', 'M', 'G'",
Language::TR => "; şunları da kullanabilirsin 'K', 'M' ve 'G'",
Language::RU => "; Так же можно указать 'K', 'M' или 'G'",
Language::PT => "; também pode especificar 'K', 'M' e 'G'",
}
}
@ -862,6 +1111,10 @@ pub fn favorite_notification_translation(language: Language) -> &'static str {
Language::UK => "Повідом мене, коли буде обмін даними з моїх улюблених",
Language::ZH => "收藏夹内的连接有新活动时通知我",
Language::RO => "Anunță-mă când sunt transferate date noi de la favoritele mele",
Language::KO => "즐겨찾기에서 새 데이터가 교환될 때 알림",
Language::TR => "Favorilerimde veri akışı olduğunda beni uyar",
Language::RU => "Уведомить, если произошёл обмен данными в соединениях из избранного",
Language::PT => "Notificar-me quando novos dados forem trocados dos meus favoritos",
}
}
@ -876,18 +1129,25 @@ pub fn threshold_translation(language: Language) -> String {
Language::UK => "Ліміт: ".to_string(),
Language::ZH => "阈值: ".to_string(),
Language::RO => "Prag: ".to_string(),
Language::KO => "임계값: ".to_string(),
Language::TR => "Eşik: ".to_string(),
Language::RU => "Порог: ".to_string(),
Language::PT => "Limite: ".to_string(),
}
}
pub fn volume_translation(language: Language, value: u8) -> String {
match language {
Language::EN | Language::IT | Language::FR => format!("Volume: {value:^3}%"),
Language::EN | Language::IT | Language::FR | Language::PT => format!("Volume: {value:^3}%"),
Language::ES => format!("Volumen: {value:^3}%"),
Language::PL => format!("Głośność: {value:^3}%"),
Language::DE => format!("Lautstärke: {value:^3}%"),
Language::UK => format!("Гучність: {value:^3}%"),
Language::ZH => format!("通知音量: {value:^3}%"),
Language::RO => format!("Volum: {value:^3}%"),
Language::KO => format!("볼륨: {value:^3}%"),
Language::TR => format!("Ses: {value:^3}%"),
Language::RU => format!("Объём: {value:^3}%"),
}
}
@ -899,9 +1159,12 @@ pub fn sound_translation(language: Language) -> &'static str {
Language::ES => "Sonido:",
Language::PL => "Dźwięk:",
Language::DE => "Ton:",
Language::UK => "Звук:",
Language::UK | Language::RU => "Звук:",
Language::ZH => "通知音:",
Language::RO => "Sunet:",
Language::KO => "사운드:",
Language::TR => "Ses:",
Language::PT => "Som:",
}
}
@ -916,6 +1179,10 @@ pub fn open_report_translation(language: Language) -> &'static str {
Language::UK => "Відкрий повний рапорт",
Language::ZH => "打开完整报告",
Language::RO => "Deschideți raport complet",
Language::KO => "전체 보고서 열기",
Language::TR => "Tam raporu aç",
Language::RU => "Открыть полный отчёт",
Language::PT => "Abrir relatório completo",
}
}
@ -930,6 +1197,10 @@ pub fn bytes_exceeded_translation(language: Language) -> &'static str {
Language::UK => "Ліміт байтів перевищено!",
Language::ZH => "达到设定的网络流量阈值!",
Language::RO => "Prag de octeți depășit!",
Language::KO => "바이트 임계값 초과!",
Language::TR => "Bayt eşik değeri aşıldı!",
Language::RU => "Порог в байтах превышен!",
Language::PT => "Limite de bytes excedido!",
}
}
@ -945,6 +1216,10 @@ pub fn bytes_exceeded_value_translation(language: Language, value: &str) -> Stri
Language::UK => format!("{trimmed_value} байтів було обміняно"),
Language::ZH => format!("已交换字节 {trimmed_value}"),
Language::RO => format!("au fost transferați {trimmed_value} octeți"),
Language::KO => format!("바이트 {trimmed_value} 가 교환되었습니다"),
Language::TR => format!("{trimmed_value} bayt aktarıldı"),
Language::RU => format!("{trimmed_value} байт обмена информацией"),
Language::PT => format!("Foram trocados {trimmed_value} bytes"),
}
}
@ -959,13 +1234,23 @@ pub fn packets_exceeded_translation(language: Language) -> &'static str {
Language::UK => "Ліміт пакетів перевищено!",
Language::ZH => "达到设定的数据包数量阈值!",
Language::RO => "Prag de pachete depășit!",
Language::KO => "패킷 임계값 초과!",
Language::TR => "Paket eşik değeri aşıldı!",
Language::RU => "Порог по числу пакетов превышен!",
Language::PT => "Limite de pacotes excedido!",
}
}
pub fn packets_exceeded_value_translation(language: Language, value: u32) -> String {
match language {
Language::EN => format!("{value} packets have been exchanged"),
Language::IT => format!("{value} pacchetti sono stati scambiati"),
Language::EN => match value {
1 => "1 packet has been exchanged".to_owned(),
npackets => format!("{npackets} packets have been exchanged"),
},
Language::IT => match value {
1 => "1 pacchetto è stato scambiato".to_owned(),
npackets => format!("{npackets} pacchetti sono stati scambiati"),
},
Language::FR => match value {
1 => "1 paquet a été échangé".to_owned(),
npackets => format!("{npackets} paquets ont été échangés"),
@ -976,6 +1261,13 @@ pub fn packets_exceeded_value_translation(language: Language, value: u32) -> Str
Language::UK => format!("Обміняно {value} пакетів"),
Language::ZH => format!("已交换数据包 {value}"),
Language::RO => format!("au fost transferate {value} pachete"),
Language::KO => format!("패킷 {value} 가 교환되었습니다"),
Language::TR => format!("{value} paket aktarıldı"),
Language::RU => format!("{value} пакет(ов) обмена информацией"),
Language::PT => match value {
1 => "Foi trocado 1 pacote".to_owned(),
npackets => format!("Foram trocados {npackets} pacotes"),
},
}
}
@ -990,6 +1282,10 @@ pub fn favorite_transmitted_translation(language: Language) -> &'static str {
Language::UK => "Нові дані обміняно з улюблених!",
Language::ZH => "收藏夹内的连接有新活动!",
Language::RO => "Date noi transferate de la favorite!",
Language::KO => "즐겨찾기에서 새 데이터 교환",
Language::TR => "Favorilerden yeni veri aktarıldı!",
Language::RU => "Новый обмен данными в избранных соедиениях!",
Language::PT => "Novos dados trocados dos favoritos!",
}
}
@ -1022,6 +1318,18 @@ pub fn no_notifications_set_translation(language: Language) -> Text<'static> {
Language::RO => "Încă nu ați activat notificările!\n\n\
După ce le veți activa, această pagină va afișa un jurnal al notificărilor dvs\n\n\
Puteți activa notificările din setări:",
Language::KO => "아직 알림을 활성화하지 않았습니다!\n\n\
활성화로 설정하면 이 페이지에 알림 로그가 표시됩니다\n\n\
설정에서 알림을 활성화할 수 있습니다:",
Language::TR => "Henüz bildirimleri etkinleştirmedin!\n\n\
Etkinleştirdikten sonra bu sayfada bildirimlerine ait kütüğü görebilirsin\n\n\
Bildirimleri, ayarlardan etkinleştirebilirsin:",
Language::RU => "Уведомления пока не настроены!\n\n\
После настройки, эта страница будет показывать журнал уведомлений\n\n\
Вы можете включить уведомления в настройках:",
Language::PT => "Ainda não ativou as notificações!\n\n\
Depois de ativá-las, esta página irá mostrar um registo das suas notificações\n\n\
Pode ativar as notificações nas definições:",
})
}
@ -1063,6 +1371,22 @@ pub fn no_notifications_received_translation(language: Language) -> Text<'static
"Nimic de văzut momentan...\n\n\
Când veți primi o notificare, aceasta va fi afișată aici"
}
Language::KO => {
"현재는 볼 것이 없습니다...\n\n\
알림을 받으면 여기에 표시됩니다"
}
Language::TR => {
"Şu an görecek bir şey yok...\n\n\
Bildirim aldığınız zaman burada gözükecektir"
}
Language::RU => {
"Нечего показывать в текущий момент...\n\n\
Когда прийдут уведомления, они будут показаны тут"
}
Language::PT => {
"Nada para ver neste momento...\n\n\
Quando receber uma notificação, ela será mostrada aqui"
}
})
}
@ -1077,5 +1401,9 @@ pub fn only_last_30_translation(language: Language) -> &'static str {
Language::UK => "Можеш побачити лише 30 останніх повідомлень",
Language::ZH => "仅显示最近 30 条通知",
Language::RO => "Sunt afișate doar ultimele 30 de notificări",
Language::KO => "최근 30개의 알림만 표시됩니다",
Language::TR => "Sadece son 30 bildirim gösterilmektedir",
Language::RU => "Тут показываются только последние 30 уведомлений",
Language::PT => "São mostradas apenas as últimas 30 notificações",
}
}

View file

@ -5,6 +5,7 @@ pub fn new_version_available_translation(language: Language) -> &'static str {
match language {
Language::EN => "A newer version is available on GitHub",
Language::IT => "Una versione più recente è disponibile su GitHub",
Language::RU => "Новая версия доступна на GitHub",
_ => "A newer version is available on GitHub",
}
}
@ -17,6 +18,7 @@ pub fn inspect_translation(language: Language) -> &'static str {
Language::ES => "Inspeccionar",
Language::PL => "Sprawdź",
Language::DE => "Überprüfen",
Language::RU => "Инспектировать",
_ => "Inspect",
}
}

View file

@ -21,6 +21,14 @@ pub enum Language {
ZH,
/// Romanian
RO,
/// Korean
KO,
/// Portuguese
PT,
/// Turkish
TR,
/// Russian
RU,
}
impl Default for Language {
@ -32,12 +40,14 @@ impl Default for Language {
impl Language {
pub(crate) const COL1: [Language; 5] = [
Language::EN,
Language::ES,
Language::IT,
Language::RO,
Language::FR,
Language::PL,
Language::RU,
Language::ZH,
];
pub(crate) const COL2: [Language; 4] = [Language::DE, Language::FR, Language::PL, Language::UK];
pub(crate) const COL2: [Language; 4] = [Language::DE, Language::IT, Language::PT, Language::TR];
pub(crate) const COL3: [Language; 4] = [Language::ES, Language::KO, Language::RO, Language::UK];
pub fn get_radio_label(&self) -> &str {
match self {
Language::EN => "English",
@ -49,6 +59,10 @@ impl Language {
Language::UK => "Українська",
Language::ZH => "简体中文",
Language::RO => "Română",
Language::KO => "한국인",
Language::TR => "Türkçe",
Language::RU => "Русский",
Language::PT => "Português",
}
}
}

View file

@ -513,8 +513,12 @@ pub fn get_flag_from_language_code(language: &str) -> Image {
"FR" => FR,
"EN" => GB,
"IT" => IT,
"KO" => KR,
"PL" => PL,
"PT" => PT,
"RO" => RO,
"RU" => RU,
"TR" => TR,
"UK" => UA,
_ => UNKNOWN,
})))