public List <Result> Query(Query query) { var results = new List <Result>(); if (query != null) { // Search opened workspaces _workspacesApi.Workspaces.ForEach(a => { var title = $"{a.FolderName}"; var typeWorkspace = a.WorkspaceTypeToString(); if (a.TypeWorkspace == TypeWorkspace.Codespaces) { title += $" - {typeWorkspace}"; } else if (a.TypeWorkspace != TypeWorkspace.Local) { title += $" - {(a.ExtraInfo != null ? $"{a.ExtraInfo} ({typeWorkspace})" : typeWorkspace)}"; } results.Add(new Result { Title = title, SubTitle = $"{Resources.Workspace}{(a.TypeWorkspace != TypeWorkspace.Local ? $" {Resources.In} {typeWorkspace}" : "")}: {SystemPath.RealPath(a.RelativePath)}", Icon = a.VSCodeInstance.WorkspaceIcon, Action = c => { bool hide; try { var process = new ProcessStartInfo { FileName = a.VSCodeInstance.ExecutablePath, UseShellExecute = true, Arguments = $"--folder-uri {a.Path}", WindowStyle = ProcessWindowStyle.Hidden }; Process.Start(process); hide = true; } catch (Win32Exception) { var name = $"Plugin: {_context.CurrentPluginMetadata.Name}"; var msg = "Can't Open this file"; _context.API.ShowMsg(name, msg, string.Empty); hide = false; } return(hide); }, ContextData = a, }); }); // Search opened remote machines _machinesApi.Machines.ForEach(a => { var title = $"{a.Host}"; if (a.User != null && a.User != String.Empty && a.HostName != null && a.HostName != String.Empty) { title += $" [{a.User}@{a.HostName}]"; } results.Add(new Result { Title = title, SubTitle = Resources.SSHRemoteMachine, Icon = a.VSCodeInstance.RemoteIcon, Action = c => { bool hide; try { var process = new ProcessStartInfo() { FileName = a.VSCodeInstance.ExecutablePath, UseShellExecute = true, Arguments = $"--new-window --enable-proposed-api ms-vscode-remote.remote-ssh --remote ssh-remote+{((char)34) + a.Host + ((char)34)}", WindowStyle = ProcessWindowStyle.Hidden, }; Process.Start(process); hide = true; } catch (Win32Exception) { var name = $"Plugin: {_context.CurrentPluginMetadata.Name}"; var msg = "Can't Open this file"; _context.API.ShowMsg(name, msg, string.Empty); hide = false; } return(hide); }, ContextData = a, }); }); } results.ForEach(x => { if (x.Score == 0) { x.Score = 100; } //if is a remote machine give it 12 extra points if (x.ContextData is VSCodeRemoteMachine) { x.Score = x.Score + (query.Search.Count() * 5); } //intersect the title with the query var intersection = x.Title.ToLower().Intersect(query.Search.ToLower()).Count(); x.Score = x.Score - (Convert.ToInt32(((x.Title.Count() - intersection) * 2.5))); }); results = results.OrderBy(x => x.Title).ToList(); if (query.ActionKeyword == String.Empty || (query.ActionKeyword != String.Empty && query.Search != String.Empty)) { results = results.Where(a => a.Title.ToLower().Contains(query.Search.ToLower())).ToList(); } return(results); }
public List <Result> Query(Query query) { var results = new List <Result>(); if (query != null) { // Search opened workspaces _workspacesApi.Workspaces.ForEach(a => { var title = a.WorkspaceType == WorkspaceType.ProjectFolder ? a.FolderName : a.FolderName.Replace(".code-workspace", $" ({Resources.Workspace})"); var typeWorkspace = a.WorkspaceEnvironmentToString(); if (a.WorkspaceEnvironment != WorkspaceEnvironment.Local) { title = $"{title}{(a.ExtraInfo != null ? $" - {a.ExtraInfo}" : string.Empty)} ({typeWorkspace})"; } var tooltip = new ToolTipData(title, $"{(a.WorkspaceType == WorkspaceType.WorkspaceFile ? Resources.Workspace : Resources.ProjectFolder)}{(a.WorkspaceEnvironment != WorkspaceEnvironment.Local ? $" {Resources.In} {typeWorkspace}" : string.Empty)}: {SystemPath.RealPath(a.RelativePath)}"); results.Add(new Result { Title = title, SubTitle = $"{(a.WorkspaceType == WorkspaceType.WorkspaceFile ? Resources.Workspace : Resources.ProjectFolder)}{(a.WorkspaceEnvironment != WorkspaceEnvironment.Local ? $" {Resources.In} {typeWorkspace}" : string.Empty)}: {SystemPath.RealPath(a.RelativePath)}", Icon = a.VSCodeInstance.WorkspaceIcon, ToolTipData = tooltip, Action = c => { bool hide; try { var process = new ProcessStartInfo { FileName = a.VSCodeInstance.ExecutablePath, UseShellExecute = true, Arguments = a.WorkspaceType == WorkspaceType.ProjectFolder ? $"--folder-uri {a.Path}" : $"--file-uri {a.Path}", WindowStyle = ProcessWindowStyle.Hidden, }; Process.Start(process); hide = true; } catch (Win32Exception) { var name = $"Plugin: {_context.CurrentPluginMetadata.Name}"; var msg = "Can't Open this file"; _context.API.ShowMsg(name, msg, string.Empty); hide = false; } return(hide); }, ContextData = a, }); }); // Search opened remote machines _machinesApi.Machines.ForEach(a => { var title = $"{a.Host}"; if (a.User != null && a.User != string.Empty && a.HostName != null && a.HostName != string.Empty) { title += $" [{a.User}@{a.HostName}]"; } var tooltip = new ToolTipData(title, Resources.SSHRemoteMachine); results.Add(new Result { Title = title, SubTitle = Resources.SSHRemoteMachine, Icon = a.VSCodeInstance.RemoteIcon, ToolTipData = tooltip, Action = c => { bool hide; try { var process = new ProcessStartInfo() { FileName = a.VSCodeInstance.ExecutablePath, UseShellExecute = true, Arguments = $"--new-window --enable-proposed-api ms-vscode-remote.remote-ssh --remote ssh-remote+{((char)34) + a.Host + ((char)34)}", WindowStyle = ProcessWindowStyle.Hidden, }; Process.Start(process); hide = true; } catch (Win32Exception) { var name = $"Plugin: {_context.CurrentPluginMetadata.Name}"; var msg = "Can't Open this file"; _context.API.ShowMsg(name, msg, string.Empty); hide = false; } return(hide); }, ContextData = a, }); }); } results = results.Where(a => a.Title.ToLowerInvariant().Contains(query.Search.ToLowerInvariant())).ToList(); results.ForEach(x => { if (x.Score == 0) { x.Score = 100; } // intersect the title with the query var intersection = Convert.ToInt32(x.Title.ToLowerInvariant().Intersect(query.Search.ToLowerInvariant()).Count() * query.Search.Length); var differenceWithQuery = Convert.ToInt32((x.Title.Length - intersection) * query.Search.Length * 0.7); x.Score = x.Score - differenceWithQuery + intersection; // if is a remote machine give it 12 extra points if (x.ContextData is VSCodeRemoteMachine) { x.Score = Convert.ToInt32(x.Score + (intersection * 2)); } }); results = results.OrderByDescending(x => x.Score).ToList(); if (query.Search == string.Empty || query.Search.Replace(" ", string.Empty) == string.Empty) { results = results.OrderBy(x => x.Title).ToList(); } return(results); }