Skip to content

Commit 57b7803

Browse files
committed
Plugins::WebBrowser: modify bookmarks
1 parent 966caee commit 57b7803

8 files changed

Lines changed: 169 additions & 575 deletions

File tree

Plugins/WebBrowser/Bookmark/BookmarkDatabase.cpp

Lines changed: 125 additions & 514 deletions
Large diffs are not rendered by default.

Plugins/WebBrowser/Bookmark/BookmarkDatabase.h

Lines changed: 19 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
#include <QIcon>
1010
#include <QList>
1111
#include <QDateTime>
12-
#include "Database.h"
12+
#include "DatabaseTree.h"
13+
#include "DatabaseUrl.h"
1314

1415
enum BookmarkType {
1516
BookmarkType_Bookmark,
@@ -21,26 +22,16 @@ struct BookmarkItem {
2122
int id;
2223
QString url;
2324
QString title;
24-
QByteArray iconData;
25-
QString iconUrl;
26-
QString description;
25+
QIcon icon;
2726
QDateTime createdTime;
2827
QDateTime modifiedTime;
2928
QDateTime lastVisitTime;
30-
int visitCount;
31-
bool isFavorite;
32-
QStringList tags;
29+
3330
int folderId;
3431
BookmarkType type;
3532

36-
// 运行时属性
37-
mutable QIcon cachedIcon;
38-
QList<BookmarkItem> children;
39-
4033
BookmarkItem()
4134
: id(0)
42-
, visitCount(0)
43-
, isFavorite(false)
4435
, folderId(1) // 指向默认收藏夹
4536
, type(BookmarkType_Bookmark)
4637
{}
@@ -50,17 +41,8 @@ struct BookmarkItem {
5041
bool isBookmark() const { return type == BookmarkType_Bookmark; }
5142

5243
QIcon getIcon() const {
53-
if (!cachedIcon.isNull()) {
54-
return cachedIcon;
55-
}
56-
57-
if (!iconData.isEmpty()) {
58-
QPixmap pixmap;
59-
pixmap.loadFromData(iconData);
60-
if (!pixmap.isNull()) {
61-
cachedIcon = QIcon(pixmap);
62-
return cachedIcon;
63-
}
44+
if (!icon.isNull()) {
45+
return icon;
6446
}
6547

6648
// 根据URL返回默认图标
@@ -75,20 +57,17 @@ struct BookmarkItem {
7557
return QIcon::fromTheme("user-bookmarks");
7658
}
7759

78-
void setIconFromData(const QByteArray &data) {
79-
iconData = data;
80-
cachedIcon = QIcon(); // 清除缓存
81-
}
8260
};
8361

8462
class CBookmarkDatabase : public CDatabase
8563
{
8664
Q_OBJECT
8765
public:
88-
static CBookmarkDatabase* Instance(const QString& szPath = QString());
66+
static CBookmarkDatabase* Instance(const QSqlDatabase& database);
67+
static CBookmarkDatabase* Instance(const QString& szFile = QString());
8968

9069
// 书签操作
91-
bool addBookmark(const BookmarkItem &item);
70+
int addBookmark(const BookmarkItem &item);
9271
bool updateBookmark(const BookmarkItem &item);
9372
bool deleteBookmark(int id);
9473
bool deleteBookmark(const QList<BookmarkItem>& items);
@@ -104,22 +83,21 @@ class CBookmarkDatabase : public CDatabase
10483
BookmarkItem getBookmark(int id);
10584
QList<BookmarkItem> getBookmarkByUrl(const QString &url);
10685
QList<BookmarkItem> getAllBookmarks(int folderId = 0);
107-
QList<BookmarkItem> getFavoriteBookmarks();
10886
QList<BookmarkItem> searchBookmarks(const QString &keyword);
10987

11088
// 文件夹查询
11189
QList<BookmarkItem> getAllFolders();
112-
QList<BookmarkItem> getSubFolders(int parentId);
113-
114-
// 统计
115-
int getBookmarkCount(int folderId = 0);
116-
int getFolderCount();
90+
QList<BookmarkItem> getSubFolders(int folderId);
11791

11892
// 导入导出
11993
bool importFromHtml(const QString &filename);
12094
bool exportToHtml(const QString &filename);
12195
bool importFromBrowser(const QString &browserName);
12296

97+
TreeItem BookmarkToTree(const BookmarkItem& tree, bool setKey = false);
98+
BookmarkItem TreeToBookmark(const TreeItem& tree);
99+
BookmarkItem TreeToBookmark(const TreeItem& item, const CDatabaseUrl::UrlItem& url);
100+
123101
signals:
124102
void bookmarksChanged();
125103
void bookmarkAdded(const BookmarkItem &item);
@@ -133,7 +111,6 @@ class CBookmarkDatabase : public CDatabase
133111
explicit CBookmarkDatabase(QObject *parent = nullptr);
134112
~CBookmarkDatabase();
135113
bool OnInitializeDatabase() override;
136-
BookmarkItem bookmarkFromQuery(const QSqlQuery &query);
137114

138115
void buildBookmarkDocument(QDomDocument &doc);
139116
void buildBookmarkTree(
@@ -150,11 +127,14 @@ class CBookmarkDatabase : public CDatabase
150127
int importBookmark(const QDomElement &aElement,
151128
const QString &folderPath, QMap<QString, int> &folderMap);
152129
QString importFolder(const QDomElement &h3Element,
153-
const QString &parentPath,
154-
QMap<QString, int> &folderMap);
130+
const QString &parentPath,
131+
QMap<QString, int> &folderMap);
155132
int getOrCreateFolder(const QString &folderPath, int parentFolderId);
156133
int getOrCreateFolder(const QString &folderPath, QMap<QString, int> &folderMap);
157134
QDateTime parseTimestamp(const QString &timestampStr);
158135
QDomElement findFirstElement(const QDomElement &parent, const QString &tagName);
159136

137+
CDatabaseTree m_TreeDB;
138+
CDatabaseUrl m_UrlDB;
160139
};
140+

Plugins/WebBrowser/Bookmark/FrmAddBookmark.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,9 @@ void CFrmAddBookmark::on_pbAdd_clicked()
8585
item.createdTime = QDateTime::currentDateTime();
8686
item.lastVisitTime = item.createdTime;
8787
item.modifiedTime = item.createdTime;
88-
m_pDatabase->addBookmark(item);
88+
int id = m_pDatabase->addBookmark(item);
89+
if(0 < id)
90+
loadFolder(id);
8991
}
9092
}
9193

Plugins/WebBrowser/Bookmark/FrmBookmark.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -251,10 +251,6 @@ void CFrmBookmark::loadBookmarks()
251251
bookmarkItem->setData(BookmarkType_Bookmark, Type);
252252
bookmarkItem->setData(bookmark.url, Url);
253253

254-
if (bookmark.isFavorite) {
255-
bookmarkItem->setIcon(QIcon::fromTheme("favorites"));
256-
}
257-
258254
if(pParentItem)
259255
pParentItem->appendRow(bookmarkItem);
260256
}
@@ -413,8 +409,6 @@ void CFrmBookmark::onSetFavorite()
413409
BookmarkItem item = m_pDatabase->getBookmark(id);
414410
if (item.id == 0) return;
415411

416-
item.isFavorite = !item.isFavorite;
417-
418412
if (m_pDatabase->updateBookmark(item)) {
419413
refresh();
420414
}

Plugins/WebBrowser/DatabaseUrl.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ int CDatabaseUrl::AddUrl(const QString &url, const QString &title, const QIcon &
6464
query.prepare(
6565
"UPDATE url SET "
6666
"title = :title, "
67-
"icon = :icon "
68-
"visit_time = :visit_time"
67+
"icon = :icon, "
68+
"visit_time = :visit_time "
6969
"WHERE id = :id"
7070
);
7171
query.bindValue(":title", szTitle);
@@ -86,6 +86,8 @@ int CDatabaseUrl::AddUrl(const QString &url, const QString &title, const QIcon &
8686
query.bindValue(":icon", m_iconDB.GetIcon(icon));
8787
}
8888

89+
qDebug(log) << "Sql:" << query.executedQuery();
90+
qDebug(log) << "Bound values:" << query.boundValues();
8991
bool success = query.exec();
9092
if (!success) {
9193
nId = 0;

Plugins/WebBrowser/DatabaseUrl.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@ class CDatabaseUrl : public CDatabase
1616
QString szTitle;
1717
QIcon icon;
1818
QDateTime visit_time;
19-
int iconId;
19+
2020
UrlItem()
2121
: iconId(0)
2222
{}
23+
int iconId;
2324
};
2425

2526
int AddUrl(const QString& url, const QString& title = QString(), const QIcon& icon = QIcon());

Plugins/WebBrowser/FrmWebBrowser.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ CFrmWebBrowser::CFrmWebBrowser(CParameterWebBrowser *pPara, bool bMenuBar, QWidg
8686
if(!(szDbBookmarks.right(1) == '/' || szDbBookmarks.right(1) == '\\'))
8787
szDbBookmarks += QDir::separator();
8888
szDbBookmarks += "Bookmarks.db";
89-
m_pBookmarkDatabase = CBookmarkDatabase::Instance(szDbBookmarks);
89+
m_pBookmarkDatabase = CBookmarkDatabase::Instance(m_pHistoryDatabase->GetDatabase());
9090

9191
setWindowIcon(QIcon::fromTheme("web-browser"));
9292

@@ -1289,8 +1289,11 @@ void CFrmWebBrowser::slotAddBookmark()
12891289
auto pView = CurrentView();
12901290
if(!pView) return;
12911291

1292+
QUrl url = pView->url();
1293+
if(url.isEmpty())
1294+
url = m_pUrlLineEdit->text();
12921295
CFrmAddBookmark* pAdd = new CFrmAddBookmark(
1293-
pView->title(), pView->url(), pView->favIcon(),
1296+
pView->title(), url, pView->favIcon(),
12941297
m_pPara);
12951298
bool check = connect(this, &CFrmWebBrowser::destroyed, pAdd, &CFrmAddBookmark::close);
12961299
Q_ASSERT(check);

Src/DatabaseTree.cpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ bool CDatabaseTree::OnInitializeDatabase()
410410
bool success = query.exec(
411411
"CREATE TABLE IF NOT EXISTS " + m_szTableName + " ("
412412
" id INTEGER PRIMARY KEY AUTOINCREMENT,"
413-
" name TEXT NOT NULL,"
413+
" name TEXT,"
414414
" key INTEGER DEFAULT 0,"
415415
" created_time DATETIME DEFAULT CURRENT_TIMESTAMP,"
416416
" modified_time DATETIME DEFAULT CURRENT_TIMESTAMP,"
@@ -470,7 +470,7 @@ bool CDatabaseTree::Update(const TreeItem &item)
470470
"created_time = :created_time, "
471471
"modified_time = :modified_time, "
472472
"last_visit_time = :last_visit_time, "
473-
"parent_id = :parent_id"
473+
"parent_id = :parent_id "
474474
"WHERE id = :id"
475475
);
476476
query.bindValue(":name", item.GetName());
@@ -479,9 +479,10 @@ bool CDatabaseTree::Update(const TreeItem &item)
479479
query.bindValue(":modified_time", QDateTime::currentDateTime());
480480
query.bindValue(":last_visit_time", item.GetLastVisitTime());
481481
query.bindValue(":parent_id", item.GetParentId());
482-
482+
query.bindValue(":id", item.GetId());
483+
qDebug(log) << "Sql:" << query.executedQuery();
484+
qDebug(log) << "Bound value:" << query.boundValues();
483485
bool success = query.exec();
484-
485486
if (!success) {
486487
qCritical(log) << "Failed to update tree item:" << m_szTableName << query.lastError().text();
487488
}
@@ -589,7 +590,7 @@ QList<TreeItem> CDatabaseTree::GetLeaves(int nodeId)
589590
QSqlQuery query(GetDatabase());
590591
QString szSql;
591592
szSql = "SELECT id, name, key, "
592-
"created_time, modified_time, last_visit_time "
593+
"created_time, modified_time, last_visit_time, parent_id "
593594
"FROM " + m_szTableName;
594595
if(0 < nodeId)
595596
szSql += " WHERE parent_id = :parent_id";
@@ -610,7 +611,7 @@ QList<TreeItem> CDatabaseTree::GetLeaves(int nodeId)
610611
item.SetCreateTime(query.value(3).toDateTime());
611612
item.SetModifyTime(query.value(4).toDateTime());
612613
item.SetLastVisitTime(query.value(5).toDateTime());
613-
item.SetParentId(nodeId);
614+
item.SetParentId(query.value(6).toInt());
614615

615616
items.append(item);
616617
}
@@ -641,10 +642,10 @@ QList<TreeItem> CDatabaseTree::GetLeavesByKey(int key)
641642
item.SetId(query.value(0).toInt());
642643
item.SetName(query.value(1).toString());
643644
item.SetKey(key);
644-
item.SetCreateTime(query.value(3).toDateTime());
645-
item.SetModifyTime(query.value(4).toDateTime());
646-
item.SetLastVisitTime(query.value(5).toDateTime());
647-
item.SetParentId(query.value(6).toInt());
645+
item.SetCreateTime(query.value(2).toDateTime());
646+
item.SetModifyTime(query.value(3).toDateTime());
647+
item.SetLastVisitTime(query.value(4).toDateTime());
648+
item.SetParentId(query.value(5).toInt());
648649

649650
items.append(item);
650651
}

0 commit comments

Comments
 (0)