Manage notification channels separately and migrate

It's more convenient to manage notification channels separately, as it
is done with email settings. Notification hook and other forms are
adopted to only select channels. Hooks can now use more than one
channel.
This commit is contained in:
eikek
2022-01-19 21:51:18 +01:00
parent d41490dd88
commit 23cb34a6ff
78 changed files with 2583 additions and 1422 deletions

View File

@ -0,0 +1,41 @@
{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Messages.Comp.ChannelRefInput exposing
( Texts
, de
, gb
)
import Messages.Basics
import Messages.Data.ChannelType
type alias Texts =
{ basics : Messages.Basics.Texts
, channelType : Messages.Data.ChannelType.Texts
, placeholder : String
, noCategory : String
}
gb : Texts
gb =
{ basics = Messages.Basics.gb
, channelType = Messages.Data.ChannelType.gb
, placeholder = "Choose"
, noCategory = "No channel"
}
de : Texts
de =
{ basics = Messages.Basics.de
, channelType = Messages.Data.ChannelType.de
, placeholder = "Wähle"
, noCategory = "Kein Kanal"
}

View File

@ -15,6 +15,7 @@ import Http
import Messages.Basics
import Messages.Comp.CalEventInput
import Messages.Comp.ChannelForm
import Messages.Comp.ChannelRefInput
import Messages.Comp.HttpError
import Messages.Comp.TagDropdown
import Messages.Data.ChannelType
@ -26,6 +27,8 @@ type alias Texts =
, httpError : Http.Error -> String
, channelForm : Messages.Comp.ChannelForm.Texts
, tagDropdown : Messages.Comp.TagDropdown.Texts
, channelType : Messages.Data.ChannelType.Texts
, channelRef : Messages.Comp.ChannelRefInput.Texts
, reallyDeleteTask : String
, startOnce : String
, startTaskNow : String
@ -50,7 +53,7 @@ type alias Texts =
, recipientsRequired : String
, queryLabel : String
, channelRequired : String
, channelHeader : Messages.Data.ChannelType.Texts
, channelHeader : String
}
@ -61,6 +64,8 @@ gb =
, httpError = Messages.Comp.HttpError.gb
, channelForm = Messages.Comp.ChannelForm.gb
, tagDropdown = Messages.Comp.TagDropdown.gb
, channelType = Messages.Data.ChannelType.gb
, channelRef = Messages.Comp.ChannelRefInput.gb
, reallyDeleteTask = "Really delete this notification task?"
, startOnce = "Start Once"
, startTaskNow = "Start this task now"
@ -89,7 +94,7 @@ gb =
, recipientsRequired = "At least one recipient is required."
, queryLabel = "Query"
, channelRequired = "A valid channel must be given."
, channelHeader = \ct -> "Connection details for " ++ Messages.Data.ChannelType.gb ct
, channelHeader = "Channels"
}
@ -98,8 +103,10 @@ de =
{ basics = Messages.Basics.de
, calEventInput = Messages.Comp.CalEventInput.de
, httpError = Messages.Comp.HttpError.de
, channelForm = Messages.Comp.ChannelForm.gb
, tagDropdown = Messages.Comp.TagDropdown.gb
, channelForm = Messages.Comp.ChannelForm.de
, tagDropdown = Messages.Comp.TagDropdown.de
, channelType = Messages.Data.ChannelType.de
, channelRef = Messages.Comp.ChannelRefInput.de
, reallyDeleteTask = "Diesen Benachrichtigungsauftrag wirklich löschen?"
, startOnce = "Jetzt starten"
, startTaskNow = "Starte den Auftrag sofort"
@ -128,5 +135,5 @@ de =
, recipientsRequired = "Mindestens ein Empfänger muss angegeben werden."
, queryLabel = "Abfrage"
, channelRequired = "Ein Versandkanal muss angegeben werden."
, channelHeader = \ct -> "Details für " ++ Messages.Data.ChannelType.de ct
, channelHeader = "Kanäle"
}

View File

@ -12,32 +12,33 @@ module Messages.Comp.DueItemsTaskList exposing
)
import Messages.Basics
import Messages.Data.ChannelType
type alias Texts =
{ basics : Messages.Basics.Texts
, channelType : Messages.Data.ChannelType.Texts
, summary : String
, schedule : String
, connection : String
, recipients : String
}
gb : Texts
gb =
{ basics = Messages.Basics.gb
, channelType = Messages.Data.ChannelType.gb
, summary = "Summary"
, schedule = "Schedule"
, connection = "Connection"
, recipients = "Recipients"
, connection = "Channel"
}
de : Texts
de =
{ basics = Messages.Basics.de
, channelType = Messages.Data.ChannelType.de
, summary = "Kurzbeschreibung"
, schedule = "Zeitplan"
, connection = "Verbindung"
, recipients = "Empfänger"
, connection = "Kanal"
}

View File

@ -0,0 +1,83 @@
{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Messages.Comp.NotificationChannelManage exposing (Texts, de, gb)
import Http
import Messages.Basics
import Messages.Comp.ChannelForm
import Messages.Comp.HttpError
import Messages.Comp.NotificationChannelTable
import Messages.Data.ChannelType
type alias Texts =
{ basics : Messages.Basics.Texts
, notificationForm : Messages.Comp.ChannelForm.Texts
, notificationTable : Messages.Comp.NotificationChannelTable.Texts
, httpError : Http.Error -> String
, channelType : Messages.Data.ChannelType.Texts
, newChannel : String
, channelCreated : String
, channelUpdated : String
, channelDeleted : String
, formInvalid : String
, integrate : String
, intoDocspell : String
, postRequestInfo : String
, notifyEmailInfo : String
, addChannel : String
, updateChannel : String
, deleteThisChannel : String
, reallyDeleteChannel : String
}
gb : Texts
gb =
{ basics = Messages.Basics.gb
, notificationForm = Messages.Comp.ChannelForm.gb
, notificationTable = Messages.Comp.NotificationChannelTable.gb
, httpError = Messages.Comp.HttpError.gb
, channelType = Messages.Data.ChannelType.gb
, newChannel = "New Channel"
, channelCreated = "Channel created"
, channelUpdated = "Channel updated"
, channelDeleted = "Channel deleted"
, formInvalid = "Please fill in all required fields"
, integrate = "Integrate"
, intoDocspell = "into Docspell"
, postRequestInfo = "Docspell will send POST requests with JSON payload."
, notifyEmailInfo = "Get notified via e-mail."
, addChannel = "Add new channel"
, updateChannel = "Update channel"
, deleteThisChannel = "Kanal löschen"
, reallyDeleteChannel = "Really delete this channel?"
}
de : Texts
de =
{ basics = Messages.Basics.de
, notificationForm = Messages.Comp.ChannelForm.de
, notificationTable = Messages.Comp.NotificationChannelTable.de
, httpError = Messages.Comp.HttpError.de
, channelType = Messages.Data.ChannelType.de
, newChannel = "Neuer Kanal"
, channelCreated = "Kanal wurde angelegt."
, channelUpdated = "Kanal wurde aktualisiert."
, channelDeleted = "Kanal wurde entfernt."
, formInvalid = "Bitte alle erforderlichen Felder ausfüllen"
, integrate = "Integriere"
, intoDocspell = "in Docspell"
, postRequestInfo = "Docspell wird JSON POST requests senden."
, notifyEmailInfo = "Werde per E-Mail benachrichtigt."
, addChannel = "Neuen Kanal hinzufügen"
, updateChannel = "Kanal aktualisieren"
, deleteThisChannel = "Kanal löschen"
, reallyDeleteChannel = "Den Kanal wirklich löschen?"
}

View File

@ -0,0 +1,35 @@
{-
Copyright 2020 Eike K. & Contributors
SPDX-License-Identifier: AGPL-3.0-or-later
-}
module Messages.Comp.NotificationChannelTable exposing (..)
import Data.EventType exposing (EventType)
import Messages.Basics
import Messages.Data.EventType
type alias Texts =
{ basics : Messages.Basics.Texts
, eventType : EventType -> Messages.Data.EventType.Texts
, channelType : String
}
gb : Texts
gb =
{ basics = Messages.Basics.gb
, eventType = Messages.Data.EventType.gb
, channelType = "Channel type"
}
de : Texts
de =
{ basics = Messages.Basics.de
, eventType = Messages.Data.EventType.de
, channelType = "Kanaltyp"
}

View File

@ -13,18 +13,17 @@ module Messages.Comp.NotificationHookForm exposing
import Data.EventType exposing (EventType)
import Messages.Basics
import Messages.Comp.ChannelForm
import Messages.Comp.ChannelRefInput
import Messages.Comp.EventSample
import Messages.Data.ChannelType
import Messages.Data.EventType
type alias Texts =
{ basics : Messages.Basics.Texts
, channelForm : Messages.Comp.ChannelForm.Texts
, channelRef : Messages.Comp.ChannelRefInput.Texts
, eventType : EventType -> Messages.Data.EventType.Texts
, eventSample : Messages.Comp.EventSample.Texts
, channelHeader : Messages.Data.ChannelType.Texts
, channelHeader : String
, enableDisable : String
, eventsInfo : String
, selectEvents : String
@ -34,16 +33,19 @@ type alias Texts =
, eventFilter : String
, eventFilterInfo : String
, eventFilterClickForHelp : String
, jsonPayload : String
, messagePayload : String
, payloadInfo : String
}
gb : Texts
gb =
{ basics = Messages.Basics.gb
, channelForm = Messages.Comp.ChannelForm.gb
, channelRef = Messages.Comp.ChannelRefInput.gb
, eventType = Messages.Data.EventType.gb
, eventSample = Messages.Comp.EventSample.gb
, channelHeader = Messages.Data.ChannelType.gb
, channelHeader = "Select channels"
, enableDisable = "Enabled / Disabled"
, eventsInfo = "Select events that trigger this webhook"
, selectEvents = "Select"
@ -53,16 +55,19 @@ gb =
, eventFilter = "Event Filter Expression"
, eventFilterInfo = "Optional specify an expression to filter events based on their JSON structure."
, eventFilterClickForHelp = "Click here for help"
, jsonPayload = "JSON"
, messagePayload = "Message"
, payloadInfo = "Message payloads are sent to gotify, email and matrix. The JSON is sent to http channel."
}
de : Texts
de =
{ basics = Messages.Basics.de
, channelForm = Messages.Comp.ChannelForm.de
, channelRef = Messages.Comp.ChannelRefInput.de
, eventType = Messages.Data.EventType.de
, eventSample = Messages.Comp.EventSample.de
, channelHeader = Messages.Data.ChannelType.de
, channelHeader = "Kanäle"
, enableDisable = "Aktiviert / Deaktivert"
, eventsInfo = "Wähle die Ereignisse, die diesen webhook auslösen"
, selectEvents = "Wähle"
@ -72,4 +77,7 @@ de =
, eventFilter = "Ereignisfilter"
, eventFilterInfo = "Optionaler Ausdruck zum filtern von Ereignissen auf Basis ihrer JSON Struktur."
, eventFilterClickForHelp = "Klicke für Hilfe"
, jsonPayload = "JSON"
, messagePayload = "Nachricht"
, payloadInfo = "Es werden abhängig vom Kanal JSON oder Nachricht-Formate versendet. Der HTTP Kanal empfängt nur JSON, an die anderen wird das Nachrichtformat gesendet."
}

View File

@ -11,7 +11,6 @@ module Messages.Comp.NotificationHookManage exposing
, gb
)
import Html exposing (Html, text)
import Http
import Messages.Basics
import Messages.Comp.HttpError
@ -27,9 +26,6 @@ type alias Texts =
, httpError : Http.Error -> String
, channelType : Messages.Data.ChannelType.Texts
, newHook : String
, matrix : String
, gotify : String
, email : String
, httpRequest : String
, hookCreated : String
, hookUpdated : String
@ -39,12 +35,8 @@ type alias Texts =
, reallyDeleteHook : String
, formInvalid : String
, invalidJsonFilter : String -> String
, integrate : String
, intoDocspell : String
, postRequestInfo : String
, updateWebhook : String
, addWebhook : String
, notifyEmailInfo : String
}
@ -56,9 +48,6 @@ gb =
, httpError = Messages.Comp.HttpError.gb
, channelType = Messages.Data.ChannelType.gb
, newHook = "New Webhook"
, matrix = "Matrix"
, gotify = "Gotify"
, email = "E-Mail"
, httpRequest = "HTTP Request"
, hookCreated = "Webhook created"
, hookUpdated = "Webhook updated"
@ -68,12 +57,8 @@ gb =
, reallyDeleteHook = "Really delete this webhook?"
, formInvalid = "Please fill in all required fields"
, invalidJsonFilter = \m -> "Event filter invalid: " ++ m
, integrate = "Integrate"
, intoDocspell = "into Docspell"
, postRequestInfo = "Docspell will send POST requests with JSON payload."
, updateWebhook = "Update webhook"
, addWebhook = "Add new webhook"
, notifyEmailInfo = "Get notified via e-mail."
}
@ -85,9 +70,6 @@ de =
, httpError = Messages.Comp.HttpError.de
, channelType = Messages.Data.ChannelType.de
, newHook = "Neuer Webhook"
, matrix = "Matrix"
, gotify = "Gotify"
, email = "E-Mail"
, httpRequest = "HTTP Request"
, hookCreated = "Webhook erstellt"
, hookUpdated = "Webhook aktualisiert"
@ -97,10 +79,6 @@ de =
, reallyDeleteHook = "Den webhook wirklich löschen?"
, formInvalid = "Bitte alle erforderlichen Felder ausfüllen"
, invalidJsonFilter = \m -> "Ereignisfilter ist falsch: " ++ m
, integrate = "Integriere"
, intoDocspell = "in Docspell"
, postRequestInfo = "Docspell wird JSON POST requests senden."
, updateWebhook = "Webhook aktualisieren"
, addWebhook = "Neuen Webhook hinzufügen"
, notifyEmailInfo = "Werde per E-Mail benachrichtigt."
}

View File

@ -13,15 +13,18 @@ module Messages.Comp.NotificationHookTable exposing
import Data.EventType exposing (EventType)
import Messages.Basics
import Messages.Data.ChannelType
import Messages.Data.EventType
type alias Texts =
{ basics : Messages.Basics.Texts
, eventType : EventType -> Messages.Data.EventType.Texts
, channelType : Messages.Data.ChannelType.Texts
, enabled : String
, channel : String
, events : String
, allEvents : String
}
@ -29,9 +32,11 @@ gb : Texts
gb =
{ basics = Messages.Basics.gb
, eventType = Messages.Data.EventType.gb
, channelType = Messages.Data.ChannelType.gb
, enabled = "Enabled"
, channel = "Channel"
, events = "Events"
, allEvents = "All"
}
@ -39,7 +44,9 @@ de : Texts
de =
{ basics = Messages.Basics.de
, eventType = Messages.Data.EventType.de
, channelType = Messages.Data.ChannelType.de
, enabled = "Aktiv"
, channel = "Kanal"
, events = "Ereignisse"
, allEvents = "Alle"
}

View File

@ -11,14 +11,13 @@ module Messages.Comp.PeriodicQueryTaskForm exposing
, gb
)
import Data.ChannelType exposing (ChannelType)
import Http
import Messages.Basics
import Messages.Comp.BookmarkDropdown
import Messages.Comp.CalEventInput
import Messages.Comp.ChannelForm
import Messages.Comp.ChannelRefInput
import Messages.Comp.HttpError
import Messages.Data.ChannelType
type alias Texts =
@ -26,6 +25,7 @@ type alias Texts =
, calEventInput : Messages.Comp.CalEventInput.Texts
, channelForm : Messages.Comp.ChannelForm.Texts
, bookmarkDropdown : Messages.Comp.BookmarkDropdown.Texts
, channelRef : Messages.Comp.ChannelRefInput.Texts
, httpError : Http.Error -> String
, reallyDeleteTask : String
, startOnce : String
@ -41,7 +41,7 @@ type alias Texts =
, invalidCalEvent : String
, channelRequired : String
, queryStringRequired : String
, channelHeader : ChannelType -> String
, channelHeader : String
, messageContentTitle : String
, messageContentLabel : String
, messageContentInfo : String
@ -56,6 +56,7 @@ gb =
, channelForm = Messages.Comp.ChannelForm.gb
, httpError = Messages.Comp.HttpError.gb
, bookmarkDropdown = Messages.Comp.BookmarkDropdown.gb
, channelRef = Messages.Comp.ChannelRefInput.gb
, reallyDeleteTask = "Really delete this notification task?"
, startOnce = "Start Once"
, startTaskNow = "Start this task now"
@ -74,7 +75,7 @@ gb =
, queryLabel = "Query"
, channelRequired = "A valid channel must be given."
, queryStringRequired = "A query string and/or bookmark must be supplied"
, channelHeader = \ct -> "Connection details for " ++ Messages.Data.ChannelType.gb ct
, channelHeader = "Channels"
, messageContentTitle = "Customize message"
, messageContentLabel = "Beginning of message"
, messageContentInfo = "Insert text that is prependend to the generated message."
@ -89,6 +90,7 @@ de =
, channelForm = Messages.Comp.ChannelForm.de
, httpError = Messages.Comp.HttpError.de
, bookmarkDropdown = Messages.Comp.BookmarkDropdown.de
, channelRef = Messages.Comp.ChannelRefInput.de
, reallyDeleteTask = "Diesen Benachrichtigungsauftrag wirklich löschen?"
, startOnce = "Jetzt starten"
, startTaskNow = "Starte den Auftrag sofort"
@ -107,7 +109,7 @@ de =
, queryLabel = "Abfrage"
, channelRequired = "Ein Versandkanal muss angegeben werden."
, queryStringRequired = "Eine Suchabfrage und/oder ein Bookmark muss angegeben werden."
, channelHeader = \ct -> "Details für " ++ Messages.Data.ChannelType.de ct
, channelHeader = "Kanäle"
, messageContentTitle = "Nachricht anpassen"
, messageContentLabel = "Anfang der Nachricht"
, messageContentInfo = "Dieser Text wird an den Anfang der generierten Nachricht angefügt."

View File

@ -12,32 +12,33 @@ module Messages.Comp.PeriodicQueryTaskList exposing
)
import Messages.Basics
import Messages.Data.ChannelType
type alias Texts =
{ basics : Messages.Basics.Texts
, channelType : Messages.Data.ChannelType.Texts
, summary : String
, schedule : String
, connection : String
, recipients : String
}
gb : Texts
gb =
{ basics = Messages.Basics.gb
, channelType = Messages.Data.ChannelType.gb
, summary = "Summary"
, schedule = "Schedule"
, connection = "Connection"
, recipients = "Recipients"
, connection = "Channel"
}
de : Texts
de =
{ basics = Messages.Basics.de
, channelType = Messages.Data.ChannelType.de
, summary = "Kurzbeschreibung"
, schedule = "Zeitplan"
, connection = "Verbindung"
, recipients = "Empfänger"
, connection = "Kanal"
}