File indexing completed on 2025-09-14 05:30:45

0001 /*
0002     SPDX-FileCopyrightText: 2020 Alexander Lohnau <alexander.lohnau@gmx.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "falkon.h"
0008 #include "favicon.h"
0009 #include "faviconfromblob.h"
0010 #include <KConfigGroup>
0011 #include <KSharedConfig>
0012 #include <QDir>
0013 #include <QFile>
0014 #include <QJsonArray>
0015 #include <QJsonDocument>
0016 #include <QStandardPaths>
0017 
0018 using namespace Qt::StringLiterals;
0019 
0020 Falkon::Falkon(QObject *parent)
0021     : QObject(parent)
0022     , m_startupProfile(getStartupProfileDir())
0023     , m_favicon(FaviconFromBlob::falkon(m_startupProfile, this))
0024 {
0025 }
0026 
0027 QList<BookmarkMatch> Falkon::match(const QString &term, bool addEverything)
0028 {
0029     QList<BookmarkMatch> matches;
0030     for (const auto &bookmark : std::as_const(m_falkonBookmarkEntries)) {
0031         const auto obj = bookmark.toObject();
0032         const QString url = obj.value(QStringLiteral("url")).toString();
0033         BookmarkMatch bookmarkMatch(m_favicon->iconFor(url), term, obj.value(QStringLiteral("name")).toString(), url);
0034         bookmarkMatch.addTo(matches, addEverything);
0035     }
0036     return matches;
0037 }
0038 
0039 void Falkon::prepare()
0040 {
0041     m_falkonBookmarkEntries = readChromeFormatBookmarks(m_startupProfile + QStringLiteral("/bookmarks.json"));
0042 }
0043 
0044 void Falkon::teardown()
0045 {
0046     m_falkonBookmarkEntries = QJsonArray();
0047 }
0048 
0049 QString Falkon::getStartupProfileDir()
0050 {
0051     const QString profilesIni = QStandardPaths::locate(QStandardPaths::ConfigLocation, QStringLiteral("/falkon/profiles/profiles.ini"));
0052     const QString startupProfile = KSharedConfig::openConfig(profilesIni)->group(u"Profiles"_s).readEntry("startProfile", u"default"_s).remove("\"");
0053     return QFileInfo(profilesIni).dir().absoluteFilePath(startupProfile);
0054 }