private async void btnImportPartners_Click(object sender, EventArgs e) { if (MessageBox.Show("Are you sure you want to import partnerships from your MyJohnDeere account? Existing partners will be updated and no partners will be deleted.", "Import Partners", MessageBoxButtons.YesNo) == DialogResult.Yes) { List <Partner> results = null; ImportPartnerResult importResult = new ImportPartnerResult(); showLoadingMessage("Retrieving partnership data"); await Task.Run(async() => { importResult = await DataHelper.ImportPartners(results, remoteDataRepository, true); }); if (importResult.Status == ImportStatus.SUCCESS) { await loadPartnerGrid(); } else { MessageBox.Show(importResult.Message); } hideLoadingMessage(); } }
/// <summary> /// Initiates the update of local partnerships and then downloads files for /// relevant partners /// </summary> /// <returns></returns> private async Task executeDownload() { DateTime startTime = DateTime.Now; if (!downloadRunning) { Logger.Log("INFO", "Starting download"); downloadRunning = true; extractErrors = 0; //kick off process to download all files List <Partner> results = null; string message = ""; ImportPartnerResult importResult = new ImportPartnerResult(); //first check for new partner relationships this.Invoke((MethodInvoker) delegate { lblStatusValue.Text = "Getting download information..."; lblStatusValue.ForeColor = Color.Green; }); await Task.Run(async() => { try { using (IUnitOfWorkDataProvider dp = AppStorage.GetUnitOfWorkDataProvider()) { //save last download time at beginning so another download doesn't start if //process takes longer dp.Settings.UpdateSettingWithKey(SettingKeyType.LastDownload, startTime.ToString()); dp.SaveChanges(); } //TODO: NEED A WAY TO PROPAGATE MESSAGE BACK TO SCREEN importResult = await DataHelper.ImportPartners(results, remoteDataRepository, false); } catch (Exception exc) { extractErrors++; Logger.Log(exc); } }); await Task.Run(async() => { try { using (IUnitOfWorkDataProvider dp = AppStorage.GetUnitOfWorkDataProvider()) { downloadFolder = dp.Settings.GetDownloadFolder().TrimEnd('\\') + "\\"; downloadFolder += "temp\\"; //clean up previous download attempt if (System.IO.Directory.Exists(downloadFolder)) { System.IO.Directory.Delete(downloadFolder, true); } int fileCountOld = dp.OutputFiles.FileCount(); batchNumber = dp.SourceFiles.GetNextBatchNumber(); var orgIds = dp.Organizations.GetAll().Select(o => o.RemoteID).ToArray(); var fileIds = dp.SourceFiles.GetFileIds(); List <OrgFileETag> savedETags = new List <OrgFileETag>(); var orgs = dp.Organizations.GetAll(); foreach (var o in orgs) { savedETags.Add(new OrgFileETag { OrgId = o.RemoteID, CreatedDate = o.FilesETagDate, Tag = o.FilesETag }); } Logger.Log("INFO", "Start download all files."); var updatedETags = await remoteDataRepository.DownloadOrganizationFiles(savedETags, downloadFolder, orgIds, fileIds, FileDownloaded, DownloadProgress, FileDownloadError); Logger.Log("INFO", "Finished download all files."); //update organization record with new file eTags foreach (var o in orgs) { var tag = updatedETags.SingleOrDefault(t => t.OrgId == o.RemoteID); if (tag != null) { o.FilesETag = tag.Tag; o.FilesETagDate = tag.CreatedDate; } } dp.SaveChanges(); int fileCountNew = dp.OutputFiles.FileCount(); Logger.Log("INFO", "Old file count: " + fileCountOld.ToString()); Logger.Log("INFO", "New file count: " + fileCountNew.ToString()); if (System.IO.Directory.Exists(downloadFolder)) { System.IO.Directory.Delete(downloadFolder, true); } if (fileCountNew > fileCountOld) { OnNewFilesDownloaded(new EventArgs()); } } } catch (Exception exc) { extractErrors++; Logger.Log(exc); } }); await LoadRecentFilesAsync(); this.Invoke((MethodInvoker) delegate { lblNextDownloadValue.Text = "--"; if (extractErrors > 0) { lblStatusValue.Text = "Completed with errors at " + DateTime.Now.ToString(); lblStatusValue.ForeColor = Color.Red; } else { lblStatusValue.Text = "Completed successfully at " + DateTime.Now.ToString(); lblStatusValue.ForeColor = Color.Green; } }); downloadRunning = false; } }