mirror of
				https://github.com/2dust/v2rayN.git
				synced 2025-10-27 02:34:41 +00:00 
			
		
		
		
	Regional presets support
This commit is contained in:
		
							parent
							
								
									55d2625447
								
							
						
					
					
						commit
						2af532f843
					
				
					 10 changed files with 117 additions and 25 deletions
				
			
		
							
								
								
									
										8
									
								
								v2rayN/ServiceLib/Enums/EPresetType.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								v2rayN/ServiceLib/Enums/EPresetType.cs
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | ||||||
|  | namespace ServiceLib.Enums | ||||||
|  | { | ||||||
|  |     public enum EPresetType | ||||||
|  |     { | ||||||
|  |         Default = 0, | ||||||
|  |         Russia = 1, | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | @ -1788,5 +1788,31 @@ namespace ServiceLib.Handler | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         #endregion DNS |         #endregion DNS | ||||||
|  | 
 | ||||||
|  |         #region Presets | ||||||
|  | 
 | ||||||
|  |         public static bool ApplyPreset(Config config, EPresetType type)  | ||||||
|  |         { | ||||||
|  |             switch (type) | ||||||
|  |             { | ||||||
|  |                 case EPresetType.Default: | ||||||
|  |                     config.constItem.geoSourceUrl = ""; | ||||||
|  |                     config.constItem.srsSourceUrl = ""; | ||||||
|  |                     config.constItem.routeRulesTemplateSourceUrl = ""; | ||||||
|  | 
 | ||||||
|  |                     return true; | ||||||
|  | 
 | ||||||
|  |                 case EPresetType.Russia: | ||||||
|  |                     config.constItem.geoSourceUrl = Global.GeoFilesSources[1]; | ||||||
|  |                     config.constItem.srsSourceUrl = Global.SingboxRulesetSources[1]; | ||||||
|  |                     config.constItem.routeRulesTemplateSourceUrl = Global.RoutingRulesSources[1]; | ||||||
|  | 
 | ||||||
|  |                     return true; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         #endregion | ||||||
|     } |     } | ||||||
| } | } | ||||||
							
								
								
									
										27
									
								
								v2rayN/ServiceLib/Resx/ResUI.Designer.cs
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										27
									
								
								v2rayN/ServiceLib/Resx/ResUI.Designer.cs
									
									
									
										generated
									
									
									
								
							|  | @ -1113,6 +1113,33 @@ namespace ServiceLib.Resx { | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|          |          | ||||||
|  |         /// <summary> | ||||||
|  |         ///   查找类似 Regional presets 的本地化字符串。 | ||||||
|  |         /// </summary> | ||||||
|  |         public static string menuPresets { | ||||||
|  |             get { | ||||||
|  |                 return ResourceManager.GetString("menuPresets", resourceCulture); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         /// <summary> | ||||||
|  |         ///   查找类似 Default 的本地化字符串。 | ||||||
|  |         /// </summary> | ||||||
|  |         public static string menuPresetsDefault { | ||||||
|  |             get { | ||||||
|  |                 return ResourceManager.GetString("menuPresetsDefault", resourceCulture); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         /// <summary> | ||||||
|  |         ///   查找类似 Russia 的本地化字符串。 | ||||||
|  |         /// </summary> | ||||||
|  |         public static string menuPresetsRussia { | ||||||
|  |             get { | ||||||
|  |                 return ResourceManager.GetString("menuPresetsRussia", resourceCulture); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|         /// <summary> |         /// <summary> | ||||||
|         ///   查找类似 Auto column width adjustment 的本地化字符串。 |         ///   查找类似 Auto column width adjustment 的本地化字符串。 | ||||||
|         /// </summary> |         /// </summary> | ||||||
|  |  | ||||||
|  | @ -1339,4 +1339,13 @@ | ||||||
|   <data name="TbSettingsRoutingRulesSource" xml:space="preserve"> |   <data name="TbSettingsRoutingRulesSource" xml:space="preserve"> | ||||||
|     <value>Routing rules source (optional)</value> |     <value>Routing rules source (optional)</value> | ||||||
|   </data> |   </data> | ||||||
|  |   <data name="menuPresets" xml:space="preserve"> | ||||||
|  |     <value>Regional presets</value> | ||||||
|  |   </data> | ||||||
|  |   <data name="menuPresetsDefault" xml:space="preserve"> | ||||||
|  |     <value>Default</value> | ||||||
|  |   </data> | ||||||
|  |   <data name="menuPresetsRussia" xml:space="preserve"> | ||||||
|  |     <value>Russia</value> | ||||||
|  |   </data> | ||||||
| </root> | </root> | ||||||
|  | @ -253,23 +253,6 @@ namespace ServiceLib.Services | ||||||
|             }); |             }); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public async Task<bool> VerifyGeoFilesRepo(Config config, Action<bool, string> updateFunc) |  | ||||||
|         { |  | ||||||
|             var repoPath = Utils.GetBinPath("geo.repo"); |  | ||||||
|             var repo = File.Exists(repoPath) ? File.ReadAllText(repoPath) : ""; |  | ||||||
| 
 |  | ||||||
|             if (repo != (config.constItem.geoSourceUrl ?? "")) |  | ||||||
|             { |  | ||||||
|                 await UpdateGeoFileAll(config, updateFunc); |  | ||||||
| 
 |  | ||||||
|                 File.WriteAllText(repoPath, repo); |  | ||||||
| 
 |  | ||||||
|                 return false; |  | ||||||
|             } |  | ||||||
| 
 |  | ||||||
|             return true; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         public async Task UpdateGeoFileAll(Config config, Action<bool, string> updateFunc) |         public async Task UpdateGeoFileAll(Config config, Action<bool, string> updateFunc) | ||||||
|         { |         { | ||||||
|             await UpdateGeoFile("geosite", config, updateFunc); |             await UpdateGeoFile("geosite", config, updateFunc); | ||||||
|  |  | ||||||
|  | @ -44,6 +44,10 @@ namespace ServiceLib.ViewModels | ||||||
|         public ReactiveCommand<Unit, Unit> ClearServerStatisticsCmd { get; } |         public ReactiveCommand<Unit, Unit> ClearServerStatisticsCmd { get; } | ||||||
|         public ReactiveCommand<Unit, Unit> OpenTheFileLocationCmd { get; } |         public ReactiveCommand<Unit, Unit> OpenTheFileLocationCmd { get; } | ||||||
| 
 | 
 | ||||||
|  |         //Presets | ||||||
|  |         public ReactiveCommand<Unit, Unit> PresetDefaultCmd { get; } | ||||||
|  |         public ReactiveCommand<Unit, Unit> PresetRussiaCmd { get; } | ||||||
|  | 
 | ||||||
|         public ReactiveCommand<Unit, Unit> ReloadCmd { get; } |         public ReactiveCommand<Unit, Unit> ReloadCmd { get; } | ||||||
| 
 | 
 | ||||||
|         [Reactive] |         [Reactive] | ||||||
|  | @ -181,6 +185,16 @@ namespace ServiceLib.ViewModels | ||||||
|                 await Reload(); |                 await Reload(); | ||||||
|             }); |             }); | ||||||
| 
 | 
 | ||||||
|  |             PresetDefaultCmd = ReactiveCommand.CreateFromTask(async () => | ||||||
|  |             { | ||||||
|  |                 await ApplyPreset(EPresetType.Default); | ||||||
|  |             }); | ||||||
|  | 
 | ||||||
|  |             PresetRussiaCmd = ReactiveCommand.CreateFromTask(async () => | ||||||
|  |             { | ||||||
|  |                 await ApplyPreset(EPresetType.Russia); | ||||||
|  |             }); | ||||||
|  | 
 | ||||||
|             #endregion WhenAnyValue && ReactiveCommand |             #endregion WhenAnyValue && ReactiveCommand | ||||||
| 
 | 
 | ||||||
|             AutoHideStartup(); |             AutoHideStartup(); | ||||||
|  | @ -191,7 +205,6 @@ namespace ServiceLib.ViewModels | ||||||
|             ConfigHandler.InitRouting(_config); |             ConfigHandler.InitRouting(_config); | ||||||
|             ConfigHandler.InitBuiltinDNS(_config); |             ConfigHandler.InitBuiltinDNS(_config); | ||||||
|             CoreHandler.Instance.Init(_config, UpdateHandler); |             CoreHandler.Instance.Init(_config, UpdateHandler); | ||||||
|             Task.Run(() => VerifyGeoFiles(true)); |  | ||||||
|             TaskHandler.Instance.RegUpdateTask(_config, UpdateTaskHandler); |             TaskHandler.Instance.RegUpdateTask(_config, UpdateTaskHandler); | ||||||
| 
 | 
 | ||||||
|             if (_config.guiItem.enableStatistics) |             if (_config.guiItem.enableStatistics) | ||||||
|  | @ -422,7 +435,6 @@ namespace ServiceLib.ViewModels | ||||||
|             var ret = await _updateView?.Invoke(EViewAction.OptionSettingWindow, null); |             var ret = await _updateView?.Invoke(EViewAction.OptionSettingWindow, null); | ||||||
|             if (ret == true) |             if (ret == true) | ||||||
|             { |             { | ||||||
|                 await VerifyGeoFiles(); |  | ||||||
|                 Locator.Current.GetService<StatusBarViewModel>()?.InboundDisplayStatus(); |                 Locator.Current.GetService<StatusBarViewModel>()?.InboundDisplayStatus(); | ||||||
|                 Reload(); |                 Reload(); | ||||||
|             } |             } | ||||||
|  | @ -543,14 +555,23 @@ namespace ServiceLib.ViewModels | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         public async Task VerifyGeoFiles(bool needReload = false) |         #endregion core job | ||||||
|         { |  | ||||||
|             var result = await new UpdateService().VerifyGeoFilesRepo(_config, UpdateHandler); |  | ||||||
| 
 | 
 | ||||||
|             if (needReload && !result) |         #region Presets | ||||||
|                 Reload(); | 
 | ||||||
|  |         public async Task ApplyPreset(EPresetType type) | ||||||
|  |         { | ||||||
|  |             ConfigHandler.ApplyPreset(_config, type); | ||||||
|  | 
 | ||||||
|  |             await new UpdateService().UpdateGeoFileAll(_config, UpdateHandler); | ||||||
|  | 
 | ||||||
|  |             ConfigHandler.InitRouting(_config); | ||||||
|  |             Locator.Current.GetService<StatusBarViewModel>()?.RefreshRoutingsMenu(); | ||||||
|  | 
 | ||||||
|  |             ConfigHandler.SaveConfig(_config, false); | ||||||
|  |             Reload(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         #endregion core job |         #endregion | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | @ -74,6 +74,10 @@ | ||||||
|                         <MenuItem x:Name="menuRoutingSetting" Header="{x:Static resx:ResUI.menuRoutingSetting}" /> |                         <MenuItem x:Name="menuRoutingSetting" Header="{x:Static resx:ResUI.menuRoutingSetting}" /> | ||||||
|                         <MenuItem x:Name="menuDNSSetting" Header="{x:Static resx:ResUI.menuDNSSetting}" /> |                         <MenuItem x:Name="menuDNSSetting" Header="{x:Static resx:ResUI.menuDNSSetting}" /> | ||||||
|                         <MenuItem x:Name="menuGlobalHotkeySetting" Header="{x:Static resx:ResUI.menuGlobalHotkeySetting}" /> |                         <MenuItem x:Name="menuGlobalHotkeySetting" Header="{x:Static resx:ResUI.menuGlobalHotkeySetting}" /> | ||||||
|  |                         <MenuItem Header="{x:Static resx:ResUI.menuPresets}"> | ||||||
|  |                             <MenuItem x:Name="menuPresetsDefault" Header="{x:Static resx:ResUI.menuPresetsDefault}" /> | ||||||
|  |                             <MenuItem x:Name="menuPresetsRussia" Header="{x:Static resx:ResUI.menuPresetsRussia}" /> | ||||||
|  |                         </MenuItem> | ||||||
|                         <Separator /> |                         <Separator /> | ||||||
|                         <MenuItem x:Name="menuRebootAsAdmin" Header="{x:Static resx:ResUI.menuRebootAsAdmin}" /> |                         <MenuItem x:Name="menuRebootAsAdmin" Header="{x:Static resx:ResUI.menuRebootAsAdmin}" /> | ||||||
|                         <MenuItem x:Name="menuSettingsSetUWP" Header="{x:Static resx:ResUI.TbSettingsSetUWP}" /> |                         <MenuItem x:Name="menuSettingsSetUWP" Header="{x:Static resx:ResUI.TbSettingsSetUWP}" /> | ||||||
|  |  | ||||||
|  | @ -76,6 +76,8 @@ namespace v2rayN.Desktop.Views | ||||||
|                 this.BindCommand(ViewModel, vm => vm.RebootAsAdminCmd, v => v.menuRebootAsAdmin).DisposeWith(disposables); |                 this.BindCommand(ViewModel, vm => vm.RebootAsAdminCmd, v => v.menuRebootAsAdmin).DisposeWith(disposables); | ||||||
|                 this.BindCommand(ViewModel, vm => vm.ClearServerStatisticsCmd, v => v.menuClearServerStatistics).DisposeWith(disposables); |                 this.BindCommand(ViewModel, vm => vm.ClearServerStatisticsCmd, v => v.menuClearServerStatistics).DisposeWith(disposables); | ||||||
|                 this.BindCommand(ViewModel, vm => vm.OpenTheFileLocationCmd, v => v.menuOpenTheFileLocation).DisposeWith(disposables); |                 this.BindCommand(ViewModel, vm => vm.OpenTheFileLocationCmd, v => v.menuOpenTheFileLocation).DisposeWith(disposables); | ||||||
|  |                 this.BindCommand(ViewModel, vm => vm.PresetDefaultCmd, v => v.menuPresetsDefault).DisposeWith(disposables); | ||||||
|  |                 this.BindCommand(ViewModel, vm => vm.PresetRussiaCmd, v => v.menuPresetsRussia).DisposeWith(disposables); | ||||||
| 
 | 
 | ||||||
|                 this.BindCommand(ViewModel, vm => vm.ReloadCmd, v => v.menuReload).DisposeWith(disposables); |                 this.BindCommand(ViewModel, vm => vm.ReloadCmd, v => v.menuReload).DisposeWith(disposables); | ||||||
|                 this.OneWayBind(ViewModel, vm => vm.BlReloadEnabled, v => v.menuReload.IsEnabled).DisposeWith(disposables); |                 this.OneWayBind(ViewModel, vm => vm.BlReloadEnabled, v => v.menuReload.IsEnabled).DisposeWith(disposables); | ||||||
|  |  | ||||||
|  | @ -171,6 +171,16 @@ | ||||||
|                                     x:Name="menuGlobalHotkeySetting" |                                     x:Name="menuGlobalHotkeySetting" | ||||||
|                                     Height="{StaticResource MenuItemHeight}" |                                     Height="{StaticResource MenuItemHeight}" | ||||||
|                                     Header="{x:Static resx:ResUI.menuGlobalHotkeySetting}" /> |                                     Header="{x:Static resx:ResUI.menuGlobalHotkeySetting}" /> | ||||||
|  |                                 <MenuItem Height="{StaticResource MenuItemHeight}" Header="{x:Static resx:ResUI.menuPresets}"> | ||||||
|  |                                     <MenuItem | ||||||
|  |                                         x:Name="menuPresetsDefault" | ||||||
|  |                                         Height="{StaticResource MenuItemHeight}" | ||||||
|  |                                         Header="{x:Static resx:ResUI.menuPresetsDefault}" /> | ||||||
|  |                                     <MenuItem | ||||||
|  |                                         x:Name="menuPresetsRussia" | ||||||
|  |                                         Height="{StaticResource MenuItemHeight}" | ||||||
|  |                                         Header="{x:Static resx:ResUI.menuPresetsRussia}" /> | ||||||
|  |                                 </MenuItem> | ||||||
|                                 <Separator Margin="-40,5" /> |                                 <Separator Margin="-40,5" /> | ||||||
|                                 <MenuItem |                                 <MenuItem | ||||||
|                                     x:Name="menuRebootAsAdmin" |                                     x:Name="menuRebootAsAdmin" | ||||||
|  |  | ||||||
|  | @ -98,6 +98,8 @@ namespace v2rayN.Views | ||||||
|                 this.BindCommand(ViewModel, vm => vm.RebootAsAdminCmd, v => v.menuRebootAsAdmin).DisposeWith(disposables); |                 this.BindCommand(ViewModel, vm => vm.RebootAsAdminCmd, v => v.menuRebootAsAdmin).DisposeWith(disposables); | ||||||
|                 this.BindCommand(ViewModel, vm => vm.ClearServerStatisticsCmd, v => v.menuClearServerStatistics).DisposeWith(disposables); |                 this.BindCommand(ViewModel, vm => vm.ClearServerStatisticsCmd, v => v.menuClearServerStatistics).DisposeWith(disposables); | ||||||
|                 this.BindCommand(ViewModel, vm => vm.OpenTheFileLocationCmd, v => v.menuOpenTheFileLocation).DisposeWith(disposables); |                 this.BindCommand(ViewModel, vm => vm.OpenTheFileLocationCmd, v => v.menuOpenTheFileLocation).DisposeWith(disposables); | ||||||
|  |                 this.BindCommand(ViewModel, vm => vm.PresetDefaultCmd, v => v.menuPresetsDefault).DisposeWith(disposables); | ||||||
|  |                 this.BindCommand(ViewModel, vm => vm.PresetRussiaCmd, v => v.menuPresetsRussia).DisposeWith(disposables); | ||||||
| 
 | 
 | ||||||
|                 this.BindCommand(ViewModel, vm => vm.ReloadCmd, v => v.menuReload).DisposeWith(disposables); |                 this.BindCommand(ViewModel, vm => vm.ReloadCmd, v => v.menuReload).DisposeWith(disposables); | ||||||
|                 this.OneWayBind(ViewModel, vm => vm.BlReloadEnabled, v => v.menuReload.IsEnabled).DisposeWith(disposables); |                 this.OneWayBind(ViewModel, vm => vm.BlReloadEnabled, v => v.menuReload.IsEnabled).DisposeWith(disposables); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 runetfreedom
						runetfreedom