26#include <QSqlDatabase>
28#define CONNECTION QSL("firefox-places-import")
42 return BookmarksImporter::tr(
"Mozilla Firefox stores its bookmarks in <b>places.sqlite</b> SQLite "
43 "database. This file is usually located in");
49 return QString(
"%APPDATA%/Mozilla/");
51 return QDir::homePath() + QLatin1String(
"/.mozilla/firefox/");
57 m_path = QFileDialog::getOpenFileName(parent, BookmarksImporter::tr(
"Choose file..."),
standardPath(), QStringLiteral(
"Places (places.sqlite)"));
67 QSqlDatabase db = QSqlDatabase::addDatabase(QStringLiteral(
"QSQLITE"),
CONNECTION);
69 if (!QFile::exists(m_path)) {
70 setError(BookmarksImportDialog::tr(
"File does not exist."));
74 db.setDatabaseName(m_path);
77 setError(BookmarksImportDialog::tr(
"Unable to open database. Is Firefox running?"));
89 root->setTitle(QStringLiteral(
"Firefox Import"));
91 QSqlQuery query(QSqlDatabase::database(
CONNECTION));
92 query.prepare(QStringLiteral(
"SELECT id, parent, type, title, fk FROM moz_bookmarks WHERE fk NOT NULL OR type = 3"));
95 while (query.next()) {
97 item.id = query.value(0).toInt();
98 item.parent = query.value(1).toInt();
99 item.type = typeFromValue(query.value(2).toInt());
100 item.title = query.value(3).toString();
101 int fk = query.value(4).toInt();
107 QSqlQuery query(QSqlDatabase::database(
CONNECTION));
108 query.prepare(QStringLiteral(
"SELECT url FROM moz_places WHERE id=?"));
109 query.addBindValue(fk);
113 item.url = query.value(0).toUrl();
116 if (item.url.scheme() == QLatin1String(
"place")) {
123 if (query.lastError().isValid()) {
127 QHash<int, BookmarkItem*> hash;
129 for (
const Item &item : std::as_const(items)) {
131 auto* bookmark =
new BookmarkItem(item.type, parent ? parent : root);
132 bookmark->setTitle(item.title.isEmpty() ? item.url.toString() : item.title);
133 bookmark->setUrl(item.url);
135 hash.insert(item.id, bookmark);
void setError(const QString &error)
BookmarkItem * importBookmarks() override
QString description() const override
bool prepareImport() override
QString standardPath() const override
~FirefoxImporter() override
QString getPath(QWidget *parent) override
FirefoxImporter(QObject *parent=nullptr)
int value(const QColor &c)