public async Task <FileVM[]> SearchFiles(DirectoryVM directory, string searchPattern, int limit) { if (!await ConnectAsync()) { return(null); } if (directory == null) { return(null); } if (string.IsNullOrEmpty(directory.ID)) { return(null); } if (!Directory.Exists(directory.ID)) { return(null); } if (limit <= 0) { return(null); } var searchOption = SearchOption.AllDirectories; var fileListQuery = Directory .EnumerateFiles(directory.ID, searchPattern, searchOption) .Where(file => !string.IsNullOrEmpty(file)) .Where(file => File.Exists(file)) .OrderBy(file => file) .Take(limit) .AsQueryable(); var fileList = await Task.FromResult(fileListQuery.ToArray()); var fileTasks = fileList .Select(file => GetDetails(file)) .ToArray(); var fileTasksResult = await Task.WhenAll(fileTasks); var fileResult = fileTasksResult .Where(fileVM => fileVM != null) .ToArray(); return(fileResult); }
public async Task <FileVM[]> GetFiles(DirectoryVM directory) { if (!await CheckConnectionAsync()) { return(null); } if (directory == null) { return(null); } if (string.IsNullOrEmpty(directory.ID)) { return(null); } if (!Directory.Exists(directory.ID)) { return(null); } var searchPattern = "*.*"; var searchOption = SearchOption.TopDirectoryOnly; var fileListQuery = Directory .EnumerateFiles(directory.ID, searchPattern, searchOption) .Where(file => !string.IsNullOrEmpty(file)) .Where(file => File.Exists(file)) .OrderBy(file => file) .AsQueryable(); var fileList = await Task.FromResult(fileListQuery.ToArray()); var fileTasks = fileList .Select(file => GetDetails(file)) .ToArray(); var fileTasksResult = await Task.WhenAll(fileTasks); var fileResult = fileTasksResult .Where(fileVM => fileVM != null) .ToArray(); return(fileResult); }
public async Task <DirectoryVM[]> GetDirectories(DirectoryVM directory) { if (!await CheckConnectionAsync()) { return(null); } if (directory == null) { return(null); } if (string.IsNullOrEmpty(directory.ID)) { return(null); } if (!Directory.Exists(directory.ID)) { return(null); } var directoryListQuery = Directory .EnumerateDirectories(directory.ID) .Where(dir => !string.IsNullOrEmpty(dir)) .AsQueryable(); var directoryList = await Task.FromResult(directoryListQuery.ToArray()); var resultList = directoryList .Where(dir => Directory.Exists(dir)) .OrderBy(dir => dir) .Select(dir => new DirectoryInfo(dir)) .Where(dirInfo => dirInfo != null) .Select(dirInfo => new DirectoryVM { ID = dirInfo.FullName, Name = dirInfo.Name, Path = dirInfo.FullName, ParentID = directory.ID }) .ToArray(); return(resultList); }
public async Task <FileVM[]> GetFiles(DirectoryVM directory) { try { var fileList = new List <FileVM>(); var IDs = GetIDs(directory.ID); var httpPath = "" + $"drives/{IDs.DriveID}/items/{IDs.ID}/children" + "?" + "$filter=file ne null&" + "$select=id,name,createdDateTime,size,@microsoft.graph.downloadUrl,file,parentReference&" + "$top=1000"; while (!string.IsNullOrEmpty(httpPath)) { // REQUEST DATA FROM SERVER var httpResult = await Client .GetAsync <DTOs.FileSearch>(httpPath); // STORE RESULT var files = httpResult.value .Where(x => x.file != null) .Select(x => GetDetails(x)) .ToList(); fileList.AddRange(files); // CHECK IF THERE IS ANOTHER PAGE OF RESULTS httpPath = httpResult.nextLink; if (!string.IsNullOrEmpty(httpPath)) { httpPath = httpPath.Replace(OneDriveClient.MicrosoftGraphUrl, string.Empty); } } return(fileList.ToArray()); } catch (Exception) { throw; } }
public async Task <FileVM[]> SearchFiles(DirectoryVM directory, string searchPattern, int limit) { try { var fileList = new List <FileVM>(); if (limit == 0) { return(fileList.ToArray()); } // SPLIT SEARCH PATTERNS INTO ARRAY var searchPatterns = searchPattern .Replace("*.", "") .ToLower() .Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries) .ToArray(); // AUXILIARY FUNCTION TO ADD RESULT AND CHECK FOR THE LIMIT var addFilesUntilLimit = new Func <FileVM[], bool>(files => { fileList.AddRange(files); return(fileList.Count < limit); }); // EXECUTE SEARCH FOR FILES THROUGH MULTIPLE THREADS await SearchFiles(directory, searchPatterns, addFilesUntilLimit); // RESULT var filesArray = fileList .Where(file => file != null) .Where(file => !string.IsNullOrEmpty(file.Path)) .OrderBy(file => file.Path) .Take(limit) .ToArray(); return(filesArray); } catch (Exception) { throw; } }
public Task <FileVM[]> SearchFiles(DirectoryVM directory, string searchPattern) => SearchFiles(directory, searchPattern, int.MaxValue);