Exemplo n.º 1
0
        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);
        }
Exemplo n.º 4
0
        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; }
        }
Exemplo n.º 5
0
        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; }
        }
Exemplo n.º 6
0
 public Task <FileVM[]> SearchFiles(DirectoryVM directory, string searchPattern) =>
 SearchFiles(directory, searchPattern, int.MaxValue);