1
0
Fork 0
mirror of https://github.com/miniflux/v2.git synced 2025-06-27 16:36:00 +00:00

feat(pushover): add integration with pushover.net

This commit is contained in:
Sergio Moura 2025-02-12 13:05:28 -05:00 committed by Frédéric Guillot
parent 76acd81fa4
commit 3387201634
32 changed files with 510 additions and 6 deletions

View file

@ -994,4 +994,18 @@ var migrations = []func(tx *sql.Tx, driver string) error{
_, err = tx.Exec(`ALTER TABLE feeds ADD COLUMN webhook_url text default '';`) _, err = tx.Exec(`ALTER TABLE feeds ADD COLUMN webhook_url text default '';`)
return err return err
}, },
func(tx *sql.Tx, _ string) (err error) {
sql := `
ALTER TABLE integrations ADD COLUMN pushover_enabled bool default 'f';
ALTER TABLE integrations ADD COLUMN pushover_user text default '';
ALTER TABLE integrations ADD COLUMN pushover_token text default '';
ALTER TABLE integrations ADD COLUMN pushover_device text default '';
ALTER TABLE integrations ADD COLUMN pushover_prefix text default '';
ALTER TABLE feeds ADD COLUMN pushover_enabled bool default 'f';
ALTER TABLE feeds ADD COLUMN pushover_priority int default '0';
`
_, err = tx.Exec(sql)
return err
},
} }

View file

@ -23,6 +23,7 @@ import (
"miniflux.app/v2/internal/integration/omnivore" "miniflux.app/v2/internal/integration/omnivore"
"miniflux.app/v2/internal/integration/pinboard" "miniflux.app/v2/internal/integration/pinboard"
"miniflux.app/v2/internal/integration/pocket" "miniflux.app/v2/internal/integration/pocket"
"miniflux.app/v2/internal/integration/pushover"
"miniflux.app/v2/internal/integration/raindrop" "miniflux.app/v2/internal/integration/raindrop"
"miniflux.app/v2/internal/integration/readeck" "miniflux.app/v2/internal/integration/readeck"
"miniflux.app/v2/internal/integration/readwise" "miniflux.app/v2/internal/integration/readwise"
@ -577,6 +578,26 @@ func PushEntries(feed *model.Feed, entries model.Entries, userIntegrations *mode
} }
} }
if userIntegrations.PushoverEnabled && feed.PushoverEnabled {
slog.Debug("Sending new entries to Pushover",
slog.Int64("user_id", userIntegrations.UserID),
slog.Int("nb_entries", len(entries)),
slog.Int64("feed_id", feed.ID),
)
client := pushover.New(
userIntegrations.PushoverUser,
userIntegrations.PushoverToken,
feed.PushoverPriority,
userIntegrations.PushoverDevice,
userIntegrations.PushoverPrefix,
)
if err := client.SendMessages(feed, entries); err != nil {
slog.Warn("Unable to send new entries to Pushover", slog.Any("error", err))
}
}
// Integrations that only support sending individual entries // Integrations that only support sending individual entries
if userIntegrations.TelegramBotEnabled { if userIntegrations.TelegramBotEnabled {
for _, entry := range entries { for _, entry := range entries {

View file

@ -0,0 +1,138 @@
// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
// SPDX-License-Identifier: Apache-2.0
package pushover // import "miniflux.app/v2/internal/integration/pushover"
import (
"bytes"
"encoding/json"
"fmt"
"log/slog"
"net/http"
"strings"
"time"
"miniflux.app/v2/internal/model"
"miniflux.app/v2/internal/version"
)
const (
defaultClientTimeout = 10 * time.Second
defaultPushoverURL = "https://api.pushover.net"
)
type Client struct {
prefix string
token string
user string
device string
priority int
}
type Message struct {
Token string `json:"token"`
User string `json:"user"`
Title string `json:"title"`
Message string `json:"message"`
Priority int `json:"priority"`
URL string `json:"url"`
URLTitle string `json:"url_title"`
Device string `json:"device,omitempty"`
}
type ErrorResponse struct {
User string `json:"user"`
Errors []string `json:"errors"`
Status int `json:"status"`
Request string `json:"request"`
}
func New(user, token string, priority int, device, urlPrefix string) *Client {
if urlPrefix == "" {
urlPrefix = defaultPushoverURL
}
if priority < -2 {
priority = -2
}
if priority > 2 {
priority = 2
}
return &Client{
user: user,
token: token,
device: device,
prefix: urlPrefix,
priority: priority,
}
}
func (c *Client) SendMessages(feed *model.Feed, entries model.Entries) error {
if c.token == "" || c.user == "" {
return fmt.Errorf("pushover token and user are required")
}
for _, entry := range entries {
msg := &Message{
User: c.user,
Token: c.token,
Device: c.device,
Message: entry.Title,
Title: feed.Title,
Priority: c.priority,
URL: entry.URL,
}
slog.Debug("Sending Pushover message",
slog.Int("priority", msg.Priority),
slog.String("message", msg.Message),
slog.String("entry_url", msg.URL),
)
if err := c.makeRequest(msg); err != nil {
return fmt.Errorf("c.makeRequest: %w", err)
}
}
return nil
}
func (c *Client) makeRequest(payload *Message) error {
jsonData, err := json.Marshal(payload)
if err != nil {
return fmt.Errorf("json.Marshal: %w", err)
}
url := c.prefix + "/1/messages.json"
req, err := http.NewRequest(http.MethodPost, url, bytes.NewBuffer(jsonData))
if err != nil {
return fmt.Errorf("http.NewRequest: %w", err)
}
req.Header.Add("Content-Type", "application/json")
req.Header.Set("User-Agent", "Miniflux/"+version.Version)
httpClient := &http.Client{Timeout: defaultClientTimeout}
resp, err := httpClient.Do(req)
if err != nil {
return fmt.Errorf("httpClient.Do: %w", err)
}
defer resp.Body.Close()
if resp.StatusCode >= http.StatusBadRequest {
errorMessage := resp.Status
var errResp ErrorResponse
if err := json.NewDecoder(resp.Body).Decode(&errResp); err != nil {
if len(errResp.Errors) > 0 {
errorMessage = strings.Join(errResp.Errors, ",")
}
}
return fmt.Errorf("pushover API error (%d): %s", resp.StatusCode, errorMessage)
}
return nil
}

View file

@ -357,6 +357,13 @@
"form.feed.label.ntfy_default_priority": "Normale Ntfy-Priorität", "form.feed.label.ntfy_default_priority": "Normale Ntfy-Priorität",
"form.feed.label.ntfy_low_priority": "Niedrige Ntfy-Priorität", "form.feed.label.ntfy_low_priority": "Niedrige Ntfy-Priorität",
"form.feed.label.ntfy_min_priority": "Niedrigste Ntfy-Priorität", "form.feed.label.ntfy_min_priority": "Niedrigste Ntfy-Priorität",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.integration.cubox_activate": "Einträge in Cubox speichern", "form.integration.cubox_activate": "Einträge in Cubox speichern",
"form.integration.cubox_api_link": "Cubox-API-Link", "form.integration.cubox_api_link": "Cubox-API-Link",
"form.feed.fieldset.general": "Allgemein", "form.feed.fieldset.general": "Allgemein",
@ -519,6 +526,11 @@
"form.integration.discord_webhook_link": "Discord-Webhook-URL", "form.integration.discord_webhook_link": "Discord-Webhook-URL",
"form.integration.slack_activate": "Einträge zu Slack pushen", "form.integration.slack_activate": "Einträge zu Slack pushen",
"form.integration.slack_webhook_link": "Slack-Webhook-URL", "form.integration.slack_webhook_link": "Slack-Webhook-URL",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.api_key.label.description": "API-Schlüsselbezeichnung", "form.api_key.label.description": "API-Schlüsselbezeichnung",
"form.submit.loading": "Lade...", "form.submit.loading": "Lade...",
"form.submit.saving": "Speichern...", "form.submit.saving": "Speichern...",

View file

@ -361,6 +361,13 @@
"form.feed.label.ntfy_default_priority": "Ntfy default priority", "form.feed.label.ntfy_default_priority": "Ntfy default priority",
"form.feed.label.ntfy_low_priority": "Ntfy low priority", "form.feed.label.ntfy_low_priority": "Ntfy low priority",
"form.feed.label.ntfy_min_priority": "Ntfy min priority", "form.feed.label.ntfy_min_priority": "Ntfy min priority",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.integration.cubox_activate": "Save entries to Cubox", "form.integration.cubox_activate": "Save entries to Cubox",
"form.integration.cubox_api_link": "Cubox API link", "form.integration.cubox_api_link": "Cubox API link",
"form.category.label.title": "Τίτλος", "form.category.label.title": "Τίτλος",
@ -519,6 +526,11 @@
"form.integration.discord_webhook_link": "Discord Webhook link", "form.integration.discord_webhook_link": "Discord Webhook link",
"form.integration.slack_activate": "Push entries to Slack", "form.integration.slack_activate": "Push entries to Slack",
"form.integration.slack_webhook_link": "Slack Webhook link", "form.integration.slack_webhook_link": "Slack Webhook link",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.api_key.label.description": "Ετικέτα κλειδιού API", "form.api_key.label.description": "Ετικέτα κλειδιού API",
"form.submit.loading": "Φόρτωση...", "form.submit.loading": "Φόρτωση...",
"form.submit.saving": "Αποθήκευση...", "form.submit.saving": "Αποθήκευση...",

View file

@ -357,6 +357,13 @@
"form.feed.label.ntfy_default_priority": "Ntfy default priority", "form.feed.label.ntfy_default_priority": "Ntfy default priority",
"form.feed.label.ntfy_low_priority": "Ntfy low priority", "form.feed.label.ntfy_low_priority": "Ntfy low priority",
"form.feed.label.ntfy_min_priority": "Ntfy min priority", "form.feed.label.ntfy_min_priority": "Ntfy min priority",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.feed.fieldset.general": "General", "form.feed.fieldset.general": "General",
"form.feed.fieldset.rules": "Rules", "form.feed.fieldset.rules": "Rules",
"form.feed.fieldset.network_settings": "Network Settings", "form.feed.fieldset.network_settings": "Network Settings",
@ -519,6 +526,11 @@
"form.integration.discord_webhook_link": "Discord Webhook link", "form.integration.discord_webhook_link": "Discord Webhook link",
"form.integration.slack_activate": "Push entries to Slack", "form.integration.slack_activate": "Push entries to Slack",
"form.integration.slack_webhook_link": "Slack Webhook link", "form.integration.slack_webhook_link": "Slack Webhook link",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.api_key.label.description": "API Key Label", "form.api_key.label.description": "API Key Label",
"form.submit.loading": "Loading…", "form.submit.loading": "Loading…",
"form.submit.saving": "Saving…", "form.submit.saving": "Saving…",

View file

@ -357,6 +357,13 @@
"form.feed.label.ntfy_default_priority": "Prioridad predeterminada a Ntfy", "form.feed.label.ntfy_default_priority": "Prioridad predeterminada a Ntfy",
"form.feed.label.ntfy_low_priority": "Prioridad baja a Ntfy", "form.feed.label.ntfy_low_priority": "Prioridad baja a Ntfy",
"form.feed.label.ntfy_min_priority": "Prioridad mínima a Ntfy", "form.feed.label.ntfy_min_priority": "Prioridad mínima a Ntfy",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.integration.cubox_activate": "Save entries to Cubox", "form.integration.cubox_activate": "Save entries to Cubox",
"form.integration.cubox_api_link": "Cubox API link", "form.integration.cubox_api_link": "Cubox API link",
"form.feed.fieldset.general": "General", "form.feed.fieldset.general": "General",
@ -519,6 +526,11 @@
"form.integration.discord_webhook_link": "URL de la Webhook de Discord", "form.integration.discord_webhook_link": "URL de la Webhook de Discord",
"form.integration.slack_activate": "Enviar artículos a Slack", "form.integration.slack_activate": "Enviar artículos a Slack",
"form.integration.slack_webhook_link": "URL de la Webhook de Slack", "form.integration.slack_webhook_link": "URL de la Webhook de Slack",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.api_key.label.description": "Etiqueta de clave API", "form.api_key.label.description": "Etiqueta de clave API",
"form.submit.loading": "Cargando...", "form.submit.loading": "Cargando...",
"form.submit.saving": "Guardando...", "form.submit.saving": "Guardando...",

View file

@ -357,6 +357,13 @@
"form.feed.label.ntfy_default_priority": "Ntfy default priority", "form.feed.label.ntfy_default_priority": "Ntfy default priority",
"form.feed.label.ntfy_low_priority": "Ntfy low priority", "form.feed.label.ntfy_low_priority": "Ntfy low priority",
"form.feed.label.ntfy_min_priority": "Ntfy min priority", "form.feed.label.ntfy_min_priority": "Ntfy min priority",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.integration.cubox_activate": "Save entries to Cubox", "form.integration.cubox_activate": "Save entries to Cubox",
"form.integration.cubox_api_link": "Cubox API link", "form.integration.cubox_api_link": "Cubox API link",
"form.feed.fieldset.general": "General", "form.feed.fieldset.general": "General",
@ -519,6 +526,11 @@
"form.integration.discord_webhook_link": "Discord Webhook link", "form.integration.discord_webhook_link": "Discord Webhook link",
"form.integration.slack_activate": "Push entries to Slack", "form.integration.slack_activate": "Push entries to Slack",
"form.integration.slack_webhook_link": "Slack Webhook link", "form.integration.slack_webhook_link": "Slack Webhook link",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.api_key.label.description": "API Key Label", "form.api_key.label.description": "API Key Label",
"form.submit.loading": "Ladataan...", "form.submit.loading": "Ladataan...",
"form.submit.saving": "Tallennetaan...", "form.submit.saving": "Tallennetaan...",

View file

@ -357,6 +357,13 @@
"form.feed.label.ntfy_default_priority": "Priorité par défaut de notification", "form.feed.label.ntfy_default_priority": "Priorité par défaut de notification",
"form.feed.label.ntfy_low_priority": "Priorité basse de notification", "form.feed.label.ntfy_low_priority": "Priorité basse de notification",
"form.feed.label.ntfy_min_priority": "Priorité minimale de notification", "form.feed.label.ntfy_min_priority": "Priorité minimale de notification",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.integration.cubox_activate": "Save entries to Cubox", "form.integration.cubox_activate": "Save entries to Cubox",
"form.integration.cubox_api_link": "Cubox API link", "form.integration.cubox_api_link": "Cubox API link",
"form.feed.fieldset.general": "Général", "form.feed.fieldset.general": "Général",
@ -519,6 +526,11 @@
"form.integration.discord_webhook_link": "URL du Webhook Discord", "form.integration.discord_webhook_link": "URL du Webhook Discord",
"form.integration.slack_activate": "Envoyer les articles vers Slack", "form.integration.slack_activate": "Envoyer les articles vers Slack",
"form.integration.slack_webhook_link": "URL du Webhook Slack", "form.integration.slack_webhook_link": "URL du Webhook Slack",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.api_key.label.description": "Libellé de la clé d'API", "form.api_key.label.description": "Libellé de la clé d'API",
"form.submit.loading": "Chargement...", "form.submit.loading": "Chargement...",
"form.submit.saving": "Sauvegarde en cours...", "form.submit.saving": "Sauvegarde en cours...",

View file

@ -357,6 +357,13 @@
"form.feed.label.ntfy_default_priority": "Ntfy default priority", "form.feed.label.ntfy_default_priority": "Ntfy default priority",
"form.feed.label.ntfy_low_priority": "Ntfy low priority", "form.feed.label.ntfy_low_priority": "Ntfy low priority",
"form.feed.label.ntfy_min_priority": "Ntfy min priority", "form.feed.label.ntfy_min_priority": "Ntfy min priority",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.integration.cubox_activate": "Save entries to Cubox", "form.integration.cubox_activate": "Save entries to Cubox",
"form.integration.cubox_api_link": "Cubox API link", "form.integration.cubox_api_link": "Cubox API link",
"form.feed.fieldset.general": "General", "form.feed.fieldset.general": "General",
@ -519,6 +526,11 @@
"form.integration.discord_webhook_link": "Discord Webhook link", "form.integration.discord_webhook_link": "Discord Webhook link",
"form.integration.slack_activate": "Push entries to Slack", "form.integration.slack_activate": "Push entries to Slack",
"form.integration.slack_webhook_link": "Slack Webhook link", "form.integration.slack_webhook_link": "Slack Webhook link",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.api_key.label.description": "एपीआई कुंजी लेबल", "form.api_key.label.description": "एपीआई कुंजी लेबल",
"form.submit.loading": "लोड हो रहा है...", "form.submit.loading": "लोड हो रहा है...",
"form.submit.saving": "सहेजा जा रहा है...", "form.submit.saving": "सहेजा जा रहा है...",

View file

@ -347,6 +347,13 @@
"form.feed.label.ntfy_default_priority": "Ntfy default priority", "form.feed.label.ntfy_default_priority": "Ntfy default priority",
"form.feed.label.ntfy_low_priority": "Ntfy low priority", "form.feed.label.ntfy_low_priority": "Ntfy low priority",
"form.feed.label.ntfy_min_priority": "Ntfy min priority", "form.feed.label.ntfy_min_priority": "Ntfy min priority",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.integration.cubox_activate": "Save entries to Cubox", "form.integration.cubox_activate": "Save entries to Cubox",
"form.integration.cubox_api_link": "Cubox API link", "form.integration.cubox_api_link": "Cubox API link",
"form.feed.fieldset.general": "General", "form.feed.fieldset.general": "General",
@ -509,6 +516,11 @@
"form.integration.discord_webhook_link": "Discord Webhook link", "form.integration.discord_webhook_link": "Discord Webhook link",
"form.integration.slack_activate": "Push entries to Slack", "form.integration.slack_activate": "Push entries to Slack",
"form.integration.slack_webhook_link": "Slack Webhook link", "form.integration.slack_webhook_link": "Slack Webhook link",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.api_key.label.description": "Label Kunci API", "form.api_key.label.description": "Label Kunci API",
"form.submit.loading": "Memuat...", "form.submit.loading": "Memuat...",
"form.submit.saving": "Menyimpan...", "form.submit.saving": "Menyimpan...",

View file

@ -357,6 +357,13 @@
"form.feed.label.ntfy_default_priority": "Ntfy default priority", "form.feed.label.ntfy_default_priority": "Ntfy default priority",
"form.feed.label.ntfy_low_priority": "Ntfy low priority", "form.feed.label.ntfy_low_priority": "Ntfy low priority",
"form.feed.label.ntfy_min_priority": "Ntfy min priority", "form.feed.label.ntfy_min_priority": "Ntfy min priority",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.integration.cubox_activate": "Save entries to Cubox", "form.integration.cubox_activate": "Save entries to Cubox",
"form.integration.cubox_api_link": "Cubox API link", "form.integration.cubox_api_link": "Cubox API link",
"form.feed.fieldset.general": "General", "form.feed.fieldset.general": "General",
@ -519,6 +526,11 @@
"form.integration.discord_activate": "Push entries to Discord", "form.integration.discord_activate": "Push entries to Discord",
"form.integration.discord_webhook_link": "Discord Webhook link", "form.integration.discord_webhook_link": "Discord Webhook link",
"form.integration.slack_activate": "Push entries to Slack", "form.integration.slack_activate": "Push entries to Slack",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.integration.slack_webhook_link": "Slack Webhook link", "form.integration.slack_webhook_link": "Slack Webhook link",
"form.submit.loading": "Caricamento in corso...", "form.submit.loading": "Caricamento in corso...",
"form.submit.saving": "Salvataggio in corso...", "form.submit.saving": "Salvataggio in corso...",

View file

@ -347,6 +347,13 @@
"form.feed.label.ntfy_default_priority": "Ntfy default priority", "form.feed.label.ntfy_default_priority": "Ntfy default priority",
"form.feed.label.ntfy_low_priority": "Ntfy low priority", "form.feed.label.ntfy_low_priority": "Ntfy low priority",
"form.feed.label.ntfy_min_priority": "Ntfy min priority", "form.feed.label.ntfy_min_priority": "Ntfy min priority",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.integration.cubox_activate": "Save entries to Cubox", "form.integration.cubox_activate": "Save entries to Cubox",
"form.integration.cubox_api_link": "Cubox API link", "form.integration.cubox_api_link": "Cubox API link",
"form.feed.fieldset.general": "General", "form.feed.fieldset.general": "General",
@ -508,6 +515,11 @@
"form.integration.discord_activate": "Push entries to Discord", "form.integration.discord_activate": "Push entries to Discord",
"form.integration.discord_webhook_link": "Discord Webhook link", "form.integration.discord_webhook_link": "Discord Webhook link",
"form.integration.slack_activate": "Slack entries to Discord", "form.integration.slack_activate": "Slack entries to Discord",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.integration.slack_webhook_link": "Slack Webhook link", "form.integration.slack_webhook_link": "Slack Webhook link",
"form.api_key.label.description": "API キーラベル", "form.api_key.label.description": "API キーラベル",
"form.submit.loading": "読み込み中…", "form.submit.loading": "読み込み中…",

View file

@ -357,6 +357,13 @@
"form.feed.label.ntfy_default_priority": "Ntfy standaard prioriteit", "form.feed.label.ntfy_default_priority": "Ntfy standaard prioriteit",
"form.feed.label.ntfy_low_priority": "Ntfy lage prioriteit", "form.feed.label.ntfy_low_priority": "Ntfy lage prioriteit",
"form.feed.label.ntfy_min_priority": "Ntfy minimale prioriteit", "form.feed.label.ntfy_min_priority": "Ntfy minimale prioriteit",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.integration.cubox_activate": "Save entries to Cubox", "form.integration.cubox_activate": "Save entries to Cubox",
"form.integration.cubox_api_link": "Cubox API link", "form.integration.cubox_api_link": "Cubox API link",
"form.feed.fieldset.general": "Algemeen", "form.feed.fieldset.general": "Algemeen",
@ -519,6 +526,11 @@
"form.integration.discord_webhook_link": "Discord Webhook link", "form.integration.discord_webhook_link": "Discord Webhook link",
"form.integration.slack_activate": "Artikelen opslaan in Slack", "form.integration.slack_activate": "Artikelen opslaan in Slack",
"form.integration.slack_webhook_link": "Slack Webhook link", "form.integration.slack_webhook_link": "Slack Webhook link",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.api_key.label.description": "API-sleutel omschrijving", "form.api_key.label.description": "API-sleutel omschrijving",
"form.submit.loading": "Laden...", "form.submit.loading": "Laden...",
"form.submit.saving": "Opslaan...", "form.submit.saving": "Opslaan...",

View file

@ -367,6 +367,13 @@
"form.feed.label.ntfy_default_priority": "Domyślny priorytet ntfy", "form.feed.label.ntfy_default_priority": "Domyślny priorytet ntfy",
"form.feed.label.ntfy_low_priority": "Niski priorytet ntfy", "form.feed.label.ntfy_low_priority": "Niski priorytet ntfy",
"form.feed.label.ntfy_min_priority": "Minimalny priorytet ntfy", "form.feed.label.ntfy_min_priority": "Minimalny priorytet ntfy",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.integration.cubox_activate": "Zapisuj wpisy w Cubox", "form.integration.cubox_activate": "Zapisuj wpisy w Cubox",
"form.integration.cubox_api_link": "Łącze API Cubox", "form.integration.cubox_api_link": "Łącze API Cubox",
"form.feed.fieldset.general": "Ogólne", "form.feed.fieldset.general": "Ogólne",
@ -529,6 +536,11 @@
"form.integration.discord_webhook_link": "Adres URL webhooka Discord", "form.integration.discord_webhook_link": "Adres URL webhooka Discord",
"form.integration.slack_activate": "Przesyłaj wpisy do Slack", "form.integration.slack_activate": "Przesyłaj wpisy do Slack",
"form.integration.slack_webhook_link": "Adres URL webhooka Slack", "form.integration.slack_webhook_link": "Adres URL webhooka Slack",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.api_key.label.description": "Etykieta klucza API", "form.api_key.label.description": "Etykieta klucza API",
"form.submit.loading": "Ładowanie…", "form.submit.loading": "Ładowanie…",
"form.submit.saving": "Zapisywanie…", "form.submit.saving": "Zapisywanie…",

View file

@ -357,6 +357,13 @@
"form.feed.label.ntfy_default_priority": "Ntfy default priority", "form.feed.label.ntfy_default_priority": "Ntfy default priority",
"form.feed.label.ntfy_low_priority": "Ntfy low priority", "form.feed.label.ntfy_low_priority": "Ntfy low priority",
"form.feed.label.ntfy_min_priority": "Ntfy min priority", "form.feed.label.ntfy_min_priority": "Ntfy min priority",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.integration.cubox_activate": "Save entries to Cubox", "form.integration.cubox_activate": "Save entries to Cubox",
"form.integration.cubox_api_link": "Cubox API link", "form.integration.cubox_api_link": "Cubox API link",
"form.feed.fieldset.general": "General", "form.feed.fieldset.general": "General",
@ -519,6 +526,11 @@
"form.integration.discord_webhook_link": "Discord Webhook link", "form.integration.discord_webhook_link": "Discord Webhook link",
"form.integration.slack_activate": "Slack entries to Discord", "form.integration.slack_activate": "Slack entries to Discord",
"form.integration.slack_webhook_link": "Slack Webhook link", "form.integration.slack_webhook_link": "Slack Webhook link",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.api_key.label.description": "Etiqueta da chave de API", "form.api_key.label.description": "Etiqueta da chave de API",
"form.submit.loading": "Carregando...", "form.submit.loading": "Carregando...",
"form.submit.saving": "Salvando...", "form.submit.saving": "Salvando...",

View file

@ -367,6 +367,13 @@
"form.feed.label.ntfy_default_priority": "Ntfy default priority", "form.feed.label.ntfy_default_priority": "Ntfy default priority",
"form.feed.label.ntfy_low_priority": "Ntfy low priority", "form.feed.label.ntfy_low_priority": "Ntfy low priority",
"form.feed.label.ntfy_min_priority": "Ntfy min priority", "form.feed.label.ntfy_min_priority": "Ntfy min priority",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.integration.cubox_activate": "Save entries to Cubox", "form.integration.cubox_activate": "Save entries to Cubox",
"form.integration.cubox_api_link": "Cubox API link", "form.integration.cubox_api_link": "Cubox API link",
"form.feed.fieldset.general": "General", "form.feed.fieldset.general": "General",
@ -529,6 +536,11 @@
"form.integration.discord_webhook_link": "Ссылка на Discord Webhook", "form.integration.discord_webhook_link": "Ссылка на Discord Webhook",
"form.integration.slack_activate": "Отправить статьи в Slack", "form.integration.slack_activate": "Отправить статьи в Slack",
"form.integration.slack_webhook_link": "Ссылка на Slack Webhook", "form.integration.slack_webhook_link": "Ссылка на Slack Webhook",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.api_key.label.description": "Описание API-ключа", "form.api_key.label.description": "Описание API-ключа",
"form.submit.loading": "Загрузка…", "form.submit.loading": "Загрузка…",
"form.submit.saving": "Сохранение…", "form.submit.saving": "Сохранение…",

View file

@ -288,12 +288,24 @@
"form.feed.label.ntfy_default_priority": "Ntfy default priority", "form.feed.label.ntfy_default_priority": "Ntfy default priority",
"form.feed.label.ntfy_low_priority": "Ntfy low priority", "form.feed.label.ntfy_low_priority": "Ntfy low priority",
"form.feed.label.ntfy_min_priority": "Ntfy min priority", "form.feed.label.ntfy_min_priority": "Ntfy min priority",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.integration.cubox_activate": "Save entries to Cubox", "form.integration.cubox_activate": "Save entries to Cubox",
"form.integration.cubox_api_link": "Cubox API link", "form.integration.cubox_api_link": "Cubox API link",
"form.integration.discord_activate": "Makaleleri Discord'a gönder", "form.integration.discord_activate": "Makaleleri Discord'a gönder",
"form.integration.discord_webhook_link": "Discord hizmet Webhook'lerinin virgülle ayrılmış listesi", "form.integration.discord_webhook_link": "Discord hizmet Webhook'lerinin virgülle ayrılmış listesi",
"form.integration.slack_activate": "Makaleleri Slack'a gönder", "form.integration.slack_activate": "Makaleleri Slack'a gönder",
"form.integration.slack_webhook_link": "Slack hizmet Webhook'lerinin virgülle ayrılmış listesi", "form.integration.slack_webhook_link": "Slack hizmet Webhook'lerinin virgülle ayrılmış listesi",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.prefs.fieldset.application_settings": "Uygulama Ayarları", "form.prefs.fieldset.application_settings": "Uygulama Ayarları",
"form.prefs.fieldset.authentication_settings": "Kimlik Doğrulama Ayarları", "form.prefs.fieldset.authentication_settings": "Kimlik Doğrulama Ayarları",
"form.prefs.fieldset.reader_settings": "Okuyucu Ayarları", "form.prefs.fieldset.reader_settings": "Okuyucu Ayarları",

View file

@ -367,6 +367,13 @@
"form.feed.label.ntfy_default_priority": "Ntfy default priority", "form.feed.label.ntfy_default_priority": "Ntfy default priority",
"form.feed.label.ntfy_low_priority": "Ntfy low priority", "form.feed.label.ntfy_low_priority": "Ntfy low priority",
"form.feed.label.ntfy_min_priority": "Ntfy min priority", "form.feed.label.ntfy_min_priority": "Ntfy min priority",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.integration.cubox_activate": "Save entries to Cubox", "form.integration.cubox_activate": "Save entries to Cubox",
"form.integration.cubox_api_link": "Cubox API link", "form.integration.cubox_api_link": "Cubox API link",
"form.category.label.title": "Назва", "form.category.label.title": "Назва",
@ -529,6 +536,11 @@
"form.integration.discord_webhook_link": "Discord Webhook link", "form.integration.discord_webhook_link": "Discord Webhook link",
"form.integration.slack_activate": "Slack entries to Discord", "form.integration.slack_activate": "Slack entries to Discord",
"form.integration.slack_webhook_link": "Slack Webhook link", "form.integration.slack_webhook_link": "Slack Webhook link",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.api_key.label.description": "Назва ключа API", "form.api_key.label.description": "Назва ключа API",
"form.submit.loading": "Завантаження...", "form.submit.loading": "Завантаження...",
"form.submit.saving": "Зберігаю...", "form.submit.saving": "Зберігаю...",

View file

@ -347,6 +347,13 @@
"form.feed.label.ntfy_default_priority": "Ntfy默认优先级", "form.feed.label.ntfy_default_priority": "Ntfy默认优先级",
"form.feed.label.ntfy_low_priority": "Ntfy低优先级", "form.feed.label.ntfy_low_priority": "Ntfy低优先级",
"form.feed.label.ntfy_min_priority": "Ntfy最低优先级", "form.feed.label.ntfy_min_priority": "Ntfy最低优先级",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.integration.cubox_activate": "保存文章到 Cubox", "form.integration.cubox_activate": "保存文章到 Cubox",
"form.integration.cubox_api_link": "Cubox API 链接", "form.integration.cubox_api_link": "Cubox API 链接",
"form.feed.fieldset.general": "通用", "form.feed.fieldset.general": "通用",
@ -509,6 +516,11 @@
"form.integration.discord_webhook_link": "Discord Webhook link", "form.integration.discord_webhook_link": "Discord Webhook link",
"form.integration.slack_activate": "将新文章推送到 Slack", "form.integration.slack_activate": "将新文章推送到 Slack",
"form.integration.slack_webhook_link": "Slack Webhook link", "form.integration.slack_webhook_link": "Slack Webhook link",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.api_key.label.description": "API密钥标签", "form.api_key.label.description": "API密钥标签",
"form.submit.loading": "载入中…", "form.submit.loading": "载入中…",
"form.submit.saving": "保存中…", "form.submit.saving": "保存中…",

View file

@ -347,6 +347,13 @@
"form.feed.label.ntfy_default_priority": "Ntfy 預設優先順序", "form.feed.label.ntfy_default_priority": "Ntfy 預設優先順序",
"form.feed.label.ntfy_low_priority": "Ntfy 低優先順序", "form.feed.label.ntfy_low_priority": "Ntfy 低優先順序",
"form.feed.label.ntfy_min_priority": "Ntfy 最低優先順序", "form.feed.label.ntfy_min_priority": "Ntfy 最低優先順序",
"form.feed.label.pushover_activate": "Push entries to pushover.net",
"form.feed.label.pushover_priority": "Pushover message priority",
"form.feed.label.pushover_max_priority": "Pushover max priority",
"form.feed.label.pushover_high_priority": "Pushover high priority",
"form.feed.label.pushover_default_priority": "Pushover default priority",
"form.feed.label.pushover_low_priority": "Pushover low priority",
"form.feed.label.pushover_min_priority": "Pushover min priority",
"form.integration.cubox_activate": "儲存文章到 Cubox", "form.integration.cubox_activate": "儲存文章到 Cubox",
"form.integration.cubox_api_link": "Cubox API 連結", "form.integration.cubox_api_link": "Cubox API 連結",
"form.feed.fieldset.general": "通用", "form.feed.fieldset.general": "通用",
@ -509,6 +516,11 @@
"form.integration.discord_webhook_link": "Discord Webhook 連結", "form.integration.discord_webhook_link": "Discord Webhook 連結",
"form.integration.slack_activate": "推送文章到 Slack", "form.integration.slack_activate": "推送文章到 Slack",
"form.integration.slack_webhook_link": "Slack Webhook 連結", "form.integration.slack_webhook_link": "Slack Webhook 連結",
"form.integration.pushover_activate": "Push entries to pushover",
"form.integration.pushover_token": "Pushover token",
"form.integration.pushover_user": "Pushover user",
"form.integration.pushover_device": "Pushover device (optional)",
"form.integration.pushover_prefix": "Pushover prefix (optional)",
"form.api_key.label.description": "API 金鑰標籤", "form.api_key.label.description": "API 金鑰標籤",
"form.submit.loading": "載入中…", "form.submit.loading": "載入中…",
"form.submit.saving": "儲存中…", "form.submit.saving": "儲存中…",

View file

@ -56,6 +56,8 @@ type Feed struct {
WebhookURL string `json:"webhook_url"` WebhookURL string `json:"webhook_url"`
NtfyEnabled bool `json:"ntfy_enabled"` NtfyEnabled bool `json:"ntfy_enabled"`
NtfyPriority int `json:"ntfy_priority"` NtfyPriority int `json:"ntfy_priority"`
PushoverEnabled bool `json:"pushover_enabled,omitempty"`
PushoverPriority int `json:"pushover_priority,omitempty"`
// Non-persisted attributes // Non-persisted attributes
Category *Category `json:"category,omitempty"` Category *Category `json:"category,omitempty"`

View file

@ -111,4 +111,9 @@ type Integration struct {
DiscordWebhookLink string DiscordWebhookLink string
SlackEnabled bool SlackEnabled bool
SlackWebhookLink string SlackWebhookLink string
PushoverEnabled bool
PushoverUser string
PushoverToken string
PushoverDevice string
PushoverPrefix string
} }

View file

@ -360,9 +360,11 @@ func (s *Storage) UpdateFeed(feed *model.Feed) (err error) {
disable_http2=$29, disable_http2=$29,
description=$30, description=$30,
ntfy_enabled=$31, ntfy_enabled=$31,
ntfy_priority=$32 ntfy_priority=$32,
pushover_enabled=$33,
pushover_priority=$34
WHERE WHERE
id=$33 AND user_id=$34 id=$35 AND user_id=$36
` `
_, err = s.db.Exec(query, _, err = s.db.Exec(query,
feed.FeedURL, feed.FeedURL,
@ -397,6 +399,8 @@ func (s *Storage) UpdateFeed(feed *model.Feed) (err error) {
feed.Description, feed.Description,
feed.NtfyEnabled, feed.NtfyEnabled,
feed.NtfyPriority, feed.NtfyPriority,
feed.PushoverEnabled,
feed.PushoverPriority,
feed.ID, feed.ID,
feed.UserID, feed.UserID,
) )

View file

@ -168,7 +168,9 @@ func (f *FeedQueryBuilder) GetFeeds() (model.Feeds, error) {
f.webhook_url, f.webhook_url,
f.disable_http2, f.disable_http2,
f.ntfy_enabled, f.ntfy_enabled,
f.ntfy_priority f.ntfy_priority,
f.pushover_enabled,
f.pushover_priority
FROM FROM
feeds f feeds f
LEFT JOIN LEFT JOIN
@ -240,6 +242,8 @@ func (f *FeedQueryBuilder) GetFeeds() (model.Feeds, error) {
&feed.DisableHTTP2, &feed.DisableHTTP2,
&feed.NtfyEnabled, &feed.NtfyEnabled,
&feed.NtfyPriority, &feed.NtfyPriority,
&feed.PushoverEnabled,
&feed.PushoverPriority,
) )
if err != nil { if err != nil {

View file

@ -214,7 +214,12 @@ func (s *Storage) Integration(userID int64) (*model.Integration, error) {
discord_enabled, discord_enabled,
discord_webhook_link, discord_webhook_link,
slack_enabled, slack_enabled,
slack_webhook_link slack_webhook_link,
pushover_enabled,
pushover_user,
pushover_token,
pushover_device,
pushover_prefix
FROM FROM
integrations integrations
WHERE WHERE
@ -328,6 +333,11 @@ func (s *Storage) Integration(userID int64) (*model.Integration, error) {
&integration.DiscordWebhookLink, &integration.DiscordWebhookLink,
&integration.SlackEnabled, &integration.SlackEnabled,
&integration.SlackWebhookLink, &integration.SlackWebhookLink,
&integration.PushoverEnabled,
&integration.PushoverUser,
&integration.PushoverToken,
&integration.PushoverDevice,
&integration.PushoverPrefix,
) )
switch { switch {
case err == sql.ErrNoRows: case err == sql.ErrNoRows:
@ -449,9 +459,14 @@ func (s *Storage) UpdateIntegration(integration *model.Integration) error {
discord_enabled=$102, discord_enabled=$102,
discord_webhook_link=$103, discord_webhook_link=$103,
slack_enabled=$104, slack_enabled=$104,
slack_webhook_link=$105 slack_webhook_link=$105,
pushover_enabled=$106,
pushover_user=$107,
pushover_token=$108,
pushover_device=$109,
pushover_prefix=$110
WHERE WHERE
user_id=$106 user_id=$111
` `
_, err := s.db.Exec( _, err := s.db.Exec(
query, query,
@ -560,6 +575,11 @@ func (s *Storage) UpdateIntegration(integration *model.Integration) error {
integration.DiscordWebhookLink, integration.DiscordWebhookLink,
integration.SlackEnabled, integration.SlackEnabled,
integration.SlackWebhookLink, integration.SlackWebhookLink,
integration.PushoverEnabled,
integration.PushoverUser,
integration.PushoverToken,
integration.PushoverDevice,
integration.PushoverPrefix,
integration.UserID, integration.UserID,
) )

View file

@ -209,6 +209,27 @@
</select> </select>
</details> </details>
<details {{ if .form.PushoverEnabled }}open{{ end }}>
<summary>Pushover</summary>
<label><input type="checkbox" name="pushover_enabled" value="1" {{ if .form.PushoverEnabled }}checked{{ end }}> {{ t "form.feed.label.pushover_activate" }}</label>
<div class="form-label-row">
<label for="form-pushover-priority">
{{ t "form.feed.label.pushover_priority" }}
</label>
&nbsp;
<a href="https://pushover.net/api#priority" target="_blank">
{{ icon "external-link" }}
</a>
</div>
<select id="form-pushover-priority" name="pushover_priority">
<option value="2" {{ if eq .form.PushoverPriority 2 }}selected{{ end }}>2 - {{ t "form.feed.label.pushover_max_priority" }}</option>
<option value="1" {{ if eq .form.PushoverPriority 1 }}selected{{ end }}>1 - {{ t "form.feed.label.pushover_high_priority" }}</option>
<option value="0" {{ if eq .form.PushoverPriority 0 }}selected{{ end }}>0 - {{ t "form.feed.label.pushover_default_priority" }}</option>
<option value="-1" {{ if eq .form.PushoverPriority -1 }}selected{{ end }}>-1 - {{ t "form.feed.label.pushover_low_priority" }}</option>
<option value="-2" {{ if eq .form.PushoverPriority -2 }}selected{{ end }}>-2 - {{ t "form.feed.label.pushover_min_priority" }}</option>
</select>
</details>
<details {{ if .form.WebhookURL }}open{{ end }}> <details {{ if .form.WebhookURL }}open{{ end }}>
<summary>Webhook</summary> <summary>Webhook</summary>
<div class="form-label-row"> <div class="form-label-row">

View file

@ -412,6 +412,31 @@
</div> </div>
</details> </details>
<details {{ if .form.PushoverEnabled }}open{{ end }}>
<summary>Pushover</summary>
<div class="form-section">
<label>
<input type="checkbox" name="pushover_enabled" value="1" {{ if .form.PushoverEnabled }}checked{{ end }}> {{ t "form.integration.pushover_activate" }}
</label>
<label for="form-pushover-token">{{ t "form.integration.pushover_token" }}</label>
<input type="text" name="pushover_token" id="form-pushover-token" value="{{ .form.PushoverToken }}" spellcheck="false">
<label for="form-pushover-user">{{ t "form.integration.pushover_user" }}</label>
<input type="text" name="pushover_user" id="form-pushover-user" value="{{ .form.PushoverUser }}" spellcheck="false">
<label for="form-pushover-device">{{ t "form.integration.pushover_device" }}</label>
<input type="text" name="pushover_device" id="form-pushover-device" value="{{ .form.PushoverDevice }}" spellcheck="false">
<label for="form-pushover-prefix">{{ t "form.integration.pushover_prefix" }}</label>
<input type="text" name="pushover_prefix" id="form-pushover-prefix" value="{{ .form.PushoverPrefix }}" spellcheck="false" placeholder="https://api.pushover.net">
<div class="buttons">
<button type="submit" class="button button-primary" data-label-loading="{{ t "form.submit.saving" }}">{{ t "action.update" }}</button>
</div>
</div>
</details>
<details {{ if .form.RaindropEnabled }}open{{ end }}> <details {{ if .form.RaindropEnabled }}open{{ end }}>
<summary>Raindrop</summary> <summary>Raindrop</summary>
<div class="form-section"> <div class="form-section">

View file

@ -67,6 +67,8 @@ func (h *handler) showEditFeedPage(w http.ResponseWriter, r *http.Request) {
DisableHTTP2: feed.DisableHTTP2, DisableHTTP2: feed.DisableHTTP2,
NtfyEnabled: feed.NtfyEnabled, NtfyEnabled: feed.NtfyEnabled,
NtfyPriority: feed.NtfyPriority, NtfyPriority: feed.NtfyPriority,
PushoverEnabled: feed.PushoverEnabled,
PushoverPriority: feed.PushoverPriority,
} }
sess := session.New(h.store, request.SessionID(r)) sess := session.New(h.store, request.SessionID(r))

View file

@ -39,6 +39,8 @@ type FeedForm struct {
DisableHTTP2 bool DisableHTTP2 bool
NtfyEnabled bool NtfyEnabled bool
NtfyPriority int NtfyPriority int
PushoverEnabled bool
PushoverPriority int
} }
// Merge updates the fields of the given feed. // Merge updates the fields of the given feed.
@ -71,6 +73,8 @@ func (f FeedForm) Merge(feed *model.Feed) *model.Feed {
feed.DisableHTTP2 = f.DisableHTTP2 feed.DisableHTTP2 = f.DisableHTTP2
feed.NtfyEnabled = f.NtfyEnabled feed.NtfyEnabled = f.NtfyEnabled
feed.NtfyPriority = f.NtfyPriority feed.NtfyPriority = f.NtfyPriority
feed.PushoverEnabled = f.PushoverEnabled
feed.PushoverPriority = f.PushoverPriority
return feed return feed
} }
@ -84,6 +88,12 @@ func NewFeedForm(r *http.Request) *FeedForm {
if err != nil { if err != nil {
ntfyPriority = 0 ntfyPriority = 0
} }
pushoverPriority, err := strconv.Atoi(r.FormValue("pushover_priority"))
if err != nil {
pushoverPriority = 0
}
return &FeedForm{ return &FeedForm{
FeedURL: r.FormValue("feed_url"), FeedURL: r.FormValue("feed_url"),
SiteURL: r.FormValue("site_url"), SiteURL: r.FormValue("site_url"),
@ -111,5 +121,7 @@ func NewFeedForm(r *http.Request) *FeedForm {
DisableHTTP2: r.FormValue("disable_http2") == "1", DisableHTTP2: r.FormValue("disable_http2") == "1",
NtfyEnabled: r.FormValue("ntfy_enabled") == "1", NtfyEnabled: r.FormValue("ntfy_enabled") == "1",
NtfyPriority: ntfyPriority, NtfyPriority: ntfyPriority,
PushoverEnabled: r.FormValue("pushover_enabled") == "1",
PushoverPriority: pushoverPriority,
} }
} }

View file

@ -117,6 +117,11 @@ type IntegrationForm struct {
DiscordWebhookLink string DiscordWebhookLink string
SlackEnabled bool SlackEnabled bool
SlackWebhookLink string SlackWebhookLink string
PushoverEnabled bool
PushoverUser string
PushoverToken string
PushoverDevice string
PushoverPrefix string
} }
// Merge copy form values to the model. // Merge copy form values to the model.
@ -223,6 +228,11 @@ func (i IntegrationForm) Merge(integration *model.Integration) {
integration.DiscordWebhookLink = i.DiscordWebhookLink integration.DiscordWebhookLink = i.DiscordWebhookLink
integration.SlackEnabled = i.SlackEnabled integration.SlackEnabled = i.SlackEnabled
integration.SlackWebhookLink = i.SlackWebhookLink integration.SlackWebhookLink = i.SlackWebhookLink
integration.PushoverEnabled = i.PushoverEnabled
integration.PushoverUser = i.PushoverUser
integration.PushoverToken = i.PushoverToken
integration.PushoverDevice = i.PushoverDevice
integration.PushoverPrefix = i.PushoverPrefix
} }
// NewIntegrationForm returns a new IntegrationForm. // NewIntegrationForm returns a new IntegrationForm.
@ -332,6 +342,11 @@ func NewIntegrationForm(r *http.Request) *IntegrationForm {
DiscordWebhookLink: r.FormValue("discord_webhook_link"), DiscordWebhookLink: r.FormValue("discord_webhook_link"),
SlackEnabled: r.FormValue("slack_enabled") == "1", SlackEnabled: r.FormValue("slack_enabled") == "1",
SlackWebhookLink: r.FormValue("slack_webhook_link"), SlackWebhookLink: r.FormValue("slack_webhook_link"),
PushoverEnabled: r.FormValue("pushover_enabled") == "1",
PushoverUser: r.FormValue("pushover_user"),
PushoverToken: r.FormValue("pushover_token"),
PushoverDevice: r.FormValue("pushover_device"),
PushoverPrefix: r.FormValue("pushover_prefix"),
} }
} }

View file

@ -131,6 +131,11 @@ func (h *handler) showIntegrationPage(w http.ResponseWriter, r *http.Request) {
DiscordWebhookLink: integration.DiscordWebhookLink, DiscordWebhookLink: integration.DiscordWebhookLink,
SlackEnabled: integration.SlackEnabled, SlackEnabled: integration.SlackEnabled,
SlackWebhookLink: integration.SlackWebhookLink, SlackWebhookLink: integration.SlackWebhookLink,
PushoverEnabled: integration.PushoverEnabled,
PushoverUser: integration.PushoverUser,
PushoverToken: integration.PushoverToken,
PushoverDevice: integration.PushoverDevice,
PushoverPrefix: integration.PushoverPrefix,
} }
sess := session.New(h.store, request.SessionID(r)) sess := session.New(h.store, request.SessionID(r))