diff --git a/database/migrations.go b/database/migrations.go index 141917dc..20fe906d 100644 --- a/database/migrations.go +++ b/database/migrations.go @@ -653,4 +653,11 @@ var migrations = []func(tx *sql.Tx) error{ _, err = tx.Exec(sql) return err }, + func(tx *sql.Tx) (err error) { + sql := ` + ALTER TABLE integrations ADD COLUMN linkding_tags text default ''; + ` + _, err = tx.Exec(sql) + return err + }, } diff --git a/integration/integration.go b/integration/integration.go index c86ebae5..898380a1 100644 --- a/integration/integration.go +++ b/integration/integration.go @@ -104,6 +104,7 @@ func SendEntry(entry *model.Entry, integration *model.Integration) { client := linkding.NewClient( integration.LinkdingURL, integration.LinkdingAPIKey, + integration.LinkdingTags, ) if err := client.AddEntry(entry.Title, entry.URL); err != nil { logger.Error("[Integration] UserID #%d: %v", integration.UserID, err) diff --git a/integration/linkding/linkding.go b/integration/linkding/linkding.go index 4674c6a1..ec67ef2d 100644 --- a/integration/linkding/linkding.go +++ b/integration/linkding/linkding.go @@ -7,25 +7,28 @@ package linkding // import "miniflux.app/integration/linkding" import ( "fmt" "net/url" + "strings" "miniflux.app/http/client" ) // Document structure of a Linkding document type Document struct { - Url string `json:"url,omitempty"` - Title string `json:"title,omitempty"` + Url string `json:"url,omitempty"` + Title string `json:"title,omitempty"` + TagNames []string `json:"tag_names,omitempty"` } // Client represents an Linkding client. type Client struct { baseURL string apiKey string + tags string } // NewClient returns a new Linkding client. -func NewClient(baseURL, apiKey string) *Client { - return &Client{baseURL: baseURL, apiKey: apiKey} +func NewClient(baseURL, apiKey, tags string) *Client { + return &Client{baseURL: baseURL, apiKey: apiKey, tags: tags} } // AddEntry sends an entry to Linkding. @@ -34,9 +37,14 @@ func (c *Client) AddEntry(title, url string) error { return fmt.Errorf("linkding: missing credentials") } + tagsSplitFn := func(c rune) bool { + return c == ',' || c == ' ' + } + doc := &Document{ - Url: url, - Title: title, + Url: url, + Title: title, + TagNames: strings.FieldsFunc(c.tags, tagsSplitFn), } apiURL, err := getAPIEndpoint(c.baseURL, "/api/bookmarks/") diff --git a/locale/translations/de_DE.json b/locale/translations/de_DE.json index 17184438..ac2b9c13 100644 --- a/locale/translations/de_DE.json +++ b/locale/translations/de_DE.json @@ -361,6 +361,7 @@ "form.integration.linkding_activate": "Artikel in Linkding speichern", "form.integration.linkding_endpoint": "Linkding API-Endpunkt", "form.integration.linkding_api_key": "Linkding API-Schlüssel", + "form.integration.linkding_tags": "Linkding Tags", "form.integration.matrix_bot_activate": "Neue Artikel in die Matrix übertragen", "form.integration.matrix_bot_user": "Benutzername für Matrix", "form.integration.matrix_bot_password": "Passwort für Matrix-Benutzer", diff --git a/locale/translations/el_EL.json b/locale/translations/el_EL.json index c8b8340a..41e13e19 100644 --- a/locale/translations/el_EL.json +++ b/locale/translations/el_EL.json @@ -361,6 +361,7 @@ "form.integration.linkding_activate": "Αποθήκευση άρθρων στο Linkding", "form.integration.linkding_endpoint": "Τελικό σημείο Linkding API", "form.integration.linkding_api_key": "Κλειδί API Linkding", + "form.integration.linkding_tags": "Linkding Tags", "form.integration.matrix_bot_activate": "Μεταφορά νέων άρθρων στο Matrix", "form.integration.matrix_bot_user": "Όνομα χρήστη για το Matrix", "form.integration.matrix_bot_password": "Κωδικός πρόσβασης για τον χρήστη Matrix", diff --git a/locale/translations/en_US.json b/locale/translations/en_US.json index a62ea3a5..c79a39ae 100644 --- a/locale/translations/en_US.json +++ b/locale/translations/en_US.json @@ -361,6 +361,7 @@ "form.integration.linkding_activate": "Save entries to Linkding", "form.integration.linkding_endpoint": "Linkding API Endpoint", "form.integration.linkding_api_key": "Linkding API key", + "form.integration.linkding_tags": "Linkding Tags", "form.integration.matrix_bot_activate": "Push new entries to Matrix", "form.integration.matrix_bot_user": "Username for Matrix", "form.integration.matrix_bot_password": "Password for Matrix user", diff --git a/locale/translations/es_ES.json b/locale/translations/es_ES.json index 8ae726ff..6f01d235 100644 --- a/locale/translations/es_ES.json +++ b/locale/translations/es_ES.json @@ -361,6 +361,7 @@ "form.integration.linkding_activate": "Enviar artículos a Linkding", "form.integration.linkding_endpoint": "Acceso API de Linkding", "form.integration.linkding_api_key": "Clave de API de Linkding", + "form.integration.linkding_tags": "Linkding Tags", "form.integration.matrix_bot_activate": "Transferir nuevos artículos a Matrix", "form.integration.matrix_bot_user": "Nombre de usuario para Matrix", "form.integration.matrix_bot_password": "Contraseña para el usuario de Matrix", diff --git a/locale/translations/fi_FI.json b/locale/translations/fi_FI.json index 9f49ce66..190d3715 100644 --- a/locale/translations/fi_FI.json +++ b/locale/translations/fi_FI.json @@ -361,6 +361,7 @@ "form.integration.linkding_activate": "Tallenna artikkelit Linkkiin", "form.integration.linkding_endpoint": "Linkding API-päätepiste", "form.integration.linkding_api_key": "Linkding API-avain", + "form.integration.linkding_tags": "Linkding Tags", "form.integration.matrix_bot_activate": "Siirrä uudet artikkelit Matrixiin", "form.integration.matrix_bot_user": "Matrixin käyttäjätunnus", "form.integration.matrix_bot_password": "Matrix-käyttäjän salasana", diff --git a/locale/translations/fr_FR.json b/locale/translations/fr_FR.json index 5ed90ddf..604a7ff9 100644 --- a/locale/translations/fr_FR.json +++ b/locale/translations/fr_FR.json @@ -361,6 +361,7 @@ "form.integration.linkding_activate": "Sauvegarder les articles vers Linkding", "form.integration.linkding_endpoint": "URL de l'API de Linkding", "form.integration.linkding_api_key": "Clé d'API de Linkding", + "form.integration.linkding_tags": "Linkding Tags", "form.integration.matrix_bot_activate": "Envoyer les nouveaux articles vers Matrix", "form.integration.matrix_bot_user": "Nom de l'utilisateur Matrix", "form.integration.matrix_bot_password": "Mot de passe de l'utilisateur Matrix", diff --git a/locale/translations/hi_IN.json b/locale/translations/hi_IN.json index 179fe59a..fa997f0d 100644 --- a/locale/translations/hi_IN.json +++ b/locale/translations/hi_IN.json @@ -361,6 +361,7 @@ "form.integration.linkding_activate": "लिंक्डिन में विषयवस्तु सहेजें", "form.integration.linkding_endpoint": "लिंकिंग एपीआई समापन बिंदु", "form.integration.linkding_api_key": "लिंकिंग एपीआई कुंजी", + "form.integration.linkding_tags": "Linkding Tags", "form.integration.matrix_bot_activate": "नए लेखों को मैट्रिक्स में स्थानांतरित करें", "form.integration.matrix_bot_user": "मैट्रिक्स के लिए उपयोगकर्ता नाम", "form.integration.matrix_bot_password": "मैट्रिक्स उपयोगकर्ता के लिए पासवर्ड", diff --git a/locale/translations/id_ID.json b/locale/translations/id_ID.json index 6748ea41..7880fcf5 100644 --- a/locale/translations/id_ID.json +++ b/locale/translations/id_ID.json @@ -358,6 +358,7 @@ "form.integration.linkding_activate": "Simpan artikel ke Linkding", "form.integration.linkding_endpoint": "Titik URL API Linkding", "form.integration.linkding_api_key": "Kunci API Linkding", + "form.integration.linkding_tags": "Linkding Tags", "form.integration.matrix_bot_activate": "Kirim entri baru ke Matrix", "form.integration.matrix_bot_user": "Nama Pengguna Matrix", "form.integration.matrix_bot_password": "Kata Sandi Matrix", diff --git a/locale/translations/it_IT.json b/locale/translations/it_IT.json index d244c79a..246faa86 100644 --- a/locale/translations/it_IT.json +++ b/locale/translations/it_IT.json @@ -361,6 +361,7 @@ "form.integration.linkding_activate": "Salva gli articoli su Linkding", "form.integration.linkding_endpoint": "Endpoint dell'API di Linkding", "form.integration.linkding_api_key": "API key dell'account Linkding", + "form.integration.linkding_tags": "Linkding Tags", "form.integration.matrix_bot_activate": "Trasferimento di nuovi articoli a Matrix", "form.integration.matrix_bot_user": "Nome utente per Matrix", "form.integration.matrix_bot_password": "Password per l'utente Matrix", diff --git a/locale/translations/ja_JP.json b/locale/translations/ja_JP.json index cd394f3d..6baa6a1e 100644 --- a/locale/translations/ja_JP.json +++ b/locale/translations/ja_JP.json @@ -361,6 +361,7 @@ "form.integration.linkding_activate": "Linkding に記事を保存する", "form.integration.linkding_endpoint": "Linkding の API Endpoint", "form.integration.linkding_api_key": "Linkding の API key", + "form.integration.linkding_tags": "Linkding Tags", "form.integration.matrix_bot_activate": "新しい記事をMatrixに転送する", "form.integration.matrix_bot_user": "Matrixのユーザー名", "form.integration.matrix_bot_password": "Matrixユーザ用パスワード", diff --git a/locale/translations/nl_NL.json b/locale/translations/nl_NL.json index a21e2454..11f83ab8 100644 --- a/locale/translations/nl_NL.json +++ b/locale/translations/nl_NL.json @@ -361,6 +361,7 @@ "form.integration.linkding_activate": "Opslaan naar Linkding", "form.integration.linkding_endpoint": "Linkding URL", "form.integration.linkding_api_key": "Linkding API-sleutel", + "form.integration.linkding_tags": "Linkding Tags", "form.integration.matrix_bot_activate": "Nieuwe artikelen overbrengen naar Matrix", "form.integration.matrix_bot_user": "Gebruikersnaam voor Matrix", "form.integration.matrix_bot_password": "Wachtwoord voor Matrix-gebruiker", diff --git a/locale/translations/pl_PL.json b/locale/translations/pl_PL.json index ea1ef740..f162c550 100644 --- a/locale/translations/pl_PL.json +++ b/locale/translations/pl_PL.json @@ -363,6 +363,7 @@ "form.integration.linkding_activate": "Zapisz artykuły do Linkding", "form.integration.linkding_endpoint": "Linkding URL", "form.integration.linkding_api_key": "Linkding API key", + "form.integration.linkding_tags": "Linkding Tags", "form.integration.matrix_bot_activate": "Przenieś nowe artykuły do Matrix", "form.integration.matrix_bot_user": "Nazwa użytkownika dla Matrix", "form.integration.matrix_bot_password": "Hasło dla użytkownika Matrix", diff --git a/locale/translations/pt_BR.json b/locale/translations/pt_BR.json index 9dfe691f..e53bd100 100644 --- a/locale/translations/pt_BR.json +++ b/locale/translations/pt_BR.json @@ -361,6 +361,7 @@ "form.integration.linkding_activate": "Salvar itens no Linkding", "form.integration.linkding_endpoint": "Endpoint de API do Linkding", "form.integration.linkding_api_key": "Chave de API do Linkding", + "form.integration.linkding_tags": "Linkding Tags", "form.integration.matrix_bot_activate": "Transferir novos artigos para o Matrix", "form.integration.matrix_bot_user": "Nome de utilizador para Matrix", "form.integration.matrix_bot_password": "Palavra-passe para utilizador da Matrix", diff --git a/locale/translations/ru_RU.json b/locale/translations/ru_RU.json index 9a73d61b..af09d58d 100644 --- a/locale/translations/ru_RU.json +++ b/locale/translations/ru_RU.json @@ -363,6 +363,7 @@ "form.integration.linkding_activate": "Сохранять статьи в Linkding", "form.integration.linkding_endpoint": "Конечная точка Linkding API", "form.integration.linkding_api_key": "Linkding API key", + "form.integration.linkding_tags": "Linkding Tags", "form.integration.matrix_bot_activate": "Перенос новых статей в Матрицу", "form.integration.matrix_bot_user": "Имя пользователя для Matrix", "form.integration.matrix_bot_password": "Пароль для пользователя Matrix", diff --git a/locale/translations/tr_TR.json b/locale/translations/tr_TR.json index a495c9d6..3c679c83 100644 --- a/locale/translations/tr_TR.json +++ b/locale/translations/tr_TR.json @@ -361,6 +361,7 @@ "form.integration.linkding_activate": "Makaleleri Linkding'e kaydet", "form.integration.linkding_endpoint": "Linkding API Uç Noktası", "form.integration.linkding_api_key": "Linkding API Anahtarı", + "form.integration.linkding_tags": "Linkding Tags", "form.integration.matrix_bot_activate": "Yeni makaleleri Matrix'e aktarın", "form.integration.matrix_bot_user": "Matrix için Kullanıcı Adı", "form.integration.matrix_bot_password": "Matrix kullanıcısı için şifre", diff --git a/locale/translations/uk_UA.json b/locale/translations/uk_UA.json index abc47b35..38e80ef4 100644 --- a/locale/translations/uk_UA.json +++ b/locale/translations/uk_UA.json @@ -360,6 +360,7 @@ "form.integration.linkding_activate": "Зберігати статті до Linkding", "form.integration.linkding_endpoint": "Linkding API Endpoint", "form.integration.linkding_api_key": "Ключ API Linkding", + "form.integration.linkding_tags": "Linkding Tags", "form.integration.matrix_bot_activate": "Перенесення нових статей в Матрицю", "form.integration.matrix_bot_user": "Ім'я користувача для Matrix", "form.integration.matrix_bot_password": "Пароль для користувача Matrix", diff --git a/locale/translations/zh_CN.json b/locale/translations/zh_CN.json index b867cb3d..98a20d15 100644 --- a/locale/translations/zh_CN.json +++ b/locale/translations/zh_CN.json @@ -359,6 +359,7 @@ "form.integration.linkding_activate": "保存文章到 Linkding", "form.integration.linkding_endpoint": "Linkding API 端点", "form.integration.linkding_api_key": "Linkding API 密钥", + "form.integration.linkding_tags": "Linkding 默认标签", "form.integration.matrix_bot_activate": "将新文章转移到 Matrix", "form.integration.matrix_bot_user": "矩阵的用户名", "form.integration.matrix_bot_password": "矩阵用户密码", diff --git a/locale/translations/zh_TW.json b/locale/translations/zh_TW.json index 3e8f85d8..7ed280a8 100644 --- a/locale/translations/zh_TW.json +++ b/locale/translations/zh_TW.json @@ -361,6 +361,7 @@ "form.integration.linkding_activate": "儲存文章到 Linkding", "form.integration.linkding_endpoint": "Linkding API 端點", "form.integration.linkding_api_key": "Linkding API 金鑰", + "form.integration.linkding_tags": "Linkding Tags", "form.integration.matrix_bot_activate": "將新文章轉移到 Matrix", "form.integration.matrix_bot_user": "矩陣的用戶名", "form.integration.matrix_bot_password": "矩陣用戶密碼", diff --git a/model/integration.go b/model/integration.go index 8124d667..bab15ca0 100644 --- a/model/integration.go +++ b/model/integration.go @@ -43,6 +43,7 @@ type Integration struct { LinkdingEnabled bool LinkdingURL string LinkdingAPIKey string + LinkdingTags string MatrixBotEnabled bool MatrixBotUser string MatrixBotPassword string diff --git a/storage/integration.go b/storage/integration.go index 71ed83c0..367905de 100644 --- a/storage/integration.go +++ b/storage/integration.go @@ -147,6 +147,7 @@ func (s *Storage) Integration(userID int64) (*model.Integration, error) { linkding_enabled, linkding_url, linkding_api_key, + linkding_tags, matrix_bot_enabled, matrix_bot_user, matrix_bot_password, @@ -196,6 +197,7 @@ func (s *Storage) Integration(userID int64) (*model.Integration, error) { &integration.LinkdingEnabled, &integration.LinkdingURL, &integration.LinkdingAPIKey, + &integration.LinkdingTags, &integration.MatrixBotEnabled, &integration.MatrixBotUser, &integration.MatrixBotPassword, @@ -260,13 +262,14 @@ func (s *Storage) UpdateIntegration(integration *model.Integration) error { linkding_enabled=$34, linkding_url=$35, linkding_api_key=$36, - matrix_bot_enabled=$37, - matrix_bot_user=$38, - matrix_bot_password=$39, - matrix_bot_url=$40, - matrix_bot_chat_id=$41 + linkding_tags=$37, + matrix_bot_enabled=$38, + matrix_bot_user=$39, + matrix_bot_password=$40, + matrix_bot_url=$41, + matrix_bot_chat_id=$42 WHERE - user_id=$42 + user_id=$43 ` _, err = s.db.Exec( query, @@ -306,6 +309,7 @@ func (s *Storage) UpdateIntegration(integration *model.Integration) error { integration.LinkdingEnabled, integration.LinkdingURL, integration.LinkdingAPIKey, + integration.LinkdingTags, integration.MatrixBotEnabled, integration.MatrixBotUser, integration.MatrixBotPassword, @@ -354,13 +358,14 @@ func (s *Storage) UpdateIntegration(integration *model.Integration) error { linkding_enabled=$34, linkding_url=$35, linkding_api_key=$36, - matrix_bot_enabled=$37, - matrix_bot_user=$38, - matrix_bot_password=$39, - matrix_bot_url=$40, - matrix_bot_chat_id=$41 + linkding_tags=$37, + matrix_bot_enabled=$38, + matrix_bot_user=$39, + matrix_bot_password=$40, + matrix_bot_url=$41, + matrix_bot_chat_id=$42 WHERE - user_id=$42 + user_id=$43 ` _, err = s.db.Exec( query, @@ -400,6 +405,7 @@ func (s *Storage) UpdateIntegration(integration *model.Integration) error { integration.LinkdingEnabled, integration.LinkdingURL, integration.LinkdingAPIKey, + integration.LinkdingTags, integration.MatrixBotEnabled, integration.MatrixBotUser, integration.MatrixBotPassword, diff --git a/template/templates/views/integrations.html b/template/templates/views/integrations.html index 8bb615d4..e4890ae1 100644 --- a/template/templates/views/integrations.html +++ b/template/templates/views/integrations.html @@ -192,6 +192,9 @@ + + +
diff --git a/ui/form/integration.go b/ui/form/integration.go index 07ad856a..c5b7cf2c 100644 --- a/ui/form/integration.go +++ b/ui/form/integration.go @@ -48,6 +48,7 @@ type IntegrationForm struct { LinkdingEnabled bool LinkdingURL string LinkdingAPIKey string + LinkdingTags string MatrixBotEnabled bool MatrixBotUser string MatrixBotPassword string @@ -91,6 +92,7 @@ func (i IntegrationForm) Merge(integration *model.Integration) { integration.LinkdingEnabled = i.LinkdingEnabled integration.LinkdingURL = i.LinkdingURL integration.LinkdingAPIKey = i.LinkdingAPIKey + integration.LinkdingTags = i.LinkdingTags integration.MatrixBotEnabled = i.MatrixBotEnabled integration.MatrixBotUser = i.MatrixBotUser integration.MatrixBotPassword = i.MatrixBotPassword @@ -137,6 +139,7 @@ func NewIntegrationForm(r *http.Request) *IntegrationForm { LinkdingEnabled: r.FormValue("linkding_enabled") == "1", LinkdingURL: r.FormValue("linkding_url"), LinkdingAPIKey: r.FormValue("linkding_api_key"), + LinkdingTags: r.FormValue("linkding_tags"), MatrixBotEnabled: r.FormValue("matrix_bot_enabled") == "1", MatrixBotUser: r.FormValue("matrix_bot_user"), MatrixBotPassword: r.FormValue("matrix_bot_password"), diff --git a/ui/integration_show.go b/ui/integration_show.go index afd0bfd5..1183604b 100644 --- a/ui/integration_show.go +++ b/ui/integration_show.go @@ -63,6 +63,7 @@ func (h *handler) showIntegrationPage(w http.ResponseWriter, r *http.Request) { LinkdingEnabled: integration.LinkdingEnabled, LinkdingURL: integration.LinkdingURL, LinkdingAPIKey: integration.LinkdingAPIKey, + LinkdingTags: integration.LinkdingTags, MatrixBotEnabled: integration.MatrixBotEnabled, MatrixBotUser: integration.MatrixBotUser, MatrixBotPassword: integration.MatrixBotPassword,