void KGPGFile::keyList(QStringList& list, bool secretKeys, const QString& pattern) { d->m_keys.clear(); list.clear(); if (d->ctx && !d->ctx->startKeyListing(pattern.toUtf8().constData(), secretKeys)) { GpgME::Error error; for (;;) { GpgME::Key key; key = d->ctx->nextKey(error); if (error.encodedError() != GPG_ERR_NO_ERROR) break; bool needPushBack = true; std::vector<GpgME::UserID> userIDs = key.userIDs(); std::vector<GpgME::Subkey> subkeys = key.subkeys(); for (unsigned int i = 0; i < userIDs.size(); ++i) { if (subkeys.size() > 0) { for (unsigned int j = 0; j < subkeys.size(); ++j) { const GpgME::Subkey& skey = subkeys[j]; if (((skey.canEncrypt() && !secretKeys) || (skey.isSecret() && secretKeys)) && !(skey.isRevoked() || skey.isExpired() || skey.isInvalid() || skey.isDisabled())) { QString entry = QString("%1:%2").arg(key.shortKeyID()).arg(userIDs[i].id()); list += entry; if (needPushBack) { d->m_keys.push_back(key); needPushBack = false; } } else { // qDebug("Skip key '%s'", key.shortKeyID()); } } } else { // we have no subkey, so we operate on the main key if (((key.canEncrypt() && !secretKeys) || (key.hasSecret() && secretKeys)) && !(key.isRevoked() || key.isExpired() || key.isInvalid() || key.isDisabled())) { QString entry = QString("%1:%2").arg(key.shortKeyID()).arg(userIDs[i].id()); list += entry; if (needPushBack) { d->m_keys.push_back(key); needPushBack = false; } } else { // qDebug("Skip key '%s'", key.shortKeyID()); } } } } d->ctx->endKeyListing(); } }
void slotOperationDoneEvent(GpgME::Context *, const GpgME::Error &error) { qDebug("listing done error: %d", error.encodedError()); }