private async Task LoadFilesAsync(string driveItemId, int pageIndex = 0) { IsDetailPaneVisible = false; HideDetailsPane(); if (!string.IsNullOrEmpty(_driveId)) { try { _cancelLoadFile.Cancel(false); _cancelLoadFile.Dispose(); _cancelLoadFile = new CancellationTokenSource(); _list.Items.Clear(); VisualStateManager.GoToState(this, NavStatesFolderReadonly, false); QueryOption queryOption = new QueryOption("$top", PageSize.ToString()); await GraphService.TryLoginAsync(); GraphServiceClient graphServiceClient = GraphService.GraphProvider; Task <IDriveItemChildrenCollectionPage> taskFiles = graphServiceClient.Drives[_driveId].Items[driveItemId].Children.Request(new List <Option> { queryOption }).GetAsync(_cancelLoadFile.Token); IDriveItemChildrenCollectionPage files = await taskFiles; if (!taskFiles.IsCanceled) { _list.Items.Clear(); foreach (DriveItem file in files) { _list.Items.Add(file); } _nextPageRequest = files.NextPageRequest; HasMore = _nextPageRequest != null; VisualStateManager.GoToState(this, NavStatesFolderReadonly, false); _pathVisualState = NavStatesFolderReadonly; if (_driveItemPath.Count > 1) { IDriveItemPermissionsCollectionPage permissions = await graphServiceClient.Drives[_driveId].Items[driveItemId].Permissions.Request().GetAsync(); foreach (Permission permission in permissions) { if (permission.Roles.Contains("write") || permission.Roles.Contains("owner")) { VisualStateManager.GoToState(this, NavStatesFolderEdit, false); _pathVisualState = NavStatesFolderEdit; break; } } } else { _pathVisualState = NavStatesFolderEdit; VisualStateManager.GoToState(this, NavStatesFolderEdit, false); } } } catch (Exception) { } } }
public IEnumerable <List <Permission> > GetDriveItemPermissions(Drive drive, DriveItem driveItem, CancellationToken token) { IDriveItemPermissionsCollectionPage page = null; try { page = client.Drives[drive.Id].Items[driveItem.Id].Permissions.Request().GetAsync(token).Result; } catch (Exception ex) { HandleException(ex, null, messageOnlyExceptions, $"Get permissions for drive item: {driveItem.Name ?? "unknown"}"); } while (page != null) { yield return(page.ToList()); if (page.NextPageRequest == null) { break; } page = page.NextPageRequest.GetAsync(token).Result; } }
private async void List_SelectionChanged(object sender, SelectionChangedEventArgs e) { _cancelGetDetails.Cancel(false); _cancelGetDetails.Dispose(); _cancelGetDetails = new CancellationTokenSource(); if (_list.SelectedItem is DriveItem driveItem && driveItem.File != null) { try { SelectedFile = driveItem; FileSize = driveItem.Size ?? 0; LastModified = driveItem.LastModifiedDateTime?.LocalDateTime.ToString() ?? string.Empty; if (FileSelected != null) { FileSelected.Invoke(this, new FileSelectedEventArgs(driveItem)); } ThumbnailImageSource = null; VisualStateManager.GoToState(this, NavStatesFileReadonly, false); GraphServiceClient graphClient = await GraphServiceHelper.GetGraphServiceClientAsync(); if (graphClient != null) { Task <IDriveItemPermissionsCollectionPage> taskPermissions = graphClient.Drives[_driveId].Items[driveItem.Id].Permissions.Request().GetAsync(_cancelGetDetails.Token); IDriveItemPermissionsCollectionPage permissions = await taskPermissions; if (!taskPermissions.IsCanceled) { foreach (Permission permission in permissions) { if (permission.Roles.Contains("write") || permission.Roles.Contains("owner")) { VisualStateManager.GoToState(this, NavStatesFileEdit, false); break; } } Task <IDriveItemThumbnailsCollectionPage> taskThumbnails = graphClient.Drives[_driveId].Items[driveItem.Id].Thumbnails.Request().GetAsync(_cancelGetDetails.Token); IDriveItemThumbnailsCollectionPage thumbnails = await taskThumbnails; if (!taskThumbnails.IsCanceled) { ThumbnailSet thumbnailsSet = thumbnails.FirstOrDefault(); if (thumbnailsSet != null) { Thumbnail thumbnail = thumbnailsSet.Large; if (thumbnail.Url.Contains("inputFormat=svg")) { SvgImageSource source = new SvgImageSource(); using (Stream inputStream = await graphClient.Drives[_driveId].Items[driveItem.Id].Content.Request().GetAsync()) { SvgImageSourceLoadStatus status = await source.SetSourceAsync(inputStream.AsRandomAccessStream()); if (status == SvgImageSourceLoadStatus.Success) { ThumbnailImageSource = source; } } } else { ThumbnailImageSource = new BitmapImage(new Uri(thumbnail.Url)); } } } IsDetailPaneVisible = true; ShowDetailsPane(); } } } catch (Exception exception) { MessageDialog messageDialog = new MessageDialog(exception.Message); await messageDialog.ShowAsync(); } }