Manage list can be free-text searched and limited by tag.

This commit is contained in:
2022-06-06 22:05:56 +09:30
parent 65100459d6
commit 1563c7b21d
9 changed files with 94 additions and 46 deletions

View File

@@ -110,7 +110,7 @@ func (m *BookmarkManager) LoadBookmarksByIDs(ids []uint64) []entity.Bookmark {
return ret
}
func (m *BookmarkManager) Search(query string) ([]entity.Bookmark, error) {
func (m *BookmarkManager) Search(query string, tags []string) ([]entity.Bookmark, error) {
rets := make([]uint64, 0, 0)
counts := make(map[uint64]uint8)
@@ -140,9 +140,25 @@ func (m *BookmarkManager) Search(query string) ([]entity.Bookmark, error) {
}
}
if tags != nil && len(tags) > 0 {
rets = m.LimitToIdsWithTags(rets, tags)
}
return m.LoadBookmarksByIDs(rets), nil
}
func (m *BookmarkManager) LimitToIdsWithTags(ids []uint64, tags []string) []uint64 {
outIds := []uint64{}
err := m.db.store.ForEach(bolthold.Where("ID").ContainsAny(bolthold.Slice(ids)...).And("Tags").ContainsAll(bolthold.Slice(tags)...),
func(bm *entity.Bookmark) error {
outIds = append(outIds, bm.ID)
return nil
})
if err != nil {
panic(err)
}
return outIds
}
func (m *BookmarkManager) ScrapeAndIndex(bm *entity.Bookmark) error {
log.Printf("Start scrape for %s", bm.URL)