104
106
public override IEnumerable<FileProvider> GetFiles (IProgressMonitor monitor, FilterOptions filterOptions)
106
108
if (IdeApp.Workspace.IsOpen) {
109
var alreadyVisited = new HashSet<string> ();
107
110
foreach (Project project in IdeApp.Workspace.GetAllProjects ()) {
108
111
monitor.Log.WriteLine (GettextCatalog.GetString ("Looking in project '{0}'", project.Name));
109
112
foreach (ProjectFile file in project.Files.Where (f => filterOptions.NameMatches (f.Name) && File.Exists (f.Name))) {
110
if (!IncludeBinaryFiles && !DesktopService.GetMimeTypeIsText (DesktopService.GetMimeTypeForUri (file.Name)))
113
if (!IncludeBinaryFiles && !DesktopService.GetFileIsText (file.FilePath))
115
if (alreadyVisited.Contains (file.Name))
117
alreadyVisited.Add (file.Name);
112
118
yield return new FileProvider (file.Name, project);
145
151
if (IdeApp.Workspace.IsOpen) {
146
152
monitor.Log.WriteLine (GettextCatalog.GetString ("Looking in project '{0}'", project.Name));
153
var alreadyVisited = new HashSet<string> ();
147
154
foreach (ProjectFile file in project.Files.Where (f => filterOptions.NameMatches (f.Name) && File.Exists (f.Name))) {
148
if (!IncludeBinaryFiles && !DesktopService.GetMimeTypeIsText (DesktopService.GetMimeTypeForUri (file.Name)))
155
if (!IncludeBinaryFiles && !DesktopService.GetFileIsText (file.Name))
158
if (alreadyVisited.Contains (file.Name))
160
alreadyVisited.Add (file.Name);
150
161
yield return new FileProvider (file.Name, project);
212
223
if (monitor != null)
213
224
monitor.Log.WriteLine (GettextCatalog.GetString ("Looking in '{0}'", path));
214
foreach (string fileMask in filterOptions.FileMask.Split (',', ';')) {
225
var directoryStack = new Stack<string> ();
226
directoryStack.Push (path);
228
while (directoryStack.Count > 0) {
229
var curPath = directoryStack.Pop ();
217
files = Directory.GetFiles (path, fileMask, recurse ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
232
var readPermission = new FileIOPermission(FileIOPermissionAccess.Read, curPath);
233
readPermission.Demand ();
218
234
} catch (Exception e) {
219
LoggingService.LogError ("Can't access path " + path, e);
235
LoggingService.LogError ("Can't access path " + curPath, e);
223
foreach (string fileName in files) {
224
if (fileName.StartsWith (".") && !IncludeHiddenFiles)
226
if (!IncludeBinaryFiles && !DesktopService.GetMimeTypeIsText (DesktopService.GetMimeTypeForUri (fileName)))
239
foreach (string fileName in Directory.EnumerateFiles (curPath, "*")) {
240
if (!IncludeHiddenFiles) {
241
if (Platform.IsWindows) {
242
var attr = File.GetAttributes (fileName);
243
if (attr.HasFlag (FileAttributes.Hidden))
246
if (Path.GetFileName (fileName).StartsWith (".", StringComparison.Ordinal))
250
if (!IncludeBinaryFiles && !DesktopService.GetFileIsText (fileName))
228
252
yield return fileName;
256
foreach (string directoryName in Directory.EnumerateDirectories (curPath)) {
257
if (!IncludeHiddenFiles) {
258
if (Platform.IsWindows) {
259
var attr = File.GetAttributes (directoryName);
260
if (attr.HasFlag (FileAttributes.Hidden))
263
if (Path.GetFileName (directoryName).StartsWith (".", StringComparison.Ordinal))
266
directoryStack.Push (directoryName);