fixes #22 multiple entries in kgpg public key list

Signed-off-by: Emanoil Kotsev <deloptes@gmail.com>
pull/24/head
Emanoil Kotsev 4 years ago
parent e2ce3b772e
commit 1df6286ec0
No known key found for this signature in database
GPG Key ID: F1EEB8CD9FB16A50

@ -350,19 +350,104 @@ void popupPublic::refreshkeys()
void popupPublic::slotpreselect()
{
TQListViewItem *it=NULL;
if (!keysList->firstChild()) return;
if (fmode) it=keysList->findItem(KGpgSettings::defaultKey(),2);
if (!trusted)
sort();
if (fmode)
{
keysList->clearSelection();
keysList->setSelected(it,true);
keysList->setCurrentItem(it);
keysList->ensureItemVisible(it);
}
emit keyListFilled();
TQString defaultKey = KGpgSettings::defaultKey().right(8);
// process the output to update dialog infos
TQMap<TQString,TQStringList>::Iterator ite;
for (ite = hashMap.begin(); ite != hashMap.end(); ite++) {
TQStringList::Iterator it;
TQString fullname,keyname,keymail,val,id;
bool dead;
for (it = ite.data().begin(); it != ite.data().end(); it++) {
TQString line = (*it);
kdDebug(2100) << k_funcinfo << line << endl;
if (line.startsWith("pub")) {
TQStringList keyString=TQStringList::split(":",line,true);
dead=false;
const TQString trust=keyString[1];
val=keyString[6];
id=TQString("0x"+keyString[4].right(8));
if (val.isEmpty()) {
val=i18n("Unlimited");
}
// unused TQString tr;
switch( trust[0] ) {
case 'o': // unknown
untrustedList<<id; // untrustedList used in sort
break;
case 'i': // invalid
case 'd': // disabled
case 'r': // revoked
case 'e': // expired
dead=true;
break;
case 'q': // undefined
case 'n': // none
case 'm': // marginal
untrustedList<<id;
break;
case 'f': // full
case 'u': // ultimate
break;
default:
untrustedList<<id;
break;
}
if (keyString[11].find('D')!=-1) { // disabled
dead=true;
}
fullname=keyString[9];
}
if ( line.startsWith("uid") && fullname.isEmpty() ) {
fullname = line.section(':',9,9);
}
}
if (fullname.find("<")!=-1) {
keymail=fullname.section('<',-1,-1);
keymail.truncate(keymail.length()-1);
keyname=fullname.section('<',0,0);
//if (keyname.find("(")!=-1) {
// keyname=keyname.section('(',0,0);
//}
}
else {
keymail=TQString();
keyname=fullname;//.section('(',0,0);
}
if ((!dead) && (!fullname.isEmpty())) {
bool isDefaultKey=false;
if (id.right(8)==defaultKey) {
isDefaultKey=true;
}
UpdateViewItem2 *item=new UpdateViewItem2(keysList,keyname,keymail,id,isDefaultKey);
//TDEListViewItem *sub= new TDEListViewItem(item,i18n("ID: %1, trust: %2, validity: %3").arg(id).arg(tr).arg(val));
//sub->setSelectable(false);
if (seclist.find(fullname,0,FALSE)!=-1) {
item->setPixmap(0,keyPair);
}
else {
item->setPixmap(0,keySingle);
}
}
}
//
TQListViewItem *it=NULL;
if (!keysList->firstChild()) return;
if (fmode) it=keysList->findItem(KGpgSettings::defaultKey(),2);
if (!trusted)
sort();
if (fmode)
{
keysList->clearSelection();
keysList->setSelected(it,true);
keysList->setCurrentItem(it);
keysList->ensureItemVisible(it);
}
emit keyListFilled();
}
void popupPublic::slotSetVisible()
@ -372,14 +457,11 @@ void popupPublic::slotSetVisible()
void popupPublic::slotprocread(KProcIO *p)
{
// collect all data (output starts with pub line followed by related)
// kdDebug(2100) << k_funcinfo << endl;
///////////////////////////////////////////////////////////////// extract encryption keys
TQString tst;
TQString defaultKey = KGpgSettings::defaultKey().right(8);
while (p->readln(tst)!=-1) {
// kdDebug(2100) << k_funcinfo << "Read one public key line: " << tst << endl;
if ( tst.startsWith("pub") ) {
currentKey = tst.section(':',4,4);
TQStringList lst; lst << tst;
@ -389,98 +471,6 @@ void popupPublic::slotprocread(KProcIO *p)
hashMap.find(currentKey).data().append(tst);
}
}
TQMap<TQString,TQStringList>::Iterator ite;
for (ite = hashMap.begin(); ite != hashMap.end(); ite++) {
TQStringList::Iterator it;
TQString fullname,keyname,keymail,val,id;
bool dead;
for (it = ite.data().begin(); it != ite.data().end(); it++) {
TQString line = (*it);
if (line.startsWith("pub")) {
TQStringList keyString=TQStringList::split(":",line,true);
dead=false;
const TQString trust=keyString[1];
val=keyString[6];
id=TQString("0x"+keyString[4].right(8));
if (val.isEmpty()) {
val=i18n("Unlimited");
}
TQString tr;
switch( trust[0] ) {
case 'o':
untrustedList<<id;
break;
case 'i':
dead=true;
break;
case 'd':
dead=true;
break;
case 'r':
dead=true;
break;
case 'e':
dead=true;
break;
case 'q':
untrustedList<<id;
break;
case 'n':
untrustedList<<id;
break;
case 'm':
untrustedList<<id;
break;
case 'f':
break;
case 'u':
break;
default:
untrustedList<<id;
break;
}
if (keyString[11].find('D')!=-1) {
dead=true;
}
fullname=keyString[9];
}
if ( line.startsWith("uid") && fullname.isEmpty() ) {
fullname = line.section(':',9,9);
}
}
if (fullname.find("<")!=-1) {
keymail=fullname.section('<',-1,-1);
keymail.truncate(keymail.length()-1);
keyname=fullname.section('<',0,0);
//if (keyname.find("(")!=-1) {
// keyname=keyname.section('(',0,0);
//}
}
else {
keymail=TQString();
keyname=fullname;//.section('(',0,0);
}
if ((!dead) && (!fullname.isEmpty())) {
bool isDefaultKey=false;
if (id.right(8)==defaultKey) {
isDefaultKey=true;
}
UpdateViewItem2 *item=new UpdateViewItem2(keysList,keyname,keymail,id,isDefaultKey);
//TDEListViewItem *sub= new TDEListViewItem(item,i18n("ID: %1, trust: %2, validity: %3").arg(id).arg(tr).arg(val));
//sub->setSelectable(false);
if (seclist.find(fullname,0,FALSE)!=-1) {
item->setPixmap(0,keyPair);
}
else {
item->setPixmap(0,keySingle);
}
}
}
}

Loading…
Cancel
Save