1 /*
2     SPDX-FileCopyrightText: 2010, 2012 Rolf Eike Beer <kde@opensource.sf-tec.de>
3     SPDX-License-Identifier: GPL-2.0-or-later
4 */
5 
6 #include "kgpgkeyserversearchtransaction.h"
7 
KGpgKeyserverSearchTransaction(QObject * parent,const QString & keyserver,const QString & pattern,const bool withProgress,const QString & proxy)8 KGpgKeyserverSearchTransaction::KGpgKeyserverSearchTransaction(QObject *parent, const QString &keyserver, const QString &pattern, const bool withProgress, const QString &proxy)
9 	: KGpgKeyserverTransaction(parent, keyserver, withProgress, proxy),
10 	m_pageEmpty(true)
11 {
12 	addArgument(QLatin1String( "--with-colons" ));
13 	addArgument(QLatin1String( "--search-keys" ));
14 	m_patternPos = addArgument(pattern);
15 }
16 
~KGpgKeyserverSearchTransaction()17 KGpgKeyserverSearchTransaction::~KGpgKeyserverSearchTransaction()
18 {
19 }
20 
21 bool
preStart()22 KGpgKeyserverSearchTransaction::preStart()
23 {
24 	setSuccess(TS_MSG_SEQUENCE);
25 	m_keyLines.clear();
26 
27 	return KGpgKeyserverTransaction::preStart();
28 }
29 
30 bool
nextLine(const QString & line)31 KGpgKeyserverSearchTransaction::nextLine(const QString &line)
32 {
33 	if (line.startsWith(QLatin1String("[GNUPG:] GET_LINE keysearch.prompt"))) {
34 		if (!m_pageEmpty) {
35 			write("n");
36 			m_pageEmpty = true;
37 		} else {
38 			return true;
39 		}
40 	} else if (!line.isEmpty() && !line.startsWith(QLatin1String("[GNUPG:] "))) {
41 		m_pageEmpty = false;
42 		if (line.startsWith(QLatin1String("pub:"))) {
43 			if (!m_keyLines.isEmpty()) {
44 				Q_EMIT newKey(m_keyLines);
45 				m_keyLines.clear();
46 			}
47 			m_keyLines.append(line);
48 		} else if (!m_keyLines.isEmpty() && (line != QLatin1String("\r")))
49 			m_keyLines.append(line);
50 	}
51 
52 	return false;
53 }
54 
55 void
finish()56 KGpgKeyserverSearchTransaction::finish()
57 {
58 	if (!m_keyLines.isEmpty()) {
59 		Q_EMIT newKey(m_keyLines);
60 		m_keyLines.clear();
61 	}
62 }
63 
64 void
setPattern(const QString & pattern)65 KGpgKeyserverSearchTransaction::setPattern(const QString &pattern)
66 {
67 	replaceArgument(m_patternPos, pattern);
68 }
69