internal bool ContactEntryUploadFailure(
     ContactEntry contactEntry,
     UploadResult uploadResult) {
   Debug.Assert(uploadResult == UploadResult.InternalError ||
       uploadResult == UploadResult.ServiceUnavailable ||
       uploadResult == UploadResult.Conflict ||
       uploadResult == UploadResult.Unknown);
   try {
     GoogleEmailUploaderTrace.EnteringMethod(
         "GoogleEmailUploaderModel.ContactBatchUploadFailure()");
     if (GoogleEmailUploaderConfig.LogFullXml) {
       GoogleEmailUploaderTrace.WriteLine("Response Xml:");
       GoogleEmailUploaderTrace.WriteXml(contactEntry.ResponseString);
     }
     GoogleEmailUploaderTrace.WriteLine("Contact upload failure ({0}): {1}",
                              uploadResult,
                              contactEntry.ContactName);
     if (uploadResult == UploadResult.InternalError ||
         uploadResult == UploadResult.Conflict ||
         uploadResult == UploadResult.Unknown) {
       if (this.pauseTime == GoogleEmailUploaderConfig.MaximumPauseTime) {
         GoogleEmailUploaderTrace.WriteLine(
             "Contact failed with internal error");
         GoogleEmailUploaderTrace.WriteLine("Xml -");
         GoogleEmailUploaderTrace.WriteXml(contactEntry.GetEntryXML());
         GoogleEmailUploaderTrace.WriteLine("Result -");
         GoogleEmailUploaderTrace.WriteXml(contactEntry.ResponseString);
         this.ProcessUploadContactEntry(contactEntry);
         this.pauseTime = GoogleEmailUploaderConfig.MinimumPauseTime;
         return false;
       }
       this.TimedPauseUpload(PauseReason.ServerInternalError);
       this.RaisePauseTime();
     } else {
       GoogleEmailUploaderTrace.WriteLine(
           "Batch failed with service unavailable");
       this.TimedPauseUpload(PauseReason.ServiceUnavailable);
       this.RaisePauseTime();
     }
     return true;
   } finally {
     GoogleEmailUploaderTrace.ExitingMethod(
         "GoogleEmailUploaderModel.ContactBatchUploadFailure()");
   }
 }
 internal void ContactEntryUploaded(ContactEntry contactEntry,
                                    UploadResult uploadResult) {
   Debug.Assert(uploadResult == UploadResult.BadRequest ||
                uploadResult == UploadResult.Created);
   try {
     GoogleEmailUploaderTrace.EnteringMethod(
         "GoogleEmailUploaderModel.ContactEntryUploaded()");
     if (GoogleEmailUploaderConfig.LogFullXml) {
       GoogleEmailUploaderTrace.WriteLine("Response:");
       GoogleEmailUploaderTrace.WriteXml(contactEntry.ResponseString);
     }
     GoogleEmailUploaderTrace.WriteLine("Contact uploaded: {0}",
                                        contactEntry.ContactName);
     this.ProcessUploadContactEntry(contactEntry);
     if (this.ContactUploadedEvent != null) {
       this.ContactUploadedEvent(contactEntry);
     }
     this.pauseTime = GoogleEmailUploaderConfig.MinimumPauseTime;
   } finally {
     GoogleEmailUploaderTrace.ExitingMethod(
         "GoogleEmailUploaderModel.ContactEntryUploaded()");
   }
 }
 internal void ContactEntryUploadTryStart(ContactEntry contactEntry) {
   try {
     GoogleEmailUploaderTrace.EnteringMethod(
         "GoogleEmailUploaderModel.ContactBatchUploadTryStart()");
     if (GoogleEmailUploaderConfig.LogFullXml) {
       GoogleEmailUploaderTrace.WriteLine("Request Xml:");
       GoogleEmailUploaderTrace.WriteXml(contactEntry.GetEntryXML());
     }
     if (this.ContactUploadTryStartEvent != null) {
       this.ContactUploadTryStartEvent(contactEntry);
     }
   } finally {
     GoogleEmailUploaderTrace.ExitingMethod(
         "GoogleEmailUploaderModel.ContactBatchUploadTryStart()");
   }
 }
 void ProcessUploadContactEntry(ContactEntry contactEntry) {
   Debug.Assert(this.modelState == ModelState.UploadingPause ||
                this.modelState == ModelState.Uploading);
   if (contactEntry.Uploaded) {
     contactEntry.StoreModel.SuccessfullyUploaded(contactEntry.ContactId);
     this.uploadedContactCount++;
   } else {
     FailedContactDatum failedContactDatum =
         new FailedContactDatum(contactEntry.ContactName,
                                contactEntry.FailedReason);
     contactEntry.StoreModel.FailedToUpload(contactEntry.ContactId,
                                            failedContactDatum);
     this.failedContactCount++;
   }
   this.lkgStatePersistor.SaveLKGState(this);
 }
 internal MailUploader(IHttpFactory httpFactory,
                       string emailId,
                       string password,
                       string applicationName,
                       GoogleEmailUploaderModel googleEmailUploaderModel) {
   this.HttpFactory = httpFactory;
   this.EmailId = emailId;
   this.Password = password;
   GoogleAuthenticator authenticator =
       new GoogleAuthenticator(httpFactory,
                               AccountType.GoogleOrHosted,
                               applicationName);
   AuthenticationResponse resp =
       authenticator.AuthenticateForService(this.EmailId,
                                            this.Password,
                                            "apps");
   this.MailAuthenticationToken = resp.AuthToken;
   resp = authenticator.AuthenticateForService(this.EmailId,
                                               this.Password,
                                               "cp");
   this.ContactAuthenticationToken = resp.AuthToken;
   this.GoogleEmailUploaderModel = googleEmailUploaderModel;
   string[] splits = emailId.Split('@');
   this.UserName = splits[0];
   this.DomainName = splits[1];
   this.MailBatch = new MailBatch(googleEmailUploaderModel);
   this.ContactEntry = new ContactEntry(googleEmailUploaderModel);
   this.PauseEvent = new ManualResetEvent(true);
   this.batchMailUploadUrl =
       string.Format(
           GoogleEmailUploaderConfig.EmailMigrationUrl,
           this.DomainName,
           this.UserName);
   this.batchContactUploadUrl =
       string.Format(
           MailUploader.ContactMigrationURLTemplate,
           this.EmailId);
   this.ApplicationName = applicationName;
 }
 void googleEmailUploaderModel_ContactUploadedEvent(
     ContactEntry contactEntry) {
   if (this.IsHandleCreated && !this.IsDisposed) {
     this.Invoke(new BoolDelegate(this.UpdateStatistics),
                 new object[] { false });
   }
 }
 void googleEmailUploaderModel_ContactUploadTryStartEvent(
     ContactEntry contactEntry) {
   if (this.IsHandleCreated && !this.IsDisposed) {
     if (!this.googleEmailUploaderModel.IsPaused) {
       this.Invoke(new StringDelegate(this.UpdateMessageLabel),
                   new object[] { string.Empty });
     }
   }
 }