玉兔远程控制 0.1.0-bate6
载入中...
搜索中...
未找到
BookmarkDatabase.h
1// Author: Kang Lin <kl222@126.com>
2
3#pragma once
4
5#include <QDomElement>
6#include <QString>
7#include <QByteArray>
8#include <QDateTime>
9#include <QIcon>
10#include <QList>
11#include <QDateTime>
12#include "DatabaseTree.h"
13#include "DatabaseUrl.h"
14
15enum BookmarkType {
16 BookmarkType_Bookmark,
17 BookmarkType_Folder,
18 BookmarkType_Separator
19};
20
22 int id;
23 QString url;
24 QString title;
25 QIcon icon;
26 QDateTime createdTime;
27 QDateTime modifiedTime;
28 QDateTime lastVisitTime;
29
30 int folderId;
31 BookmarkType type;
32
34 : id(0)
35 , folderId(1) // 指向默认收藏夹
36 , type(BookmarkType_Bookmark)
37 {}
38
39 bool isFolder() const { return type == BookmarkType_Folder; }
40 bool isSeparator() const { return type == BookmarkType_Separator; }
41 bool isBookmark() const { return type == BookmarkType_Bookmark; }
42
43 QIcon getIcon() const {
44 if (!icon.isNull()) {
45 return icon;
46 }
47
48 // 根据URL返回默认图标
49 if (url.startsWith("https://")) {
50 return QIcon::fromTheme("security-high");
51 } else if (url.startsWith("http://")) {
52 return QIcon::fromTheme("security-low");
53 } else if (isFolder()) {
54 return QIcon::fromTheme("folder");
55 }
56
57 return QIcon::fromTheme("user-bookmarks");
58 }
59
60};
61
63{
64 Q_OBJECT
65public:
66 static CBookmarkDatabase* Instance(const QSqlDatabase& database);
67 static CBookmarkDatabase* Instance(const QString& szFile = QString());
68
69 // 书签操作
70 int addBookmark(const BookmarkItem &item);
71 bool updateBookmark(const BookmarkItem &item);
72 bool deleteBookmark(int id);
73 bool deleteBookmark(const QList<BookmarkItem>& items);
74 bool moveBookmark(int id, int newFolderId);
75
76 // 文件夹操作
77 int addFolder(const QString &name, int parentId = 0);
78 bool renameFolder(int folderId, const QString &newName);
79 bool deleteFolder(int folderId);
80 bool moveFolder(int folderId, int newParentId);
81
82 // 查询操作
83 BookmarkItem getBookmark(int id);
84 QList<BookmarkItem> getBookmarkByUrl(const QString &url);
85 QList<BookmarkItem> getAllBookmarks(int folderId = 0);
86 QList<BookmarkItem> searchBookmarks(const QString &keyword);
87
88 // 文件夹查询
89 QList<BookmarkItem> getAllFolders();
90 QList<BookmarkItem> getSubFolders(int folderId);
91
92 // 导入导出
93 bool importFromHtml(const QString &filename);
94 bool exportToHtml(const QString &filename);
95 bool importFromBrowser(const QString &browserName);
96
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
101signals:
102 void bookmarksChanged();
103 void bookmarkAdded(const BookmarkItem &item);
104 void bookmarkUpdated(const BookmarkItem &item);
105 void bookmarkDeleted(int id);
106 void folderAdded(const BookmarkItem &folder);
107 void folderUpdated(const BookmarkItem &folder);
108 void folderDeleted(int folderId);
109
110private:
111 explicit CBookmarkDatabase(QObject *parent = nullptr);
113 bool OnInitializeDatabase() override;
114
115 void buildBookmarkDocument(QDomDocument &doc);
116 void buildBookmarkTree(
117 QDomDocument &doc, QDomElement &parentElement, int folderId);
118 QDomElement createBookmarkDomElement(
119 QDomDocument &doc, const BookmarkItem &bookmark);
120 int parseHtmlBookmarks(const QString &htmlContent);
121 int parseBookmarkList(const QDomElement &dlElement,
122 const QString &currentPath,
123 QMap<QString, int> &folderMap);
124 int parseDtElement(const QDomElement &dtElement,
125 const QString &currentPath,
126 QMap<QString, int> &folderMap);
127 int importBookmark(const QDomElement &aElement,
128 const QString &folderPath, QMap<QString, int> &folderMap);
129 QString importFolder(const QDomElement &h3Element,
130 const QString &parentPath,
131 QMap<QString, int> &folderMap);
132 int getOrCreateFolder(const QString &folderPath, int parentFolderId);
133 int getOrCreateFolder(const QString &folderPath, QMap<QString, int> &folderMap);
134 QDateTime parseTimestamp(const QString &timestampStr);
135 QDomElement findFirstElement(const QDomElement &parent, const QString &tagName);
136
137 CDatabaseTree m_TreeDB;
138 CDatabaseUrl m_UrlDB;
139
140 virtual bool ExportToJson(QJsonObject &obj) override;
141 virtual bool ImportFromJson(const QJsonObject &obj) override;
142};
143