3 #include "ui_usersdialog.h"
7 #include <QRegularExpression>
19 : QDialog(parent), ui(new
Ui::
UsersDialog), m_dir(std::move(dir)) {
24 if (users.isEmpty()) {
25 QMessageBox::critical(parent, tr(
"Keylist missing"),
26 tr(
"Could not fetch list of available GPG keys"));
31 foreach (
const UserInfo &sec, secret_keys) {
32 for (
auto &user : users)
33 if (sec.
key_id == user.key_id)
34 user.have_secret =
true;
37 QList<UserInfo> selected_users;
41 m_dir.isEmpty() ?
"" : m_dir,
" ", &count);
42 if (!recipients.isEmpty())
44 foreach (
const UserInfo &sel, selected_users) {
45 for (
auto &user : users)
46 if (sel.
key_id == user.key_id)
50 if (count > selected_users.size()) {
53 m_dir.isEmpty() ?
"" : m_dir);
54 foreach (
const QString recipient, recipients) {
59 i.
name =
" ?? " + tr(
"Key not found in keyring");
68 connect(ui->buttonBox, &QDialogButtonBox::accepted,
this,
70 connect(ui->buttonBox, &QDialogButtonBox::rejected,
this, &QDialog::reject);
71 connect(ui->listWidget, &QListWidget::itemChanged,
this,
72 &UsersDialog::itemChange);
74 #if QT_VERSION >= 0x050200
75 ui->lineEdit->setClearButtonEnabled(
true);
111 switch (event->key()) {
113 ui->lineEdit->clear();
124 void UsersDialog::itemChange(QListWidgetItem *item) {
127 auto *info = item->data(Qt::UserRole).value<
UserInfo *>();
130 info->
enabled = item->checkState() == Qt::Checked;
138 void UsersDialog::populateList(
const QString &filter) {
139 QRegularExpression nameFilter(QRegularExpression::wildcardToRegularExpression(
"*" + filter +
"*"), QRegularExpression::CaseInsensitiveOption);
140 ui->listWidget->clear();
141 if (!m_userList.isEmpty()) {
142 for (
auto &user : m_userList) {
143 if (filter.isEmpty() || nameFilter.match(user.name).hasMatch()) {
144 if (!user.isValid() && !ui->checkBox->isChecked())
146 if (user.expiry.toSecsSinceEpoch() > 0 &&
147 user.expiry.daysTo(QDateTime::currentDateTime()) > 0 &&
148 !ui->checkBox->isChecked())
150 QString userText = user.name +
"\n" + user.key_id;
151 if (user.created.toSecsSinceEpoch() > 0) {
152 userText +=
" " + tr(
"created") +
" " +
153 user.created.toString(QLocale::system().toString(QDate::currentDate(), QLocale::ShortFormat));
155 if (user.expiry.toSecsSinceEpoch() > 0)
156 userText +=
" " + tr(
"expires") +
" " +
157 user.expiry.toString(QLocale::system().toString(QDate::currentDate(), QLocale::ShortFormat));
158 auto *item =
new QListWidgetItem(userText, ui->listWidget);
159 item->setCheckState(user.enabled ? Qt::Checked : Qt::Unchecked);
160 item->setData(Qt::UserRole, QVariant::fromValue(&user));
161 if (user.have_secret) {
163 item->setForeground(Qt::blue);
165 font.setFamily(font.defaultFamily());
168 }
else if (!user.isValid()) {
169 item->setBackground(QColor(164, 0, 0));
170 item->setForeground(Qt::white);
171 }
else if (user.expiry.toSecsSinceEpoch() > 0 &&
172 user.expiry.daysTo(QDateTime::currentDateTime()) > 0) {
173 item->setForeground(QColor(164, 0, 0));
174 }
else if (!user.fullyValid()) {
175 item->setBackground(QColor(164, 80, 0));
176 item->setForeground(Qt::white);
179 ui->listWidget->addItem(item);
189 void UsersDialog::on_lineEdit_textChanged(
const QString &filter) {
190 populateList(filter);
196 void UsersDialog::on_checkBox_clicked() { populateList(ui->lineEdit->text()); }