1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-20 18:56:34 +01:00

[Bookmarks] Automatically migrate bookmarks from SQLite to JSON

This commit is contained in:
nowrep 2014-02-10 16:58:05 +01:00
parent ad615316c8
commit 75f3460a27
8 changed files with 78 additions and 6 deletions

View File

@ -18,6 +18,7 @@
#include "bookmarks.h"
#include "bookmarkitem.h"
#include "bookmarksmodel.h"
#include "bookmarkstools.h"
#include "mainapplication.h"
#include "qztools.h"
#include "webview.h"
@ -263,6 +264,16 @@ void Bookmarks::init()
m_folderUnsorted->setTitle(tr("Unsorted Bookmarks"));
m_folderUnsorted->setDescription(tr("All other bookmarks"));
if (!BookmarksTools::migrateBookmarksIfNecessary(this)) {
loadBookmarks();
}
m_lastFolder = m_folderUnsorted;
m_model = new BookmarksModel(this, this);
}
void Bookmarks::loadBookmarks()
{
const QString bookmarksFile = mApp->currentProfilePath() + QLatin1String("/bookmarks.json");
const QString backupFile = bookmarksFile + QLatin1String(".old");
@ -293,9 +304,6 @@ void Bookmarks::init()
else {
loadBookmarksFromMap(res.toMap().value("roots").toMap());
}
m_lastFolder = m_folderUnsorted;
m_model = new BookmarksModel(this, this);
}
void Bookmarks::saveBookmarks()

View File

@ -78,6 +78,7 @@ signals:
private:
void init();
void loadBookmarks();
void saveBookmarks();
void loadBookmarksFromMap(const QVariantMap &map);

View File

@ -39,7 +39,7 @@ void BookmarksItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem
opt.frameShape = QFrame::HLine;
opt.rect = option.rect;
// We need to fake continous line over 2 columns
// We need to fake continuous line over 2 columns
if (m_tree->viewType() == BookmarksTreeView::BookmarksManagerViewType) {
if (index.column() == 1) {
opt.rect = m_lastRect;

View File

@ -300,8 +300,15 @@ void BookmarksManager::addBookmark(BookmarkItem* item)
m_bookmarks->addBookmark(parent, item);
// Select newly added bookmark
ui->tree->selectBookmark(item);
ui->tree->ensureBookmarkVisible(item);
// Start editing title
if (!item->isSeparator()) {
ui->title->setFocus();
ui->title->selectAll();
}
}
BookmarkItem* BookmarksManager::parentForNewBookmark() const

View File

@ -43,7 +43,6 @@ public:
QSize minimumSizeHint() const;
private slots:
void bookmarkRemoved(BookmarkItem* bookmark);
void createMenu();
void menuMiddleClicked(Menu* menu);

View File

@ -25,6 +25,8 @@
#include "qzsettings.h"
#include "qupzilla.h"
#include <iostream>
#include <QSqlQuery>
#include <QDialogButtonBox>
#include <QBoxLayout>
#include <QLabel>
@ -339,3 +341,54 @@ void BookmarksTools::addSeparatorToMenu(Menu* menu, BookmarkItem* separator)
menu->addSeparator();
}
bool BookmarksTools::migrateBookmarksIfNecessary(Bookmarks* bookmarks)
{
QSqlQuery query;
query.exec("SELECT name FROM sqlite_master WHERE type='table' AND name='folders'");
if (!query.next()) {
return false;
}
std::cout << "Bookmarks: Migrating your bookmarks from SQLite to JSON..." << std::endl;
QHash<QString, BookmarkItem*> folders;
folders.insert("bookmarksToolbar", bookmarks->toolbarFolder());
folders.insert("bookmarksMenu", bookmarks->menuFolder());
folders.insert("unsorted", bookmarks->unsortedFolder());
query.exec("SELECT name, subfolder FROM folders");
while (query.next()) {
const QString title = query.value(0).toString();
bool subfolder = query.value(1).toString() == QLatin1String("yes");
BookmarkItem* folder = new BookmarkItem(BookmarkItem::Folder, subfolder ? bookmarks->toolbarFolder() : 0);
folder->setTitle(title);
folders.insert(folder->title(), folder);
}
query.exec("SELECT title, folder, url FROM bookmarks ORDER BY position ASC");
while (query.next()) {
const QString title = query.value(0).toString();
const QString folder = query.value(1).toString();
const QUrl url = query.value(2).toUrl();
BookmarkItem* parent = folders.value(folder);
if (folder.isEmpty()) {
parent = bookmarks->unsortedFolder();
}
Q_ASSERT(parent);
BookmarkItem* bookmark = new BookmarkItem(BookmarkItem::Url, parent);
bookmark->setTitle(title);
bookmark->setUrl(url);
}
query.exec("DROP TABLE folders");
query.exec("DROP TABLE bookmarks");
query.exec("VACUUM");
std::cout << "Bookmarks: Bookmarks successfully migrated!" << std::endl;
return true;
}

View File

@ -23,6 +23,7 @@
#include "qz_namespace.h"
class Bookmarks;
class BookmarkItem;
class QT_QUPZILLA_EXPORT BookmarksFoldersMenu : public QMenu
@ -92,6 +93,9 @@ public:
static void addFolderToMenu(QObject* receiver, Menu* menu, BookmarkItem* folder);
static void addUrlToMenu(QObject* receiver, Menu* menu, BookmarkItem* bookmark);
static void addSeparatorToMenu(Menu* menu, BookmarkItem* separator);
// Migration from Sql Bookmarks (returns true if bookmarks migrated)
static bool migrateBookmarksIfNecessary(Bookmarks* bookmarks);
};
#endif // BOOKMARKSTOOLS_H

View File

@ -70,7 +70,7 @@ void IconProvider::saveIcon(WebView* view)
QImage IconProvider::iconForUrl(const QUrl &url)
{
if (url.isEmpty()) {
if (url.path().isEmpty()) {
return IconProvider::emptyWebImage();
}