private async void OnLoading(FrameworkElement sender, object args) { SshConnectViewModel vm = (SshConnectViewModel)DataContext; if (!vm.CommandInput && string.IsNullOrEmpty(vm.Username)) { vm.Username = await _trayProcessCommunicationService.GetUserName(); } SetupFocus(); }
public async Task <SshProfile> GetSshConnectionInfoAsync(SshProfile input = null) { ViewModel = new SshConnectViewModel(_settingsService, _applicationView, _trayProcessCommunicationService, _fileSystemService, input); if (string.IsNullOrEmpty(ViewModel.Username)) { ViewModel.Username = await _trayProcessCommunicationService.GetUserName(); } SetupFocus(); return(await ShowAsync() == ContentDialogResult.Primary ? (SshProfile)ViewModel.Model : null); }
public async Task <SshProfile> GetSshConnectionInfoAsync(SshProfile input = null) { var vm = new SshConnectViewModel(_settingsService, _applicationView, _trayProcessCommunicationService, _fileSystemService, input); DataContext = vm; if (await ShowAsync() != ContentDialogResult.Primary) { return(null); } return((SshProfile)vm.Model); }
private void SetupFocus() { SshConnectViewModel vm = (SshConnectViewModel)DataContext; if (string.IsNullOrEmpty(vm.Username)) { UserTextBox.Focus(FocusState.Programmatic); } else if (string.IsNullOrEmpty(vm.Host)) { HostTextBox.Focus(FocusState.Programmatic); } else { Focus(FocusState.Programmatic); } }
private async void SaveLink_OnClick(object sender, RoutedEventArgs e) { SshConnectViewModel vm = (SshConnectViewModel)DataContext; var link = await vm.GetUrlAsync(); if (!link.Item1) { await new MessageDialog(link.Item2, I18N.Translate("InvalidInput")).ShowAsync(); return; } var content = ProfileProviderViewModelBase.GetShortcutFileContent(link.Item2); FileSavePicker savePicker = new FileSavePicker { SuggestedStartLocation = PickerLocationId.Desktop }; if (!vm.CommandInput) { savePicker.SuggestedFileName = string.IsNullOrEmpty(vm.Username) ? $"{vm.Host}.url" : $"{vm.Username}@{vm.Host}.url"; } savePicker.FileTypeChoices.Add("Shortcut", new List <string> { ".url" }); StorageFile file = await savePicker.PickSaveFileAsync(); if (file == null) { return; } try { await _trayProcessCommunicationService.SaveTextFileAsync(file.Path, content); } catch (Exception ex) { await new MessageDialog(ex.Message, I18N.Translate("Error")).ShowAsync(); } }
public async Task <SshProfile> GetSshConnectionInfoAsync(SshProfile input = null) { var vm = new SshConnectViewModel(_settingsService, _applicationView, _trayProcessCommunicationService, _fileSystemService, _historyContainer, input); DataContext = vm; if (await ShowAsync() != ContentDialogResult.Primary) { return(null); } var profile = (SshProfile)vm.Model; if (vm.CommandInput) { vm.SaveCommand(profile.Location, profile.Arguments); } return(profile); }
protected override async void OnActivated(IActivatedEventArgs args) { if (args is ProtocolActivatedEventArgs protocolActivated) { MainViewModel mainViewModel = null; // IApplicationView to use for creating view models IApplicationView applicationView; if (_alreadyLaunched) { applicationView = (_mainViewModels.FirstOrDefault(o => o.ApplicationView.Id == _activeWindowId) ?? _mainViewModels.Last()).ApplicationView; } else { // App wasn't launched before double clicking a shortcut, so we have to create a window // in order to be able to communicate with user. mainViewModel = _container.Resolve <MainViewModel>(); await CreateMainView(typeof(MainPage), mainViewModel, true); applicationView = mainViewModel.ApplicationView; } bool isSsh; try { isSsh = SshConnectViewModel.CheckScheme(protocolActivated.Uri); } catch (Exception ex) { await new MessageDialog( $"{I18N.TranslateWithFallback("InvalidLink", "Invalid link.")} {ex.Message}", "Invalid Link") .ShowAsync(); mainViewModel?.ApplicationView.TryClose(); return; } if (isSsh) { SshConnectViewModel vm; try { vm = SshConnectViewModel.ParseUri(protocolActivated.Uri, _settingsService, applicationView, _trayProcessCommunicationService, _container.Resolve <IFileSystemService>(), _container.Resolve <ApplicationDataContainers>().HistoryContainer); } catch (Exception ex) { await new MessageDialog( $"{I18N.TranslateWithFallback("InvalidLink", "Invalid link.")} {ex.Message}", "Invalid Link") .ShowAsync(); mainViewModel?.ApplicationView.TryClose(); return; } if (_applicationSettings.AutoFallbackToWindowsUsernameInLinks && string.IsNullOrEmpty(vm.Username)) { vm.Username = await _trayProcessCommunicationService.GetUserName(); } var error = await vm.AcceptChangesAsync(true); SshProfile profile = (SshProfile)vm.Model; if (!string.IsNullOrEmpty(error)) { // Link is valid, but incomplete (i.e. username missing), so we need to show dialog. profile = await _dialogService.ShowSshConnectionInfoDialogAsync(profile); if (profile == null) { // User clicked "Cancel" in the dialog. mainViewModel?.ApplicationView.TryClose(); return; } } if (mainViewModel == null) { await CreateTerminal(profile, _applicationSettings.NewTerminalLocation, protocolActivated.ViewSwitcher); } else { await mainViewModel.AddTerminalAsync(profile); } return; } if (CommandProfileProviderViewModel.CheckScheme(protocolActivated.Uri)) { CommandProfileProviderViewModel vm; try { vm = CommandProfileProviderViewModel.ParseUri(protocolActivated.Uri, _settingsService, applicationView, _trayProcessCommunicationService, _container.Resolve <ApplicationDataContainers>().HistoryContainer); } catch (Exception ex) { await new MessageDialog( $"{I18N.TranslateWithFallback("InvalidLink", "Invalid link.")} {ex.Message}", "Invalid Link") .ShowAsync(); mainViewModel?.ApplicationView.TryClose(); return; } var error = await vm.AcceptChangesAsync(true); var profile = vm.Model; if (!string.IsNullOrEmpty(error)) { // Link is valid, but incomplete, so we need to show dialog. profile = await _dialogService.ShowCustomCommandDialogAsync(profile); if (profile == null) { // User clicked "Cancel" in the dialog. mainViewModel?.ApplicationView.TryClose(); return; } } if (mainViewModel == null) { await CreateTerminal(profile, _applicationSettings.NewTerminalLocation, protocolActivated.ViewSwitcher); } else { await mainViewModel.AddTerminalAsync(profile); } return; } await new MessageDialog( $"{I18N.TranslateWithFallback("InvalidLink", "Invalid link.")} {protocolActivated.Uri}", "Invalid Link") .ShowAsync(); mainViewModel?.ApplicationView.TryClose(); return; } if (args is CommandLineActivatedEventArgs commandLineActivated) { if (string.IsNullOrWhiteSpace(commandLineActivated.Operation.Arguments)) { return; } _commandLineParser.ParseArguments(SplitArguments(commandLineActivated.Operation.Arguments), typeof(NewVerb), typeof(RunVerb), typeof(SettingsVerb)).WithParsed(async verb => { if (verb is SettingsVerb settingsVerb) { if (!settingsVerb.Import && !settingsVerb.Export) { await ShowSettings().ConfigureAwait(true); } else if (settingsVerb.Export) { var exportFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("config.json", CreationCollisionOption.OpenIfExists); var settings = _settingsService.ExportSettings(); await FileIO.WriteTextAsync(exportFile, settings); await new MessageDialog($"{I18N.Translate("SettingsExported")} {exportFile.Path}").ShowAsync(); } else if (settingsVerb.Import) { var file = await ApplicationData.Current.LocalFolder.GetFileAsync("config.json"); var content = await FileIO.ReadTextAsync(file); _settingsService.ImportSettings(content); await new MessageDialog($"{I18N.Translate("SettingsImported")} {file.Path}").ShowAsync(); } } else if (verb is NewVerb newVerb) { var profile = default(ShellProfile); if (!string.IsNullOrWhiteSpace(newVerb.Profile)) { profile = _settingsService.GetShellProfiles().FirstOrDefault(x => x.Name.Equals(newVerb.Profile, StringComparison.CurrentCultureIgnoreCase)); } if (profile == null) { profile = _settingsService.GetDefaultShellProfile(); } if (!string.IsNullOrWhiteSpace(newVerb.Directory)) { profile.WorkingDirectory = newVerb.Directory; } var location = newVerb.Target == Target.Default ? _applicationSettings.NewTerminalLocation : newVerb.Target == Target.Tab ? NewTerminalLocation.Tab : NewTerminalLocation.Window; await CreateTerminal(profile, location).ConfigureAwait(true); } else if (verb is RunVerb runVerb) { var profile = new ShellProfile { Id = Guid.Empty, Location = null, Arguments = runVerb.Command, WorkingDirectory = runVerb.Directory }; if (!string.IsNullOrWhiteSpace(runVerb.Theme)) { var theme = _settingsService.GetThemes().FirstOrDefault(x => x.Name.Equals(runVerb.Theme, StringComparison.CurrentCultureIgnoreCase)); if (theme != null) { profile.TerminalThemeId = theme.Id; } } if (string.IsNullOrWhiteSpace(profile.WorkingDirectory)) { profile.WorkingDirectory = commandLineActivated.Operation.CurrentDirectoryPath; } var location = runVerb.Target == Target.Default ? _applicationSettings.NewTerminalLocation : runVerb.Target == Target.Tab ? NewTerminalLocation.Tab : NewTerminalLocation.Window; await CreateTerminal(profile, location).ConfigureAwait(true); } }); } }
protected override async void OnActivated(IActivatedEventArgs args) { if (args is ProtocolActivatedEventArgs protocolActivated) { if (protocolActivated.Uri == new Uri("ftcmd://fluent.terminal?focus")) { await ShowOrCreateWindowAsync(protocolActivated.ViewSwitcher); return; } MainViewModel mainViewModel = null; // IApplicationView to use for creating view models IApplicationView applicationView; if (_alreadyLaunched) { applicationView = (_mainViewModels.FirstOrDefault(o => o.ApplicationView.Id == _activeWindowId) ?? _mainViewModels.Last()).ApplicationView; } else { // App wasn't launched before double clicking a shortcut, so we have to create a window // in order to be able to communicate with user. mainViewModel = _container.Resolve <MainViewModel>(); await CreateMainViewAsync(typeof(MainPage), mainViewModel, true); applicationView = mainViewModel.ApplicationView; } bool isSsh; try { isSsh = SshConnectViewModel.CheckScheme(protocolActivated.Uri); } catch (Exception ex) { await new MessageDialog( $"{I18N.TranslateWithFallback("InvalidLink", "Invalid link.")} {ex.Message}", "Invalid Link") .ShowAsync(); mainViewModel?.ApplicationView.TryCloseAsync(); return; } if (isSsh) { SshConnectViewModel vm; try { vm = SshConnectViewModel.ParseUri(protocolActivated.Uri, _settingsService, applicationView, _trayProcessCommunicationService, _container.Resolve <IFileSystemService>(), _container.Resolve <ApplicationDataContainers>().HistoryContainer); } catch (Exception ex) { await new MessageDialog( $"{I18N.TranslateWithFallback("InvalidLink", "Invalid link.")} {ex.Message}", "Invalid Link") .ShowAsync(); mainViewModel?.ApplicationView.TryCloseAsync(); return; } if (_applicationSettings.AutoFallbackToWindowsUsernameInLinks && string.IsNullOrEmpty(vm.Username)) { vm.Username = await _trayProcessCommunicationService.GetUserNameAsync(); } var error = await vm.AcceptChangesAsync(true); var profile = (SshProfile)vm.Model; if (!string.IsNullOrEmpty(error)) { // Link is valid, but incomplete (i.e. username missing), so we need to show dialog. profile = await _dialogService.ShowSshConnectionInfoDialogAsync(profile); if (profile == null) { // User clicked "Cancel" in the dialog. mainViewModel?.ApplicationView.TryCloseAsync(); return; } } if (mainViewModel == null) { await CreateTerminalAsync(profile, _applicationSettings.NewTerminalLocation, protocolActivated.ViewSwitcher); } else { await mainViewModel.AddTabAsync(profile); } return; } if (CommandProfileProviderViewModel.CheckScheme(protocolActivated.Uri)) { CommandProfileProviderViewModel vm; try { vm = CommandProfileProviderViewModel.ParseUri(protocolActivated.Uri, _settingsService, applicationView, _trayProcessCommunicationService, _container.Resolve <ICommandHistoryService>()); } catch (Exception ex) { await new MessageDialog( $"{I18N.TranslateWithFallback("InvalidLink", "Invalid link.")} {ex.Message}", "Invalid Link") .ShowAsync(); mainViewModel?.ApplicationView.TryCloseAsync(); return; } var error = await vm.AcceptChangesAsync(true); var profile = vm.Model; if (!string.IsNullOrEmpty(error)) { // Link is valid, but incomplete, so we need to show dialog. profile = await _dialogService.ShowCustomCommandDialogAsync(profile); if (profile == null) { // User clicked "Cancel" in the dialog. mainViewModel?.ApplicationView.TryCloseAsync(); return; } } if (mainViewModel == null) { await CreateTerminalAsync(profile, _applicationSettings.NewTerminalLocation, protocolActivated.ViewSwitcher); } else { await mainViewModel.AddTabAsync(profile); } return; } await new MessageDialog( $"{I18N.TranslateWithFallback("InvalidLink", "Invalid link.")} {protocolActivated.Uri}", "Invalid Link") .ShowAsync(); // ReSharper disable once AssignmentIsFullyDiscarded _ = mainViewModel?.ApplicationView.TryCloseAsync(); return; } if (args is CommandLineActivatedEventArgs commandLineActivated) { var arguments = commandLineActivated.Operation.Arguments; if (string.IsNullOrWhiteSpace(arguments)) { arguments = "new"; } _commandLineParser .ParseArguments(SplitArguments(arguments), typeof(NewVerb), typeof(RunVerb), typeof(SettingsVerb)) .WithParsed(async verb => await CliRunAsync(verb, commandLineActivated)); } }