From 04e9d94ecea689c3056f2e7cd28d0b0a24374862 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Wed, 9 Jun 2021 18:12:51 +0000 Subject: [PATCH] --- .vscode/launch.json | 2 +- server/AyaNova/generator/CoreJobNotify.cs | 22 +++++++++++++--- server/AyaNova/util/DateUtil.cs | 32 +++++++++++++++++++++++ 3 files changed, 51 insertions(+), 5 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index fcc80a75..b77f3b95 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -53,7 +53,7 @@ "AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles", "AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles", "AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles", - "AYANOVA_SERVER_TEST_MODE": "true", + "AYANOVA_SERVER_TEST_MODE": "false", "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small", "AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7", "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\" diff --git a/server/AyaNova/generator/CoreJobNotify.cs b/server/AyaNova/generator/CoreJobNotify.cs index 4a282997..1630c08a 100644 --- a/server/AyaNova/generator/CoreJobNotify.cs +++ b/server/AyaNova/generator/CoreJobNotify.cs @@ -98,7 +98,7 @@ namespace AyaNova.Biz if (Subscription.DeliveryMethod == NotifyDeliveryMethod.App) await DeliverInApp(notifyevent, Subscription.AgeValue, ct); else if (Subscription.DeliveryMethod == NotifyDeliveryMethod.SMTP) - await DeliverSMTP(notifyevent, Subscription.DeliveryAddress, ct); + await DeliverSMTP(notifyevent, Subscription.AgeValue, Subscription.DeliveryAddress, ct); } } } @@ -128,7 +128,7 @@ namespace AyaNova.Biz - private static async Task DeliverSMTP(NotifyEvent ne, string deliveryAddress, AyContext ct) + private static async Task DeliverSMTP(NotifyEvent ne, TimeSpan ageValue, string deliveryAddress, AyContext ct) { try { @@ -147,6 +147,15 @@ namespace AyaNova.Biz TranslationKeysToFetch.Add("Server"); var EventTypeTranslationKey = "NotifyEvent" + ne.EventType.ToString(); TranslationKeysToFetch.Add(EventTypeTranslationKey); + if (ageValue != TimeSpan.Zero) + { + TranslationKeysToFetch.Add("TimeSpanDays"); + TranslationKeysToFetch.Add("TimeSpanHours"); + TranslationKeysToFetch.Add("TimeSpanMinutes"); + TranslationKeysToFetch.Add("TimeSpanSeconds"); + } + + //get translations var transid = await ct.UserOptions.AsNoTracking().Where(x => x.UserId == ne.UserId).Select(x => x.TranslationId).FirstOrDefaultAsync(); var LT = await TranslationBiz.GetSubsetStaticAsync(TranslationKeysToFetch, transid); @@ -165,17 +174,21 @@ namespace AyaNova.Biz var subject = $"AY:{AyaTypeTranslated}:{name}:{SubscriptionTypeName}"; + //Age relevant notification + string AgeDisplay = ""; + if (ageValue != TimeSpan.Zero) + AgeDisplay = $"({AyaNova.Util.DateUtil.FormatTimeSpan(ageValue, LT["TimeSpanDays"], LT["TimeSpanHours"], LT["TimeSpanMinutes"], LT["TimeSpanSeconds"])})\n"; + //var test=AyaNova.Util.DateUtil.FormatTimeSpan(new TimeSpan(2,3,4,5), LT["TimeSpanDays"], LT["TimeSpanHours"], LT["TimeSpanMinutes"], LT["TimeSpanSeconds"]); IMailer m = AyaNova.Util.ServiceProviderProvider.Mailer; - var body = ""; //NOTE: if need any other exemptions besides backup status make a separate static function "CanOpen(NotifyEventType)" if (ne.ObjectId != 0 || ne.EventType == NotifyEventType.BackupStatus) { - body = $"{AyaTypeTranslated}\n{OpenObjectUrlBuilder(ne.AyaType, ne.ObjectId, ne.EventType)}\n"; + body = $"{AgeDisplay}{AyaTypeTranslated}\n{OpenObjectUrlBuilder(ne.AyaType, ne.ObjectId, ne.EventType)}\n"; } body += ne.Message; @@ -196,6 +209,7 @@ namespace AyaNova.Biz await m.SendEmailAsync(deliveryAddress, subject, body, ServerGlobalOpsSettingsCache.Notify); } } + await NotifyEventHelper.AddGeneralNotifyEvent(NotifyEventType.GeneralNotification, $"Test of general notification system", "Error", null, ne.UserId); } catch (Exception ex) { diff --git a/server/AyaNova/util/DateUtil.cs b/server/AyaNova/util/DateUtil.cs index 8801355d..0cce4c2e 100644 --- a/server/AyaNova/util/DateUtil.cs +++ b/server/AyaNova/util/DateUtil.cs @@ -122,6 +122,38 @@ namespace AyaNova.Util } + /// + /// returns passed in timespan to human readable format + /// as short as possible using passed in time span translations + /// + /// + public static string FormatTimeSpan(TimeSpan timeSpan, string dayz = "days", string hourz = "hours", string minutez = "minutes", string secondz = "seconds") + { + if (timeSpan == TimeSpan.Zero) + return ""; + + var components = new List> + { + Tuple.Create((int) timeSpan.TotalDays, dayz), + Tuple.Create(timeSpan.Hours, hourz), + Tuple.Create(timeSpan.Minutes, minutez), + Tuple.Create(timeSpan.Seconds, secondz), + }; + + components.RemoveAll(i => i.Item1 == 0); + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + foreach (var t in components) + { + sb.Append(t.Item1); + sb.Append(" "); + sb.Append(t.Item2); + sb.Append(" "); + } + + return sb.ToString().Trim(); + } + + }//eoc }//eons \ No newline at end of file