public Task NotifyMailMergeCompletedAsync( string mergeTemplateId, string connectionId, RunMergeTemplateProgress progressUpdated, CancellationToken cancellationToken = default(CancellationToken)) { // TODO: actually send notificaiton to MailmanHub like in the MergeTemplatesController _logger.Information("Mail merge of template {MergeTemplateId} complete: Success={NumberProcessed}, Skipped={NumberSkipped}, Errors={NumberOfErrors}, Total={TotalNumber}", mergeTemplateId, progressUpdated.Processed, progressUpdated.Skipped, progressUpdated.Errors, progressUpdated.Total); return(Task.CompletedTask); }
public async Task <RunMergeTemplateProgress> RunMailMergeAsync(RunMailMergeOptions options, CancellationToken cancellationToken = default(CancellationToken)) { if (options == null) { throw new ArgumentNullException(nameof(options)); } if (string.IsNullOrWhiteSpace(options.MergeTemplateId)) { throw new ArgumentNullException("options.MergeTemplateId", "MergeTempalteId cannot be null or empty"); } RunMergeTemplateProgress returnValue = null; await WithWorker(RUN_MAIL_MERGE_SCOPE, async httpClient => { try { var response = await httpClient.PostAsJsonAsync( "api/MailMerge/run", new RunMailMergeOptions() { MergeTemplateId = options.MergeTemplateId, ConnectionId = options.ConnectionId }, cancellationToken); if (response.IsSuccessStatusCode) { string responseString = await response.Content.ReadAsStringAsync(); returnValue = JsonConvert.DeserializeObject <RunMergeTemplateProgress>(responseString); } else { throw new InvalidOperationException($"Remote server did not return success ({response.StatusCode})"); } } catch (Exception err) { _logger.Error(err, "Unable to communicate with worker process"); throw; } }); return(returnValue); }
public async Task NotifyMailMergeUpdatedAsync(string mergeTemplateId, string connectionId, RunMergeTemplateProgress progressUpdated, CancellationToken cancellationToken = default(CancellationToken)) { await WithServer(NOTIFICATION_SCOPE, async httpClient => { await httpClient.PostAsJsonAsync( "api/MergeTemplates/run/updated", new MailMergeProgress() { MergeTemplateId = mergeTemplateId, ConnectionId = connectionId, Progress = progressUpdated }, cancellationToken); }); }
public Task NotifyMailMergeUpdatedAsync(string mergeTemplateId, string connectionId, RunMergeTemplateProgress progressUpdated, CancellationToken cancellationToken = default(CancellationToken)) { // TODO: actually send notificaiton to MailmanHub like in the MergeTemplatesController _logger.Information("Mail merge of template {MergeTemplateId}: {NumberCompleted}/{TotalNumber}", mergeTemplateId, progressUpdated.Completed, progressUpdated.Total); return(Task.CompletedTask); }
public async Task <RunMergeTemplateProgress> RunMergeTemplateAsync( MergeTemplate mergeTemplate, Action <RunMergeTemplateProgress> progressReporter = null, CancellationToken cancellationToken = default(CancellationToken)) { if (mergeTemplate == null) { throw new ArgumentNullException(nameof(mergeTemplate)); } var emailMergeTemplate = mergeTemplate as EmailMergeTemplate; if (emailMergeTemplate == null) { throw new InvalidOperationException("Currently only mergeTemplates of type Email are supported."); } if (emailMergeTemplate.EmailTemplate == null) { throw new InvalidOperationException("MergeTemplate.EmailTemplate cannot ben null"); } string range = mergeTemplate.SheetName; var dataRange = await _sheetsService.GetDataRangeAsync( mergeTemplate.SpreadSheetId, mergeTemplate.SheetName); if (mergeTemplate.HeaderRowNumber > 1) { // we'll define a custom range range = new A1Notation(mergeTemplate.SheetName, dataRange.StartColumn, mergeTemplate.HeaderRowNumber, dataRange.EndColumn, dataRange.EndRow).ToString(); } if (!dataRange.EndRow.HasValue) { throw new InvalidOperationException($"Could not retrieve the number of rows in sheet {mergeTemplate.SheetName}"); } var progress = new RunMergeTemplateProgress( dataRange.EndRow.Value - (dataRange.StartRow ?? 1)); await _sheetsService.GetValuesAsDictionaryDataPump(mergeTemplate.SpreadSheetId, range, async values => { if (!ShouldProcess(mergeTemplate, values)) { progress.AddSkipped(); return; } try { await ProcessMergeTemplateAsync(emailMergeTemplate.EmailTemplate, values); progress.AddProcessed(); } catch (Exception err) { _logger.Error(err, "Error processing merge template"); progress.AddError(); } finally { progressReporter?.Invoke(progress); } }); return(progress); }