diff options
Diffstat (limited to 'src/bookmarks.c')
-rw-r--r-- | src/bookmarks.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/bookmarks.c b/src/bookmarks.c index da53b645..5815f447 100644 --- a/src/bookmarks.c +++ b/src/bookmarks.c | |||
@@ -248,6 +248,31 @@ iBool updateBookmarkIcon_Bookmarks(iBookmarks *d, const iString *url, iChar icon | |||
248 | return changed; | 248 | return changed; |
249 | } | 249 | } |
250 | 250 | ||
251 | iChar siteIcon_Bookmarks(const iBookmarks *d, iRangecc hostName) { | ||
252 | iChar icon = 0; | ||
253 | const size_t hostSize = size_Range(&hostName); | ||
254 | size_t matchingSize = iInvalidSize; /* we'll pick the shortest matching */ | ||
255 | lock_Mutex(d->mtx); | ||
256 | iConstForEach(Hash, i, &d->bookmarks) { | ||
257 | const iBookmark *bm = (const iBookmark *) i.value; | ||
258 | iUrl parts; | ||
259 | init_Url(&parts, &bm->url); | ||
260 | if (!hasTag_Bookmark(bm, "usericon")) { /* TODO: Inefficient! RegExp rebuilt every time. */ | ||
261 | continue; | ||
262 | } | ||
263 | if (size_Range(&hostName) == size_Range(&parts.host) && | ||
264 | iCmpStrNCase(hostName.start, parts.host.start, hostSize) == 0) { | ||
265 | const size_t n = size_String(&bm->url); | ||
266 | if (n < matchingSize && bm->icon) { | ||
267 | matchingSize = n; | ||
268 | icon = bm->icon; | ||
269 | } | ||
270 | } | ||
271 | } | ||
272 | unlock_Mutex(d->mtx); | ||
273 | return icon; | ||
274 | } | ||
275 | |||
251 | iBookmark *get_Bookmarks(iBookmarks *d, uint32_t id) { | 276 | iBookmark *get_Bookmarks(iBookmarks *d, uint32_t id) { |
252 | return (iBookmark *) value_Hash(&d->bookmarks, id); | 277 | return (iBookmark *) value_Hash(&d->bookmarks, id); |
253 | } | 278 | } |