#73 api side, untested
This commit is contained in:
parent
38df54baff
commit
438c11af4f
@ -9,5 +9,6 @@
|
|||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Manganato/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Manganato/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Mangasee/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Mangasee/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Mangaworld/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Mangaworld/@EntryIndexedValue">True</s:Boolean>
|
||||||
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Ntfy/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Taskmanager/@EntryIndexedValue">True</s:Boolean>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Taskmanager/@EntryIndexedValue">True</s:Boolean>
|
||||||
<s:Boolean x:Key="/Default/UserDictionary/Words/=Tranga/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
<s:Boolean x:Key="/Default/UserDictionary/Words/=Tranga/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
|
@ -10,7 +10,7 @@ public abstract class NotificationConnector : GlobalBase
|
|||||||
this.notificationConnectorType = notificationConnectorType;
|
this.notificationConnectorType = notificationConnectorType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum NotificationConnectorType : byte { Gotify = 0, LunaSea = 1 }
|
public enum NotificationConnectorType : byte { Gotify = 0, LunaSea = 1, Ntfy = 2 }
|
||||||
|
|
||||||
public abstract void SendNotification(string title, string notificationText);
|
public abstract void SendNotification(string title, string notificationText);
|
||||||
}
|
}
|
@ -21,11 +21,15 @@ public class NotificationManagerJsonConverter : JsonConverter
|
|||||||
JsonSerializer serializer)
|
JsonSerializer serializer)
|
||||||
{
|
{
|
||||||
JObject jo = JObject.Load(reader);
|
JObject jo = JObject.Load(reader);
|
||||||
if (jo["notificationConnectorType"]!.Value<byte>() == (byte)NotificationConnector.NotificationConnectorType.Gotify)
|
switch (jo["notificationConnectorType"]!.Value<byte>())
|
||||||
return new Gotify(this._clone, jo.GetValue("endpoint")!.Value<string>()!, jo.GetValue("appToken")!.Value<string>()!);
|
{
|
||||||
else if (jo["notificationConnectorType"]!.Value<byte>() ==
|
case (byte)NotificationConnector.NotificationConnectorType.Gotify:
|
||||||
(byte)NotificationConnector.NotificationConnectorType.LunaSea)
|
return new Gotify(this._clone, jo.GetValue("endpoint")!.Value<string>()!, jo.GetValue("appToken")!.Value<string>()!);
|
||||||
return new LunaSea(this._clone, jo.GetValue("id")!.Value<string>()!);
|
case (byte)NotificationConnector.NotificationConnectorType.LunaSea:
|
||||||
|
return new LunaSea(this._clone, jo.GetValue("id")!.Value<string>()!);
|
||||||
|
case (byte)NotificationConnector.NotificationConnectorType.Ntfy:
|
||||||
|
return new Ntfy(this._clone, jo.GetValue("endpoint")!.Value<string>()!, jo.GetValue("auth")!.Value<string>()!);
|
||||||
|
}
|
||||||
|
|
||||||
throw new Exception();
|
throw new Exception();
|
||||||
}
|
}
|
||||||
|
58
Tranga/NotificationConnectors/Ntfy.cs
Normal file
58
Tranga/NotificationConnectors/Ntfy.cs
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
using System.Text;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
|
namespace Tranga.NotificationConnectors;
|
||||||
|
|
||||||
|
public class Ntfy : NotificationConnector
|
||||||
|
{
|
||||||
|
// ReSharper disable once MemberCanBePrivate.Global
|
||||||
|
public string endpoint { get; init; }
|
||||||
|
private string auth { get; init; }
|
||||||
|
private const string Topic = "tranga";
|
||||||
|
private readonly HttpClient _client = new();
|
||||||
|
|
||||||
|
[JsonConstructor]
|
||||||
|
public Ntfy(GlobalBase clone, string endpoint, string auth) : base(clone, NotificationConnectorType.Ntfy)
|
||||||
|
{
|
||||||
|
if (!baseUrlRex.IsMatch(endpoint))
|
||||||
|
throw new ArgumentException("endpoint does not match pattern");
|
||||||
|
this.endpoint = endpoint;
|
||||||
|
this.auth = auth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return $"Ntfy {endpoint} {Topic}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void SendNotification(string title, string notificationText)
|
||||||
|
{
|
||||||
|
Log($"Sending notification: {title} - {notificationText}");
|
||||||
|
MessageData message = new(title, notificationText);
|
||||||
|
HttpRequestMessage request = new(HttpMethod.Post, $"{this.endpoint}?auth={this.auth}");
|
||||||
|
request.Content = new StringContent(JsonConvert.SerializeObject(message, Formatting.None), Encoding.UTF8, "application/json");
|
||||||
|
HttpResponseMessage response = _client.Send(request);
|
||||||
|
if (!response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
StreamReader sr = new (response.Content.ReadAsStream());
|
||||||
|
Log($"{response.StatusCode}: {sr.ReadToEnd()}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class MessageData
|
||||||
|
{
|
||||||
|
// ReSharper disable UnusedAutoPropertyAccessor.Local
|
||||||
|
public string topic { get; }
|
||||||
|
public string title { get; }
|
||||||
|
public string message { get; }
|
||||||
|
public int priority { get; }
|
||||||
|
|
||||||
|
public MessageData(string title, string message)
|
||||||
|
{
|
||||||
|
this.topic = Topic;
|
||||||
|
this.title = title;
|
||||||
|
this.message = message;
|
||||||
|
this.priority = 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -362,10 +362,7 @@ public class Server : GlobalBase
|
|||||||
}
|
}
|
||||||
AddNotificationConnector(new Gotify(this, gotifyUrl, gotifyAppToken));
|
AddNotificationConnector(new Gotify(this, gotifyUrl, gotifyAppToken));
|
||||||
SendResponse(HttpStatusCode.Accepted, response);
|
SendResponse(HttpStatusCode.Accepted, response);
|
||||||
break;
|
}else if (notificationConnectorType is NotificationConnector.NotificationConnectorType.LunaSea)
|
||||||
}
|
|
||||||
|
|
||||||
if (notificationConnectorType is NotificationConnector.NotificationConnectorType.LunaSea)
|
|
||||||
{
|
{
|
||||||
if (!requestVariables.TryGetValue("lunaseaWebhook", out string? lunaseaWebhook))
|
if (!requestVariables.TryGetValue("lunaseaWebhook", out string? lunaseaWebhook))
|
||||||
{
|
{
|
||||||
@ -374,7 +371,20 @@ public class Server : GlobalBase
|
|||||||
}
|
}
|
||||||
AddNotificationConnector(new LunaSea(this, lunaseaWebhook));
|
AddNotificationConnector(new LunaSea(this, lunaseaWebhook));
|
||||||
SendResponse(HttpStatusCode.Accepted, response);
|
SendResponse(HttpStatusCode.Accepted, response);
|
||||||
break;
|
}else if (notificationConnectorType is NotificationConnector.NotificationConnectorType.Ntfy)
|
||||||
|
{
|
||||||
|
if (!requestVariables.TryGetValue("ntfyUrl", out string? ntfyUrl) ||
|
||||||
|
!requestVariables.TryGetValue("ntfyAuth", out string? ntfyAuth))
|
||||||
|
{
|
||||||
|
SendResponse(HttpStatusCode.BadRequest, response);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
AddNotificationConnector(new Ntfy(this, ntfyUrl, ntfyAuth));
|
||||||
|
SendResponse(HttpStatusCode.Accepted, response);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SendResponse(HttpStatusCode.BadRequest, response);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "LibraryConnectors/Update":
|
case "LibraryConnectors/Update":
|
||||||
|
Loading…
Reference in New Issue
Block a user