99#include < QIcon>
1010#include < QList>
1111#include < QDateTime>
12- #include " Database.h"
12+ #include " DatabaseTree.h"
13+ #include " DatabaseUrl.h"
1314
1415enum 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
8462class CBookmarkDatabase : public CDatabase
8563{
8664 Q_OBJECT
8765public:
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+
123101signals:
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 ×tampStr);
158135 QDomElement findFirstElement (const QDomElement &parent, const QString &tagName);
159136
137+ CDatabaseTree m_TreeDB;
138+ CDatabaseUrl m_UrlDB;
160139};
140+
0 commit comments