Beispiel #1
0
 private static void UploadContacts(MailboxSession mailboxSession, string accessToken)
 {
     NewFacebookSubscription.Tracer.TraceFunction(0L, "Entering NewFacebookSubscription.UploadContacts. Mailbox {0}.", new object[]
     {
         mailboxSession.Identity
     });
     try
     {
         IPeopleConnectApplicationConfig peopleConnectApplicationConfig = CachedPeopleConnectApplicationConfig.Instance.ReadFacebook();
         string graphApiEndpoint = peopleConnectApplicationConfig.GraphApiEndpoint;
         using (FacebookClient facebookClient = new FacebookClient(new Uri(graphApiEndpoint)))
         {
             ContactsUploaderPerformanceTracker contactsUploaderPerformanceTracker = new ContactsUploaderPerformanceTracker();
             IActivityScope currentActivityScope = ActivityContext.GetCurrentActivityScope();
             if (currentActivityScope != null)
             {
                 currentActivityScope.UserState = contactsUploaderPerformanceTracker;
             }
             else
             {
                 NewFacebookSubscription.Tracer.TraceFunction(0L, "Can't add metadata for Contacts upload as there is no current activity scope.");
             }
             FacebookContactsUploader facebookContactsUploader = new FacebookContactsUploader(contactsUploaderPerformanceTracker, facebookClient, peopleConnectApplicationConfig, (PropertyDefinition[] propertiesToLoad) => new RecursiveContactsEnumerator(mailboxSession, new XSOFactory(), DefaultFolderType.Contacts, propertiesToLoad));
             facebookContactsUploader.UploadContacts(accessToken);
         }
     }
     finally
     {
         NewFacebookSubscription.Tracer.TraceFunction(0L, "Leaving NewFacebookSubscription.UploadContacts. Mailbox {0}.", new object[]
         {
             mailboxSession.Identity
         });
     }
 }
Beispiel #2
0
 private void ProcessFacebookFailure(Exception exception, LocalizedString defaultDescription, bool shouldThrow)
 {
     FacebookContactsUploader.Tracer.TraceError <Exception>((long)this.GetHashCode(), "Found exception while uploading contacts to Facebook. Exception {0}", exception);
     this.performanceTracker.OperationResult = FacebookContactsUploader.SerializeExceptionForOperationResult(exception);
     if (shouldThrow)
     {
         throw new FacebookContactUploadException(defaultDescription, exception);
     }
 }
Beispiel #3
0
        internal void UploadContacts(string accessToken)
        {
            FacebookContactsUploader.Tracer.TraceFunction((long)this.GetHashCode(), "Entering FacebookContactsUploader.UploadContacts.");
            if (string.IsNullOrEmpty(accessToken))
            {
                throw new FacebookContactUploadException(Strings.FacebookEmptyAccessToken);
            }
            bool continueOnContactUploadFailure = this.configuration.ContinueOnContactUploadFailure;

            try
            {
                this.performanceTracker.Start();
                int maximumContactsToUpload = this.configuration.MaximumContactsToUpload;
                IEnumerable <IStorePropertyBag> enumerable = this.contactsEnumerator.Where(new Func <IStorePropertyBag, bool>(this.ShouldExportContact)).Take(maximumContactsToUpload);
                ContactsExporter contactsExporter          = new ContactsExporter(FacebookContactsUploader.ContactPropertiesToExport, enumerable);
                using (Stream streamFromContacts = contactsExporter.GetStreamFromContacts())
                {
                    this.performanceTracker.AddTimeBookmark(ContactsUploaderPerformanceTrackerBookmarks.ExportTime);
                    using (MultipartFormDataContent multipartFormDataContent = FacebookContactsUploader.CreateMultipartFormDataContent(FacebookContactsUploader.MultipartFormDataBoundary, contactsExporter.ContentType, "contacts", streamFromContacts))
                    {
                        this.performanceTracker.AddTimeBookmark(ContactsUploaderPerformanceTrackerBookmarks.FormatTime);
                        using (Stream result = multipartFormDataContent.ReadAsStreamAsync().Result)
                        {
                            this.performanceTracker.ExportedDataSize      = (double)result.Length;
                            this.performanceTracker.ReceivedContactsCount = this.UploadContactsToFacebook(accessToken, contactsExporter.Format, FacebookContactsUploader.GetMultipartFormDataContentType(), result);
                        }
                        this.performanceTracker.AddTimeBookmark(ContactsUploaderPerformanceTrackerBookmarks.UploadTime);
                    }
                }
            }
            catch (TimeoutException exception)
            {
                this.ProcessFacebookFailure(exception, Strings.FacebookTimeoutError, !continueOnContactUploadFailure);
            }
            catch (ProtocolException exception2)
            {
                FacebookClient.AppendDiagnoseDataToException(exception2);
                this.ProcessFacebookFailure(exception2, Strings.FacebookAuthorizationError, !continueOnContactUploadFailure);
            }
            catch (CommunicationException exception3)
            {
                FacebookClient.AppendDiagnoseDataToException(exception3);
                this.ProcessFacebookFailure(exception3, Strings.FacebookCommunicationError, !continueOnContactUploadFailure);
            }
            catch (SerializationException exception4)
            {
                this.ProcessFacebookFailure(exception4, Strings.FacebookCommunicationError, !continueOnContactUploadFailure);
            }
            finally
            {
                this.performanceTracker.Stop();
                FacebookContactsUploader.Tracer.TraceFunction((long)this.GetHashCode(), "Leaving FacebookContactsUploader.UploadContacts.");
            }
        }
Beispiel #4
0
 private static MultipartFormDataContent CreateMultipartFormDataContent(string boundary, string contentType, string fieldName, Stream data)
 {
     return(new MultipartFormDataContent(boundary)
     {
         {
             new StreamContent(data)
             {
                 Headers =
                 {
                     {
                         "Content-Type",
                         contentType
                     }
                 }
             },
             fieldName,
             FacebookContactsUploader.GenerateContactsFileName()
         }
     });
 }