protected override async void OnActivated(IActivatedEventArgs args) { if (args is ProtocolActivatedEventArgs protocolActivated) { // TODO: Check what happens if ssh link is invalid? if (_sshHelperService.IsSsh(protocolActivated.Uri)) { ShellProfile profile = await _sshHelperService.GetSshShellProfileAsync(protocolActivated.Uri); if (profile != null) { await CreateTerminal(profile, _applicationSettings.NewTerminalLocation); } } 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); } else if (settingsVerb.Import) { var file = await ApplicationData.Current.LocalFolder.GetFileAsync("config.json"); var content = await FileIO.ReadTextAsync(file); _settingsService.ImportSettings(content); } } 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) { MainViewModel mainViewModel = null; if (!_alreadyLaunched) { // 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); } bool isSsh; try { isSsh = _sshHelperService.IsSsh(protocolActivated.Uri); } catch (Exception ex) { await new MessageDialog($"Invalid link: {ex.Message}", "Invalid Link").ShowAsync(); mainViewModel?.ApplicationView.TryClose(); return; } if (isSsh) { ISshConnectionInfo connectionInfo; try { connectionInfo = _sshHelperService.ParseSsh(protocolActivated.Uri); } catch (Exception ex) { await new MessageDialog($"Invalid link: {ex.Message}", "Invalid Link").ShowAsync(); mainViewModel?.ApplicationView.TryClose(); return; } var result = connectionInfo.Validate(); if (result != SshConnectionInfoValidationResult.Valid) { // Link is valid, but incomplete (i.e. username missing), so we need to show dialog. connectionInfo = await _dialogService.ShowSshConnectionInfoDialogAsync(connectionInfo); if (connectionInfo == null) { // User clicked "Cancel" in the dialog. mainViewModel?.ApplicationView.TryClose(); return; } } var profile = _sshHelperService.CreateShellProfile(connectionInfo); if (mainViewModel == null) { await CreateTerminal(profile, _applicationSettings.NewTerminalLocation); } else { mainViewModel.AddTerminal(profile); } return; } await new MessageDialog($"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); } else if (settingsVerb.Import) { var file = await ApplicationData.Current.LocalFolder.GetFileAsync("config.json"); var content = await FileIO.ReadTextAsync(file); _settingsService.ImportSettings(content); } } 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); } }); } }