Rabbit Remote Control 0.1.0-bate8
Loading...
Searching...
No Matches
HistoryModel.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QLoggingCategory>
4#include <QLocale>
5#include "HistoryModel.h"
6
7static Q_LOGGING_CATEGORY(log, "WebBrowser.History.Model")
9 : QAbstractTableModel(parent)
10 , m_pPara(pPara)
11{
12 qDebug(log) << Q_FUNC_INFO;
13
14 if(pPara)
15 m_pDatabase = &pPara->m_HistoryDatabase;
16
17 // Call refresh() by user
18 // if (m_pDatabase && m_pDatabase->isOpen()) {
19 // refresh();
20 // }
21}
22
23CHistoryModel::~CHistoryModel()
24{
25 qDebug(log) << Q_FUNC_INFO;
26}
27
28QVariant CHistoryModel::headerData(int section, Qt::Orientation orientation, int role) const
29{
30 if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
31 switch (section) {
32 case ColumnTitle: return tr("Title");
33 case ColumnUrl: return tr("Url");
34 case ColumnVisitTime: return tr("Visit Time");
35 default:
36 break;
37 }
38 }
39
40 return QVariant();
41}
42
43int CHistoryModel::rowCount(const QModelIndex &parent) const
44{
45 Q_UNUSED(parent);
46 return m_historyItems.count();
47}
48
49int CHistoryModel::columnCount(const QModelIndex &parent) const
50{
51 Q_UNUSED(parent);
52 return ColumnCount;
53}
54
55QVariant CHistoryModel::data(const QModelIndex &index, int role) const
56{
57
58 if (!index.isValid() || index.row() >= m_historyItems.count())
59 return QVariant();
60
61 if(!m_pDatabase) {
62 qCritical(log) << "The m_pDatabase is nullptr";
63 return QVariant();
64 }
65
66 const HistoryItem &item = m_historyItems.at(index.row());
67
68 switch (role) {
69 case Qt::DisplayRole:
70 switch (index.column()) {
71 case ColumnTitle:
72 return item.title.isEmpty() ? tr("Untitled") : item.title;
73 case ColumnUrl:
74 return item.url;
75 case ColumnVisitTime:
76 return item.visitTime.toString(QLocale::system().dateFormat());
77 }
78 break;
79
80 case Qt::DecorationRole:
81 if (index.column() == ColumnTitle) {
82 return item.icon;
83 }
84 break;
85
86 case Qt::ToolTipRole:
87 return QString(tr("Title: %1\nUrl: %2\nVisit Time: %3")
88 .arg(item.title)
89 .arg(item.url)
90 .arg(item.visitTime.toString(QLocale::system().dateFormat())));
91
92 case Qt::UserRole:
93 return item.url; // 返回URL用于导航
94 }
95
96 return QVariant();
97}
98
99void CHistoryModel::refresh()
100{
101 if(!m_pDatabase) {
102 qCritical(log) << "The m_pDatabase is nullptr";
103 return;
104 }
105 beginResetModel();
106 int nLimit = 100;
107 if(m_pPara)
108 nLimit = m_pPara->GetDatabaseViewLimit();
109 m_historyItems = m_pDatabase->getAllHistory(nLimit); // 最多500条
110 endResetModel();
111}
112
113void CHistoryModel::refresh(const QDate &start, const QDate &end)
114{
115 if(!m_pDatabase) {
116 qCritical(log) << "The m_pDatabase is nullptr";
117 return;
118 }
119 beginResetModel();
120 int nLimit = 100;
121 if(m_pPara)
122 nLimit = m_pPara->GetDatabaseViewLimit();
123 m_historyItems = m_pDatabase->getHistoryByDate(start, end, nLimit); // 最多500条
124 endResetModel();
125}
126
127bool CHistoryModel::removeRows(int row, int count, const QModelIndex &parent)
128{
129 if (row < 0 || row + count > m_historyItems.count())
130 return false;
131
132 if(!m_pDatabase) {
133 qCritical(log) << "The m_pDatabase is nullptr";
134 return false;
135 }
136
137 beginRemoveRows(parent, row, row + count - 1);
138
139 for (int i = row + count - 1; i >= row; --i) {
140 m_pDatabase->deleteHistoryEntry(m_historyItems.at(i).id);
141 m_historyItems.removeAt(i);
142 }
143
144 endRemoveRows();
145 return true;
146}
147
148HistoryItem CHistoryModel::getItem(const QModelIndex &index) const
149{
150 if (index.isValid() && index.row() < m_historyItems.count()) {
151 return m_historyItems.at(index.row());
152 }
153 return HistoryItem();
154}
155
156bool CHistoryModel::removeDomainItems(const QString &szDomain)
157{
158 if(m_pDatabase) {
159 m_pDatabase->deleteDomainEntries(szDomain);
160 refresh();
161 return true;
162 }
163 return false;
164}
165
166bool CHistoryModel::removeItems(const QString &url)
167{
168 if(m_pDatabase) {
169 m_pDatabase->deleteHistoryEntry(url);
170 refresh();
171 return true;
172 }
173 return false;
174}
175
176bool CHistoryModel::search(const QString &keyword)
177{
178 if(!m_pDatabase) return false;
179 beginResetModel();
180 m_historyItems = m_pDatabase->searchHistory(keyword);
181 endResetModel();
182 return true;
183}
184
185bool CHistoryModel::importFromJson(const QString &filename)
186{
187 if(!m_pDatabase) return false;
188 return m_pDatabase->ImportFromJsonFile(filename);
189}
190
191bool CHistoryModel::exportToJson(const QString &filename)
192{
193 if(!m_pDatabase) return false;
194 return m_pDatabase->ExportToJsonFile(filename);
195}