Skip to content

Commit 916efd5

Browse files
committed
Delaying id search after packages are loaded from feed.
1 parent 9062483 commit 916efd5

File tree

5 files changed

+82
-10
lines changed

5 files changed

+82
-10
lines changed

src/PackageManager.NuGet/Services/EmptyNuGetSearchTermTransformer.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ namespace PackageManager.Services
99
{
1010
public class EmptyNuGetSearchTermTransformer : INuGetSearchTermTransformer
1111
{
12-
public string Transform(string searchTerm) => searchTerm;
12+
public void Transform(NuGetSearchTerm searchTerm)
13+
{
14+
}
1315

1416
#region Singleton
1517

src/PackageManager.NuGet/Services/INuGetSearchTermTransformer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ namespace PackageManager.Services
99
{
1010
public interface INuGetSearchTermTransformer
1111
{
12-
string Transform(string searchTerm);
12+
void Transform(NuGetSearchTerm searchTerm);
1313
}
1414
}

src/PackageManager.NuGet/Services/NuGetSearchService.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,19 @@ private Task<IEnumerable<IPackageSearchMetadata>> SearchAsync(PackageSearchResou
6565

6666
public async Task<IEnumerable<IPackage>> SearchAsync(IEnumerable<IPackageSource> packageSources, string searchText, SearchOptions options = default, CancellationToken cancellationToken = default)
6767
{
68-
searchText = queryTransformer.Transform($"id:{searchText}");
68+
NuGetSearchTerm term = new NuGetSearchTerm();
69+
term.Id.Add(searchText);
6970

70-
log.Debug($"Searching '{searchText}'.");
71+
queryTransformer.Transform(term);
72+
term.Id.Remove(searchText);
73+
74+
bool isLateIdSearch = false;
75+
if (term.IsEmpty())
76+
term.Id.Add(searchText);
77+
else
78+
isLateIdSearch = true;
79+
80+
log.Debug($"Searching - user text:'{searchText}'; target query:'{term}'.");
7181

7282
options = EnsureOptions(options);
7383

@@ -94,14 +104,17 @@ public async Task<IEnumerable<IPackage>> SearchAsync(IEnumerable<IPackageSource>
94104
}
95105

96106
int sourceSearchPackageCount = 0;
97-
foreach (IPackageSearchMetadata package in await SearchAsync(search, searchText, options, cancellationToken))
107+
foreach (IPackageSearchMetadata package in await SearchAsync(search, term.ToString(), options, cancellationToken))
98108
{
99109
log.Debug($"Found '{package.Identity}'.");
100110

101111
hasItems = true;
102112
if (result.Count >= options.PageSize)
103113
break;
104114

115+
if (isLateIdSearch && package.Identity.Id.IndexOf(searchText, StringComparison.InvariantCultureIgnoreCase) == -1)
116+
continue;
117+
105118
await AddPackageAsync(result, repository, package, options.IsPrereleaseIncluded, cancellationToken);
106119
sourceSearchPackageCount++;
107120
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
namespace PackageManager.Services
9+
{
10+
public class NuGetSearchTerm
11+
{
12+
public List<string> Id { get; } = new List<string>();
13+
public List<string> Version { get; } = new List<string>();
14+
public List<string> Title { get; } = new List<string>();
15+
public List<string> Tags { get; } = new List<string>();
16+
public List<string> Description { get; } = new List<string>();
17+
public List<string> Summary { get; } = new List<string>();
18+
public List<string> Owner { get; } = new List<string>();
19+
20+
public override string ToString()
21+
{
22+
StringBuilder result = new StringBuilder();
23+
Append(result, "id", Id);
24+
Append(result, "version", Version);
25+
Append(result, "title", Title);
26+
Append(result, "tags", Tags);
27+
Append(result, "description", Description);
28+
Append(result, "summary", Summary);
29+
Append(result, "owner", Owner);
30+
return result.ToString();
31+
}
32+
33+
private void Append(StringBuilder result, string key, List<string> values)
34+
{
35+
foreach (var value in values)
36+
result.Append(" ").Append(key).Append(":").Append(value);
37+
}
38+
39+
public bool IsEmpty()
40+
=> IsEmpty(Id)
41+
&& IsEmpty(Version)
42+
&& IsEmpty(Title)
43+
&& IsEmpty(Tags)
44+
&& IsEmpty(Description)
45+
&& IsEmpty(Summary)
46+
&& IsEmpty(Owner);
47+
48+
private bool IsEmpty(List<string> values)
49+
{
50+
if (values.Count == 0)
51+
return false;
52+
53+
if (values.Any(s => !String.IsNullOrEmpty(s)))
54+
return true;
55+
56+
return false;
57+
}
58+
}
59+
}

src/PackageManager.UI/Services/TagsNuGetSearchTermTransformer.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,10 @@ public TagsNuGetSearchTermTransformer(string tags)
1818
this.tags = tags;
1919
}
2020

21-
public string Transform(string searchTerm)
21+
public void Transform(NuGetSearchTerm searchTerm)
2222
{
23-
if (String.IsNullOrEmpty(tags))
24-
return searchTerm;
25-
26-
return $"{searchTerm} tags:{tags}";
23+
if (!String.IsNullOrEmpty(tags))
24+
searchTerm.Tags.Add(tags);
2725
}
2826
}
2927
}

0 commit comments

Comments
 (0)