3
0
mirror of https://github.com/Qortal/Brooklyn.git synced 2025-02-22 07:05:54 +00:00
2022-03-05 22:41:29 +05:00

94 lines
2.7 KiB
C++

/*
SPDX-FileCopyrightText: 2007 Glenn Ergeerts <glenn.ergeerts@telenet.be>
SPDX-FileCopyrightText: 2012 Marco Gulino <marco.gulino@xpeppers.com>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#include "konqueror.h"
#include "bookmarkmatch.h"
#include <QIcon>
#include <QStack>
#include <QUrl>
#include <KBookmarkManager>
#include <KIO/Global>
QIcon KDEFavicon::iconFor(const QString &url)
{
const QString iconFile = KIO::favIconForUrl(QUrl(url));
if (iconFile.isEmpty()) {
return defaultIcon();
}
return QIcon::fromTheme(iconFile);
}
KDEFavicon::KDEFavicon(QObject *parent)
: Favicon(parent)
{
}
Konqueror::Konqueror(QObject *parent)
: QObject(parent)
, m_bookmarkManager(KBookmarkManager::userBookmarksManager())
, m_favicon(new KDEFavicon(this))
{
}
QList<BookmarkMatch> Konqueror::match(const QString &term, bool addEverything)
{
KBookmarkGroup bookmarkGroup = m_bookmarkManager->root();
QList<BookmarkMatch> matches;
QStack<KBookmarkGroup> groups;
KBookmark bookmark = bookmarkGroup.first();
while (!bookmark.isNull()) {
// if (!context.isValid()) {
// return;
// } TODO: restore?
if (bookmark.isSeparator()) {
bookmark = bookmarkGroup.next(bookmark);
continue;
}
if (bookmark.isGroup()) { // descend
// qDebug(kdbg_code) << "descending into" << bookmark.text();
groups.push(bookmarkGroup);
bookmarkGroup = bookmark.toGroup();
bookmark = bookmarkGroup.first();
while (bookmark.isNull() && !groups.isEmpty()) {
// if (!context.isValid()) {
// return;
// } TODO: restore?
bookmark = bookmarkGroup;
bookmarkGroup = groups.pop();
bookmark = bookmarkGroup.next(bookmark);
}
continue;
}
const QString url = bookmark.url().url();
BookmarkMatch bookmarkMatch(m_favicon->iconFor(url), term, bookmark.text(), url);
bookmarkMatch.addTo(matches, addEverything);
bookmark = bookmarkGroup.next(bookmark);
while (bookmark.isNull() && !groups.isEmpty()) {
// if (!context.isValid()) {
// return;
// } // TODO: restore?
bookmark = bookmarkGroup;
bookmarkGroup = groups.pop();
////qDebug() << "ascending from" << bookmark.text() << "to" << bookmarkGroup.text();
bookmark = bookmarkGroup.next(bookmark);
}
}
return matches;
}