/// <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); } }
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); } }
/// <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)); }
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); }
/// <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)); }
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)); }
/// <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); }
/// <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 })); }