diff --git a/database/migrations.go b/database/migrations.go index 32161e35..a9d2dae3 100644 --- a/database/migrations.go +++ b/database/migrations.go @@ -667,4 +667,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_mark_as_unread bool default 'f'; + ` + _, err = tx.Exec(sql) + return err + }, } diff --git a/integration/integration.go b/integration/integration.go index 373c27d1..52a4b8af 100644 --- a/integration/integration.go +++ b/integration/integration.go @@ -104,6 +104,7 @@ func SendEntry(entry *model.Entry, integration *model.Integration) { integration.LinkdingURL, integration.LinkdingAPIKey, integration.LinkdingTags, + integration.LinkdingMarkAsUnread, ) 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 72a9fc34..8c506bdb 100644 --- a/integration/linkding/linkding.go +++ b/integration/linkding/linkding.go @@ -16,6 +16,7 @@ type Document struct { Url string `json:"url,omitempty"` Title string `json:"title,omitempty"` TagNames []string `json:"tag_names,omitempty"` + Unread bool `json:"unread,omitempty"` } // Client represents an Linkding client. @@ -23,11 +24,12 @@ type Client struct { baseURL string apiKey string tags string + unread bool } // NewClient returns a new Linkding client. -func NewClient(baseURL, apiKey, tags string) *Client { - return &Client{baseURL: baseURL, apiKey: apiKey, tags: tags} +func NewClient(baseURL, apiKey, tags string, unread bool) *Client { + return &Client{baseURL: baseURL, apiKey: apiKey, tags: tags, unread: unread} } // AddEntry sends an entry to Linkding. @@ -44,6 +46,7 @@ func (c *Client) AddEntry(title, url string) error { Url: url, Title: title, TagNames: strings.FieldsFunc(c.tags, tagsSplitFn), + Unread: c.unread, } apiURL, err := getAPIEndpoint(c.baseURL, "/api/bookmarks/") diff --git a/model/integration.go b/model/integration.go index 3002e07a..138af747 100644 --- a/model/integration.go +++ b/model/integration.go @@ -43,6 +43,7 @@ type Integration struct { LinkdingURL string LinkdingAPIKey string LinkdingTags string + LinkdingMarkAsUnread bool MatrixBotEnabled bool MatrixBotUser string MatrixBotPassword string diff --git a/storage/integration.go b/storage/integration.go index 2f8f8784..98dd271c 100644 --- a/storage/integration.go +++ b/storage/integration.go @@ -147,6 +147,7 @@ func (s *Storage) Integration(userID int64) (*model.Integration, error) { linkding_url, linkding_api_key, linkding_tags, + linkding_mark_as_unread, matrix_bot_enabled, matrix_bot_user, matrix_bot_password, @@ -197,6 +198,7 @@ func (s *Storage) Integration(userID int64) (*model.Integration, error) { &integration.LinkdingURL, &integration.LinkdingAPIKey, &integration.LinkdingTags, + &integration.LinkdingMarkAsUnread, &integration.MatrixBotEnabled, &integration.MatrixBotUser, &integration.MatrixBotPassword, @@ -262,13 +264,14 @@ func (s *Storage) UpdateIntegration(integration *model.Integration) error { linkding_url=$35, linkding_api_key=$36, linkding_tags=$37, - matrix_bot_enabled=$38, - matrix_bot_user=$39, - matrix_bot_password=$40, - matrix_bot_url=$41, - matrix_bot_chat_id=$42 + linkding_mark_as_unread=$38, + matrix_bot_enabled=$39, + matrix_bot_user=$40, + matrix_bot_password=$41, + matrix_bot_url=$42, + matrix_bot_chat_id=$43 WHERE - user_id=$43 + user_id=$44 ` _, err = s.db.Exec( query, @@ -309,6 +312,7 @@ func (s *Storage) UpdateIntegration(integration *model.Integration) error { integration.LinkdingURL, integration.LinkdingAPIKey, integration.LinkdingTags, + integration.LinkdingMarkAsUnread, integration.MatrixBotEnabled, integration.MatrixBotUser, integration.MatrixBotPassword, @@ -358,13 +362,14 @@ func (s *Storage) UpdateIntegration(integration *model.Integration) error { linkding_url=$35, linkding_api_key=$36, linkding_tags=$37, - matrix_bot_enabled=$38, - matrix_bot_user=$39, - matrix_bot_password=$40, - matrix_bot_url=$41, - matrix_bot_chat_id=$42 + linkding_mark_as_unread=$38, + matrix_bot_enabled=$39, + matrix_bot_user=$40, + matrix_bot_password=$41, + matrix_bot_url=$42, + matrix_bot_chat_id=$43 WHERE - user_id=$43 + user_id=$44 ` _, err = s.db.Exec( query, @@ -405,6 +410,7 @@ func (s *Storage) UpdateIntegration(integration *model.Integration) error { integration.LinkdingURL, integration.LinkdingAPIKey, integration.LinkdingTags, + integration.LinkdingMarkAsUnread, integration.MatrixBotEnabled, integration.MatrixBotUser, integration.MatrixBotPassword, diff --git a/template/templates/views/integrations.html b/template/templates/views/integrations.html index e4890ae1..0d2fb939 100644 --- a/template/templates/views/integrations.html +++ b/template/templates/views/integrations.html @@ -195,6 +195,10 @@ + +
diff --git a/ui/form/integration.go b/ui/form/integration.go index e7a0218b..f17ff89b 100644 --- a/ui/form/integration.go +++ b/ui/form/integration.go @@ -48,6 +48,7 @@ type IntegrationForm struct { LinkdingURL string LinkdingAPIKey string LinkdingTags string + LinkdingMarkAsUnread bool MatrixBotEnabled bool MatrixBotUser string MatrixBotPassword string @@ -92,6 +93,7 @@ func (i IntegrationForm) Merge(integration *model.Integration) { integration.LinkdingURL = i.LinkdingURL integration.LinkdingAPIKey = i.LinkdingAPIKey integration.LinkdingTags = i.LinkdingTags + integration.LinkdingMarkAsUnread = i.LinkdingMarkAsUnread integration.MatrixBotEnabled = i.MatrixBotEnabled integration.MatrixBotUser = i.MatrixBotUser integration.MatrixBotPassword = i.MatrixBotPassword @@ -139,6 +141,7 @@ func NewIntegrationForm(r *http.Request) *IntegrationForm { LinkdingURL: r.FormValue("linkding_url"), LinkdingAPIKey: r.FormValue("linkding_api_key"), LinkdingTags: r.FormValue("linkding_tags"), + LinkdingMarkAsUnread: r.FormValue("linkding_mark_as_unread") == "1", 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 dc685084..c51d8965 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) { LinkdingURL: integration.LinkdingURL, LinkdingAPIKey: integration.LinkdingAPIKey, LinkdingTags: integration.LinkdingTags, + LinkdingMarkAsUnread: integration.LinkdingMarkAsUnread, MatrixBotEnabled: integration.MatrixBotEnabled, MatrixBotUser: integration.MatrixBotUser, MatrixBotPassword: integration.MatrixBotPassword,