Просмотр исходного кода

feat(integrations/ntfy): make ntfy topics configurable per feed, with default one as fallback

Uziskull 1 год назад
Родитель
Сommit
55a3f9fcc9

+ 7 - 0
internal/database/migrations.go

@@ -1008,4 +1008,11 @@ var migrations = []func(tx *sql.Tx, driver string) error{
 		_, err = tx.Exec(sql)
 		return err
 	},
+	func(tx *sql.Tx, _ string) (err error) {
+		sql := `
+			ALTER TABLE feeds ADD COLUMN ntfy_topic text default '';
+		`
+		_, err = tx.Exec(sql)
+		return err
+	},
 }

+ 6 - 1
internal/integration/integration.go

@@ -502,15 +502,20 @@ func PushEntries(feed *model.Feed, entries model.Entries, userIntegrations *mode
 	}
 
 	if userIntegrations.NtfyEnabled && feed.NtfyEnabled {
+		ntfyTopic := feed.NtfyTopic
+		if ntfyTopic == "" {
+			ntfyTopic = userIntegrations.NtfyTopic
+		}
 		slog.Debug("Sending new entries to Ntfy",
 			slog.Int64("user_id", userIntegrations.UserID),
 			slog.Int("nb_entries", len(entries)),
 			slog.Int64("feed_id", feed.ID),
+			slog.String("topic", ntfyTopic),
 		)
 
 		client := ntfy.NewClient(
 			userIntegrations.NtfyURL,
-			userIntegrations.NtfyTopic,
+			ntfyTopic,
 			userIntegrations.NtfyAPIToken,
 			userIntegrations.NtfyUsername,
 			userIntegrations.NtfyPassword,

+ 2 - 1
internal/locale/translations/de_DE.json

@@ -186,6 +186,7 @@
     "form.feed.label.ntfy_max_priority": "Höchste Ntfy-Priorität",
     "form.feed.label.ntfy_min_priority": "Niedrigste Ntfy-Priorität",
     "form.feed.label.ntfy_priority": "Ntfy-Priorität",
+    "form.feed.label.ntfy_topic": "Ntfy-Thema (optional)",
     "form.feed.label.pushover_activate": "Push entries to pushover.net",
     "form.feed.label.pushover_default_priority": "Pushover default priority",
     "form.feed.label.pushover_high_priority": "Pushover high priority",
@@ -254,7 +255,7 @@
     "form.integration.ntfy_icon_url": "Ntfy-Symbol-URL (optional)",
     "form.integration.ntfy_internal_links": "Interne Links beim Klicken verwenden (optional)",
     "form.integration.ntfy_password": "Ntfy-Passwort (optional)",
-    "form.integration.ntfy_topic": "Ntfy-Thema",
+    "form.integration.ntfy_topic": "Ntfy-Thema (Standard, wenn nicht im Feed eingestellt)",
     "form.integration.ntfy_url": "Ntfy-URL (optional, Standard ist ntfy.sh)",
     "form.integration.ntfy_username": "Ntfy-Benutzername (optional)",
     "form.integration.nunux_keeper_activate": "Artikel in Nunux Keeper speichern",

+ 2 - 1
internal/locale/translations/el_EL.json

@@ -186,6 +186,7 @@
     "form.feed.label.ntfy_max_priority": "Ntfy max priority",
     "form.feed.label.ntfy_min_priority": "Ntfy min priority",
     "form.feed.label.ntfy_priority": "Ntfy priority",
+    "form.feed.label.ntfy_topic": "Ntfy topic (optional)",
     "form.feed.label.pushover_activate": "Push entries to pushover.net",
     "form.feed.label.pushover_default_priority": "Pushover default priority",
     "form.feed.label.pushover_high_priority": "Pushover high priority",
@@ -254,7 +255,7 @@
     "form.integration.ntfy_icon_url": "Ntfy Icon URL (optional)",
     "form.integration.ntfy_internal_links": "Use internal links on click (optional)",
     "form.integration.ntfy_password": "Ntfy Password (optional)",
-    "form.integration.ntfy_topic": "Ntfy topic",
+    "form.integration.ntfy_topic": "Ntfy topic (default used if not set in feed)",
     "form.integration.ntfy_url": "Ntfy URL (optional, default is ntfy.sh)",
     "form.integration.ntfy_username": "Ntfy Username (optional)",
     "form.integration.nunux_keeper_activate": "Αποθήκευση άρθρων στο Nunux Keeper",

+ 2 - 1
internal/locale/translations/en_US.json

@@ -186,6 +186,7 @@
     "form.feed.label.ntfy_max_priority": "Ntfy max priority",
     "form.feed.label.ntfy_min_priority": "Ntfy min priority",
     "form.feed.label.ntfy_priority": "Ntfy priority",
+    "form.feed.label.ntfy_topic": "Ntfy topic (optional)",
     "form.feed.label.pushover_activate": "Push entries to Pushover",
     "form.feed.label.pushover_default_priority": "Default priority",
     "form.feed.label.pushover_high_priority": "High priority",
@@ -254,7 +255,7 @@
     "form.integration.ntfy_icon_url": "Ntfy Icon URL (optional)",
     "form.integration.ntfy_internal_links": "Use internal links on click (optional)",
     "form.integration.ntfy_password": "Ntfy Password (optional)",
-    "form.integration.ntfy_topic": "Ntfy topic",
+    "form.integration.ntfy_topic": "Ntfy topic (default used if not set in feed)",
     "form.integration.ntfy_url": "Ntfy URL (optional, default is ntfy.sh)",
     "form.integration.ntfy_username": "Ntfy Username (optional)",
     "form.integration.nunux_keeper_activate": "Save entries to Nunux Keeper",

+ 2 - 1
internal/locale/translations/es_ES.json

@@ -186,6 +186,7 @@
     "form.feed.label.ntfy_max_priority": "Prioridad máxima a Ntfy",
     "form.feed.label.ntfy_min_priority": "Prioridad mínima a Ntfy",
     "form.feed.label.ntfy_priority": "Prioridad Ntfy",
+    "form.feed.label.ntfy_topic": "Tema Ntfy (opcional)",
     "form.feed.label.pushover_activate": "Push entries to pushover.net",
     "form.feed.label.pushover_default_priority": "Pushover default priority",
     "form.feed.label.pushover_high_priority": "Pushover high priority",
@@ -254,7 +255,7 @@
     "form.integration.ntfy_icon_url": "URL del icono de Ntfy (opcional)",
     "form.integration.ntfy_internal_links": "Use internal links on click (optional)",
     "form.integration.ntfy_password": "Contraseña de Ntfy (opcional)",
-    "form.integration.ntfy_topic": "Tema Ntfy",
+    "form.integration.ntfy_topic": "Tema Ntfy (por defecto, si no se establece en el feed)",
     "form.integration.ntfy_url": "URL de Ntfy (opcional, la predeterminada es ntfy.sh)",
     "form.integration.ntfy_username": "Nombre de usuario de Ntfy (opcional)",
     "form.integration.nunux_keeper_activate": "Enviar artículos a Nunux Keeper",

+ 2 - 1
internal/locale/translations/fi_FI.json

@@ -186,6 +186,7 @@
     "form.feed.label.ntfy_max_priority": "Ntfy max priority",
     "form.feed.label.ntfy_min_priority": "Ntfy min priority",
     "form.feed.label.ntfy_priority": "Ntfy priority",
+    "form.feed.label.ntfy_topic": "Ntfy topic (optional)",
     "form.feed.label.pushover_activate": "Push entries to pushover.net",
     "form.feed.label.pushover_default_priority": "Pushover default priority",
     "form.feed.label.pushover_high_priority": "Pushover high priority",
@@ -254,7 +255,7 @@
     "form.integration.ntfy_icon_url": "Ntfy Icon URL (optional)",
     "form.integration.ntfy_internal_links": "Use internal links on click (optional)",
     "form.integration.ntfy_password": "Ntfy Password (optional)",
-    "form.integration.ntfy_topic": "Ntfy topic",
+    "form.integration.ntfy_topic": "Ntfy topic (default used if not set in feed)",
     "form.integration.ntfy_url": "Ntfy URL (optional, default is ntfy.sh)",
     "form.integration.ntfy_username": "Ntfy Username (optional)",
     "form.integration.nunux_keeper_activate": "Tallenna artikkelit Nunux Keeperiin",

+ 2 - 1
internal/locale/translations/fr_FR.json

@@ -186,6 +186,7 @@
     "form.feed.label.ntfy_max_priority": "Priorité maximale de notification",
     "form.feed.label.ntfy_min_priority": "Priorité minimale de notification",
     "form.feed.label.ntfy_priority": "Priorité de notification",
+    "form.feed.label.ntfy_topic": "Sujet Ntfy (facultatif)",
     "form.feed.label.pushover_activate": "Activer les notifications vers Pushover",
     "form.feed.label.pushover_default_priority": "Priorité par défaut",
     "form.feed.label.pushover_high_priority": "Priorité élevée",
@@ -254,7 +255,7 @@
     "form.integration.ntfy_icon_url": "URL de l'icône Ntfy (facultatif)",
     "form.integration.ntfy_internal_links": "Utiliser les liens internes vers Miniflux (facultatif)",
     "form.integration.ntfy_password": "Mot de passe Ntfy (facultatif)",
-    "form.integration.ntfy_topic": "Sujet Ntfy",
+    "form.integration.ntfy_topic": "Sujet Ntfy (défaut s'il n'est pas défini dans le flux)",
     "form.integration.ntfy_url": "URL de Ntfy (optionnel, ntfy.sh par défaut)",
     "form.integration.ntfy_username": "Nom d'utilisateur Ntfy (optionnel)",
     "form.integration.nunux_keeper_activate": "Sauvegarder les articles vers Nunux Keeper",

+ 2 - 1
internal/locale/translations/hi_IN.json

@@ -186,6 +186,7 @@
     "form.feed.label.ntfy_max_priority": "Ntfy max priority",
     "form.feed.label.ntfy_min_priority": "Ntfy min priority",
     "form.feed.label.ntfy_priority": "Ntfy priority",
+    "form.feed.label.ntfy_topic": "Ntfy topic (optional)",
     "form.feed.label.pushover_activate": "Push entries to pushover.net",
     "form.feed.label.pushover_default_priority": "Pushover default priority",
     "form.feed.label.pushover_high_priority": "Pushover high priority",
@@ -254,7 +255,7 @@
     "form.integration.ntfy_icon_url": "Ntfy Icon URL (optional)",
     "form.integration.ntfy_internal_links": "Use internal links on click (optional)",
     "form.integration.ntfy_password": "Ntfy Password (optional)",
-    "form.integration.ntfy_topic": "Ntfy topic",
+    "form.integration.ntfy_topic": "Ntfy topic (default used if not set in feed)",
     "form.integration.ntfy_url": "Ntfy URL (optional, default is ntfy.sh)",
     "form.integration.ntfy_username": "Ntfy Username (optional)",
     "form.integration.nunux_keeper_activate": "विषय-वस्तु को ननक्स कीपर में सहेजें",

+ 2 - 1
internal/locale/translations/id_ID.json

@@ -184,6 +184,7 @@
     "form.feed.label.ntfy_max_priority": "Ntfy max priority",
     "form.feed.label.ntfy_min_priority": "Ntfy min priority",
     "form.feed.label.ntfy_priority": "Ntfy priority",
+    "form.feed.label.ntfy_topic": "Ntfy topic (optional)",
     "form.feed.label.pushover_activate": "Push entries to pushover.net",
     "form.feed.label.pushover_default_priority": "Pushover default priority",
     "form.feed.label.pushover_high_priority": "Pushover high priority",
@@ -252,7 +253,7 @@
     "form.integration.ntfy_icon_url": "Ntfy Icon URL (optional)",
     "form.integration.ntfy_internal_links": "Use internal links on click (optional)",
     "form.integration.ntfy_password": "Ntfy Password (optional)",
-    "form.integration.ntfy_topic": "Ntfy topic",
+    "form.integration.ntfy_topic": "Ntfy topic (default used if not set in feed)",
     "form.integration.ntfy_url": "Ntfy URL (optional, default is ntfy.sh)",
     "form.integration.ntfy_username": "Ntfy Username (optional)",
     "form.integration.nunux_keeper_activate": "Simpan artikel ke Nunux Keeper",

+ 2 - 1
internal/locale/translations/it_IT.json

@@ -186,6 +186,7 @@
     "form.feed.label.ntfy_max_priority": "Ntfy max priority",
     "form.feed.label.ntfy_min_priority": "Ntfy min priority",
     "form.feed.label.ntfy_priority": "Ntfy priority",
+    "form.feed.label.ntfy_topic": "Ntfy topic (optional)",
     "form.feed.label.pushover_activate": "Push entries to pushover.net",
     "form.feed.label.pushover_default_priority": "Pushover default priority",
     "form.feed.label.pushover_high_priority": "Pushover high priority",
@@ -254,7 +255,7 @@
     "form.integration.ntfy_icon_url": "Ntfy Icon URL (optional)",
     "form.integration.ntfy_internal_links": "Use internal links on click (optional)",
     "form.integration.ntfy_password": "Ntfy Password (optional)",
-    "form.integration.ntfy_topic": "Ntfy topic",
+    "form.integration.ntfy_topic": "Ntfy topic (default used if not set in feed)",
     "form.integration.ntfy_url": "Ntfy URL (optional, default is ntfy.sh)",
     "form.integration.ntfy_username": "Ntfy Username (optional)",
     "form.integration.nunux_keeper_activate": "Salva gli articoli su Nunux Keeper",

+ 2 - 1
internal/locale/translations/ja_JP.json

@@ -184,6 +184,7 @@
     "form.feed.label.ntfy_max_priority": "Ntfy max priority",
     "form.feed.label.ntfy_min_priority": "Ntfy min priority",
     "form.feed.label.ntfy_priority": "Ntfy priority",
+    "form.feed.label.ntfy_topic": "Ntfy topic (optional)",
     "form.feed.label.pushover_activate": "Push entries to pushover.net",
     "form.feed.label.pushover_default_priority": "Pushover default priority",
     "form.feed.label.pushover_high_priority": "Pushover high priority",
@@ -252,7 +253,7 @@
     "form.integration.ntfy_icon_url": "Ntfy Icon URL (optional)",
     "form.integration.ntfy_internal_links": "Use internal links on click (optional)",
     "form.integration.ntfy_password": "Ntfy Password (optional)",
-    "form.integration.ntfy_topic": "Ntfy topic",
+    "form.integration.ntfy_topic": "Ntfy topic (default used if not set in feed)",
     "form.integration.ntfy_url": "Ntfy URL (optional, default is ntfy.sh)",
     "form.integration.ntfy_username": "Ntfy Username (optional)",
     "form.integration.nunux_keeper_activate": "Nunux Keeper に記事を保存する",

+ 2 - 1
internal/locale/translations/nan_Latn_pehoeji.json

@@ -184,6 +184,7 @@
     "form.feed.label.ntfy_max_priority": "Ntfy siōng koân iu-sian sūn-sū",
     "form.feed.label.ntfy_min_priority": "Ntfy siōng kē iu-sian sūn-sū",
     "form.feed.label.ntfy_priority": "Ntfy iu-sian sūn-sū",
+    "form.feed.label.ntfy_topic": "Ntfy topic (soán thiⁿ)",
     "form.feed.label.pushover_activate": "Push entries to Pushover",
     "form.feed.label.pushover_default_priority": "Default priority",
     "form.feed.label.pushover_high_priority": "High priority",
@@ -252,7 +253,7 @@
     "form.integration.ntfy_icon_url": "Ntfy Icon bāng-chí (soán thiⁿ)",
     "form.integration.ntfy_internal_links": "Tiám ê sî-chūn iōng lāi-pō͘ liân-kiat (soán thiⁿ)",
     "form.integration.ntfy_password": "Ntfy bi̍t-bé (soán thiⁿ)",
-    "form.integration.ntfy_topic": "Ntfy topic",
+    "form.integration.ntfy_topic": "Ntfy topic (chhī-liāu nā bô siat-tēng, tiō iōng ī-siat-ti̍t)",
     "form.integration.ntfy_url": "Ntfy bāng-chí (soán thiⁿ, ū-siat sī ntfy.sh)",
     "form.integration.ntfy_username": "Ntfy kháu-chō miâ (soán thiⁿ)",
     "form.integration.nunux_keeper_activate": "Pó-chûn siau-sit kàu Nunux Keeper",

+ 2 - 1
internal/locale/translations/nl_NL.json

@@ -186,6 +186,7 @@
     "form.feed.label.ntfy_max_priority": "Ntfy maximale prioriteit",
     "form.feed.label.ntfy_min_priority": "Ntfy minimale prioriteit",
     "form.feed.label.ntfy_priority": "Ntfy prioriteit",
+    "form.feed.label.ntfy_topic": "Ntfy topic (optional)",
     "form.feed.label.pushover_activate": "Push entries to pushover.net",
     "form.feed.label.pushover_default_priority": "Pushover default priority",
     "form.feed.label.pushover_high_priority": "Pushover high priority",
@@ -254,7 +255,7 @@
     "form.integration.ntfy_icon_url": "Ntfy Icon URL (optioneel)",
     "form.integration.ntfy_internal_links": "Use internal links on click (optional)",
     "form.integration.ntfy_password": "Ntfy wachtwoord (optioneel)",
-    "form.integration.ntfy_topic": "Ntfy topic",
+    "form.integration.ntfy_topic": "Ntfy topic (standaard gebruikt als deze niet is ingesteld in feed)",
     "form.integration.ntfy_url": "Ntfy URL (optioneel, standaard is ntfy.sh)",
     "form.integration.ntfy_username": "Ntfy gebruikersnaam (optioneel)",
     "form.integration.nunux_keeper_activate": "Artikelen opslaan in Nunux Keeper",

+ 2 - 1
internal/locale/translations/pl_PL.json

@@ -188,6 +188,7 @@
     "form.feed.label.ntfy_max_priority": "Maksymalny priorytet ntfy",
     "form.feed.label.ntfy_min_priority": "Minimalny priorytet ntfy",
     "form.feed.label.ntfy_priority": "Priorytet ntfy",
+    "form.feed.label.ntfy_topic": "Temay ntfy (opcjonalne)",
     "form.feed.label.pushover_activate": "Prześlij wpisy do pushover.net",
     "form.feed.label.pushover_default_priority": "Domyślny priorytet Pushover",
     "form.feed.label.pushover_high_priority": "Wysoki priorytet Pushover",
@@ -256,7 +257,7 @@
     "form.integration.ntfy_icon_url": "Adres URL ikony ntfy (opcjonalny)",
     "form.integration.ntfy_internal_links": "Używaj łączy wewnętrznych po kliknięciu (opcjonalnie)",
     "form.integration.ntfy_password": "Hasło do ntfy (opcjonalne)",
-    "form.integration.ntfy_topic": "Temay ntfy",
+    "form.integration.ntfy_topic": "Temay ntfy (domyślny, jeśli nie został ustawiony w kanale)",
     "form.integration.ntfy_url": "Adres URL ntfy (opcjonalny, domyślny to ntfy.sh)",
     "form.integration.ntfy_username": "Login do ntfy (opcjonalny)",
     "form.integration.nunux_keeper_activate": "Zapisuj wpisy w Nunux Keeper",

+ 2 - 1
internal/locale/translations/pt_BR.json

@@ -186,6 +186,7 @@
     "form.feed.label.ntfy_max_priority": "Ntfy max priority",
     "form.feed.label.ntfy_min_priority": "Ntfy min priority",
     "form.feed.label.ntfy_priority": "Ntfy priority",
+    "form.feed.label.ntfy_topic": "Ntfy topic (optional)",
     "form.feed.label.pushover_activate": "Push entries to pushover.net",
     "form.feed.label.pushover_default_priority": "Pushover default priority",
     "form.feed.label.pushover_high_priority": "Pushover high priority",
@@ -254,7 +255,7 @@
     "form.integration.ntfy_icon_url": "Ntfy Icon URL (optional)",
     "form.integration.ntfy_internal_links": "Use internal links on click (optional)",
     "form.integration.ntfy_password": "Ntfy Password (optional)",
-    "form.integration.ntfy_topic": "Ntfy topic",
+    "form.integration.ntfy_topic": "Ntfy topic (default if not set in feed)",
     "form.integration.ntfy_url": "Ntfy URL (optional, default is ntfy.sh)",
     "form.integration.ntfy_username": "Ntfy Username (optional)",
     "form.integration.nunux_keeper_activate": "Salvar itens no Nunux Keeper",

+ 2 - 1
internal/locale/translations/ru_RU.json

@@ -188,6 +188,7 @@
     "form.feed.label.ntfy_max_priority": "Ntfy max priority",
     "form.feed.label.ntfy_min_priority": "Ntfy min priority",
     "form.feed.label.ntfy_priority": "Ntfy priority",
+    "form.feed.label.ntfy_topic": "Ntfy topic (optional)",
     "form.feed.label.pushover_activate": "Push entries to pushover.net",
     "form.feed.label.pushover_default_priority": "Pushover default priority",
     "form.feed.label.pushover_high_priority": "Pushover high priority",
@@ -256,7 +257,7 @@
     "form.integration.ntfy_icon_url": "Ntfy Icon URL (optional)",
     "form.integration.ntfy_internal_links": "Use internal links on click (optional)",
     "form.integration.ntfy_password": "Ntfy Password (optional)",
-    "form.integration.ntfy_topic": "Ntfy topic",
+    "form.integration.ntfy_topic": "Ntfy topic (default if not set in feed)",
     "form.integration.ntfy_url": "Ntfy URL (optional, default is ntfy.sh)",
     "form.integration.ntfy_username": "Ntfy Username (optional)",
     "form.integration.nunux_keeper_activate": "Сохранять статьи в Nunux Keeper",

+ 2 - 1
internal/locale/translations/tr_TR.json

@@ -186,6 +186,7 @@
     "form.feed.label.ntfy_max_priority": "Ntfy max priority",
     "form.feed.label.ntfy_min_priority": "Ntfy min priority",
     "form.feed.label.ntfy_priority": "Ntfy priority",
+    "form.feed.label.ntfy_topic": "Ntfy topic (optional)",
     "form.feed.label.pushover_activate": "Push entries to pushover.net",
     "form.feed.label.pushover_default_priority": "Pushover default priority",
     "form.feed.label.pushover_high_priority": "Pushover high priority",
@@ -254,7 +255,7 @@
     "form.integration.ntfy_icon_url": "Ntfy Icon URL (optional)",
     "form.integration.ntfy_internal_links": "Use internal links on click (optional)",
     "form.integration.ntfy_password": "Ntfy Password (optional)",
-    "form.integration.ntfy_topic": "Ntfy topic",
+    "form.integration.ntfy_topic": "Ntfy topic (default if not set in feed)",
     "form.integration.ntfy_url": "Ntfy URL (optional, default is ntfy.sh)",
     "form.integration.ntfy_username": "Ntfy Username (optional)",
     "form.integration.nunux_keeper_activate": "Makaleleri Nunux Keeper'a kaydet",

+ 2 - 1
internal/locale/translations/uk_UA.json

@@ -188,6 +188,7 @@
     "form.feed.label.ntfy_max_priority": "Ntfy max priority",
     "form.feed.label.ntfy_min_priority": "Ntfy min priority",
     "form.feed.label.ntfy_priority": "Ntfy priority",
+    "form.feed.label.ntfy_topic": "Ntfy topic (optional)",
     "form.feed.label.pushover_activate": "Push entries to pushover.net",
     "form.feed.label.pushover_default_priority": "Pushover default priority",
     "form.feed.label.pushover_high_priority": "Pushover high priority",
@@ -256,7 +257,7 @@
     "form.integration.ntfy_icon_url": "Ntfy Icon URL (optional)",
     "form.integration.ntfy_internal_links": "Use internal links on click (optional)",
     "form.integration.ntfy_password": "Ntfy Password (optional)",
-    "form.integration.ntfy_topic": "Ntfy topic",
+    "form.integration.ntfy_topic": "Ntfy topic (default if not set in feed)",
     "form.integration.ntfy_url": "Ntfy URL (optional, default is ntfy.sh)",
     "form.integration.ntfy_username": "Ntfy Username (optional)",
     "form.integration.nunux_keeper_activate": "Зберігати статті до Nunux Keeper",

+ 2 - 1
internal/locale/translations/zh_CN.json

@@ -184,6 +184,7 @@
     "form.feed.label.ntfy_max_priority": "Ntfy最高优先级",
     "form.feed.label.ntfy_min_priority": "Ntfy最低优先级",
     "form.feed.label.ntfy_priority": "Ntfy优先级",
+    "form.feed.label.ntfy_topic": "Ntfy主题(可选)",
     "form.feed.label.pushover_activate": "Push entries to pushover.net",
     "form.feed.label.pushover_default_priority": "Pushover default priority",
     "form.feed.label.pushover_high_priority": "Pushover high priority",
@@ -252,7 +253,7 @@
     "form.integration.ntfy_icon_url": "Ntfy图标URL(可选)",
     "form.integration.ntfy_internal_links": "Use internal links on click (optional)",
     "form.integration.ntfy_password": "Ntfy密码(可选)",
-    "form.integration.ntfy_topic": "Ntfy主题",
+    "form.integration.ntfy_topic": "Ntfy主题(預設,如果未在此源中定義)",
     "form.integration.ntfy_url": "Ntfy URL(可选,默认为ntfy.sh)",
     "form.integration.ntfy_username": "Ntfy用户名(可选)",
     "form.integration.nunux_keeper_activate": "保存文章到 Nunux Keeper",

+ 2 - 1
internal/locale/translations/zh_TW.json

@@ -184,6 +184,7 @@
     "form.feed.label.ntfy_max_priority": "Ntfy 最高優先順序",
     "form.feed.label.ntfy_min_priority": "Ntfy 最低優先順序",
     "form.feed.label.ntfy_priority": "Ntfy 優先順序",
+    "form.feed.label.ntfy_topic": "Ntfy topic (選填)",
     "form.feed.label.pushover_activate": "Push entries to pushover.net",
     "form.feed.label.pushover_default_priority": "Pushover default priority",
     "form.feed.label.pushover_high_priority": "Pushover high priority",
@@ -252,7 +253,7 @@
     "form.integration.ntfy_icon_url": "Ntfy Icon 網址 (選填)",
     "form.integration.ntfy_internal_links": "點選時使用內部連結 (選填)",
     "form.integration.ntfy_password": "Ntfy 密碼 (選填)",
-    "form.integration.ntfy_topic": "Ntfy topic",
+    "form.integration.ntfy_topic": "Ntfy topic (飼料若無設定,則使用預設值)",
     "form.integration.ntfy_url": "Ntfy 網址 (選填,預設為 ntfy.sh)",
     "form.integration.ntfy_username": "Ntfy 使用者名稱 (選填)",
     "form.integration.nunux_keeper_activate": "儲存文章到 Nunux Keeper",

+ 1 - 0
internal/model/feed.go

@@ -56,6 +56,7 @@ type Feed struct {
 	WebhookURL                  string    `json:"webhook_url"`
 	NtfyEnabled                 bool      `json:"ntfy_enabled"`
 	NtfyPriority                int       `json:"ntfy_priority"`
+	NtfyTopic                   string    `json:"ntfy_topic"`
 	PushoverEnabled             bool      `json:"pushover_enabled,omitempty"`
 	PushoverPriority            int       `json:"pushover_priority,omitempty"`
 

+ 5 - 3
internal/storage/feed.go

@@ -361,10 +361,11 @@ func (s *Storage) UpdateFeed(feed *model.Feed) (err error) {
 			description=$30,
 			ntfy_enabled=$31,
 			ntfy_priority=$32,
-			pushover_enabled=$33,
-			pushover_priority=$34
+			ntfy_topic=$33,
+			pushover_enabled=$34,
+			pushover_priority=$35
 		WHERE
-			id=$35 AND user_id=$36
+			id=$36 AND user_id=$37
 	`
 	_, err = s.db.Exec(query,
 		feed.FeedURL,
@@ -399,6 +400,7 @@ func (s *Storage) UpdateFeed(feed *model.Feed) (err error) {
 		feed.Description,
 		feed.NtfyEnabled,
 		feed.NtfyPriority,
+		feed.NtfyTopic,
 		feed.PushoverEnabled,
 		feed.PushoverPriority,
 		feed.ID,

+ 2 - 0
internal/storage/feed_query_builder.go

@@ -169,6 +169,7 @@ func (f *FeedQueryBuilder) GetFeeds() (model.Feeds, error) {
 			f.disable_http2,
 			f.ntfy_enabled,
 			f.ntfy_priority,
+			f.ntfy_topic,
 			f.pushover_enabled,
 			f.pushover_priority
 		FROM
@@ -242,6 +243,7 @@ func (f *FeedQueryBuilder) GetFeeds() (model.Feeds, error) {
 			&feed.DisableHTTP2,
 			&feed.NtfyEnabled,
 			&feed.NtfyPriority,
+			&feed.NtfyTopic,
 			&feed.PushoverEnabled,
 			&feed.PushoverPriority,
 		)

+ 6 - 0
internal/template/templates/views/edit_feed.html

@@ -191,6 +191,12 @@
             <details {{ if .form.NtfyEnabled }}open{{ end }}>
                 <summary>Ntfy</summary>
                 <label><input type="checkbox" name="ntfy_enabled" value="1" {{ if .form.NtfyEnabled }}checked{{ end }}> {{ t "form.feed.label.ntfy_activate" }}</label>
+                <div class="form-label-row">
+                    <label for="form-ntfy-topic">
+                        {{ t "form.feed.label.ntfy_topic" }}
+                    </label>
+                </div>
+                <input type="text" name="ntfy_topic" id="form-ntfy-topic" value="{{ .form.NtfyTopic }}" spellcheck="false" autocomplete="off">
                 <div class="form-label-row">
                     <label for="form-ntfy-priority">
                         {{ t "form.feed.label.ntfy_priority" }}

+ 1 - 0
internal/ui/feed_edit.go

@@ -67,6 +67,7 @@ func (h *handler) showEditFeedPage(w http.ResponseWriter, r *http.Request) {
 		DisableHTTP2:                feed.DisableHTTP2,
 		NtfyEnabled:                 feed.NtfyEnabled,
 		NtfyPriority:                feed.NtfyPriority,
+		NtfyTopic:                   feed.NtfyTopic,
 		PushoverEnabled:             feed.PushoverEnabled,
 		PushoverPriority:            feed.PushoverPriority,
 	}

+ 3 - 0
internal/ui/form/feed.go

@@ -39,6 +39,7 @@ type FeedForm struct {
 	DisableHTTP2                bool
 	NtfyEnabled                 bool
 	NtfyPriority                int
+	NtfyTopic                   string
 	PushoverEnabled             bool
 	PushoverPriority            int
 }
@@ -73,6 +74,7 @@ func (f FeedForm) Merge(feed *model.Feed) *model.Feed {
 	feed.DisableHTTP2 = f.DisableHTTP2
 	feed.NtfyEnabled = f.NtfyEnabled
 	feed.NtfyPriority = f.NtfyPriority
+	feed.NtfyTopic = f.NtfyTopic
 	feed.PushoverEnabled = f.PushoverEnabled
 	feed.PushoverPriority = f.PushoverPriority
 	return feed
@@ -121,6 +123,7 @@ func NewFeedForm(r *http.Request) *FeedForm {
 		DisableHTTP2:                r.FormValue("disable_http2") == "1",
 		NtfyEnabled:                 r.FormValue("ntfy_enabled") == "1",
 		NtfyPriority:                ntfyPriority,
+		NtfyTopic:                   r.FormValue("ntfy_topic"),
 		PushoverEnabled:             r.FormValue("pushover_enabled") == "1",
 		PushoverPriority:            pushoverPriority,
 	}