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 }); } }
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); } }
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."); } }
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() } }); }