Plugin Base
Provide base interface and APIs for developing plugins of the Notification Service.
namespace ABB.Vtrin.NotificationService
{
public interface INotificationServicePlugin
{
void HandleMessage( string title,
string message,
string configurationstring);
void HandleMessage( string title,
string message,
System.Collections.Generic.List<RecipientData> recipients);
}
}namespace ABB.Vtrin.NotificationService
{
public partial class Utils
{
[System.Text.RegularExpressions.GeneratedRegex( "<.*?>",
System.Text.RegularExpressions.RegexOptions.Compiled |
System.Text.RegularExpressions.RegexOptions.IgnoreCase |
System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace)]
private static partial System.Text.RegularExpressions.Regex HtmlTagRemoverRegex();
[System.Text.RegularExpressions.GeneratedRegex( @"</?(br|div|p)\s*/?>",
System.Text.RegularExpressions.RegexOptions.Compiled |
System.Text.RegularExpressions.RegexOptions.IgnoreCase |
System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace)]
private static partial System.Text.RegularExpressions.Regex HtmlLineBreakRemoverRegex();
[System.Text.RegularExpressions.GeneratedRegex( @"<(script|style)\b[^>]*>[\s\S]*?</\1>",
System.Text.RegularExpressions.RegexOptions.IgnoreCase |
System.Text.RegularExpressions.RegexOptions.Compiled |
System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace)]
private static partial System.Text.RegularExpressions.Regex HtmlScriptStyleRemoverRegex();
[System.Text.RegularExpressions.GeneratedRegex( @"<(hr)\s*/?>",
System.Text.RegularExpressions.RegexOptions.Compiled |
System.Text.RegularExpressions.RegexOptions.IgnoreCase |
System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace)]
private static partial System.Text.RegularExpressions.Regex HtmlHrRemoverRegex();
[System.Text.RegularExpressions.GeneratedRegex( @"(?:(?:\r\n?|\n)[ \t]*){2,}",
System.Text.RegularExpressions.RegexOptions.Compiled |
System.Text.RegularExpressions.RegexOptions.IgnoreCase |
System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace)]
private static partial System.Text.RegularExpressions.Regex MultipleLineBreaksRemoverRegex();
public static bool ParseBool(string s)
{
if(string.IsNullOrEmpty(s))
{
return false;
}
var trimmedstring=s.Trim();
return trimmedstring.Equals("Y", System.StringComparison.InvariantCultureIgnoreCase)
|| trimmedstring.Equals("Yes", System.StringComparison.InvariantCultureIgnoreCase)
|| trimmedstring.Equals("True", System.StringComparison.InvariantCultureIgnoreCase)
|| trimmedstring.Equals("On", System.StringComparison.InvariantCultureIgnoreCase)
|| trimmedstring.Equals("1");
}
public static int ParseInt(string s, int defaultvalue)
{
return int.TryParse(s, out int output) ? output : defaultvalue;
}
public static bool WaitUntilTrue(System.Func<bool> condition)
{
int repeat = 0;
while (!condition())
{
if (repeat++ == 1200)
return false;
System.Threading.Thread.Sleep(100);
}
return true;
}
/// <summary>
/// Converts simple HTML to plain text by removing tags and converting some entities.
/// Does not handle complex HTML.
/// </summary>
/// <param name="html">html string</param>
/// <returns>plain text</returns>
public static string HtmlToPlainText(string html)
{
var s=html;
s=HtmlLineBreakRemoverRegex().Replace(s, "\n");
s=HtmlScriptStyleRemoverRegex().Replace(s, string.Empty);
s=HtmlHrRemoverRegex().Replace(s, "\n-------------------------------\n");
s=HtmlTagRemoverRegex().Replace(s, string.Empty);
s=System.Net.WebUtility.HtmlDecode(s);
s=MultipleLineBreaksRemoverRegex().Replace(s, "\n");
return s;
}
public static bool IsHtml(string s)
{
if (string.IsNullOrEmpty(s))
return false;
return (s.TrimStart().StartsWith(MessageHeaders.HTML, System.StringComparison.OrdinalIgnoreCase));
}
//Used after IsHtml check
public static string TrimHtmlHeader(string s)
{
var trimmedstring=s.TrimStart();
int indexofclosingtag=trimmedstring.IndexOf('>');
if(indexofclosingtag!=-1)
{
return trimmedstring.Substring(indexofclosingtag+1).TrimStart();
}
return s;
}
public static string InsertHtmlHeader(string s)
{
return MessageHeaders.HTML + s;
}
public static string[] GetRecipients(string recipients)
{
string[] recipientarray = recipients.Split([';'], System.StringSplitOptions.RemoveEmptyEntries | System.StringSplitOptions.TrimEntries);
return recipientarray;
}
public static string[] GetRecipients(System.Collections.Generic.List<RecipientData> recipients, int contacttype)
{
var recipientlist = new System.Collections.Generic.List<string>();
foreach(var recipient in recipients)
{
foreach(var contactinfo in recipient.ContactInfoList)
{
if(contactinfo.Type==contacttype && !string.IsNullOrEmpty(contactinfo.Value))
{
recipientlist.Add(contactinfo.Value);
}
}
}
return recipientlist.ToArray();
}
}
}
namespace ABB.Vtrin.NotificationService
{
public record RecipientData ( System.Collections.Generic.List<(int Type, string Value)> ContactInfoList );
}
Updated 20 days ago
