Merge branch '2dust:master' into master

pull/3405/head
hvvvvvvv 2023-03-04 18:22:08 +08:00 committed by GitHub
commit 3e3a079ba1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 138 additions and 45 deletions

View File

@ -9,8 +9,9 @@ namespace v2rayN.Base
private static readonly Lazy<SqliteHelper> _instance = new(() => new()); private static readonly Lazy<SqliteHelper> _instance = new(() => new());
public static SqliteHelper Instance => _instance.Value; public static SqliteHelper Instance => _instance.Value;
private string _connstr; private string _connstr;
public SQLiteConnection _db; private SQLiteConnection _db;
public SQLiteAsyncConnection _dbAsync; private SQLiteAsyncConnection _dbAsync;
private static readonly object objLock = new();
public SqliteHelper() public SqliteHelper()
{ {
@ -34,7 +35,10 @@ namespace v2rayN.Base
} }
public int Replace(object model) public int Replace(object model)
{ {
return _db.InsertOrReplace(model); lock (objLock)
{
return _db.InsertOrReplace(model);
}
} }
public async Task<int> Replacesync(object model) public async Task<int> Replacesync(object model)
{ {
@ -43,7 +47,10 @@ namespace v2rayN.Base
public int Update(object model) public int Update(object model)
{ {
return _db.Update(model); lock (objLock)
{
return _db.Update(model);
}
} }
public async Task<int> UpdateAsync(object model) public async Task<int> UpdateAsync(object model)
{ {
@ -51,12 +58,18 @@ namespace v2rayN.Base
} }
public int UpdateAll(IEnumerable models) public int UpdateAll(IEnumerable models)
{ {
return _db.UpdateAll(models); lock (objLock)
{
return _db.UpdateAll(models);
}
} }
public int Delete(object model) public int Delete(object model)
{ {
return _db.Delete(model); lock (objLock)
{
return _db.Delete(model);
}
} }
public async Task<int> DeleteAsync(object model) public async Task<int> DeleteAsync(object model)
{ {

View File

@ -959,7 +959,7 @@ namespace v2rayN.Handler
var existItem = lstOriSub?.FirstOrDefault(t => CompareProfileItem(t, profileItem, true)); var existItem = lstOriSub?.FirstOrDefault(t => CompareProfileItem(t, profileItem, true));
if (existItem != null) if (existItem != null)
{ {
profileItem = existItem; profileItem.indexId = existItem.indexId;
} }
//filter //filter
if (!Utils.IsNullOrEmpty(subFilter)) if (!Utils.IsNullOrEmpty(subFilter))

View File

@ -24,7 +24,7 @@ namespace v2rayN.Handler
_lstProfileEx = new(SqliteHelper.Instance.Table<ProfileExItem>()); _lstProfileEx = new(SqliteHelper.Instance.Table<ProfileExItem>());
Task.Run(async () => Task.Run(() =>
{ {
while (true) while (true)
{ {
@ -35,7 +35,7 @@ namespace v2rayN.Handler
var item = _lstProfileEx.FirstOrDefault(t => t.indexId == id); var item = _lstProfileEx.FirstOrDefault(t => t.indexId == id);
if (item is not null) if (item is not null)
{ {
await SqliteHelper.Instance.Replacesync(item); SqliteHelper.Instance.Replace(item);
} }
} }
Thread.Sleep(1000 * 60); Thread.Sleep(1000 * 60);

View File

@ -162,7 +162,7 @@ namespace v2rayN.Handler
todayDown = 0, todayDown = 0,
dateNow = ticks dateNow = ticks
}; };
_ = SqliteHelper.Instance.Replacesync(_serverStatItem); SqliteHelper.Instance.Replace(_serverStatItem);
_lstServerStat.Add(_serverStatItem); _lstServerStat.Add(_serverStatItem);
} }
} }

View File

@ -14,7 +14,14 @@
{ {
"outboundTag": "proxy", "outboundTag": "proxy",
"ip": [ "ip": [
"geoip:telegram" "geoip:cloudflare",
"geoip:cloudfront",
"geoip:facebook",
"geoip:fastly",
"geoip:google",
"geoip:netflix",
"geoip:telegram",
"geoip:twitter"
], ],
"domain": [ "domain": [
"geosite:gfw", "geosite:gfw",

View File

@ -1,5 +1,10 @@
{ {
"servers": [ "servers": [
{
"tag": "out_dns",
"address": "8.8.8.8",
"detour": "proxy"
},
{ {
"tag": "local", "tag": "local",
"address": "223.5.5.5", "address": "223.5.5.5",
@ -11,6 +16,11 @@
} }
], ],
"rules": [ "rules": [
{
"geosite": "cn",
"server": "local",
"disable_cache": true
},
{ {
"geosite": "category-ads-all", "geosite": "category-ads-all",
"server": "block", "server": "block",
@ -18,4 +28,4 @@
} }
], ],
"strategy": "ipv4_only" "strategy": "ipv4_only"
} }

View File

@ -299,7 +299,7 @@ namespace v2rayN.ViewModels
UI.Show(ResUI.OperationSuccess); UI.Show(ResUI.OperationSuccess);
} }
} }
private void ImportRulesFromUrl() private async Task ImportRulesFromUrl()
{ {
var url = SelectedRouting.url; var url = SelectedRouting.url;
if (Utils.IsNullOrEmpty(url)) if (Utils.IsNullOrEmpty(url))
@ -308,19 +308,16 @@ namespace v2rayN.ViewModels
return; return;
} }
Task.Run(async () => DownloadHandle downloadHandle = new DownloadHandle();
string result = await downloadHandle.TryDownloadString(url, true, "");
if (AddBatchRoutingRules(SelectedRouting, result) == 0)
{ {
DownloadHandle downloadHandle = new DownloadHandle(); Application.Current.Dispatcher.Invoke((Action)(() =>
string result = await downloadHandle.DownloadStringAsync(url, false, "");
if (AddBatchRoutingRules(SelectedRouting, result) == 0)
{ {
Application.Current.Dispatcher.Invoke((Action)(() => RefreshRulesItems();
{ }));
RefreshRulesItems(); UI.Show(ResUI.OperationSuccess);
})); }
UI.Show(ResUI.OperationSuccess);
}
});
} }
private int AddBatchRoutingRules(RoutingItem routingItem, string clipboardData) private int AddBatchRoutingRules(RoutingItem routingItem, string clipboardData)
{ {

View File

@ -53,7 +53,10 @@
<MenuItem Padding="8,0"> <MenuItem Padding="8,0">
<MenuItem.Header> <MenuItem.Header>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="Server" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Server" />
<TextBlock Text="{x:Static resx:ResUI.menuServers}" /> <TextBlock Text="{x:Static resx:ResUI.menuServers}" />
</StackPanel> </StackPanel>
</MenuItem.Header> </MenuItem.Header>
@ -99,7 +102,10 @@
<MenuItem Padding="8,0"> <MenuItem Padding="8,0">
<MenuItem.Header> <MenuItem.Header>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="BookClockOutline" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="BookClockOutline" />
<TextBlock Text="{x:Static resx:ResUI.menuSubscription}" /> <TextBlock Text="{x:Static resx:ResUI.menuSubscription}" />
</StackPanel> </StackPanel>
</MenuItem.Header> </MenuItem.Header>
@ -131,7 +137,10 @@
<MenuItem Padding="8,0"> <MenuItem Padding="8,0">
<MenuItem.Header> <MenuItem.Header>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="SettingsOutline" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="SettingsOutline" />
<TextBlock Text="{x:Static resx:ResUI.menuSetting}" /> <TextBlock Text="{x:Static resx:ResUI.menuSetting}" />
</StackPanel> </StackPanel>
</MenuItem.Header> </MenuItem.Header>
@ -169,7 +178,10 @@
<MenuItem x:Name="menuReload" Padding="8,0"> <MenuItem x:Name="menuReload" Padding="8,0">
<MenuItem.Header> <MenuItem.Header>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="Reload" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Reload" />
<TextBlock Text="{x:Static resx:ResUI.menuReload}" /> <TextBlock Text="{x:Static resx:ResUI.menuReload}" />
</StackPanel> </StackPanel>
</MenuItem.Header> </MenuItem.Header>
@ -180,7 +192,10 @@
<MenuItem Padding="8,0"> <MenuItem Padding="8,0">
<MenuItem.Header> <MenuItem.Header>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="Update" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Update" />
<TextBlock Text="{x:Static resx:ResUI.menuCheckUpdate}" /> <TextBlock Text="{x:Static resx:ResUI.menuCheckUpdate}" />
</StackPanel> </StackPanel>
</MenuItem.Header> </MenuItem.Header>
@ -221,7 +236,10 @@
<MenuItem x:Name="menuHelp" Padding="8,0"> <MenuItem x:Name="menuHelp" Padding="8,0">
<MenuItem.Header> <MenuItem.Header>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="HelpCircleOutline" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="HelpCircleOutline" />
<TextBlock Text="{x:Static resx:ResUI.menuHelp}" /> <TextBlock Text="{x:Static resx:ResUI.menuHelp}" />
</StackPanel> </StackPanel>
</MenuItem.Header> </MenuItem.Header>
@ -235,7 +253,10 @@
Click="menuPromotion_Click"> Click="menuPromotion_Click">
<MenuItem.Header> <MenuItem.Header>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="VolumeHigh" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="VolumeHigh" />
<TextBlock Text="{x:Static resx:ResUI.menuPromotion}" /> <TextBlock Text="{x:Static resx:ResUI.menuPromotion}" />
</StackPanel> </StackPanel>
</MenuItem.Header> </MenuItem.Header>
@ -249,7 +270,10 @@
Click="menuClose_Click"> Click="menuClose_Click">
<MenuItem.Header> <MenuItem.Header>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="Minimize" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Minimize" />
<TextBlock Text="{x:Static resx:ResUI.menuClose}" /> <TextBlock Text="{x:Static resx:ResUI.menuClose}" />
</StackPanel> </StackPanel>
</MenuItem.Header> </MenuItem.Header>
@ -352,7 +376,7 @@
Height="30" Height="30"
Margin="4,0" Margin="4,0"
Style="{StaticResource MaterialDesignFloatingActionMiniLightButton}"> Style="{StaticResource MaterialDesignFloatingActionMiniLightButton}">
<materialDesign:PackIcon Kind="Plus" /> <materialDesign:PackIcon VerticalAlignment="Center" Kind="Plus" />
</Button> </Button>
<TextBox <TextBox
x:Name="txtServerFilter" x:Name="txtServerFilter"
@ -713,6 +737,7 @@
<materialDesign:PackIcon <materialDesign:PackIcon
x:Name="menuSystemProxyClear2" x:Name="menuSystemProxyClear2"
Margin="0,0,8,0" Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Check" /> Kind="Check" />
<TextBlock Text="{x:Static resx:ResUI.menuSystemProxyClear}" /> <TextBlock Text="{x:Static resx:ResUI.menuSystemProxyClear}" />
</StackPanel> </StackPanel>
@ -724,6 +749,7 @@
<materialDesign:PackIcon <materialDesign:PackIcon
x:Name="menuSystemProxySet2" x:Name="menuSystemProxySet2"
Margin="0,0,8,0" Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Check" /> Kind="Check" />
<TextBlock Text="{x:Static resx:ResUI.menuSystemProxySet}" /> <TextBlock Text="{x:Static resx:ResUI.menuSystemProxySet}" />
</StackPanel> </StackPanel>
@ -735,6 +761,7 @@
<materialDesign:PackIcon <materialDesign:PackIcon
x:Name="menuSystemProxyNothing2" x:Name="menuSystemProxyNothing2"
Margin="0,0,8,0" Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Check" /> Kind="Check" />
<TextBlock Text="{x:Static resx:ResUI.menuSystemProxyNothing}" /> <TextBlock Text="{x:Static resx:ResUI.menuSystemProxyNothing}" />
</StackPanel> </StackPanel>
@ -746,6 +773,7 @@
<materialDesign:PackIcon <materialDesign:PackIcon
x:Name="menuSystemProxyPac2" x:Name="menuSystemProxyPac2"
Margin="0,0,8,0" Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Check" /> Kind="Check" />
<TextBlock Text="{x:Static resx:ResUI.menuSystemProxyPac}" /> <TextBlock Text="{x:Static resx:ResUI.menuSystemProxyPac}" />
</StackPanel> </StackPanel>

View File

@ -191,6 +191,11 @@ namespace v2rayN.Views
this.Title = $"{Utils.GetVersion()} - {(IsAdministrator ? ResUI.RunAsAdmin : ResUI.NotRunAsAdmin)}"; this.Title = $"{Utils.GetVersion()} - {(IsAdministrator ? ResUI.RunAsAdmin : ResUI.NotRunAsAdmin)}";
spEnableTun.Visibility = IsAdministrator ? Visibility.Visible : Visibility.Collapsed; spEnableTun.Visibility = IsAdministrator ? Visibility.Visible : Visibility.Collapsed;
if (_config.uiItem.autoHideStartup)
{
WindowState = WindowState.Minimized;
}
} }
#region Event #region Event

View File

@ -32,28 +32,40 @@
Style="{StaticResource MaterialDesignToolBar}"> Style="{StaticResource MaterialDesignToolBar}">
<Button x:Name="menuRuleAdd"> <Button x:Name="menuRuleAdd">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="Plus" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Plus" />
<TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuRuleAdd}" /> <TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuRuleAdd}" />
</StackPanel> </StackPanel>
</Button> </Button>
<Separator /> <Separator />
<Button x:Name="menuImportRulesFromFile"> <Button x:Name="menuImportRulesFromFile">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="Import" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Import" />
<TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuImportRulesFromFile}" /> <TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuImportRulesFromFile}" />
</StackPanel> </StackPanel>
</Button> </Button>
<Separator /> <Separator />
<Button x:Name="menuImportRulesFromClipboard"> <Button x:Name="menuImportRulesFromClipboard">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="Import" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Import" />
<TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuImportRulesFromClipboard}" /> <TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuImportRulesFromClipboard}" />
</StackPanel> </StackPanel>
</Button> </Button>
<Separator /> <Separator />
<Button x:Name="menuImportRulesFromUrl"> <Button x:Name="menuImportRulesFromUrl">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="Import" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Import" />
<TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuImportRulesFromUrl}" /> <TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuImportRulesFromUrl}" />
</StackPanel> </StackPanel>
</Button> </Button>

View File

@ -39,7 +39,10 @@
<MenuItem x:Name="menuRoutingBasic" Padding="8,0"> <MenuItem x:Name="menuRoutingBasic" Padding="8,0">
<MenuItem.Header> <MenuItem.Header>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="Server" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Server" />
<TextBlock Text="{x:Static resx:ResUI.menuRoutingBasic}" /> <TextBlock Text="{x:Static resx:ResUI.menuRoutingBasic}" />
</StackPanel> </StackPanel>
</MenuItem.Header> </MenuItem.Header>
@ -54,7 +57,10 @@
<MenuItem x:Name="menuRoutingAdvanced" Padding="8,0"> <MenuItem x:Name="menuRoutingAdvanced" Padding="8,0">
<MenuItem.Header> <MenuItem.Header>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="Routes" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Routes" />
<TextBlock Text="{x:Static resx:ResUI.menuRoutingAdvanced}" /> <TextBlock Text="{x:Static resx:ResUI.menuRoutingAdvanced}" />
</StackPanel> </StackPanel>
</MenuItem.Header> </MenuItem.Header>

View File

@ -33,28 +33,40 @@
Style="{StaticResource MaterialDesignToolBar}"> Style="{StaticResource MaterialDesignToolBar}">
<Button x:Name="menuSubAdd"> <Button x:Name="menuSubAdd">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="Plus" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Plus" />
<TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuSubAdd}" /> <TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuSubAdd}" />
</StackPanel> </StackPanel>
</Button> </Button>
<Separator /> <Separator />
<Button x:Name="menuSubDelete"> <Button x:Name="menuSubDelete">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="Delete" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Delete" />
<TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuSubDelete}" /> <TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuSubDelete}" />
</StackPanel> </StackPanel>
</Button> </Button>
<Separator /> <Separator />
<Button x:Name="menuSubEdit"> <Button x:Name="menuSubEdit">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="Edit" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Edit" />
<TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuSubEdit}" /> <TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuSubEdit}" />
</StackPanel> </StackPanel>
</Button> </Button>
<Separator /> <Separator />
<Button x:Name="menuSubShare"> <Button x:Name="menuSubShare">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="QrcodePlus" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="QrcodePlus" />
<TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuSubShare}" /> <TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuSubShare}" />
</StackPanel> </StackPanel>
</Button> </Button>
@ -63,7 +75,10 @@
Click="menuClose_Click" Click="menuClose_Click"
IsCancel="True"> IsCancel="True">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<materialDesign:PackIcon Margin="0,0,8,0" Kind="Close" /> <materialDesign:PackIcon
Margin="0,0,8,0"
VerticalAlignment="Center"
Kind="Close" />
<TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuClose}" /> <TextBlock Style="{StaticResource ToolbarTextBlock}" Text="{x:Static resx:ResUI.menuClose}" />
</StackPanel> </StackPanel>
</Button> </Button>

View File

@ -10,7 +10,7 @@
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<ApplicationIcon>v2rayN.ico</ApplicationIcon> <ApplicationIcon>v2rayN.ico</ApplicationIcon>
<Copyright>Copyright © 2017-2023 (GPLv3)</Copyright> <Copyright>Copyright © 2017-2023 (GPLv3)</Copyright>
<FileVersion>6.14</FileVersion> <FileVersion>6.15</FileVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>