23#include <QJsonDocument>
33 return BookmarksImporter::tr(
"Google Chrome stores its bookmarks in <b>Bookmarks</b> text file. "
34 "This file is usually located in");
40 return QString(
"%APPDATA%/Chrome/");
41#elif defined(Q_OS_OSX)
42 return QDir::homePath() + QLatin1String(
"/Library/Application Support/Google/Chrome/");
44 return QDir::homePath() + QLatin1String(
"/.config/chrome/");
50 m_path = QFileDialog::getOpenFileName(parent, BookmarksImporter::tr(
"Choose file..."),
standardPath(),
QSL(
"Bookmarks (Bookmarks)"));
56 m_file.setFileName(m_path);
58 if (!m_file.open(QFile::ReadOnly)) {
59 setError(BookmarksImporter::tr(
"Unable to open file."));
68 const QByteArray data = m_file.readAll();
72 QJsonDocument json = QJsonDocument::fromJson(data, &err);
73 const QVariant res = json.toVariant();
75 if (err.error != QJsonParseError::NoError || res.typeId() != QMetaType::QVariantMap) {
76 setError(BookmarksImporter::tr(
"Cannot parse JSON file!"));
80 QVariantMap rootMap = res.toMap().value(
QSL(
"roots")).toMap();
83 root->setTitle(
QSL(
"Chrome Import"));
86 toolbar->setTitle(rootMap.value(
QSL(
"bookmark_bar")).toMap().
value(
QSL(
"name")).toString());
87 readBookmarks(rootMap.value(
QSL(
"bookmark_bar")).toMap().
value(
QSL(
"children")).toList(), toolbar);
90 other->setTitle(rootMap.value(
QSL(
"other")).toMap().
value(
QSL(
"name")).toString());
91 readBookmarks(rootMap.value(
QSL(
"other")).toMap().
value(
QSL(
"children")).toList(), other);
94 synced->setTitle(rootMap.value(
QSL(
"synced")).toMap().
value(
QSL(
"name")).toString());
95 readBookmarks(rootMap.value(
QSL(
"synced")).toMap().
value(
QSL(
"synced")).toList(), other);
100void ChromeImporter::readBookmarks(
const QVariantList &list,
BookmarkItem* parent)
104 for (
const QVariant &entry : list) {
105 const QVariantMap map = entry.toMap();
106 const QString typeString = map.value(
QSL(
"type")).toString();
109 if (typeString == QLatin1String(
"url")) {
112 else if (typeString == QLatin1String(
"folder")) {
120 item->setTitle(map.value(
QSL(
"name")).toString());
123 item->setUrl(QUrl::fromEncoded(map.value(
QSL(
"url")).toByteArray()));
126 if (map.contains(
QSL(
"children"))) {
127 readBookmarks(map.value(
QSL(
"children")).toList(), item);
void setError(const QString &error)
ChromeImporter(QObject *parent=nullptr)
bool prepareImport() override
QString getPath(QWidget *parent) override
QString description() const override
BookmarkItem * importBookmarks() override
QString standardPath() const override
int value(const QColor &c)