diff --git a/src/Microsoft.SqlTools.ServiceLayer/FileBrowser/Contracts/FileBrowserOpenRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/FileBrowser/Contracts/FileBrowserOpenRequest.cs
index b0a21c25..726929e1 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/FileBrowser/Contracts/FileBrowserOpenRequest.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/FileBrowser/Contracts/FileBrowserOpenRequest.cs
@@ -25,7 +25,7 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser.Contracts
public string ExpandPath;
///
- /// File extension filter (e.g. *.bak)
+ /// File extension filter (e.g. *.bak). Ignored if is set to true.
///
public string[] FileFilters;
@@ -33,6 +33,11 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser.Contracts
/// True if this is a request to change file filter
///
public bool ChangeFilter;
+
+ ///
+ /// Whether to only show folders in the file browser.
+ ///
+ public bool? ShowFoldersOnly;
}
///
diff --git a/src/Microsoft.SqlTools.ServiceLayer/FileBrowser/FileBrowserOperation.cs b/src/Microsoft.SqlTools.ServiceLayer/FileBrowser/FileBrowserOperation.cs
index 73b37073..1c594ac7 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/FileBrowser/FileBrowserOperation.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/FileBrowser/FileBrowserOperation.cs
@@ -26,19 +26,23 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser
private bool fileTreeCreated;
private CancellationTokenSource cancelSource;
private CancellationToken cancelToken;
+ private bool showFoldersOnly;
#region Constructors
///
/// Initializes a new instance of the class.
///
- /// The connection object
- /// The file extension filters
- public FileBrowserOperation(ServerConnection connection, string expandPath, string[] fileFilters = null)
+ /// The connection object.
+ /// The initial folder to open in the file dialog.
+ /// The file extension filters. Ignored if is set to true.
+ /// Whether to only show folders in the file browser.
+ public FileBrowserOperation(ServerConnection connection, string expandPath, string[] fileFilters = null, bool? showFoldersOnly = null)
{
this.cancelSource = new CancellationTokenSource();
this.cancelToken = cancelSource.Token;
this.connection = connection;
+ this.showFoldersOnly = showFoldersOnly ?? false;
this.Initialize(expandPath, fileFilters);
}
@@ -236,9 +240,10 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser
}
treeNode.IsFile = isFile;
- // if the node is a directory, or if we are browsing for files and the file name is allowed,
- // add the node to the tree
- if (!isFile || (this.FilterFile(treeNode.Name, this.fileFilters)))
+ // If the node is a directory, or if we are browsing for files and the file name is allowed,
+ // add the node to the tree. Files will be skipped instead if the dialog is only showing folders,
+ // regardless of any provided file filters.
+ if (!isFile || (this.FilterFile(treeNode.Name, this.fileFilters) && !this.showFoldersOnly))
{
children.Add(treeNode);
}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/FileBrowser/FileBrowserService.cs b/src/Microsoft.SqlTools.ServiceLayer/FileBrowser/FileBrowserService.cs
index 97b576a8..8bea61b1 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/FileBrowser/FileBrowserService.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/FileBrowser/FileBrowserService.cs
@@ -232,7 +232,7 @@ namespace Microsoft.SqlTools.ServiceLayer.FileBrowser
{
if (!fileBrowserParams.ChangeFilter)
{
- browser = new FileBrowserOperation(bindingContext.ServerConnection, fileBrowserParams.ExpandPath, fileBrowserParams.FileFilters);
+ browser = new FileBrowserOperation(bindingContext.ServerConnection, fileBrowserParams.ExpandPath, fileBrowserParams.FileFilters, fileBrowserParams.ShowFoldersOnly);
}
else
{