From a28cef5b988a9ac0929eaf8d304d4ee472b4e025 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sat, 7 Dec 2024 21:13:57 +0800 Subject: [PATCH 1/4] Fixed the issue of save window size when exit https://github.com/2dust/v2rayN/issues/6251 --- v2rayN/ServiceLib/Enums/EMsgCommand.cs | 3 ++- .../ViewModels/BackupAndRestoreViewModel.cs | 6 ++--- .../ViewModels/MainWindowViewModel.cs | 1 + .../v2rayN.Desktop/Views/MainWindow.axaml.cs | 4 ++-- .../v2rayN.Desktop/Views/ProfilesView.axaml | 23 ++++++++----------- .../Views/ProfilesView.axaml.cs | 12 +++------- v2rayN/v2rayN/Views/MainWindow.xaml.cs | 9 ++------ v2rayN/v2rayN/Views/ProfilesView.xaml.cs | 11 +++------ 8 files changed, 25 insertions(+), 44 deletions(-) diff --git a/v2rayN/ServiceLib/Enums/EMsgCommand.cs b/v2rayN/ServiceLib/Enums/EMsgCommand.cs index c955e830..86d5213e 100644 --- a/v2rayN/ServiceLib/Enums/EMsgCommand.cs +++ b/v2rayN/ServiceLib/Enums/EMsgCommand.cs @@ -6,6 +6,7 @@ SendMsgView, SendSnackMsg, RefreshProfiles, - StopSpeedtest + StopSpeedtest, + AppExit } } \ No newline at end of file diff --git a/v2rayN/ServiceLib/ViewModels/BackupAndRestoreViewModel.cs b/v2rayN/ServiceLib/ViewModels/BackupAndRestoreViewModel.cs index 35c3d60d..804d46eb 100644 --- a/v2rayN/ServiceLib/ViewModels/BackupAndRestoreViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/BackupAndRestoreViewModel.cs @@ -160,9 +160,9 @@ namespace ServiceLib.ViewModels var configDirZipTemp = Utils.GetTempPath($"v2rayN_{DateTime.Now:yyyyMMddHHmmss}"); var configDirTemp = Path.Combine(configDirZipTemp, _guiConfigs); - await Task.Run(() => FileManager.CopyDirectory(configDir, configDirTemp, false, "cache.db")); - var ret = await Task.Run(() => FileManager.CreateFromDirectory(configDirZipTemp, fileName)); - await Task.Run(() => Directory.Delete(configDirZipTemp, true)); + FileManager.CopyDirectory(configDir, configDirTemp, false, "cache.db"); + var ret = FileManager.CreateFromDirectory(configDirZipTemp, fileName); + Directory.Delete(configDirZipTemp, true); return ret; } } diff --git a/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs b/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs index ff680c3d..2de9b453 100644 --- a/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs +++ b/v2rayN/ServiceLib/ViewModels/MainWindowViewModel.cs @@ -283,6 +283,7 @@ namespace ServiceLib.ViewModels try { Logging.SaveLog("MyAppExitAsync Begin"); + MessageBus.Current.SendMessage("", EMsgCommand.AppExit.ToString()); await ConfigHandler.SaveConfig(_config); await SysProxyHandler.UpdateSysProxy(_config, true); diff --git a/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs b/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs index 9bd228af..279b6063 100644 --- a/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs +++ b/v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs @@ -156,6 +156,7 @@ namespace v2rayN.Desktop.Views RestoreUI(); AddHelpMenuItem(); //WindowsHandler.Instance.RegisterGlobalHotkey(_config, OnHotkeyHandler, null); + MessageBus.Current.Listen(EMsgCommand.AppExit.ToString()).Subscribe(StorageUI); } #region Event @@ -441,7 +442,7 @@ namespace v2rayN.Desktop.Views } } - private void StorageUI() + private void StorageUI(string? n = null) { _config.UiItem.MainWidth = Utils.ToInt(this.Width); _config.UiItem.MainHeight = Utils.ToInt(this.Height); @@ -456,7 +457,6 @@ namespace v2rayN.Desktop.Views _config.UiItem.MainGirdHeight1 = Math.Ceiling(gridMain1.RowDefinitions[0].ActualHeight + 0.1); _config.UiItem.MainGirdHeight2 = Math.Ceiling(gridMain1.RowDefinitions[2].ActualHeight + 0.1); } - ConfigHandler.SaveConfig(_config); } private void AddHelpMenuItem() diff --git a/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml b/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml index de532782..2985c633 100644 --- a/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml +++ b/v2rayN/v2rayN.Desktop/Views/ProfilesView.axaml @@ -56,28 +56,23 @@ Foreground="{DynamicResource ButtonDefaultTertiaryForeground}" /> - - + - - - - - - - + + (EMsgCommand.AppExit.ToString()).Subscribe(StorageUI); } private async void LstProfiles_Sorting(object? sender, DataGridColumnEventArgs e) @@ -323,12 +323,7 @@ namespace v2rayN.Desktop.Views ViewModel?.RefreshServers(); } } - - private void MenuStorageUI_Click(object? sender, RoutedEventArgs e) - { - StorageUI(); - } - + //#endregion Event //#region UI @@ -368,7 +363,7 @@ namespace v2rayN.Desktop.Views } } - private void StorageUI() + private void StorageUI(string? n = null) { List lvColumnItem = new(); for (int k = 0; k < lstProfiles.Columns.Count; k++) @@ -386,7 +381,6 @@ namespace v2rayN.Desktop.Views }); } _config.UiItem.MainColumnItem = lvColumnItem; - ConfigHandler.SaveConfig(_config); } //#endregion UI diff --git a/v2rayN/v2rayN/Views/MainWindow.xaml.cs b/v2rayN/v2rayN/Views/MainWindow.xaml.cs index cd467d67..5ad3c04a 100644 --- a/v2rayN/v2rayN/Views/MainWindow.xaml.cs +++ b/v2rayN/v2rayN/Views/MainWindow.xaml.cs @@ -26,7 +26,6 @@ namespace v2rayN.Views _config = AppHandler.Instance.Config; ThreadPool.RegisterWaitForSingleObject(App.ProgramStarted, OnProgramStarted, null, -1, false); - Application.Current.Exit += Current_Exit; App.Current.SessionEnding += Current_SessionEnding; this.Closing += MainWindow_Closing; this.PreviewKeyDown += MainWindow_PreviewKeyDown; @@ -142,6 +141,7 @@ namespace v2rayN.Views RestoreUI(); AddHelpMenuItem(); WindowsHandler.Instance.RegisterGlobalHotkey(_config, OnHotkeyHandler, null); + MessageBus.Current.Listen(EMsgCommand.AppExit.ToString()).Subscribe(StorageUI); } #region Event @@ -265,11 +265,6 @@ namespace v2rayN.Views ShowHideWindow(false); } - private void Current_Exit(object sender, ExitEventArgs e) - { - StorageUI(); - } - private async void Current_SessionEnding(object sender, SessionEndingCancelEventArgs e) { Logging.SaveLog("Current_SessionEnding"); @@ -402,7 +397,7 @@ namespace v2rayN.Views } } - private void StorageUI() + private void StorageUI(string? n = null) { _config.UiItem.MainWidth = Utils.ToInt(this.Width); _config.UiItem.MainHeight = Utils.ToInt(this.Height); diff --git a/v2rayN/v2rayN/Views/ProfilesView.xaml.cs b/v2rayN/v2rayN/Views/ProfilesView.xaml.cs index 36101b41..e0671eb0 100644 --- a/v2rayN/v2rayN/Views/ProfilesView.xaml.cs +++ b/v2rayN/v2rayN/Views/ProfilesView.xaml.cs @@ -1,6 +1,7 @@ using MaterialDesignThemes.Wpf; using ReactiveUI; using Splat; +using System; using System.Reactive.Disposables; using System.Windows; using System.Windows.Controls; @@ -24,7 +25,6 @@ namespace v2rayN.Views _config = AppHandler.Instance.Config; - Application.Current.Exit += Current_Exit; btnAutofitColumnWidth.Click += BtnAutofitColumnWidth_Click; txtServerFilter.PreviewKeyDown += TxtServerFilter_PreviewKeyDown; lstProfiles.PreviewKeyDown += LstProfiles_PreviewKeyDown; @@ -90,15 +90,11 @@ namespace v2rayN.Views RestoreUI(); ViewModel?.RefreshServers(); + MessageBus.Current.Listen(EMsgCommand.AppExit.ToString()).Subscribe(StorageUI); } #region Event - private void Current_Exit(object sender, ExitEventArgs e) - { - StorageUI(); - } - private async Task UpdateViewHandler(EViewAction action, object? obj) { switch (action) @@ -356,7 +352,7 @@ namespace v2rayN.Views } } - private void StorageUI() + private void StorageUI(string? n = null) { List lvColumnItem = new(); for (int k = 0; k < lstProfiles.Columns.Count; k++) @@ -370,7 +366,6 @@ namespace v2rayN.Views }); } _config.UiItem.MainColumnItem = lvColumnItem; - ConfigHandler.SaveConfig(_config); } #endregion UI From 6653ea12b725a8adb5c62845aab66ad137871431 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sat, 7 Dec 2024 21:25:53 +0800 Subject: [PATCH 2/4] Add Language: Hungarian https://github.com/2dust/v2rayN/issues/6252 --- v2rayN/ServiceLib/Global.cs | 2 +- v2rayN/ServiceLib/Resx/ResUI.hu.resx | 1393 ++++++++++++++++++++++++++ v2rayN/ServiceLib/ServiceLib.csproj | 3 + 3 files changed, 1397 insertions(+), 1 deletion(-) create mode 100644 v2rayN/ServiceLib/Resx/ResUI.hu.resx diff --git a/v2rayN/ServiceLib/Global.cs b/v2rayN/ServiceLib/Global.cs index a8b843c7..c2fc24ad 100644 --- a/v2rayN/ServiceLib/Global.cs +++ b/v2rayN/ServiceLib/Global.cs @@ -196,7 +196,7 @@ public static readonly List SingboxDomainStrategy4Out = new() { "ipv4_only", "prefer_ipv4", "prefer_ipv6", "ipv6_only", "" }; public static readonly List DomainDNSAddress = ["223.5.5.5", "223.6.6.6", "localhost"]; public static readonly List SingboxDomainDNSAddress = ["223.5.5.5", "223.6.6.6", "dhcp://auto"]; - public static readonly List Languages = new() { "zh-Hans", "zh-Hant", "en", "fa-Ir", "ru" }; + public static readonly List Languages = new() { "zh-Hans", "zh-Hant", "en", "fa-Ir", "ru", "hu" }; public static readonly List Alpns = new() { "h3", "h2", "http/1.1", "h3,h2", "h2,http/1.1", "h3,h2,http/1.1", "" }; public static readonly List LogLevels = new() { "debug", "info", "warning", "error", "none" }; public static readonly List InboundTags = new() { "socks", "socks2" }; diff --git a/v2rayN/ServiceLib/Resx/ResUI.hu.resx b/v2rayN/ServiceLib/Resx/ResUI.hu.resx new file mode 100644 index 00000000..3417fafb --- /dev/null +++ b/v2rayN/ServiceLib/Resx/ResUI.hu.resx @@ -0,0 +1,1393 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + +2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + A megosztási link másolása a vágólapra sikerült + + + Kérjük, először ellenőrizze a szerverbeállításokat + + + Érvénytelen konfigurációs formátum + + + Vegye figyelembe, hogy a testreszabott konfiguráció teljes mértékben az ön konfigurációjától függ, és nem működik minden beállítással. Ha a rendszer proxyját szeretné használni, kérjük, módosítsa a figyelési portot kézzel. + + + Letöltés... + + + Letöltés + + + Le szeretné tölteni? {0} + + + Nem sikerült a konfigurációs fájl átalakítása + + + Nem sikerült a gyári konfigurációs fájl generálása + + + Nem sikerült lekérni a gyári konfigurációt + + + Nem sikerült a testreszabott konfigurációs szerver importálása + + + Nem sikerült a konfigurációs fájl beolvasása + + + Kérjük, adja meg a helyes formátumú szerverportot + + + Kérjük, adja meg a helyi figyelési portot + + + Kérjük, töltse ki a jelszót + + + Kérjük, adja meg a szerver címét + + + Kérjük, adja meg a felhasználói azonosítót + + + Nem helyes a konfiguráció, kérjük, ellenőrizze + + + Kezi konfiguráció + + + {0} {1} már naprakész. + + + {0} {1} már naprakész. + + + Cím + + + Biztonság + + + Port + + + Típus + + + Előfizetési csoport + + + Letöltési forgalom ma + + + Feltöltési forgalom ma + + + Összes letöltési forgalom + + + Összes feltöltési forgalom + + + Szállítás + + + Eredeti előfizetési tartalom törlése + + + A Core letöltése sikerült + + + Nem sikerült az előfizetési tartalom importálása + + + Az előfizetési tartalom sikeresen lekérve + + + Nincs érvényes előfizetés meghatározva + + + Resolve {0} sikeresen + + + Kezdje el az előfizetések lekérését + + + Kezdődik a frissítés: {0}... + + + Érvénytelen előfizetési tartalom + + + Kicsomagolás folyamatban...... + + + Az előfizetések frissítése befejeződött + + + Az előfizetések frissítése elkezdődött + + + A Core sikeresen frissítve + + + A Core sikeresen frissítve! Szolgáltatás újraindítása... + + + Nem-VMess vagy ss protokoll + + + A Core fájl (fájl neve: {1}) nem található a mappában ({0}), kérjük, töltse le és helyezze a mappába, letöltési cím: {2} + + + Beolvasás befejeződött, nem található érvényes QR-kód + + + A művelet nem sikerült, kérjük, ellenőrizze és próbálja újra + + + Kérjük, töltse ki a megjegyzéseket + + + Kérjük, válassza ki a titkosítási módszert + + + Kérjük, válasszon egy protokollt + + + Kérjük, először válassza ki a szervert + + + A szerverek duplikáció eltávolítása befejeződött. Régi: {0}, Új: {1}. + + + Biztosan el kívánja távolítani a szervert? + + + A kliens konfigurációs fájl mentve van itt: {0} + + + Szolgáltatás indítása ({0})... + + + Konfiguráció sikeres +{0} + + + A testreszabott konfigurációs szerver sikeresen importálva + + + {0} szerver importálva a vágólapról + + + A megosztott link sikeresen importálva a beolvasás során + + + A késleltetés: {0} ms, {1} + + + A művelet sikeres + + + Kérjük, válassza ki a szabályokat + + + Biztosan el kívánja távolítani a szabályokat? + + + {0}, az egyik kötelező. + + + Megjegyzések + + + URL (Opcionális) + + + Szám + + + Kérjük, adja meg az URL-t + + + Hozzá kívánja adni a szabályokat? Válassza az igent az összefűzéshez, válassza a másikat a cseréhez + + + GeoFile letöltése: {0} sikerült + + + Információ + + + Testreszabott ikona + + + Kérjük, adja meg a helyes egyedi DNS-t + + + *ws/httpupgrade/xhttp útvonal + + + *h2 útvonal + + + *QUIC kulcs/KCP mag + + + *grpc szolgáltatás neve + + + *http host, vesszővel elválasztva (,) + + + *ws/httpupgrade/xhttp host + + + *h2 host, vesszővel elválasztva (,) + + + *QUIC biztonság + + + *tcp álcázási típus + + + *kcp álcázási típus + + + *QUIC álcázási típus + + + *grpc mód + + + TLS + + + *kcp mag + + + A globális billentyűparancs {0} bejegyzése nem sikerült, ok: {1} + + + A globális billentyűparancs {0} sikeresen bejegyezve + + + Összegyűjtetlen + + + Összes + + + Kérjük, keresse meg a szerver konfigurációjának importálásához + + + Tesztelés... + + + LAN + + + Helyi + + + Szerver szűrő, nyomja meg az Enter-t a végrehajtáshoz + + + Frissítés ellenőrzése + + + Bezárás + + + Kilépés + + + Globális billentyűparancs beállítása + + + Segítség + + + Opció beállítása + + + Promóció + + + Újratöltés + + + Útvonal beállítása + + + Szerverek + + + Beállítások + + + Frissítse a jelenlegi előfizetést proxy nélkül + + + Frissítse a jelenlegi előfizetést proxyval + + + Előfizetési csoport + + + Előfizetési csoport beállítások + + + Előfizetések frissítése proxy nélkül + + + Előfizetések frissítése proxyval + + + Rendszerproxy + + + Rendszerproxy törlése + + + Ne változtassa meg a rendszer proxyját + + + PAC mód + + + Rendszerproxy beállítása + + + Szín + + + Sötét mód + + + Kövesse a rendszer témáját + + + Nyelv (Újraindítás) + + + Importálja a megosztott linkeket a vágólapról (Ctrl+V) + + + QR kód beolvasása a képernyőn (Ctrl+S) + + + Kiválasztott szerver klónozása + + + Duplikált szerverek eltávolítása + + + Kiválasztott szerver(törlés) + + + Aktív szerverként beállítani (Enter) + + + Minden szolgáltatási statisztika törlése + + + A szerverek valós késleltetésének tesztelése (Ctrl+R) + + + Sorrend szerinti tesztelési eredmény + + + A szerverek letöltési sebességének tesztelése (Ctrl+T) + + + Szerver tesztelése tcping-gel (Ctrl+O) + + + A kiválasztott szerver exportálása a teljes konfigurációhoz + + + A megosztási link kattintásra másolása (Ctrl+C) + + + Testreszabott konfigurációs szerver hozzáadása + + + [Shadowsocks] szerver hozzáadása + + + [SOCKS] szerver hozzáadása + + + [Trojan] szerver hozzáadása + + + [VLESS] szerver hozzáadása + + + [VMess] szerver hozzáadása + + + Mindet kijelölni (Ctrl+A) + + + Összes törlése + + + Másolás (Ctrl+C) + + + Összes másolása + + + Összes kijelölése (Ctrl+A) + + + Hozzáadás + + + Törlés + + + Szerkesztés + + + Megosztás + + + A frissítés engedélyezése + + + Sorrend + + + Felhasználói ügynök + + + Cancel + + + Megerősít + + + Szállítás + + + Cím + + + Engedélyezett nem biztosított + + + ALPN + + + AlterID + + + Ujjlenyomat + + + Álcázás típusa + + + UUID(id) + + + Szállítási protokoll (hálózat) + + + Útvonal + + + Port + + + Álnév (megjegyzések) + + + Álcázott domain (hoszt) + + + Kódolási módszer (biztonság) + + + SNI + + + TLS + + + *Alapértelmezett érték tcp + + + Yalap típusa + + + Folyam + + + Generálás + + + Jelszó + + + Jelszó (opcionális) + + + UUID(id) + + + Kódolás + + + Felhasználó (opcionális) + + + Kódolás + + + Socks port + + + * Ezen érték beállítása után egy socks szolgáltatás indul el Xray/sing-box(Tun) használatával, amely funkcionalitásokat biztosít, mint például a sebesség megjelenítése + + + Böngészés + + + Szerkesztés + + + Fejlett proxy beállítások, protokoll választás (opcionális) + + + Kapcsolatok engedélyezése a LAN-ról + + + Automatikus elrejtés indításkor + + + Geo automatikus frissítési időköz (órák) + + + Yalap: alapbeállítások + + + V2ray DNS beállítások + + + Yalap: KCP beállítások + + + Yalap típusa beállítások + + + Engedélyezett a nem biztonságos + + + Kimenő szabadság domain stratégia + + + Otomatikusan állítja be az oszlop szélességét előfizetés frissítése után + + + Frissítések ellenőrzése a kiadás előtt + + + Kivétel + + + Kivétel. Ne használjon proxy szervert a címek esetében, amelyek pontosan itt kezdődnek, használjon pontosvesszőt (;) + + + HTTP Port + + + Geo fájlok figyelmen kívül hagyása a yalap frissítésekor + + + Régi megőrzése a deduplikáció során + + + Napló engedélyezése + + + Napló szint + + + Mux multiplexelés bekapcsolása + + + v2rayN beállítások + + + Hitelesítő jelszó + + + Testreszabott DNS (több, vesszővel elválasztva (,)) + + + Win10 UWP Loopback beállítása + + + Sniffing bekapcsolása + + + Keverék Port + + + Indításkor indítani + + + Statisztikák engedélyezése (indítás szükséges) + + + Előfizetés átalakító URL + + + Rendszer proxy beállítások + + + Biztonsági protokoll TLS v1.3 engedélyezése (előfizetés/frissítés) + + + A tálcán megjelenő menü szerverek megjelenítési korlátozása + + + UDP engedélyezése + + + Hitelesítő felhasználó + + + Rendszer proxy törlése + + + GUI megjelenítése + + + Globális gyorsbillentyű beállítások + + + Állítsa be közvetlenül a billentyűzet megnyomásával, indítás után érvényes + + + Ne változtassa meg a rendszer proxy-t + + + Visszaállítás + + + Rendszer proxy beállítása + + + PAC módban + + + Megosztási szerver (Ctrl+F) + + + Útvonal + + + Nem adminisztrátorként fut + + + Futtatás adminisztrátorként + + + Áthelyezés a végére (B) + + + Le (D) + + + Áthelyezés a tetejére (T) + + + Fel (U) + + + Szűrő, támogatja a reguláris kifejezéseket + + + {0} Weboldal + + + Fejlett funkció + + + Hozzáadás + + + Fejlett szabályok importálása + + + Kiválasztott eltávolítása (Törlés) + + + Aktív szabályként beállítása (Enter) + + + Domain illesztő + + + Domain stratégia + + + Fejlett funkció engedélyezése + + + 3. Domain vagy IP blokkolása + + + 2. Közvetlen domain vagy IP + + + 1. Proxy domain vagy IP + + + Előre definiált szabálykészletlista + + + * Állítsa be a szabályokat, vesszővel elválasztva (,); A reguláris kifejezésben a vesszőt <COMMA> -ra cseréli + + + Szabályok importálása a vágólapról + + + Szabályok importálása fájlból + + + Szabályok importálása előfizetési URL-ből + + + Szabálybeállítások + + + Szabály hozzáadása + + + Kiválasztott szabályok exportálása + + + Szabálylista + + + Szabály eltávolítása (Törlés) + + + RoutingRuleDetailsSetting + + + Domain, ip, folyamat automatikusan rendezve lesz a mentés során + + + Szabály objektum dokumentáció + + + Támogatja a DnsObject, kattintson a dokumentum megtekintésére + + + Csoporthoz, kérlek, hagyd üresen ezt a mezőt + + + Útvonal beállítása megváltozott + + + Rendszer proxy beállítása megváltozott + + + Csak útvonal + + + Ne használjon proxy szervert a helyi (intranet) címekhez + + + Egy kattintásos több teszt késleltetés és sebesség (Ctrl+E) + + + Késleltetés(ms) + + + Sebesség(M/s) + + + Nem sikerült futtatni a Core-t, kérlek, nézd meg a naplót + + + Megjegyzések reguláris szűrő + + + Napló megjelenítése + + + Régi konfiguráció importálása (guiNConfig) + + + Tun engedélyezése + + + Új port a LAN-hoz + + + TunMode beállítások + + + Áthelyezés csoporthoz + + + Proxy Drag Drop Szortírozás engedélyezése (indítás szükséges) + + + AutoFrissítés + + + Teszt kihagyása + + + Szerver szerkesztése (Ctrl+D) + + + Kattintson duplán a szerver aktiválásához + + + A teszt befejeződött + + + Alapértelmezett TLS ujjlenyomat + + + Felhasználói ügynök + + + Ez a paraméter csak tcp/http és ws esetén érvényes + + + Betűcsalád (indítás szükséges) + + + Kérlek, másold a betűtípus TTF/TTC fájlt a guiFonts könyvtárba, indítsd újra a beállításokat + + + Pac port = +2; Xray API port = +3; mihomo API port = +4; + + + Állítsd be ezt admin jogokkal, indítás után szerezd meg az admin jogokat + + + Betűméret + + + SpeedTest egyéni időtúllépési érték + + + SpeedTest URL + + + Feljebb és lejjebb mozgatás + + + Nyilvános kulcs + + + Rövid azonosító + + + SpiderX + + + Hardveres gyorsítás engedélyezése (indítás szükséges) + + + Várakozás a tesztelésre (nyomj ESC-t a leállításhoz)... + + + Kérlek, kapcsold ki, ha szokatlan megszakítás történt + + + A frissítések nincsenek aktiválva, átugorva ez az előfizetés + + + Újraindítás adminisztrátorként + + + Több URL, vesszővel elválasztva; Az előfizetés átalakítása érvénytelen lesz + + + {0} : {1}/s↑ | {2}/s↓ + + + Automatikus frissítési időköz (perc) + + + Napló engedélyezése fájlba + + + Átalakítási cél típusa + + + Kérlek, hagyd üresen, ha nincs szükség átalakításra + + + DNS beállítások + + + sing-box DNS beállítások + + + Kérlek, töltsd ki a DNS struktúrát, kattints a dokumentum megtekintésére + + + Kattints az alapértelmezett DNS konfiguráció importálásához + + + sing-box domain stratégia + + + sing-box Mux protokoll + + + Teljes folyamat neve (Tun módban) + + + IP vagy IP CIDR + + + Domain + + + [Hysteria2] szerver hozzáadása + + + Hysteria maximális sávszélesség (Felfelé/Letöltés) + + + Rendszer gazdagépeket használ + + + [TUIC] szerver hozzáadása + + + Befogadó irányítás + + + Előző proxy megjegyzések + + + Következő proxy megjegyzések + + + Kérlek, győződj meg róla, hogy a megjegyzés létezik és egyedi + + + Kiegészítő bejövő engedélyezése + + + IPv6 cím engedélyezése + + + [WireGuard] szerver hozzáadása + + + Privát kulcs + + + Fenntartva (2,3,4) + + + Cím (Ip,Ipv6) + + + obfs jelszó + + + (Domain vagy IP vagy ProcName) és Port és Protokoll és InboundTag => OutboundTag + + + Automatikus görgetés a végére + + + Speed Ping Test URL + + + Előfizetés frissítése, csak akkor határozd meg, ha a megjegyzések léteznek + + + A teszt leállítása... + + + *grpc Hatóság + + + [HTTP] szerver hozzáadása + + + Használja az Xray-t és engedélyezze a nem-Tun módot, amely összeférhet a csoport előző proxy-jával + + + Fragmentum engedélyezése + + + Cache fájl engedélyezése a sing-box számára (szabálykészlet fájlok) + + + Testreszabott a sing-box szabálykészletének + + + Sikeres művelet. Kattintson a beállítási menüre az alkalmazás újraindításához. + + + Megnyitja a tárolás helyét + + + Rendezés + + + Zárlat + + + Alapértelmezett + + + Késleltetés + + + Letöltési sebesség + + + Letöltési forgalom + + + Gazda + + + Név + + + Hálózat + + + Idő + + + Típus + + + Feltöltési sebesség + + + Feltöltési forgalom + + + Kapcsolatok + + + Kapcsolat bezárása + + + Összes kapcsolat bezárása + + + Proxy-k + + + Szabály mód + + + Közvetlen + + + Globális + + + Ne változtasson + + + Szabály + + + Késleltetés teszt + + + Részleges csomópont késleltetés teszt + + + Proxy-k frissítése + + + Aktív csomópont kiválasztása (Enter) + + + Alapértelmezett domain stratégia a kimenő forgalomhoz + + + Multi-szerver alacsony késleltetés + + + Fő elrendezés irányítása (indítás szükséges) + + + Multi-szerver terheléselosztás + + + Kimenő DNS cím + + + Oszlop szélesség automatikus beállítása + + + Exportálja a Base64-kódolt megosztási linkeket a vágólapra + + + Kiválasztott szerver exportálása teljes konfigurációval a vágólapra + + + Fő ablak megjelenítése vagy elrejtése + + + Jelenleg egy önálló csomagot futtatsz, kérlek, töltsd le manuálisan a SelfContained.7z fájlt, bontsd ki és írd felül! + + + Testreszabott konfigurációs socks port + + + Biztonsági mentés és visszaállítás + + + Biztonsági mentés helyben + + + Visszaállítás helyben + + + Biztonsági mentés távolról (WebDAV) + + + Visszaállítás távolról (WebDAV) + + + Helyi + + + Távoli (WebDAV) + + + WebDav URL + + + WebDav Felhasználónév + + + WebDav Jelszó + + + WebDav Ellenőrzés + + + Távoli mappa neve (opcionális) + + + Érvénytelen mentési fájl + + + Gazda szűrő + + + Aktív + + + Szoftverfelület elmentése + + + Geo fájlok forrása (opcionális) + + + sing-box szabálykészlet fájlok forrása (opcionális) + + + UpgradeApp nem létezik + + + Útvonal szabályok forrása (opcionális) + + + Regionális előbeállítások beállítása + + + Alapértelmezett + + + Oroszország + + + A Kínában élő felhasználók figyelmen kívül hagyhatják ezt a tételt + + + QR kód beolvasása a képen + + + Érvénytelen cím (Url) + + + Kérlek, ne használd a nem biztonságos HTTP protokollt az előfizetés címeknél + + + Telepítsd a betűtípust a rendszerbe és indítsd újra a beállításokat + + + Biztosan ki akarsz lépni? + + + Megjegyzések + + + Rendszer sudo jelszó + + + A jelszó titkosítva és csak a helyi fájlokban tárolva. + + + Kérlek, először állítsd be a sudo jelszót a Tun módban + + + Kérlek, ne futtasd ezt az alkalmazást sudo-ként + + + *xhttp mód + + + XHTTP További nyers JSON, formátum: { XHTTPObject } + + + Minimálás tálcára ablak zárásakor + + + Szám / időszak az automatikus batch során a sebességvizsgálat során (maximum 1000) + + + Kivétel. Ne használj proxy szervert a címeknél, évezz pontosvesszőt (,) + + \ No newline at end of file diff --git a/v2rayN/ServiceLib/ServiceLib.csproj b/v2rayN/ServiceLib/ServiceLib.csproj index cdaf8ed3..ffafd99d 100644 --- a/v2rayN/ServiceLib/ServiceLib.csproj +++ b/v2rayN/ServiceLib/ServiceLib.csproj @@ -60,6 +60,9 @@ Designer PublicResXFileCodeGenerator + + PublicResXFileCodeGenerator + Designer ResUI.Designer.cs From e7f04f55c202b9f3393e16b30dee0e3783674ca3 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sun, 8 Dec 2024 11:10:15 +0800 Subject: [PATCH 3/4] Remove QueryableExtension --- .../ServiceLib/Common/QueryableExtension.cs | 50 ---------- v2rayN/ServiceLib/Handler/ConfigHandler.cs | 93 +++++++++---------- 2 files changed, 45 insertions(+), 98 deletions(-) delete mode 100644 v2rayN/ServiceLib/Common/QueryableExtension.cs diff --git a/v2rayN/ServiceLib/Common/QueryableExtension.cs b/v2rayN/ServiceLib/Common/QueryableExtension.cs deleted file mode 100644 index b8e91433..00000000 --- a/v2rayN/ServiceLib/Common/QueryableExtension.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System.Linq.Expressions; -using System.Reflection; - -namespace ServiceLib.Common -{ - public static class QueryableExtension - { - public static IOrderedQueryable OrderBy(this IQueryable query, string propertyName) - { - return _OrderBy(query, propertyName, false); - } - - public static IOrderedQueryable OrderByDescending(this IQueryable query, string propertyName) - { - return _OrderBy(query, propertyName, true); - } - - private static IOrderedQueryable _OrderBy(IQueryable query, string propertyName, bool isDesc) - { - var methodname = (isDesc) ? "OrderByDescendingInternal" : "OrderByInternal"; - - var memberProp = typeof(T).GetProperty(propertyName); - - var method = typeof(QueryableExtension).GetMethod(methodname) - .MakeGenericMethod(typeof(T), memberProp.PropertyType); - - return (IOrderedQueryable)method.Invoke(null, new object[] { query, memberProp }); - } - - public static IOrderedQueryable OrderByInternal(IQueryable query, PropertyInfo memberProperty) - {//public - return query.OrderBy(_GetLambda(memberProperty)); - } - - public static IOrderedQueryable OrderByDescendingInternal(IQueryable query, PropertyInfo memberProperty) - {//public - return query.OrderByDescending(_GetLambda(memberProperty)); - } - - private static Expression> _GetLambda(PropertyInfo memberProperty) - { - if (memberProperty.PropertyType != typeof(TProp)) throw new Exception(); - - var thisArg = Expression.Parameter(typeof(T)); - var lambda = Expression.Lambda>(Expression.Property(thisArg, memberProperty), thisArg); - - return lambda; - } - } -} \ No newline at end of file diff --git a/v2rayN/ServiceLib/Handler/ConfigHandler.cs b/v2rayN/ServiceLib/Handler/ConfigHandler.cs index 39d6cb1c..2424db49 100644 --- a/v2rayN/ServiceLib/Handler/ConfigHandler.cs +++ b/v2rayN/ServiceLib/Handler/ConfigHandler.cs @@ -766,69 +766,66 @@ namespace ServiceLib.Handler }).ToList(); Enum.TryParse(colName, true, out EServerColName name); - var propertyName = string.Empty; - switch (name) - { - case EServerColName.ConfigType: - case EServerColName.Remarks: - case EServerColName.Address: - case EServerColName.Port: - case EServerColName.Network: - case EServerColName.StreamSecurity: - propertyName = name.ToString(); - break; - - case EServerColName.DelayVal: - propertyName = "Delay"; - break; - - case EServerColName.SpeedVal: - propertyName = "Speed"; - break; - - case EServerColName.SubRemarks: - propertyName = "Subid"; - break; - - default: - return -1; - } - - var items = lstProfile.AsQueryable(); if (asc) { - lstProfile = items.OrderBy(propertyName).ToList(); + lstProfile = name switch + { + EServerColName.ConfigType => lstProfile.OrderBy(t => t.ConfigType).ToList(), + EServerColName.Remarks => lstProfile.OrderBy(t => t.Remarks).ToList(), + EServerColName.Address => lstProfile.OrderBy(t => t.Address).ToList(), + EServerColName.Port => lstProfile.OrderBy(t => t.Port).ToList(), + EServerColName.Network => lstProfile.OrderBy(t => t.Network).ToList(), + EServerColName.StreamSecurity => lstProfile.OrderBy(t => t.StreamSecurity).ToList(), + EServerColName.DelayVal => lstProfile.OrderBy(t => t.Delay).ToList(), + EServerColName.SpeedVal => lstProfile.OrderBy(t => t.Speed).ToList(), + EServerColName.SubRemarks => lstProfile.OrderBy(t => t.Subid).ToList(), + _ => lstProfile + }; } else { - lstProfile = items.OrderByDescending(propertyName).ToList(); + lstProfile = name switch + { + EServerColName.ConfigType => lstProfile.OrderByDescending(t => t.ConfigType).ToList(), + EServerColName.Remarks => lstProfile.OrderByDescending(t => t.Remarks).ToList(), + EServerColName.Address => lstProfile.OrderByDescending(t => t.Address).ToList(), + EServerColName.Port => lstProfile.OrderByDescending(t => t.Port).ToList(), + EServerColName.Network => lstProfile.OrderByDescending(t => t.Network).ToList(), + EServerColName.StreamSecurity => lstProfile.OrderByDescending(t => t.StreamSecurity).ToList(), + EServerColName.DelayVal => lstProfile.OrderByDescending(t => t.Delay).ToList(), + EServerColName.SpeedVal => lstProfile.OrderByDescending(t => t.Speed).ToList(), + EServerColName.SubRemarks => lstProfile.OrderByDescending(t => t.Subid).ToList(), + _ => lstProfile + }; } - for (int i = 0; i < lstProfile.Count; i++) + + for (var i = 0; i < lstProfile.Count; i++) { ProfileExHandler.Instance.SetSort(lstProfile[i].IndexId, (i + 1) * 10); } - if (name == EServerColName.DelayVal) + switch (name) { - var maxSort = lstProfile.Max(t => t.Sort) + 10; - foreach (var item in lstProfile) - { - if (item.Delay <= 0) + case EServerColName.DelayVal: { - ProfileExHandler.Instance.SetSort(item.IndexId, maxSort); + var maxSort = lstProfile.Max(t => t.Sort) + 10; + foreach (var item in lstProfile.Where(item => item.Delay <= 0)) + { + ProfileExHandler.Instance.SetSort(item.IndexId, maxSort); + } + + break; } - } - } - if (name == EServerColName.SpeedVal) - { - var maxSort = lstProfile.Max(t => t.Sort) + 10; - foreach (var item in lstProfile) - { - if (item.Speed <= 0) + case EServerColName.SpeedVal: { - ProfileExHandler.Instance.SetSort(item.IndexId, maxSort); + var maxSort = lstProfile.Max(t => t.Sort) + 10; + foreach (var item in lstProfile.Where(item => item.Speed <= 0)) + { + ProfileExHandler.Instance.SetSort(item.IndexId, maxSort); + } + + break; } - } } return 0; From 53a99e3f7985c290eb053514b7bc3e5d0669a0dc Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sun, 8 Dec 2024 11:11:06 +0800 Subject: [PATCH 4/4] Remove part System.Reflection --- v2rayN/ServiceLib/Global.cs | 1 + v2rayN/v2rayN.Desktop/Common/AppBuilderExtension.cs | 3 +-- v2rayN/v2rayN.Desktop/Common/AvaUtils.cs | 3 +-- v2rayN/v2rayN/App.xaml.cs | 1 - 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/v2rayN/ServiceLib/Global.cs b/v2rayN/ServiceLib/Global.cs index c2fc24ad..89fb435f 100644 --- a/v2rayN/ServiceLib/Global.cs +++ b/v2rayN/ServiceLib/Global.cs @@ -78,6 +78,7 @@ public const string SpeedUnit = ""; public const int MinFontSize = 10; public const string RebootAs = "rebootas"; + public const string AvaAssets = "avares://v2rayN/Assets/"; public static readonly List IEProxyProtocols = new() { "{ip}:{http_port}", diff --git a/v2rayN/v2rayN.Desktop/Common/AppBuilderExtension.cs b/v2rayN/v2rayN.Desktop/Common/AppBuilderExtension.cs index e841ccf3..13bbf1d1 100644 --- a/v2rayN/v2rayN.Desktop/Common/AppBuilderExtension.cs +++ b/v2rayN/v2rayN.Desktop/Common/AppBuilderExtension.cs @@ -1,6 +1,5 @@ using Avalonia; using Avalonia.Media; -using System.Reflection; namespace v2rayN.Desktop.Common { @@ -8,7 +7,7 @@ namespace v2rayN.Desktop.Common { public static AppBuilder WithFontByDefault(this AppBuilder appBuilder) { - var uri = $"avares://{Assembly.GetExecutingAssembly().GetName().Name}/Assets/Fonts#Noto Sans SC"; + var uri = Path.Combine(Global.AvaAssets, "Fonts#Noto Sans SC"); return appBuilder.With(new FontManagerOptions() { DefaultFamilyName = uri, diff --git a/v2rayN/v2rayN.Desktop/Common/AvaUtils.cs b/v2rayN/v2rayN.Desktop/Common/AvaUtils.cs index 81b63799..30e8ecc8 100644 --- a/v2rayN/v2rayN.Desktop/Common/AvaUtils.cs +++ b/v2rayN/v2rayN.Desktop/Common/AvaUtils.cs @@ -3,7 +3,6 @@ using Avalonia.Controls; using Avalonia.Input; using Avalonia.Media.Imaging; using Avalonia.Platform; -using System.Reflection; namespace v2rayN.Desktop.Common { @@ -41,7 +40,7 @@ namespace v2rayN.Desktop.Common public static WindowIcon GetAppIcon(ESysProxyType sysProxyType) { var index = (int)sysProxyType + 1; - var uri = new Uri($"avares://{Assembly.GetExecutingAssembly().GetName().Name}/Assets/NotifyIcon{index}.ico"); + var uri = new Uri(Path.Combine(Global.AvaAssets, $"NotifyIcon{index}.ico")); using var bitmap = new Bitmap(AssetLoader.Open(uri)); return new(bitmap); } diff --git a/v2rayN/v2rayN/App.xaml.cs b/v2rayN/v2rayN/App.xaml.cs index 5b7377d8..42c086fc 100644 --- a/v2rayN/v2rayN/App.xaml.cs +++ b/v2rayN/v2rayN/App.xaml.cs @@ -14,7 +14,6 @@ namespace v2rayN public App() { - // Locator.CurrentMutable.RegisterViewsForViewModels(Assembly.GetCallingAssembly()); this.DispatcherUnhandledException += App_DispatcherUnhandledException; AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;