public FileDescription GetFileDescription(IOConnectionInfo ioc)
        {
            try
            {
                string          filename        = ioc.Path;
                PathItemBuilder pathItemBuilder = GetPathItemBuilder(filename);

                if (!pathItemBuilder.itemLocation.LocalPath.Any() &&
                    !pathItemBuilder.hasShare())
                {
                    FileDescription rootEntry = new FileDescription();
                    rootEntry.CanRead     = rootEntry.CanWrite = true;
                    rootEntry.Path        = filename;
                    rootEntry.DisplayName = pathItemBuilder.itemLocation.User.Name;
                    rootEntry.IsDirectory = true;
                    return(rootEntry);
                }

                IDriveItemRequestBuilder pathItem = pathItemBuilder.getPathItem();

                DriveItem item = Task.Run(async() => await pathItem.Request().GetAsync()).Result;
                return(GetFileDescription(pathItemBuilder.itemLocation, item));
            }
            catch (Exception e)
            {
                throw convertException(e);
            }
        }
        public IEnumerable <FileDescription> ListContents(IOConnectionInfo ioc)
        {
            try
            {
                PathItemBuilder pathItemBuilder = GetPathItemBuilder(ioc.Path);

                logDebug("listing files for " + ioc.Path);
                if (!pathItemBuilder.hasShare() && !pathItemBuilder.hasOneDrivePath())
                {
                    logDebug("listing shares.");
                    return(ListShares(pathItemBuilder.itemLocation, pathItemBuilder.client));
                }

                logDebug("listing regular children.");
                List <FileDescription> result = new List <FileDescription>();

                /*logDebug("parent before:" + parentPath);
                *  parentPath = parentPath.substring(getProtocolPrefix().length());
                *  logDebug("parent after: " + parentPath);*/

                IDriveItemChildrenCollectionPage itemsPage = Task.Run(async() => await pathItemBuilder.getPathItem()
                                                                      .Children
                                                                      .Request()
                                                                      .GetAsync()).Result;
                while (true)
                {
                    IList <DriveItem> items = itemsPage.CurrentPage;
                    if (!items.Any())
                    {
                        return(result);
                    }

                    foreach (DriveItem i in items)
                    {
                        var e = GetFileDescription(pathItemBuilder.itemLocation.BuildLocalChildLocation(i.Name, i.Id, i.ParentReference?.DriveId), i);
                        result.Add(e);
                    }
                    var nextPageReqBuilder = itemsPage.NextPageRequest;
                    if (nextPageReqBuilder == null)
                    {
                        return(result);
                    }
                    itemsPage = Task.Run(async() => await nextPageReqBuilder.GetAsync()).Result;
                }
            }
            catch (Exception e)
            {
                throw convertException(e);
            }
        }
Пример #3
0
        private async Task <FileDescription> GetFileDescriptionAsync(IOConnectionInfo ioc)
        {
            string          filename        = ioc.Path;
            PathItemBuilder pathItemBuilder = await GetPathItemBuilder(filename);

            if (!pathItemBuilder.itemLocation.LocalPath.Any() &&
                !pathItemBuilder.hasShare())
            {
                FileDescription rootEntry = new FileDescription();
                rootEntry.CanRead     = rootEntry.CanWrite = true;
                rootEntry.Path        = filename;
                rootEntry.DisplayName = pathItemBuilder.itemLocation.User.Name;
                rootEntry.IsDirectory = true;
                return(rootEntry);
            }

            IDriveItemRequestBuilder pathItem = pathItemBuilder.getPathItem();

            DriveItem item = await pathItem.Request().GetAsync();

            return(GetFileDescription(pathItemBuilder.itemLocation, item));
        }