private static async Task <string> ProcessDelta(GraphService graphClient, ILogger log, string driveId = null, string deltaLink = null) { string deltaRequestUrl = deltaLink; TeamProvisioning.Initialize(graphClient, log); var delta = await graphClient.GetListDelta(driveId, deltaRequestUrl); foreach (var item in delta.CurrentPage) { await ProcessDriveItem(graphClient, item); } while (delta.NextPageRequest != null) { // There are more pages of results delta = await delta.NextPageRequest.GetAsync(); foreach (var item in delta.CurrentPage) { await ProcessDriveItem(graphClient, item); } } // Get the delta link object newDeltaLink; delta.AdditionalData.TryGetValue("@odata.deltaLink", out newDeltaLink); return(newDeltaLink.ToString()); }
private static async Task ProcessDriveItem(GraphService graphClient, Microsoft.Graph.DriveItem item) { if (item.File != null) { // Query the database var teams = await DatabaseHelper.GetFlightTeamsAsync(f => f.SharePointListItemId.Equals(item.Id)); var team = teams.FirstOrDefault(); if (item.Deleted != null && team != null) { // Remove the team await TeamProvisioning.ArchiveTeamAsync(team); // Remove the database item await DatabaseHelper.DeleteFlightTeamAsync(team.Id); return; } // Get the file's list data var listItem = await graphClient.GetDriveItemListItem(item.ParentReference.DriveId, item.Id); if (listItem == null) { return; } if (team == null) { team = FlightTeam.FromListItem(item.Id, listItem); if (team == null) { // Item was added to list but required metadata // isn't filled in yet. No-op. return; } // New item, provision team team.TeamId = await TeamProvisioning.ProvisionTeamAsync(team); await DatabaseHelper.CreateFlightTeamAsync(team); } else { var updatedTeam = FlightTeam.FromListItem(item.Id, listItem); updatedTeam.TeamId = team.TeamId; // Existing item, process changes await TeamProvisioning.UpdateTeamAsync(team, updatedTeam); updatedTeam.Id = team.Id; await DatabaseHelper.UpdateFlightTeamAsync(team.Id, updatedTeam); } } }
private static async Task <string> ProcessDelta(GraphService graphClient, ILogger log, string driveId = null, string deltaLink = null) { string deltaRequestUrl = deltaLink; TeamProvisioning.Initialize(graphClient, log); Microsoft.Graph.IDriveItemDeltaCollectionPage delta = null; try { delta = await graphClient.GetListDelta(driveId, deltaRequestUrl); } catch (Microsoft.Graph.ServiceException ex) { if (ex.Error.Code == "resyncRequired") { delta = await graphClient.GetListDelta(driveId, null); } } foreach (var item in delta.CurrentPage) { await ProcessDriveItem(graphClient, item); } while (delta.NextPageRequest != null) { // There are more pages of results delta = await delta.NextPageRequest.GetAsync(); foreach (var item in delta.CurrentPage) { await ProcessDriveItem(graphClient, item); } } // Get the delta link object newDeltaLink; delta.AdditionalData.TryGetValue("@odata.deltaLink", out newDeltaLink); return(newDeltaLink.ToString()); }