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