mirror of
https://bitbucket.org/smil3y/kde-extraapps.git
synced 2025-02-24 10:52:53 +00:00
183 lines
3.7 KiB
C++
183 lines
3.7 KiB
C++
/* Copyright 2008,2009,2010,2012,2013 Rolf Eike Beer <kde@opensource.sf-tec.de>
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of
|
|
* the License or (at your option) version 3 or any later version
|
|
* accepted by the membership of KDE e.V. (or its successor approved
|
|
* by the membership of KDE e.V.), which shall act as a proxy
|
|
* defined in Section 14 of version 3 of the license.
|
|
*
|
|
* This program 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 General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
#include "KGpgRootNode.h"
|
|
|
|
#include "KGpgGroupNode.h"
|
|
#include "kgpginterface.h"
|
|
#include "KGpgOrphanNode.h"
|
|
#include "kgpgsettings.h"
|
|
|
|
#include <QString>
|
|
#include <QStringList>
|
|
|
|
KGpgRootNode::KGpgRootNode(KGpgItemModel *model)
|
|
: KGpgExpandableNode(NULL),
|
|
m_groups(0),
|
|
m_deleting(false)
|
|
{
|
|
m_model = model;
|
|
}
|
|
|
|
KGpgRootNode::~KGpgRootNode()
|
|
{
|
|
m_deleting = true;
|
|
}
|
|
|
|
void
|
|
KGpgRootNode::readChildren()
|
|
{
|
|
}
|
|
|
|
KgpgCore::KgpgItemType
|
|
KGpgRootNode::getType() const
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
void
|
|
KGpgRootNode::addGroups(const QStringList &groups)
|
|
{
|
|
foreach (const QString &group, groups) {
|
|
QStringList members = group.split(QLatin1Char(' '));
|
|
const QString groupName = members.takeFirst();
|
|
new KGpgGroupNode(this, groupName, members);
|
|
}
|
|
}
|
|
|
|
void
|
|
KGpgRootNode::addKeys(const QStringList &ids)
|
|
{
|
|
KgpgCore::KgpgKeyList publiclist = KgpgInterface::readPublicKeys(ids);
|
|
KgpgCore::KgpgKeyList secretlist = KgpgInterface::readSecretKeys();
|
|
|
|
QStringList issec = secretlist;
|
|
|
|
foreach (KgpgCore::KgpgKey key, publiclist) { // krazy:exclude=foreach
|
|
int index = issec.indexOf(key.fullId());
|
|
|
|
if (index >= 0) {
|
|
key.setSecret(true);
|
|
issec.removeAt(index);
|
|
secretlist.removeAt(index);
|
|
}
|
|
|
|
KGpgKeyNode *nd = new KGpgKeyNode(this, key);
|
|
emit newKeyNode(nd);
|
|
}
|
|
|
|
foreach (const KgpgCore::KgpgKey &key, secretlist)
|
|
new KGpgOrphanNode(this, key);
|
|
}
|
|
|
|
void
|
|
KGpgRootNode::refreshKeys(KGpgKeyNode::List nodes)
|
|
{
|
|
QStringList ids;
|
|
|
|
foreach (const KGpgNode *nd, nodes)
|
|
ids << nd->getId();
|
|
|
|
KgpgCore::KgpgKeyList publiclist = KgpgInterface::readPublicKeys(ids);
|
|
QStringList issec = KgpgInterface::readSecretKeys(ids);
|
|
|
|
foreach (KgpgCore::KgpgKey key, publiclist) { // krazy:exclude=foreach
|
|
int index = issec.indexOf(key.fullId());
|
|
if (index != -1) {
|
|
key.setSecret(true);
|
|
issec.removeAt(index);
|
|
}
|
|
|
|
for (int j = 0; j < nodes.count(); j++) {
|
|
KGpgKeyNode *nd = nodes.at(j);
|
|
if (nd->getId() == key.fullId()) {
|
|
nodes.removeAt(j);
|
|
nd->setKey(key);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
KGpgKeyNode *
|
|
KGpgRootNode::findKey(const QString &keyId)
|
|
{
|
|
int i = findKeyRow(keyId);
|
|
if (i >= 0) {
|
|
return children[i]->toKeyNode();
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
int
|
|
KGpgRootNode::findKeyRow(const QString &keyId)
|
|
{
|
|
int i = 0;
|
|
|
|
foreach (const KGpgNode *node, children) {
|
|
if ((node->getType() & ITYPE_PAIR) == 0) {
|
|
++i;
|
|
continue;
|
|
}
|
|
|
|
const KGpgKeyNode *key = node->toKeyNode();
|
|
|
|
if (key->compareId(keyId))
|
|
return i;
|
|
++i;
|
|
}
|
|
|
|
return -1;
|
|
}
|
|
|
|
int
|
|
KGpgRootNode::groupChildren() const
|
|
{
|
|
return m_groups;
|
|
}
|
|
|
|
int
|
|
KGpgRootNode::findKeyRow(const KGpgKeyNode *key)
|
|
{
|
|
for (int i = 0; i < children.count(); i++) {
|
|
if (children[i] == key)
|
|
return i;
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
KGpgRootNode *
|
|
KGpgRootNode::asRootNode()
|
|
{
|
|
if (m_deleting)
|
|
return NULL;
|
|
|
|
return this;
|
|
}
|
|
|
|
const KGpgRootNode *
|
|
KGpgRootNode::asRootNode() const
|
|
{
|
|
if (m_deleting)
|
|
return NULL;
|
|
|
|
return this;
|
|
}
|
|
|
|
#include "KGpgRootNode.moc"
|