Rabbit Remote Control 0.1.0-bate8
Loading...
Searching...
No Matches
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
33 BookmarkItem(BookmarkType t)
34 : id(0)
35 , folderId(1) // 指向默认收藏夹
36 , type(t)
37 {}
38
39 [[nodiscard]] bool isFolder() const { return type == BookmarkType_Folder; }
40 [[nodiscard]] bool isSeparator() const { return type == BookmarkType_Separator; }
41 [[nodiscard]] bool isBookmark() const { return type == BookmarkType_Bookmark; }
42
43 [[nodiscard]] 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
67{
68 Q_OBJECT
69
70public:
71 explicit CBookmarkDatabase(QObject *parent = nullptr);
73
74 // 书签操作
75 int addBookmark(const BookmarkItem &item);
76 bool updateBookmark(const BookmarkItem &item);
77 bool deleteBookmark(int id);
78 bool deleteBookmark(const QList<BookmarkItem>& items);
79 bool moveBookmark(int id, int newFolderId);
80
81 // 文件夹操作
82 int addFolder(const QString &name, int parentId = 0);
83 bool renameFolder(int folderId, const QString &newName);
84 bool deleteFolder(int folderId);
85 bool moveFolder(int folderId, int newParentId);
86
87 // 查询操作
88 [[nodiscard]] BookmarkItem getBookmark(int id);
89 [[nodiscard]] QList<BookmarkItem> getBookmarkByUrl(const QString &url);
90 [[nodiscard]] QList<BookmarkItem> getAllBookmarks(int folderId = 0);
91 [[nodiscard]] QList<BookmarkItem> searchBookmarks(const QString &keyword);
92
93 // 文件夹查询
94 [[nodiscard]] QList<BookmarkItem> getAllFolders();
95 [[nodiscard]] QList<BookmarkItem> getSubFolders(int folderId);
96
97 [[nodiscard]] TreeItem BookmarkToTree(const BookmarkItem& tree, bool setKey = false);
98 [[nodiscard]] BookmarkItem TreeToBookmark(const TreeItem& tree);
99 [[nodiscard]] 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 [[nodiscard]] bool OnInitializeDatabase() override;
112
113 CDatabaseTree m_TreeDB;
114 CDatabaseUrl m_UrlDB;
115
116 virtual bool ExportToJson(QJsonObject &obj) override;
117 virtual bool ImportFromJson(const QJsonObject &obj) override;
118private:
119 bool ExportToJson(int parentId, QJsonArray& obj);
120 bool ImportFromJson(int parentId, const QJsonArray& obj);
121};
122
The CBookmarkDatabase class.
bool OnInitializeDatabase() override
Initialize database.
The CDatabaseTree class.
Provide interfaces such as opening the database and initializing the database.
Definition Database.h:21