mirror of https://github.com/2dust/v2rayN
Added Copy Terminal proxy command to clipboard in tray menu
https://github.com/2dust/v2rayN/issues/6482pull/6487/head
parent
cb94d64395
commit
649e89e7af
|
@ -843,6 +843,15 @@ namespace ServiceLib.Resx {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查找类似 Copy proxy command to clipboard 的本地化字符串。
|
||||||
|
/// </summary>
|
||||||
|
public static string menuCopyProxyCmdToClipboard {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("menuCopyProxyCmdToClipboard", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 查找类似 Clone selected server 的本地化字符串。
|
/// 查找类似 Clone selected server 的本地化字符串。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -1390,4 +1390,7 @@
|
||||||
<data name="TbSettingsTheme" xml:space="preserve">
|
<data name="TbSettingsTheme" xml:space="preserve">
|
||||||
<value>تم</value>
|
<value>تم</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="menuCopyProxyCmdToClipboard" xml:space="preserve">
|
||||||
|
<value>Copy proxy command to clipboard</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -1390,4 +1390,7 @@
|
||||||
<data name="TbSettingsTheme" xml:space="preserve">
|
<data name="TbSettingsTheme" xml:space="preserve">
|
||||||
<value>Theme</value>
|
<value>Theme</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="menuCopyProxyCmdToClipboard" xml:space="preserve">
|
||||||
|
<value>Copy proxy command to clipboard</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -1390,4 +1390,7 @@
|
||||||
<data name="TbSettingsTheme" xml:space="preserve">
|
<data name="TbSettingsTheme" xml:space="preserve">
|
||||||
<value>Theme</value>
|
<value>Theme</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="menuCopyProxyCmdToClipboard" xml:space="preserve">
|
||||||
|
<value>Copy proxy command to clipboard</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -1390,4 +1390,7 @@
|
||||||
<data name="TbSettingsTheme" xml:space="preserve">
|
<data name="TbSettingsTheme" xml:space="preserve">
|
||||||
<value>Theme</value>
|
<value>Theme</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="menuCopyProxyCmdToClipboard" xml:space="preserve">
|
||||||
|
<value>Copy proxy command to clipboard</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -1387,4 +1387,7 @@
|
||||||
<data name="TbSettingsTheme" xml:space="preserve">
|
<data name="TbSettingsTheme" xml:space="preserve">
|
||||||
<value>主题</value>
|
<value>主题</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="menuCopyProxyCmdToClipboard" xml:space="preserve">
|
||||||
|
<value>复制终端代理命令至剪贴板</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -1388,4 +1388,7 @@
|
||||||
<data name="TbSettingsTheme" xml:space="preserve">
|
<data name="TbSettingsTheme" xml:space="preserve">
|
||||||
<value>主題</value>
|
<value>主題</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="menuCopyProxyCmdToClipboard" xml:space="preserve">
|
||||||
|
<value>複製終端代理指令至剪貼簿</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -32,6 +32,7 @@ namespace ServiceLib.ViewModels
|
||||||
public ReactiveCommand<Unit, Unit> AddServerViaScanCmd { get; }
|
public ReactiveCommand<Unit, Unit> AddServerViaScanCmd { get; }
|
||||||
public ReactiveCommand<Unit, Unit> SubUpdateCmd { get; }
|
public ReactiveCommand<Unit, Unit> SubUpdateCmd { get; }
|
||||||
public ReactiveCommand<Unit, Unit> SubUpdateViaProxyCmd { get; }
|
public ReactiveCommand<Unit, Unit> SubUpdateViaProxyCmd { get; }
|
||||||
|
public ReactiveCommand<Unit, Unit> CopyProxyCmdToClipboardCmd { get; }
|
||||||
public ReactiveCommand<Unit, Unit> NotifyLeftClickCmd { get; }
|
public ReactiveCommand<Unit, Unit> NotifyLeftClickCmd { get; }
|
||||||
|
|
||||||
#region System Proxy
|
#region System Proxy
|
||||||
|
@ -128,6 +129,11 @@ namespace ServiceLib.ViewModels
|
||||||
y => y == true)
|
y => y == true)
|
||||||
.Subscribe(async c => await DoEnableTun(c));
|
.Subscribe(async c => await DoEnableTun(c));
|
||||||
|
|
||||||
|
CopyProxyCmdToClipboardCmd = ReactiveCommand.CreateFromTask(async () =>
|
||||||
|
{
|
||||||
|
await CopyProxyCmdToClipboard();
|
||||||
|
});
|
||||||
|
|
||||||
NotifyLeftClickCmd = ReactiveCommand.CreateFromTask(async () =>
|
NotifyLeftClickCmd = ReactiveCommand.CreateFromTask(async () =>
|
||||||
{
|
{
|
||||||
Locator.Current.GetService<MainWindowViewModel>()?.ShowHideWindow(null);
|
Locator.Current.GetService<MainWindowViewModel>()?.ShowHideWindow(null);
|
||||||
|
@ -198,6 +204,23 @@ namespace ServiceLib.ViewModels
|
||||||
await _updateView?.Invoke(EViewAction.DispatcherRefreshServersBiz, null);
|
await _updateView?.Invoke(EViewAction.DispatcherRefreshServersBiz, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task CopyProxyCmdToClipboard()
|
||||||
|
{
|
||||||
|
var cmd = Utils.IsWindows() ? "set" : "export";
|
||||||
|
var address = $"{Global.Loopback}:{AppHandler.Instance.GetLocalPort(EInboundProtocol.socks)}";
|
||||||
|
|
||||||
|
var sb = new StringBuilder();
|
||||||
|
sb.AppendLine($"{cmd} http_proxy=http://{address}");
|
||||||
|
sb.AppendLine($"{cmd} https_proxy=http://{address}");
|
||||||
|
sb.AppendLine($"{cmd} all_proxy=socks5://{address}");
|
||||||
|
sb.AppendLine("");
|
||||||
|
sb.AppendLine($"{cmd} HTTP_PROXY=http://{address}");
|
||||||
|
sb.AppendLine($"{cmd} HTTPS_PROXY=http://{address}");
|
||||||
|
sb.AppendLine($"{cmd} ALL_PROXY=socks5://{address}");
|
||||||
|
|
||||||
|
await _updateView?.Invoke(EViewAction.SetClipboardData, sb.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
private async Task AddServerViaClipboard()
|
private async Task AddServerViaClipboard()
|
||||||
{
|
{
|
||||||
var service = Locator.Current.GetService<MainWindowViewModel>();
|
var service = Locator.Current.GetService<MainWindowViewModel>();
|
||||||
|
|
|
@ -50,6 +50,8 @@
|
||||||
<NativeMenuItem Command="{Binding SubUpdateCmd}" Header="{x:Static resx:ResUI.menuSubUpdate}" />
|
<NativeMenuItem Command="{Binding SubUpdateCmd}" Header="{x:Static resx:ResUI.menuSubUpdate}" />
|
||||||
<NativeMenuItem Command="{Binding SubUpdateViaProxyCmd}" Header="{x:Static resx:ResUI.menuSubUpdateViaProxy}" />
|
<NativeMenuItem Command="{Binding SubUpdateViaProxyCmd}" Header="{x:Static resx:ResUI.menuSubUpdateViaProxy}" />
|
||||||
<NativeMenuItemSeparator />
|
<NativeMenuItemSeparator />
|
||||||
|
<NativeMenuItem Command="{Binding CopyProxyCmdToClipboardCmd}" Header="{x:Static resx:ResUI.menuCopyProxyCmdToClipboard}" />
|
||||||
|
<NativeMenuItemSeparator />
|
||||||
<NativeMenuItem Command="{Binding NotifyLeftClickCmd}" Header="{x:Static resx:ResUI.menuShowOrHideMainWindow}" />
|
<NativeMenuItem Command="{Binding NotifyLeftClickCmd}" Header="{x:Static resx:ResUI.menuShowOrHideMainWindow}" />
|
||||||
<NativeMenuItem Click="MenuExit_Click" Header="{x:Static resx:ResUI.menuExit}" />
|
<NativeMenuItem Click="MenuExit_Click" Header="{x:Static resx:ResUI.menuExit}" />
|
||||||
</NativeMenu>
|
</NativeMenu>
|
||||||
|
|
|
@ -69,6 +69,11 @@ namespace v2rayN.Desktop.Views
|
||||||
},
|
},
|
||||||
DispatcherPriority.Default);
|
DispatcherPriority.Default);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case EViewAction.SetClipboardData:
|
||||||
|
if (obj is null) return false;
|
||||||
|
await AvaUtils.SetClipboardData(this, (string)obj);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return await Task.FromResult(true);
|
return await Task.FromResult(true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -193,6 +193,11 @@
|
||||||
Height="{StaticResource MenuItemHeight}"
|
Height="{StaticResource MenuItemHeight}"
|
||||||
Header="{x:Static resx:ResUI.menuSubUpdateViaProxy}" />
|
Header="{x:Static resx:ResUI.menuSubUpdateViaProxy}" />
|
||||||
<Separator />
|
<Separator />
|
||||||
|
<MenuItem
|
||||||
|
x:Name="menuCopyProxyCmdToClipboard"
|
||||||
|
Height="{StaticResource MenuItemHeight}"
|
||||||
|
Header="{x:Static resx:ResUI.menuCopyProxyCmdToClipboard}" />
|
||||||
|
<Separator />
|
||||||
<MenuItem
|
<MenuItem
|
||||||
x:Name="menuExit"
|
x:Name="menuExit"
|
||||||
Height="{StaticResource MenuItemHeight}"
|
Height="{StaticResource MenuItemHeight}"
|
||||||
|
|
|
@ -51,6 +51,8 @@ namespace v2rayN.Views
|
||||||
this.BindCommand(ViewModel, vm => vm.SubUpdateCmd, v => v.menuSubUpdate2).DisposeWith(disposables);
|
this.BindCommand(ViewModel, vm => vm.SubUpdateCmd, v => v.menuSubUpdate2).DisposeWith(disposables);
|
||||||
this.BindCommand(ViewModel, vm => vm.SubUpdateViaProxyCmd, v => v.menuSubUpdateViaProxy2).DisposeWith(disposables);
|
this.BindCommand(ViewModel, vm => vm.SubUpdateViaProxyCmd, v => v.menuSubUpdateViaProxy2).DisposeWith(disposables);
|
||||||
|
|
||||||
|
this.BindCommand(ViewModel, vm => vm.CopyProxyCmdToClipboardCmd, v => v.menuCopyProxyCmdToClipboard).DisposeWith(disposables);
|
||||||
|
|
||||||
this.OneWayBind(ViewModel, vm => vm.RunningServerToolTipText, v => v.tbNotify.ToolTipText).DisposeWith(disposables);
|
this.OneWayBind(ViewModel, vm => vm.RunningServerToolTipText, v => v.tbNotify.ToolTipText).DisposeWith(disposables);
|
||||||
this.OneWayBind(ViewModel, vm => vm.NotifyLeftClickCmd, v => v.tbNotify.LeftClickCommand).DisposeWith(disposables);
|
this.OneWayBind(ViewModel, vm => vm.NotifyLeftClickCmd, v => v.tbNotify.LeftClickCommand).DisposeWith(disposables);
|
||||||
|
|
||||||
|
@ -96,6 +98,10 @@ namespace v2rayN.Views
|
||||||
Application.Current.MainWindow.Icon = WindowsHandler.Instance.GetAppIcon(_config);
|
Application.Current.MainWindow.Icon = WindowsHandler.Instance.GetAppIcon(_config);
|
||||||
}), DispatcherPriority.Normal);
|
}), DispatcherPriority.Normal);
|
||||||
break;
|
break;
|
||||||
|
case EViewAction.SetClipboardData:
|
||||||
|
if (obj is null) return false;
|
||||||
|
WindowsUtils.SetClipboardData((string)obj);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return await Task.FromResult(true);
|
return await Task.FromResult(true);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue