From d6cf4c6f332d579ba4102758f2f8d572ff7e1fe9 Mon Sep 17 00:00:00 2001 From: Lukas Werner Date: Wed, 26 Feb 2025 15:02:57 -0800 Subject: [PATCH] fix: improve url parsing algorithm for has link --- store/database.go | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/store/database.go b/store/database.go index 9a57b9f..83d891f 100644 --- a/store/database.go +++ b/store/database.go @@ -3,7 +3,9 @@ package store import ( "database/sql" "errors" + "fmt" "log" + "net/url" "os" "path" "strings" @@ -171,14 +173,37 @@ func InsertBookmark(db *DB, bookmark Bookmark) (BookmarkId, error) { return BookmarkId(id), err } -func GetBookmark(db *DB, url string) (Bookmark, error) { +func GetBookmark(db *DB, query_url string) (Bookmark, error) { var b Bookmark var tags string - err := db.QueryRow("SELECT url, title, description, tags FROM Bookmarks WHERE url = ?", url).Scan(&b.Url, &b.Title, &b.Description, &tags) + + u, err := url.Parse(query_url) + if err != nil { + return b, err + } + + rows, err := db.Query("SELECT url, title, description, tags FROM Bookmarks WHERE url like ? AND url like ?", fmt.Sprintf("%%%v%%", u.Host), fmt.Sprintf("%%%v%%", u.Path)) if err != nil { return b, err } - b.Tags = strings.Split(tags, ", ") + + i := 0 + for rows.Next() { + if i > 0 { + return b, errors.New("multiple bookmarks found") + } + err := rows.Scan(&b.Url, &b.Title, &b.Description, &tags) + if err != nil { + return b, err + } + b.Tags = strings.Split(tags, ", ") + i++ + } + + if i == 0 { + return b, sql.ErrNoRows + } + return b, nil } -- 2.51.2