File indexing completed on 2024-05-19 16:41:36

0001 /*
0002     SPDX-FileCopyrightText: 2007 Glenn Ergeerts <glenn.ergeerts@telenet.be>
0003     SPDX-FileCopyrightText: 2012 Marco Gulino <marco.gulino@xpeppers.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #include "chromefindprofile.h"
0009 #include "bookmarksrunner_defs.h"
0010 #include "faviconfromblob.h"
0011 #include <QDebug>
0012 #include <QFileInfo>
0013 #include <QJsonDocument>
0014 #include <QJsonObject>
0015 #include <QVariantMap>
0016 
0017 FindChromeProfile::FindChromeProfile(const QString &applicationName, const QString &homeDirectory, QObject *parent)
0018     : QObject(parent)
0019     , m_applicationName(applicationName)
0020     , m_homeDirectory(homeDirectory)
0021 {
0022 }
0023 
0024 QList<Profile> FindChromeProfile::find()
0025 {
0026     QString configDirectory = QStringLiteral("%1/.config/%2").arg(m_homeDirectory, m_applicationName);
0027     QString localStateFileName = QStringLiteral("%1/Local State").arg(configDirectory);
0028 
0029     QList<Profile> profiles;
0030 
0031     QFile localStateFile(localStateFileName);
0032 
0033     if (!localStateFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
0034         return profiles;
0035     }
0036     QJsonDocument jdoc = QJsonDocument::fromJson(localStateFile.readAll());
0037 
0038     if (jdoc.isNull()) {
0039         qDebug() << "error opening " << QFileInfo(localStateFile).absoluteFilePath();
0040         return profiles;
0041     }
0042 
0043     QVariantMap localState = jdoc.object().toVariantMap();
0044     QVariantMap profilesConfig = localState.value(QStringLiteral("profile")).toMap().value(QStringLiteral("info_cache")).toMap();
0045 
0046     for (const QString &profile : profilesConfig.keys()) {
0047         const QString profilePath = QStringLiteral("%1/%2").arg(configDirectory, profile);
0048         const QString profileBookmarksPath = QStringLiteral("%1/%2").arg(profilePath, QStringLiteral("Bookmarks"));
0049         profiles << Profile(profileBookmarksPath, profile, FaviconFromBlob::chrome(profilePath, this));
0050     }
0051 
0052     return profiles;
0053 }