예제 #1
0
        /// <summary>
        /// Create children http request with specific options
        /// </summary>
        /// <param name="requestBuilder">request builder</param>
        /// <param name="top">The number of items to return in a result set.</param>
        /// <param name="orderBy">Sort the order of items in the response collection</param>
        /// <param name="filter">Filters the response based on a set of criteria.</param>
        /// <returns>Returns the http request</returns>
        internal static IDriveItemChildrenCollectionRequest CreateChildrenRequest(this IDriveItemRequestBuilder requestBuilder, int top, OrderBy orderBy = OrderBy.None, string filter = null)
        {
            IDriveItemChildrenCollectionRequest oneDriveitemsRequest = null;

            if (orderBy == OrderBy.None && string.IsNullOrEmpty(filter))
            {
                return(requestBuilder.Children.Request().Top(top));
            }

            if (orderBy == OrderBy.None)
            {
                return(requestBuilder.Children.Request().Top(top).Filter(filter));
            }

            string order = OneDriveHelper.TransformOrderByToODataString(orderBy);

            if (string.IsNullOrEmpty(filter))
            {
                oneDriveitemsRequest = requestBuilder.Children.Request().Top(top).OrderBy(order);
            }
            else
            {
                oneDriveitemsRequest = requestBuilder.Children.Request().Top(top).OrderBy(order).Filter(filter);
            }

            return(oneDriveitemsRequest);
        }
        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);
            }
        }
예제 #3
0
        public static async Task <DriveItem> UploadDocumentAsync(IDriveItemRequestBuilder driveItemRequestBuilder, string filename, Stream fileStream, string conflictBehaviour = ConflictBehaviour.Rename)
        {
            UploadSession uploadSession = null;

            try
            {
                var uploadProps = new DriveItemUploadableProperties
                {
                    ODataType      = null,
                    AdditionalData = new Dictionary <string, object>
                    {
                        ["@microsoft.graph.conflictBehavior"] = conflictBehaviour
                    }
                };

                uploadSession = await driveItemRequestBuilder
                                .ItemWithPath(filename)
                                .CreateUploadSession(uploadProps)
                                .Request()
                                .PostAsync();
            }
            catch (ServiceException ex)
            {
                throw new Exception("An error occured while creating upload session.", ex);
            }

            if (uploadSession == null)
            {
                throw new Exception("Upload session is null.");
            }

            try
            {
                // Performs upload, slice by slice
                int maxSliceSize   = 5 * 1024 * 1024; //5MB
                var fileUploadTask = new LargeFileUploadTask <DriveItem>(uploadSession, fileStream, maxSliceSize);
                var uploadResult   = await fileUploadTask.UploadAsync();

                if (!uploadResult.UploadSucceeded)
                {
                    throw new Exception("File upload failed!");
                }
                else
                {
                    return(uploadResult.ItemResponse);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("An error occurred while trying to upload document.", ex);
            }
        }
예제 #4
0
        /// <summary>
        /// Gets a file's thumbnail set
        /// </summary>
        /// <param name="builder">Http request builder</param>
        /// <param name="cancellationToken">The <see cref="CancellationToken"/> for the request.</param>
        /// <returns>When this method completes, return a thumbnail set, or null if no thumbnail are available</returns>
        public static async Task <OneDriveThumbnailSet> GetThumbnailSetAsync(this IDriveItemRequestBuilder builder, CancellationToken cancellationToken)
        {
            // Requests the differente size of the thumbnail
            var requestThumbnail = await builder.Thumbnails.Request().GetAsync(cancellationToken).ConfigureAwait(false);

            var thumbnailSet = requestThumbnail.FirstOrDefault();

            if (thumbnailSet == null)
            {
                return(null);
            }

            return(new OneDriveThumbnailSet(thumbnailSet));
        }
예제 #5
0
        public async Task <DriveItem> GetRoot(Drive drive, CancellationToken token)
        {
            IDriveItemRequestBuilder rb = client.Drives[drive.Id].Root;

            try
            {
                return(await rb.Request().GetAsync(token));
            }
            catch (Exception ex)
            {
                HandleException(ex, null, messageOnlyExceptions, $"Get root for drive: {drive.DriveType ?? "unknown"}");
            }

            return(default(DriveItem));
        }
        private IDriveItemRequestBuilder GetItemRequestBuilder(Uri fileUri)
        {
            if (fileUri.Segments[2] == "me/")
            {
                return(GetMeDriveItemRequestBuilder(fileUri));
            }
            else if (fileUri.Segments[2] == "drives/")
            {
                return(GetDrivesItemRequestBuilder(fileUri));
            }
            else if (fileUri.Segments[2] == "shares/")
            {
                return(GetSharesItemRequestBuilder(fileUri));
            }
            IDriveItemRequestBuilder itemRequestBuilder = default;

            return(itemRequestBuilder);
        }
예제 #7
0
        /// <summary>
        /// Update drive item´s name and description.
        /// </summary>
        /// <param name="driveItemRequestBuilder"></param>
        /// <param name="name"></param>
        /// <param name="description"></param>
        /// <returns></returns>
        private async Task <DriveItem> UpdateNameDescription(IDriveItemRequestBuilder driveItemRequestBuilder, string name, string description)
        {
            if (string.IsNullOrWhiteSpace(name) && string.IsNullOrWhiteSpace(description))
            {
                throw new Exception("Error: you have to provide at least name or description.");
            }

            DriveItem driveItem = new DriveItem();

            if (!string.IsNullOrWhiteSpace(name))
            {
                driveItem.Name = name;
            }
            if (!string.IsNullOrWhiteSpace(description))
            {
                driveItem.Description = description;
            }

            return(await driveItemRequestBuilder.Request().UpdateAsync(driveItem));
        }
예제 #8
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));
        }
예제 #9
0
        /// <summary>
        /// Gets a file's thumbnail
        /// </summary>
        /// <param name="builder">Http request builder</param>
        /// <param name="provider">Http provider to execute the request</param>
        /// <param name="cancellationToken">The <see cref="CancellationToken"/> for the request.</param>
        /// <param name="optionSize"> A value from the enumeration that specifies the size of the image to retrieve. Small ,Medium, Large</param>
        /// <returns>When this method completes, return a stream containing the thumbnail, or null if no thumbnail are available</returns>
        internal static async Task <Stream> GetThumbnailAsync(this IDriveItemRequestBuilder builder, IBaseClient provider, CancellationToken cancellationToken, ThumbnailSize optionSize)
        {
            // Requests the different sizes of the thumbnail
            var thumbnailSet = await builder.GetThumbnailSetAsync(cancellationToken).ConfigureAwait(false);

            if (thumbnailSet == null)
            {
                return(null);
            }

            string requestUrl = null;

            if (optionSize == ThumbnailSize.Small)
            {
                requestUrl = thumbnailSet.Small;
            }
            else if (optionSize == ThumbnailSize.Medium)
            {
                requestUrl = thumbnailSet.Medium;
            }
            else if (optionSize == ThumbnailSize.Large)
            {
                requestUrl = thumbnailSet.Large;
            }

            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUrl);
            await provider.AuthenticationProvider.AuthenticateRequestAsync(request).ConfigureAwait(false);

            var response = await provider.HttpProvider.SendAsync(request).ConfigureAwait(false);

            if (response.IsSuccessStatusCode)
            {
                return(await response.Content.ReadAsStreamAsync());
            }

            return(null);
        }
예제 #10
0
 /// <summary>
 /// Update drive item´s list item properties.
 /// </summary>
 /// <param name="driveItemRequestBuilder"></param>
 /// <param name="fields"></param>
 /// <returns></returns>
 private async Task <FieldValueSet> UpdateListItemProperties(IDriveItemRequestBuilder driveItemRequestBuilder, IDictionary <string, object> fields)
 {
     return(await driveItemRequestBuilder.ListItem.Fields.Request().UpdateAsync(new FieldValueSet {
         AdditionalData = fields
     }));
 }