diff --git a/PlexRequests.Core.Tests/NotificationMessageResolverTests.cs b/PlexRequests.Core.Tests/NotificationMessageResolverTests.cs index 58cfb06e5..8b89a6e2f 100644 --- a/PlexRequests.Core.Tests/NotificationMessageResolverTests.cs +++ b/PlexRequests.Core.Tests/NotificationMessageResolverTests.cs @@ -1,147 +1,147 @@ -#region Copyright -// /************************************************************************ -// Copyright (c) 2016 Jamie Rees -// File: AuthenticationSettingsTests.cs -// Created By: Jamie Rees -// -// Permission is hereby granted, free of charge, to any person obtaining -// a copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// ************************************************************************/ -#endregion -using System; -using System.Collections.Generic; +//#region Copyright +//// /************************************************************************ +//// Copyright (c) 2016 Jamie Rees +//// File: AuthenticationSettingsTests.cs +//// Created By: Jamie Rees +//// +//// Permission is hereby granted, free of charge, to any person obtaining +//// a copy of this software and associated documentation files (the +//// "Software"), to deal in the Software without restriction, including +//// without limitation the rights to use, copy, modify, merge, publish, +//// distribute, sublicense, and/or sell copies of the Software, and to +//// permit persons to whom the Software is furnished to do so, subject to +//// the following conditions: +//// +//// The above copyright notice and this permission notice shall be +//// included in all copies or substantial portions of the Software. +//// +//// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +//// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +//// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +//// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +//// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +//// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +//// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +//// ************************************************************************/ +//#endregion +//using System; +//using System.Collections.Generic; -using NUnit.Framework; +//using NUnit.Framework; -using PlexRequests.Core.Models; -using PlexRequests.Core.Notification; -using PlexRequests.Core.SettingModels; +//using PlexRequests.Core.Models; +//using PlexRequests.Core.Notification; +//using PlexRequests.Core.SettingModels; -namespace PlexRequests.Core.Tests -{ - [TestFixture] - public class NotificationMessageResolverTests - { - [TestCaseSource(nameof(MessageBodyResolver))] - public string ResolveBody(string body, NotificationMessageCurlys param) - { - var n = new NotificationMessageResolver(); - var s = new NotificationSettings - { - Message = new List { new Notification.NotificationMessage { NotificationType = NotificationType.NewRequest, Body = body } } - }; +//namespace PlexRequests.Core.Tests +//{ +// [TestFixture] +// public class NotificationMessageResolverTests +// { +// [TestCaseSource(nameof(MessageBodyResolver))] +// public string ResolveBody(string body, NotificationMessageCurlys param) +// { +// var n = new NotificationMessageResolver(); +// var s = new NotificationSettings +// { +// Message = new List { new Notification.NotificationMessage { NotificationType = NotificationType.NewRequest, Body = body } } +// }; - var result = n.ParseMessage(s, NotificationType.NewRequest, param); - return result.Body; - } +// var result = n.ParseMessage(s, NotificationType.NewRequest, param, TransportType.Email); +// return result.Body; +// } - [TestCaseSource(nameof(MessageSubjectResolver))] - public string ResolveSubject(string subject, NotificationMessageCurlys param) - { - var n = new NotificationMessageResolver(); - var s = new NotificationSettings - { - Message = new List { new Notification.NotificationMessage { NotificationType = NotificationType.NewRequest, Subject = subject }} - }; +// [TestCaseSource(nameof(MessageSubjectResolver))] +// public string ResolveSubject(string subject, NotificationMessageCurlys param) +// { +// var n = new NotificationMessageResolver(); +// var s = new NotificationSettings +// { +// Message = new List { new Notification.NotificationMessage { NotificationType = NotificationType.NewRequest, Subject = subject }} +// }; - var result = n.ParseMessage(s, NotificationType.NewRequest, param); - return result.Subject; - } +// var result = n.ParseMessage(s, NotificationType.NewRequest, param, TransportType.Email); +// return result.Subject; +// } - private static IEnumerable MessageSubjectResolver - { - get - { - yield return new TestCaseData( - "{Username} has requested a {Type}", - new NotificationMessageCurlys("Jamie", "Finding Dory", DateTime.Now.ToString(), "Movie", string.Empty)) - .Returns("Jamie has requested a Movie").SetName("Subject Curlys"); +// private static IEnumerable MessageSubjectResolver +// { +// get +// { +// yield return new TestCaseData( +// "{Username} has requested a {Type}", +// new NotificationMessageCurlys("Jamie", "Finding Dory", DateTime.Now.ToString(), "Movie", string.Empty)) +// .Returns("Jamie has requested a Movie").SetName("Subject Curlys"); - yield return new TestCaseData( - null, - new NotificationMessageCurlys("Jamie", "Finding Dory", DateTime.Now.ToString(), "Movie", string.Empty)) - .Returns(string.Empty).SetName("Empty Subject"); +// yield return new TestCaseData( +// null, +// new NotificationMessageCurlys("Jamie", "Finding Dory", DateTime.Now.ToString(), "Movie", string.Empty)) +// .Returns(string.Empty).SetName("Empty Subject"); - yield return new TestCaseData( - "New Request Incoming!", - new NotificationMessageCurlys("Jamie", "Finding Dory", DateTime.Now.ToString(), "Movie", string.Empty)) - .Returns("New Request Incoming!").SetName("No curlys"); +// yield return new TestCaseData( +// "New Request Incoming!", +// new NotificationMessageCurlys("Jamie", "Finding Dory", DateTime.Now.ToString(), "Movie", string.Empty)) +// .Returns("New Request Incoming!").SetName("No curlys"); - yield return new TestCaseData( - "%$R£%$£^%$&{Username}@{}:§", - new NotificationMessageCurlys("Jamie", "Finding Dory", DateTime.Now.ToString(), "Movie", string.Empty)) - .Returns("%$R£%$£^%$&Jamie@{}:§").SetName("Special Chars"); - } - } - private static IEnumerable MessageBodyResolver - { - get - { - yield return new TestCaseData( - "There has been a new request from {Username}, Title: {Title} for {Type}", - new NotificationMessageCurlys("Jamie", "Finding Dory", DateTime.Now.ToString(), "Movie", string.Empty)) - .Returns("There has been a new request from Jamie, Title: Finding Dory for Movie").SetName("FindingDory"); +// yield return new TestCaseData( +// "%$R£%$£^%$&{Username}@{}:§", +// new NotificationMessageCurlys("Jamie", "Finding Dory", DateTime.Now.ToString(), "Movie", string.Empty)) +// .Returns("%$R£%$£^%$&Jamie@{}:§").SetName("Special Chars"); +// } +// } +// private static IEnumerable MessageBodyResolver +// { +// get +// { +// yield return new TestCaseData( +// "There has been a new request from {Username}, Title: {Title} for {Type}", +// new NotificationMessageCurlys("Jamie", "Finding Dory", DateTime.Now.ToString(), "Movie", string.Empty)) +// .Returns("There has been a new request from Jamie, Title: Finding Dory for Movie").SetName("FindingDory"); - yield return new TestCaseData( - null, - new NotificationMessageCurlys(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty)) - .Returns(string.Empty) - .SetName("Empty Message"); +// yield return new TestCaseData( +// null, +// new NotificationMessageCurlys(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty)) +// .Returns(string.Empty) +// .SetName("Empty Message"); - yield return new TestCaseData( - "{{Wowwzer}} Damn}{{Username}}}}", - new NotificationMessageCurlys("HEY!", string.Empty, string.Empty, string.Empty, string.Empty)) - .Returns("{{Wowwzer}} Damn}{HEY!}}}") - .SetName("Multiple Curlys"); +// yield return new TestCaseData( +// "{{Wowwzer}} Damn}{{Username}}}}", +// new NotificationMessageCurlys("HEY!", string.Empty, string.Empty, string.Empty, string.Empty)) +// .Returns("{{Wowwzer}} Damn}{HEY!}}}") +// .SetName("Multiple Curlys"); - yield return new TestCaseData( - "This is a message with no curlys", - new NotificationMessageCurlys("Jamie", "Finding Dory", DateTime.Now.ToString(), "Movie", string.Empty)) - .Returns("This is a message with no curlys") - .SetName("No Curlys"); +// yield return new TestCaseData( +// "This is a message with no curlys", +// new NotificationMessageCurlys("Jamie", "Finding Dory", DateTime.Now.ToString(), "Movie", string.Empty)) +// .Returns("This is a message with no curlys") +// .SetName("No Curlys"); - yield return new TestCaseData( - new string(')', 5000), - new NotificationMessageCurlys(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty)) - .Returns(new string(')', 5000)) - .SetName("Long String"); +// yield return new TestCaseData( +// new string(')', 5000), +// new NotificationMessageCurlys(string.Empty, string.Empty, string.Empty, string.Empty, string.Empty)) +// .Returns(new string(')', 5000)) +// .SetName("Long String"); - yield return new TestCaseData( - "This is a {Username} and {Username} Because {Issue}{Issue}", - new NotificationMessageCurlys("HEY!", string.Empty, string.Empty, string.Empty, "Bob")) - .Returns("This is a HEY! and HEY! Because BobBob") - .SetName("Double Curly"); +// yield return new TestCaseData( +// "This is a {Username} and {Username} Because {Issue}{Issue}", +// new NotificationMessageCurlys("HEY!", string.Empty, string.Empty, string.Empty, "Bob")) +// .Returns("This is a HEY! and HEY! Because BobBob") +// .SetName("Double Curly"); - yield return new TestCaseData( - "This is a {username} and {username} Because {Issue}{Issue}", - new NotificationMessageCurlys("HEY!", string.Empty, string.Empty, string.Empty, "Bob")) - .Returns("This is a {username} and {username} Because BobBob") - .SetName("Case sensitive"); +// yield return new TestCaseData( +// "This is a {username} and {username} Because {Issue}{Issue}", +// new NotificationMessageCurlys("HEY!", string.Empty, string.Empty, string.Empty, "Bob")) +// .Returns("This is a {username} and {username} Because BobBob") +// .SetName("Case sensitive"); - yield return new TestCaseData( - "{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}", - new NotificationMessageCurlys("HEY!", string.Empty, "b", string.Empty, "Bob")) - .Returns("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb") - .SetName("Lots of curlys"); - } - } - } -} \ No newline at end of file +// yield return new TestCaseData( +// "{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}{Date}", +// new NotificationMessageCurlys("HEY!", string.Empty, "b", string.Empty, "Bob")) +// .Returns("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb") +// .SetName("Lots of curlys"); +// } +// } +// } +//} \ No newline at end of file diff --git a/PlexRequests.Core/Notification/NotificationMessageResolver.cs b/PlexRequests.Core/Notification/NotificationMessageResolver.cs index ed90bbf12..f9c7b1b82 100644 --- a/PlexRequests.Core/Notification/NotificationMessageResolver.cs +++ b/PlexRequests.Core/Notification/NotificationMessageResolver.cs @@ -24,6 +24,8 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // ************************************************************************/ #endregion + +using System; using System.Collections.Generic; using System.Linq; @@ -50,16 +52,37 @@ namespace PlexRequests.Core.Notification /// The notification. /// The type. /// The c. + /// Type of the transport. /// - public NotificationMessageContent ParseMessage(T notification, NotificationType type, NotificationMessageCurlys c) where T : NotificationSettings + public NotificationMessageContent ParseMessage(NotificationSettingsV2 notification, NotificationType type, NotificationMessageCurlys c, TransportType transportType) { - var content = notification.Message.FirstOrDefault(x => x.NotificationType == type); + IEnumerable content = null; + switch (transportType) + { + case TransportType.Email: + content = notification.EmailNotification; + break; + case TransportType.Pushbullet: + content = notification.PushbulletNotification; + break; + case TransportType.Pushover: + content = notification.PushoverNotification; + break; + case TransportType.Slack: + content = notification.SlackNotification; + break; + default: + throw new ArgumentOutOfRangeException(nameof(transportType), transportType, null); + } + if (content == null) { return new NotificationMessageContent(); } - return Resolve(content.Body, content.Subject, c.Curlys); + var message = content.FirstOrDefault(x => x.NotificationType == type) ?? new NotificationMessage(); + + return Resolve(message.Body, message.Subject, c.Curlys); } /// @@ -78,7 +101,7 @@ namespace PlexRequests.Core.Notification body = ReplaceFields(bodyFields, parameters, body); subject = ReplaceFields(subjectFields, parameters, subject); - return new NotificationMessageContent { Body = body ?? string.Empty, Subject = subject ?? string.Empty }; + return new NotificationMessageContent {Body = body ?? string.Empty, Subject = subject ?? string.Empty}; } /// @@ -123,7 +146,6 @@ namespace PlexRequests.Core.Notification { currentWord += c.ToString(); // Add the character onto the word. } - } return fields; diff --git a/PlexRequests.Core/Notification/Templates/BasicRequestTemplate.html b/PlexRequests.Core/Notification/Templates/BasicRequestTemplate.html new file mode 100644 index 000000000..c7d7e6c9d --- /dev/null +++ b/PlexRequests.Core/Notification/Templates/BasicRequestTemplate.html @@ -0,0 +1,189 @@ + + + + + + Plex Requests .Net + + + + + + + + + +
  +
+ + + + + + + + + + + +
+ + + + + + + + + + +
+ +
+

Hi there!

+

{@SUBJECT}

+

{@BODY}

+ +
+ +
+
+ + + + + + +
+
 
+ + \ No newline at end of file diff --git a/PlexRequests.Core/Notification/Templates/EmailBasicTemplate.cs b/PlexRequests.Core/Notification/Templates/EmailBasicTemplate.cs new file mode 100644 index 000000000..8ce53afb6 --- /dev/null +++ b/PlexRequests.Core/Notification/Templates/EmailBasicTemplate.cs @@ -0,0 +1,70 @@ +#region Copyright +// /************************************************************************ +// Copyright (c) 2016 Jamie Rees +// File: EmailBasicTemplate.cs +// Created By: Jamie Rees +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// ************************************************************************/ +#endregion + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using NLog; +using PlexRequests.Core.Models; +using PlexRequests.Core.SettingModels; + +namespace PlexRequests.Core.Notification.Templates +{ + public class EmailBasicTemplate : IEmailBasicTemplate + { + public string TemplateLocation => Path.Combine(Path.GetDirectoryName(Application.ExecutablePath) ?? string.Empty, "Notification", "Templates", "BasicRequestTemplate.html"); + private static readonly Logger Log = LogManager.GetCurrentClassLogger(); + + private const string SubjectKey = "{@SUBJECT}"; + private const string BodyKey = "{@BODY}"; + private const string ImgSrc = "{@IMGSRC}"; + private const string DateKey = "{@DATENOW}"; + + public string LoadTemplate(string subject, string body, string imgSrc) + { + try + { + var sb = new StringBuilder(File.ReadAllText(TemplateLocation)); + sb.Replace(SubjectKey, subject); + sb.Replace(BodyKey, body); + sb.Replace(ImgSrc, imgSrc); + sb.Replace(DateKey, DateTime.Now.ToString("f")); + + return sb.ToString(); + } + catch (Exception e) + { + Log.Error(e); + return string.Empty; + } + } + } +} \ No newline at end of file diff --git a/PlexRequests.Core/Notification/Templates/IEmailBasicTemplate.cs b/PlexRequests.Core/Notification/Templates/IEmailBasicTemplate.cs new file mode 100644 index 000000000..e72645722 --- /dev/null +++ b/PlexRequests.Core/Notification/Templates/IEmailBasicTemplate.cs @@ -0,0 +1,37 @@ +#region Copyright +// /************************************************************************ +// Copyright (c) 2016 Jamie Rees +// File: IEmailBasicTemplate.cs +// Created By: Jamie Rees +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// ************************************************************************/ +#endregion + +using System.Threading.Tasks; + +namespace PlexRequests.Core.Notification.Templates +{ + public interface IEmailBasicTemplate + { + string LoadTemplate(string subject, string body, string imgSrc); + string TemplateLocation { get; } + } +} \ No newline at end of file diff --git a/PlexRequests.Core/Notification/TransportType.cs b/PlexRequests.Core/Notification/TransportType.cs new file mode 100644 index 000000000..6244b2f99 --- /dev/null +++ b/PlexRequests.Core/Notification/TransportType.cs @@ -0,0 +1,36 @@ +#region Copyright +// /************************************************************************ +// Copyright (c) 2016 Jamie Rees +// File: TransportType.cs +// Created By: Jamie Rees +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// ************************************************************************/ +#endregion +namespace PlexRequests.Core.Notification +{ + public enum TransportType + { + Email, + Pushbullet, + Pushover, + Slack + } +} \ No newline at end of file diff --git a/PlexRequests.Core/PlexRequests.Core.csproj b/PlexRequests.Core/PlexRequests.Core.csproj index 2e2d1b3a1..d3cd82a7b 100644 --- a/PlexRequests.Core/PlexRequests.Core.csproj +++ b/PlexRequests.Core/PlexRequests.Core.csproj @@ -44,6 +44,7 @@ + @@ -81,11 +82,15 @@ + + + + @@ -134,7 +139,11 @@ PlexRequests.Store - + + + PreserveNewest + + +
+
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+ } +
+ +
+
+ +
+
+ + + + + + \ No newline at end of file diff --git a/PlexRequests.sln b/PlexRequests.sln index f806ea2f7..ec6287fad 100644 --- a/PlexRequests.sln +++ b/PlexRequests.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 +VisualStudioVersion = 14.0.25123.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PlexRequests.UI", "PlexRequests.UI\PlexRequests.UI.csproj", "{68F5F5F3-B8BB-4911-875F-6F00AAE04EA6}" EndProject