aboutsummaryrefslogtreecommitdiff
path: root/src/bookmarks/bookmarkswidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/bookmarks/bookmarkswidget.cpp')
-rw-r--r--src/bookmarks/bookmarkswidget.cpp41
1 files changed, 33 insertions, 8 deletions
diff --git a/src/bookmarks/bookmarkswidget.cpp b/src/bookmarks/bookmarkswidget.cpp
index 26fdddf..bd2d607 100644
--- a/src/bookmarks/bookmarkswidget.cpp
+++ b/src/bookmarks/bookmarkswidget.cpp
@@ -12,6 +12,7 @@
#include "bookmarkformat.h"
#include <QTreeView>
#include <QUrl>
+#include <QFileDialog>
inline void expandChildren(QTreeView *view, BookmarkModel *model, const QModelIndex &rootIndex)
{
@@ -26,6 +27,29 @@ inline void expandChildren(QTreeView *view, BookmarkModel *model, const QModelIn
}
}
+inline void loadModel(const QString &path, BookmarkModel *model, QTreeView *view)
+{
+ view->setModel(nullptr);
+
+ if(path.endsWith(".xbel")) {
+ QFile f(path);
+ if(f.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ BookmarkFormat<XbelFormat>(&f) >> model;
+ f.close();
+ }
+
+ } else if(path.endsWith(".json")) {
+ QFile f(path);
+ if(f.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ BookmarkFormat<FirefoxJsonFormat>(&f) >> model;
+ f.close();
+ }
+ }
+
+ view->setModel(model);
+ expandChildren(view, model, QModelIndex());
+}
+
BookmarksWidget::BookmarksWidget(const QString &path, QWidget *parent)
: QWidget(parent)
, ui(new Ui::BookmarksDialog)
@@ -44,14 +68,7 @@ BookmarksWidget::BookmarksWidget(const QString &path, QWidget *parent)
model = new BookmarkModel(this);
m_bookmarksPath = path;
- QFile bookmarksFile(m_bookmarksPath);
- if(bookmarksFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
- BookmarkFormat<XbelFormat>(&bookmarksFile) >> model;
- }
- model->resetModified();
-
- ui->treeView->setModel(model);
- expandChildren(ui->treeView, model, QModelIndex());
+ loadModel(path, model, ui->treeView);
// item activated
connect(ui->treeView, &QTreeView::activated, this, [this](const QModelIndex &index) {
@@ -100,6 +117,14 @@ BookmarksWidget::BookmarksWidget(const QString &path, QWidget *parent)
const QModelIndex idx = ui->treeView->currentIndex();
model->removeRow(idx.row(), idx.parent());
});
+
+ // import button
+ connect(ui->import_toolButton, &QToolButton::clicked, this, [this]() {
+ const auto path = QFileDialog::getOpenFileName(this, tr("Open bookmarks file"), QDir::homePath(), tr("Firefox bookmarks backup (*.json)"));
+ if(!path.isEmpty()) {
+ loadModel(path, model, ui->treeView);
+ }
+ });
}
BookmarksWidget::~BookmarksWidget()