Example #1
0
        private static async Task WatchTeamSiteAsync(KeyValuePair <string, DeltaLinks> pair)
        {
            try
            {
                //var authProvider = new DeviceCodeAuthProvider();
                //var graphClient = new GraphServiceClient(authProvider);

                IDriveItemDeltaCollectionPage deltaCollection;
                var deltaLinks = new DeltaLinks
                {
                };

                if (pair.Value == null)
                {
                    //var item = await graphClient.Groups[pair.Key]
                    //    .Drive
                    //    .Request()
                    //    .Select("SharepointIds,WebUrl")
                    //    .GetAsync();
                    //List<QueryOption> queryOptions = new List<QueryOption>
                    //  {
                    //    new QueryOption("$filter", $@"WebUrl eq 'https://mmoustafa.sharepoint.com/sites/Public991/Shared Documents/'")
                    //  };
                    //deltaCollection = await graphClient.Sites[item.SharePointIds.SiteId].Drive.Root
                    //    .Delta()
                    //    .Request(queryOptions)
                    //    .Select("CreatedDateTime,Deleted,File,Folder,LastModifiedDateTime,Root,SharepointIds,Size,WebUrl")
                    //    .GetAsync();

                    deltaCollection = await graphClient.Groups[pair.Key].Drive.Root
                                      .Delta()
                                      .Request()
                                      .Select("CreatedDateTime,Deleted,File,Folder,LastModifiedDateTime,Root,SharepointIds,Size,WebUrl")
                                      .GetAsync();
                    deltaLinks.DeltaCollection = deltaCollection;
                    deltaLinks.LastSyncDate    = DateTime.UtcNow.Ticks / 100000000;
                    libraryDeltaCalls++;
                }
                else
                {
                    deltaLinks.LastSyncDate = pair.Value.LastSyncDate;
                    deltaCollection         = pair.Value.DeltaCollection;
                    deltaCollection.InitializeNextPageRequest(graphClient, pair.Value.DeltaLink);
                    deltaCollection = await deltaCollection.NextPageRequest
                                      .GetAsync();

                    libraryDeltaCalls++;
                }

                if (deltaCollection.CurrentPage.Count > 0)
                {
                    deltaLinks.NoChanges = false;
                    if (!firstCall)
                    {
                        foreach (var drive in deltaCollection.CurrentPage)
                        {
                            await ProcessChangesAsync(drive, deltaLinks.LastSyncDate);
                        }
                    }
                    //else
                    //    foreach (var item in deltaCollection.CurrentPage)
                    //        Console.WriteLine($"{item.WebUrl}");
                }
                else
                {
                    deltaLinks.NoChanges = true;
                }



                if (deltaCollection.AdditionalData.ContainsKey("@odata.nextLink") && deltaCollection.AdditionalData["@odata.nextLink"] != null)
                {
                    deltaLinks.DeltaLink       = deltaCollection.AdditionalData["@odata.nextLink"].ToString();
                    deltaLinks.DeltaCollection = deltaCollection;
                    pair = new KeyValuePair <string, DeltaLinks>(pair.Key, deltaLinks);
                    await WatchTeamSiteAsync(pair);
                }
                else if (deltaCollection.AdditionalData["@odata.deltaLink"] != null)
                {
                    deltaLinks.DeltaLink = deltaCollection.AdditionalData["@odata.deltaLink"].ToString();
                }
                deltaLinks.DeltaCollection    = deltaCollection;
                deltaLinks.LastSyncDate       = DateTime.UtcNow.Ticks / 100000000;
                teamSitesDeltaLinks[pair.Key] = deltaLinks;
            }
            catch (Exception exception)
            {
                if (exception.Message.Contains("Resource provisioning is in progress. Please try again.") ||
                    exception.Message.Contains("Resource is not found."))
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine($"Error WatchTeamSiteAsync site {pair.Key}: {exception.Message}");
                    Console.ResetColor();
                    //await Task.Delay(2 * 1000);
                    //await WatchTeamSiteAsync(pair);
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine($"Error WatchTeamSiteAsync site {pair.Key}: {exception.InnerException.Message}");
                    //Console.WriteLine($"{exception.InnerException}");
                    Console.ResetColor();
                    await Task.Delay(1000);
                    await WatchTeamSiteAsync(pair);
                }
            }
        }
Example #2
0
        private static async Task WatchTeamSiteAsync(KeyValuePair <string, DeltaLinks> pair)
        {
            try
            {
                IDriveItemDeltaCollectionPage deltaCollection;
                var deltaLinks = new DeltaLinks
                {
                };

                if (pair.Value == null)
                {
                    deltaCollection = await graphClient.Groups[pair.Key].Drive.Root
                                      .Delta()
                                      .Request()
                                      .Select("CreatedDateTime,Deleted,File,Folder,LastModifiedDateTime,Root,SharepointIds,Size,WebUrl")
                                      .GetAsync();
                    deltaLinks.DeltaCollection = deltaCollection;
                    deltaLinks.LastSyncDate    = DateTime.UtcNow.Ticks / 100000000;
                    libraryDeltaCalls++;
                }
                else
                {
                    deltaLinks.LastSyncDate = pair.Value.LastSyncDate;
                    deltaCollection         = pair.Value.DeltaCollection;
                    deltaCollection.InitializeNextPageRequest(graphClient, pair.Value.DeltaLink);
                    deltaCollection = await deltaCollection.NextPageRequest
                                      .GetAsync();

                    libraryDeltaCalls++;
                }

                if (deltaCollection.CurrentPage.Count > 0)
                {
                    if (!firstCall)
                    {
                        foreach (var drive in deltaCollection.CurrentPage)
                        {
                            await ProcessChangesAsync(drive, deltaLinks.LastSyncDate);
                        }
                    }
                    //else
                    //    foreach (var item in deltaCollection.CurrentPage)
                    //        Console.WriteLine($"{item.WebUrl}");
                }



                if (deltaCollection.AdditionalData.ContainsKey("@odata.nextLink") && deltaCollection.AdditionalData["@odata.nextLink"] != null)
                {
                    deltaLinks.DeltaLink       = deltaCollection.AdditionalData["@odata.nextLink"].ToString();
                    deltaLinks.DeltaCollection = deltaCollection;
                    pair = new KeyValuePair <string, DeltaLinks>(pair.Key, deltaLinks);
                    await WatchTeamSiteAsync(pair);
                }
                else if (deltaCollection.AdditionalData["@odata.deltaLink"] != null)
                {
                    deltaLinks.DeltaLink = deltaCollection.AdditionalData["@odata.deltaLink"].ToString();
                }
                deltaLinks.DeltaCollection    = deltaCollection;
                deltaLinks.LastSyncDate       = DateTime.UtcNow.Ticks / 100000000;
                teamSitesDeltaLinks[pair.Key] = deltaLinks;
            }
            catch (Exception exception)
            {
                if (exception.Message.Contains("Resource provisioning is in progress. Please try again.") ||
                    exception.Message.Contains("Resource is not found."))
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine($"Error WatchTeamSiteAsync site {pair.Key}: {exception.Message}");
                    Console.ResetColor();
                    //await Task.Delay(2 * 1000);
                    //await WatchTeamSiteAsync(pair);
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine($"Error WatchTeamSiteAsync site {pair.Key}: {exception.Message}");
                    Console.ResetColor();
                }
            }
        }
Example #3
0
        public async static Task WatchTeamSite(IList <string> keys)
        {
            try
            {
                //var watch = new System.Diagnostics.Stopwatch();
                //watch.Start();
                var batchRequestContent = new BatchRequestContent();

                // 1. construct a Batch request
                foreach (var key in keys)
                {
                    if (teamSitesDeltaLinks[key] == null)
                    {
                        teamSitesDeltaLinks[key] = new DeltaLinks()
                        {
                            LastSyncDate = DateTime.UtcNow.Ticks / 100000000,
                            DeltaLink    = graphClient.Groups[key].Drive.Root
                                           .Delta()
                                           .Request()
                                           .RequestUrl + "?$select=CreatedDateTime,Deleted,File,Folder,LastModifiedDateTime,Root,SharepointIds,Size,WebUrl"
                        }
                    }
                    ;
                    var request     = new HttpRequestMessage(HttpMethod.Get, teamSitesDeltaLinks[key].DeltaLink);
                    var requestStep = new BatchRequestStep($"{key}", request, null);
                    batchRequestContent.AddBatchRequestStep(requestStep);
                }

                //3. Submit request
                var batchRequest = new HttpRequestMessage(HttpMethod.Post, "https://graph.microsoft.com/v1.0/$batch");
                batchRequest.Content = batchRequestContent;
                await graphClient.AuthenticationProvider.AuthenticateRequestAsync(batchRequest);

                var httpClient    = new HttpClient();
                var batchResponse = await httpClient.SendAsync(batchRequest);

                // 3. Process response
                var batchResponseContent = new BatchResponseContent(batchResponse);
                var responses            = await batchResponseContent.GetResponsesAsync();

                foreach (var response in responses)
                {
                    if (!response.Value.IsSuccessStatusCode)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine($"Issue on response {response.Value}");
                        Console.ResetColor();
                        continue;
                    }
                    //Console.WriteLine(response.Key);
                    var deltaResponse = JsonConvert.DeserializeObject <DeltaResponse>
                                            (await response.Value.Content.ReadAsStringAsync());
                    teamSitesDeltaLinks[response.Key].DeltaLink = deltaResponse.DeltaLink;
                    if (!firstCall)
                    {
                        foreach (var drive in deltaResponse.DriveItems)
                        {
                            await ProcessChangesAsync(drive, teamSitesDeltaLinks[response.Key].LastSyncDate);
                        }
                    }
                }
                //watch.Stop();
                //Console.WriteLine($"Checking Teams completed on {watch.ElapsedMilliseconds / 1000} seconds");
                libraryDeltaCalls++;
            }
            catch (Exception exc)
            {
                AddException(exc, "WatchTeamSite");
                if (exc.InnerException.Message.Contains("Authentication failed"))
                {
                    Console.WriteLine($"retry again due {exc.InnerException.Message}");
                    await Task.Delay(500);
                    await WatchTeamSite(keys);
                }
                else
                {
                    Console.WriteLine(exc.Message);
                    Console.WriteLine(exc.InnerException.Message);
                    Console.WriteLine(exc.StackTrace);
                }
            }
        }