1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
/*
Copyright (c) 2016 Christian Mollekopf <mollekopf@kolabsys.com>
This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
*/
#include "recepientautocompletionmodel.h"
#include <QStandardItemModel>
#include <QSettings>
#include <QStandardPaths>
#include <QSet>
#include <QDebug>
#include <QTimer>
RecipientAutocompletionModel::RecipientAutocompletionModel(QObject *parent)
: QSortFilterProxyModel(),
mSourceModel(new QStandardItemModel),
mTimer(new QTimer)
{
setSourceModel(mSourceModel.data());
setDynamicSortFilter(true);
setFilterCaseSensitivity(Qt::CaseInsensitive);
mTimer->setSingleShot(true);
QObject::connect(mTimer.data(), &QTimer::timeout, this, &RecipientAutocompletionModel::save);
load();
}
RecipientAutocompletionModel::~RecipientAutocompletionModel()
{
save();
}
static QString getPath()
{
return QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + "/kube/recepientautocompletion.ini";
}
void RecipientAutocompletionModel::save()
{
QSet<QString> list;
for (int row = 0; row < mSourceModel->rowCount(); row++) {
list << mSourceModel->item(row)->data(Text).toString();
}
qWarning() << "Path " << getPath();
QSettings settings(getPath(), QSettings::IniFormat);
settings.setValue("list", QStringList{list.toList()});
}
void RecipientAutocompletionModel::load()
{
qWarning() << "Path " << getPath();
QSettings settings(getPath(), QSettings::IniFormat);
auto list = settings.value("list").toStringList();
auto add = [] (const QString &n) {
auto item = new QStandardItem{n};
item->setData(n, Text);
return item;
};
for (const auto &entry : list) {
mSourceModel->appendRow(add(entry));
}
}
QHash< int, QByteArray > RecipientAutocompletionModel::roleNames() const
{
QHash<int, QByteArray> roles;
roles[Text] = "text";
roles[Color] = "color";
return roles;
}
void RecipientAutocompletionModel::addEntry(const QByteArray &address, const QByteArray &name)
{
auto add = [] (const QString &n) {
auto item = new QStandardItem{n};
item->setData(n, Text);
return item;
};
auto formattedName = [&] () {
if (name.isEmpty()) {
return QString(address);
}
return QString("%1 <%2>").arg(QString(address), QString(name));
}();
auto matches = mSourceModel->findItems(formattedName);
if (matches.isEmpty()) {
mSourceModel->appendRow(add(formattedName));
mTimer->start(100);
}
}
void RecipientAutocompletionModel::setFilter(const QString &filter)
{
setFilterWildcard("*" + filter +"*");
}
|