Esempio n. 1
0
 /// <summary>
 /// A Breath First Traversal method to traverse through the directories and files in a cloud.
 /// </summary>
 private async Task Traverse()
 {
     try
     {
         if (queue.Count == 0)
         {
             return;
         }
         DirectoryBlock currentDirectory = null;
         while (queue.Count > 0)
         {
             currentDirectory = queue.Dequeue();
             Task task = Task.Run(() => cloudService.GetFiles(currentDirectory));
             task.Wait();
             if (currentDirectory.SubDirectories != null)
             {
                 List <Task> enqueueTask = new List <Task>();
                 foreach (var subDirectory in currentDirectory.SubDirectories)
                 {
                     if (subDirectory != null)
                     {
                         enqueueTask.Add(Task.Run(() => queue.Enqueue(subDirectory)));
                     }
                 }
                 Task.WaitAll(enqueueTask.ToArray());
             }
         }
     }
     catch (Exception e)
     {
         throw e;
     }
     await Traverse();
 }
Esempio n. 2
0
        internal async Task AddBlobsToDirectory(DirectoryBlock directory)
        {
            var container = client.GetContainerReference(directory.container);
            CloudBlobDirectory blobDirectory = container.GetDirectoryReference(directory.prefix);
            var items = await blobDirectory.ListBlobsSegmentedAsync(false, new BlobListingDetails(),
                                                                    maxListResults,
                                                                    new BlobContinuationToken(),
                                                                    new BlobRequestOptions(),
                                                                    new OperationContext());

            var list_continue = false;

            do
            {
                foreach (IListBlobItem item in items.Results)
                {
                    AddToParentDirectoryObject(directory, item);
                }
                if (items.ContinuationToken != null)
                {
                    items = await blobDirectory.ListBlobsSegmentedAsync(false, new BlobListingDetails(),
                                                                        maxListResults,
                                                                        items.ContinuationToken,
                                                                        new BlobRequestOptions(),
                                                                        new OperationContext());

                    list_continue = true;
                }
                else
                {
                    list_continue = false;
                }
            } while (list_continue);
        }
Esempio n. 3
0
 /// <summary>
 /// This Method takes in a parent directory as parameter.
 /// Lists all the sub-directories and adds them to the parent directory.
 /// Lists all the files and adds them to the parent directory.
 /// </summary>
 public void GetFiles(DirectoryBlock parentDirectory)
 {
     using (DriveService service = DriveClient.GetInfo())
     {
         try
         {
             FilesResource.ListRequest listRequest = service.Files.List();
             listRequest.Q       = "'" + parentDirectory.id + "' in parents and trashed = false";
             listRequest.OrderBy = "name";
             listRequest.Fields  = "nextPageToken, files" +
                                   "(id, name, mimeType, permissions, webContentLink, description, size, shared, owners, parents)";
             Google.Apis.Drive.v3.Data.FileList ListResponse = listRequest.Execute();
             while (ListResponse.Files != null && ListResponse.Files.Count != 0)
             {
                 List <Task> tasks = new List <Task>();
                 foreach (var item in ListResponse.Files)
                 {
                     tasks.Add(Task.Run(() => AddToParentDirectoryObject(item, parentDirectory)));
                 }
                 Task.WaitAll(tasks.ToArray());
                 if (ListResponse.NextPageToken == null)
                 {
                     break;
                 }
                 listRequest.PageToken = ListResponse.NextPageToken;
                 ListResponse          = listRequest.Execute();
             }
         }
         catch (Exception e)
         {
             throw new Exception(e.StackTrace);
         }
     }
 }
Esempio n. 4
0
        internal async Task AddContainersToRoot(DirectoryBlock directory)
        {
            var items = await client.ListContainersSegmentedAsync(null, new ContainerListingDetails(),
                                                                  maxListResults,
                                                                  new BlobContinuationToken(),
                                                                  new BlobRequestOptions(),
                                                                  new OperationContext());

            var list_continue = false;

            do
            {
                if (items != null)
                {
                    foreach (var item in items.Results)
                    {
                        AddToParentDirectoryObject(directory, item);
                    }
                }
                if (items.ContinuationToken != null)
                {
                    items = await client.ListContainersSegmentedAsync(null, new ContainerListingDetails(), maxListResults, items.ContinuationToken, new BlobRequestOptions(), new OperationContext());

                    list_continue = true;
                }
                else
                {
                    list_continue = false;
                }
            } while (list_continue);
        }
Esempio n. 5
0
        internal DirectoryBlock CreateDirectoryObject(Box.V2.Models.BoxItem item, DirectoryBlock parentDirectory)
        {
            string parent = null;

            if (item.Parent == null)
            {
                parent = "";
            }

            DirectoryBlock directory = new DirectoryBlock()
            {
                id           = item.Id,
                Name         = item.Name,
                Description  = item.Description,
                Size         = item.Size,
                SharedLink   = GetSharedLink(item),
                Owners       = GetOwners(item),
                CreationTime = item.CreatedAt.ToString(),
                Users        = GetUsers(item),
                Parent       = new List <string> {
                    parent
                },
                path = parentDirectory.path + "\\" + item.Name,
            };

            return(directory);
        }
Esempio n. 6
0
        internal async Task AddBlobsToContainer(DirectoryBlock directory)
        {
            var container = client.GetContainerReference(directory.Name);
            var items     = await container.ListBlobsSegmentedAsync(null, false, new BlobListingDetails(), maxListResults, new BlobContinuationToken(), null, null);

            var list_continue = false;

            do
            {
                foreach (var item in items.Results)
                {
                    AddToParentDirectoryObject(directory, item);
                }
                if (items.ContinuationToken != null)
                {
                    items = await client.ListBlobsSegmentedAsync(null, false, new BlobListingDetails(), maxListResults, items.ContinuationToken, null, null);

                    list_continue = true;
                }
                else
                {
                    list_continue = false;
                }
            } while (list_continue);
        }
Esempio n. 7
0
        public MigrationResult MigrateToOstor(DirectoryBlock directoryBlock, ICloudServiceIO cloudService)
        {
            MigrationResult        result            = new MigrationResult();
            DownloadCloudDirectory downloadDirectory = new DownloadCloudDirectory(directoryBlock, "C:\\CloudFiles\\", cloudService);

            downloadDirectory.DownloadAsync();
            return(result);
        }
Esempio n. 8
0
        private void CleanUpTransactionFile()
        {
            TransactionFile transactionFile = new TransactionFile();
            DirectoryBlock  directoryBlock  = transactionFile.Deserialize();

            queue = new Queue <DirectoryBlock>();
            queue.Enqueue(directoryBlock);
            Traverse();
        }
Esempio n. 9
0
        public DirectoryBlock GetRoot()
        {
            DirectoryBlock root = new DirectoryBlock()
            {
                id = sourceFolder,
            };

            return(root);
        }
Esempio n. 10
0
        internal DirectoryBlock CreateDirectoryObject(IListBlobItem item, DirectoryBlock directory)
        {
            DirectoryBlock newDirectory = new DirectoryBlock()
            {
                Name      = GetName(item),
                container = item.Container.Name,
                type      = "BlobDirectory",
                prefix    = directory.prefix + GetName(item) + "/",
                path      = directory.path + "\\" + GetName(item),
                CloudUri  = item.Uri,
            };

            return(newDirectory);
        }
Esempio n. 11
0
        internal FileBlock CreateFileObject(IListBlobItem item, DirectoryBlock directory)
        {
            FileBlock file = new FileBlock()
            {
                Name = GetName(item),
                //Size = blob.Properties.Length,
                container  = item.Container.Name,
                SharedLink = item.Uri.ToString(),
                path       = directory.path + "\\" + GetName(item),
                CloudUri   = item.Uri,
            };

            return(file);
        }
Esempio n. 12
0
        internal void AddToParentDirectoryObject(DirectoryBlock directory, CloudBlobContainer item)
        {
            if (directory.SubDirectories == null)
            {
                directory.SubDirectories = new List <DirectoryBlock>();
            }
            DirectoryBlock newContainer = new DirectoryBlock()
            {
                Name       = item.Name,
                type       = "container",
                path       = item.Name,
                accessType = GetAccessType((CloudBlobContainer)item),
            };

            directory.SubDirectories.Add(newContainer);
        }
Esempio n. 13
0
 public void GetFiles(DirectoryBlock parentDirectory)
 {
     if (parentDirectory.id == "root")
     {
         Task task = Task.Run(() => AddContainersToRoot(parentDirectory));
         task.Wait();
     }
     else if (parentDirectory.type == "container")
     {
         Task task = Task.Run(() => AddBlobsToContainer(parentDirectory));
         task.Wait();
     }
     else if (parentDirectory.type == "BlobDirectory")
     {
         Task task = Task.Run(() => AddBlobsToDirectory(parentDirectory));
         task.Wait();
     }
 }
Esempio n. 14
0
        public MigrationResult MigrateToOstor(DirectoryBlock directoryBlock)
        {
            MigrationResult result = new MigrationResult();

            while (System.IO.File.Exists(TransactionFilePath))
            {
                TransactionFile        logFile           = new TransactionFile();
                DirectoryBlock         toDownloadBlock   = logFile.Deserialize();
                DownloadCloudDirectory downloadDirectory = new DownloadCloudDirectory(toDownloadBlock, "C:\\CloudFiles\\", cloudService);
                downloadDirectory.DownloadAsync();
                CleanUpTransactionFile();
                if (DownloadCompleteStatus == true)
                {
                    System.IO.File.Delete(TransactionFilePath);
                }
            }
            return(result);
        }
Esempio n. 15
0
        internal DirectoryBlock CreateDirectoryObject(Google.Apis.Drive.v3.Data.File item, DirectoryBlock parentDirectory)
        {
            DirectoryBlock directory = new DirectoryBlock()
            {
                id           = item.Id,
                Name         = item.Name,
                Description  = item.Description,
                Size         = item.Size,
                SharedLink   = GetSharedLink(item),
                Owners       = GetOwners(item),
                CreationTime = item.CreatedTime.ToString(),
                Users        = GetUsers(item),
                path         = parentDirectory.path + "\\" + item.Name,
                mimeType     = "application/folder",
                Parent       = (List <string>)item.Parents,
            };

            return(directory);
        }
Esempio n. 16
0
        internal FileBlock CreateFileObject(Google.Apis.Drive.v3.Data.File item, DirectoryBlock parentDirectory)
        {
            FileBlock file = new FileBlock()
            {
                id           = item.Id,
                Name         = item.Name,
                Description  = item.Description,
                Size         = item.Size,
                SharedLink   = item.WebContentLink,
                Owners       = GetOwners(item),
                CreationTime = item.CreatedTime.ToString(),
                Users        = GetUsers(item),
                path         = parentDirectory.path + "\\" + item.Name,
                mimeType     = item.MimeType,
                Parent       = (List <string>)item.Parents,
            };

            return(file);
        }
Esempio n. 17
0
 public void Create(DirectoryBlock directoryBlock)
 {
     try
     {
         DataContractJsonSerializer serialize = new DataContractJsonSerializer(typeof(DirectoryBlock));
         lock (thisLock)
         {
             using (FileStream stream = new FileStream(TransactionFilePath, FileMode.Create))
             {
                 serialize.WriteObject(stream, directoryBlock);
                 stream.Flush();
             }
         }
     }
     catch (Exception e)
     {
         throw e;
     }
 }
Esempio n. 18
0
 public void GetFiles(DirectoryBlock parentDirectory)
 {
     try
     {
         Task <BoxCollection <BoxItem> > task = Task.Run(() => client.FoldersManager.GetFolderItemsAsync(parentDirectory.id, 500, fields: new string[]
                                                                                                         { "id", "name", "shared_link", "description", "size", "owned_by", "createdAt" }));
         BoxCollection <BoxItem> items = task.Result;
         if (items != null)
         {
             foreach (Box.V2.Models.BoxItem item in items.Entries)
             {
                 AddToParentDirectoryObject(item, parentDirectory);
             }
         }
     }
     catch (Exception e)
     {
         throw new Exception(e.Message + " " + e.StackTrace);
     }
 }
Esempio n. 19
0
 internal void AddToParentDirectoryObject(DirectoryBlock directory, IListBlobItem item)
 {
     if (item.GetType() == typeof(CloudBlobDirectory))
     {
         if (directory.SubDirectories == null)
         {
             directory.SubDirectories = new List <DirectoryBlock>();
         }
         directory.SubDirectories.Add(CreateDirectoryObject(item, directory));
     }
     if (item.GetType() == typeof(CloudBlockBlob))
     {
         var file = (CloudBlob)item;
         if (directory.Files == null)
         {
             directory.Files = new List <FileBlock>();
         }
         directory.Files.Add(CreateFileObject(item, directory));
     }
 }
Esempio n. 20
0
 public void Traverse()
 {
     if (queue.Count == 0)
     {
         return;
     }
     while (queue.Count > 0)
     {
         DirectoryBlock          currentDirectory     = queue.Dequeue();
         System.IO.DirectoryInfo currentDirectoryInfo = new DirectoryInfo(currentDirectory.path);
         FileSystemInfo[]        files = currentDirectoryInfo.GetFileSystemInfos();
         List <Task>             tasks = new List <Task>();
         foreach (var file in files)
         {
             if (file.GetType() == typeof(System.IO.DirectoryInfo))
             {
                 string         DirectoryId = cloudService.CreateDirectory(destinationDirectoryId, file.Name);
                 DirectoryBlock directory   = new DirectoryBlock()
                 {
                     id   = DirectoryId,
                     Name = file.Name,
                     path = file.FullName,
                 };
                 queue.Enqueue(directory);
             }
             if (file.GetType() == typeof(System.IO.FileInfo))
             {
                 FileBlock newFile = new FileBlock()
                 {
                     Name   = file.Name,
                     Parent = new List <string> {
                         currentDirectory.id
                     }
                 };
                 cloudService.UploadCloudFile(newFile, file.FullName);
             }
         }
         Task.WaitAll(tasks.ToArray());
         Traverse();
     }
 }
Esempio n. 21
0
 internal void AddToParentDirectoryObject(Box.V2.Models.BoxItem item, DirectoryBlock directory)
 {
     if (isDirectory(item.Type))
     {
         DirectoryBlock newDirectory = CreateDirectoryObject(item, directory);
         if (directory.SubDirectories == null)
         {
             directory.SubDirectories = new List <DirectoryBlock>();
         }
         directory.SubDirectories.Add(newDirectory);
     }
     else
     {
         FileBlock newFile = CreateFileObject(item, directory);
         if (directory.Files == null)
         {
             directory.Files = new List <FileBlock>();
         }
         directory.Files.Add(newFile);
     }
 }
Esempio n. 22
0
        public bool UploadDirectory()
        {
            bool status = false;

            if (System.IO.Directory.Exists(toUploadDirectoryPath))
            {
                int    index          = toUploadDirectoryPath.LastIndexOf("/");
                string directoryName  = toUploadDirectoryPath.Substring(index);
                string newDirectoryId = cloudService.CreateDirectory(destinationDirectoryId, directoryName);

                DirectoryBlock directory = new DirectoryBlock()
                {
                    id   = newDirectoryId,
                    path = toUploadDirectoryPath,
                    Name = directoryName,
                };

                queue.Enqueue(directory);
                Traverse();
            }
            return(status);
        }
Esempio n. 23
0
        public DirectoryBlock Deserialize()
        {
            DirectoryBlock directory = new DirectoryBlock();

            try
            {
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(DirectoryBlock));
                lock (new object())
                {
                    using (FileStream stream = new FileStream(TransactionFilePath, FileMode.Open))
                    {
                        stream.Position = 0;
                        directory       = (DirectoryBlock)ser.ReadObject(stream);
                    }
                }
                return(directory);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Esempio n. 24
0
        //public bool UploadFile(Containers.File item)
        //{
        //    bool status = false;
        //    try
        //    {
        //        var fileMetadata = new Google.Apis.Drive.v3.Data.File()
        //        {
        //            Name = item.Name,
        //            Parents = item.Parent,
        //        };
        //        FilesResource.CreateMediaUpload request;
        //        using (var service = DriveClient.GetInfo())
        //        {
        //            request = service.Files.Create(
        //            fileMetadata, new FileStream(item.path, FileMode.Open), item.mimeType);
        //            request.Upload();
        //        }
        //        status = true;
        //    }
        //    catch (Exception e)
        //    {
        //        throw e;
        //    }
        //    return status;
        //}

        internal bool UploadDirectory(DirectoryBlock item)
        {
            bool status = false;

            try
            {
                using (var service = DriveClient.GetInfo())
                {
                    var fileMetadata = new Google.Apis.Drive.v3.Data.File()
                    {
                        Name     = item.Name,
                        MimeType = "application/vnd.google-apps.folder",
                        Parents  = item.Parent,
                    };
                    var request = service.Files.Create(fileMetadata).Execute();
                    status = true;
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            return(status);
        }
Esempio n. 25
0
        /// <summary>
        /// Method to fetch the directories and files at the root level.
        /// </summary>
        /// <returns> Root Directory </returns>
        public CloudStructure GetCloudRootStructure()
        {
            string         rootId        = cloudService.GetRootId();
            CloudStructure rootStructure = new CloudStructure();

            try
            {
                rootDirectory = new DirectoryBlock()
                {
                    id   = rootId,
                    Name = "",
                };
                queue = new Queue <DirectoryBlock>();
                queue.Enqueue(rootDirectory);
                Task task = Task.Run(() => Traverse());
                task.Wait();
                rootStructure.RootDirectory = rootDirectory;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message + " " + e.Source + " " + e.StackTrace);
            }
            return(rootStructure);
        }
Esempio n. 26
0
 public DownloadCloudDirectory(DirectoryBlock directory, string toDownloadDirectoryPath, ICloudServiceIO cloudService)
 {
     this.directory = directory;
     this.toDownloadDirectoryPath = toDownloadDirectoryPath;
     this.cloudService            = cloudService;
 }
Esempio n. 27
0
 internal void AddToParentDirectoryObject(Google.Apis.Drive.v3.Data.File item, DirectoryBlock directory)
 {
     if (isDirectory(item.MimeType))
     {
         if (directory.SubDirectories == null)
         {
             directory.SubDirectories = new List <DirectoryBlock>();
         }
         directory.SubDirectories.Add(CreateDirectoryObject(item, directory));
     }
     else
     {
         if (directory.Files == null)
         {
             directory.Files = new List <FileBlock>();
         }
         directory.Files.Add(CreateFileObject(item, directory));
     }
 }
Esempio n. 28
0
 public void UploadDirectory(DirectoryBlock item)
 {
     throw new NotImplementedException();
 }