Example #1
0
        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)
                {
                }
            }
        }
Example #2
0
        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;
            }
        }
Example #3
0
        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();
                }
            }