aboutsummaryrefslogtreecommitdiffstats
path: root/kgpg/transactions/kgpgtextorfiletransaction.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kgpg/transactions/kgpgtextorfiletransaction.cpp')
-rw-r--r--kgpg/transactions/kgpgtextorfiletransaction.cpp150
1 files changed, 150 insertions, 0 deletions
diff --git a/kgpg/transactions/kgpgtextorfiletransaction.cpp b/kgpg/transactions/kgpgtextorfiletransaction.cpp
new file mode 100644
index 0000000..6989353
--- /dev/null
+++ b/kgpg/transactions/kgpgtextorfiletransaction.cpp
@@ -0,0 +1,150 @@
+/*
+ * Copyright (C) 2008,2009,2010,2011,2012 Rolf Eike Beer <[email protected]>
+ */
+
+/***************************************************************************
+ * *
+ * 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) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "kgpgtextorfiletransaction.h"
+
+#include "../gpgproc.h"
+
+//#include <KIO/NetAccess>
+//#include <KLocale>
+
+KGpgTextOrFileTransaction::KGpgTextOrFileTransaction(QObject *parent, const QString &text, const bool allowChaining)
+ : KGpgTransaction(parent, allowChaining),
+ m_text(text)
+{
+}
+
+KGpgTextOrFileTransaction::KGpgTextOrFileTransaction(QObject *parent, const QList<QUrl> &files, const bool allowChaining)
+ : KGpgTransaction(parent, allowChaining)
+{
+ setUrls(files);
+}
+
+KGpgTextOrFileTransaction::~KGpgTextOrFileTransaction()
+{
+ cleanUrls();
+}
+
+void
+KGpgTextOrFileTransaction::setText(const QString &text)
+{
+ m_text = text;
+ cleanUrls();
+}
+
+void
+KGpgTextOrFileTransaction::setUrls(const QList<QUrl> &files)
+{
+ m_text.clear();
+ m_inpfiles = files;
+}
+
+bool
+KGpgTextOrFileTransaction::preStart()
+{
+ QStringList locfiles;
+
+ foreach (const QUrl &url, m_inpfiles) {
+ if (url.isLocalFile()) {
+ locfiles.append(url.toLocalFile());
+ } else {
+ QString tmpfile;
+ //TODO: QIODevice ...?
+/* if (KIO::NetAccess::download(url, tmpfile, 0)) {
+ m_tempfiles.append(tmpfile);
+ } else {
+ m_messages.append(KIO::NetAccess::lastErrorString());
+ cleanUrls();
+ setSuccess(TS_KIO_FAILED);
+ return false;
+ }*/
+ }
+ }
+
+ if (locfiles.isEmpty() && m_tempfiles.isEmpty() && m_text.isEmpty() && !hasInputTransaction()) {
+ setSuccess(TS_MSG_SEQUENCE);
+ return false;
+ }
+
+ QStringList args(QLatin1String("--status-fd=1"));
+
+ args << command();
+ // if the input is not stdin set command-fd so GnuPG
+ // can ask if e.g. the file already exists
+ if (!locfiles.isEmpty() && !m_tempfiles.isEmpty()) {
+ args << QLatin1String("--command-fd=0");
+ m_closeInput = false;
+ } else {
+ m_closeInput = !args.contains(QLatin1String("--command-fd=0"));
+ }
+ if (locfiles.count() + m_tempfiles.count() > 1)
+ args << QLatin1String("--multifile");
+ args << locfiles << m_tempfiles;
+ addArguments(args);
+
+ return true;
+}
+
+void
+KGpgTextOrFileTransaction::postStart()
+{
+ if (!m_text.isEmpty()){
+ GPGProc *proc = getProcess();
+ proc->write(m_text.toUtf8());
+ if (m_closeInput)
+ proc->closeWriteChannel();
+ }
+}
+
+bool
+KGpgTextOrFileTransaction::nextLine(const QString &line)
+{
+ if (!line.startsWith(QLatin1String("[GNUPG:] SIGEXPIRED")) && !line.startsWith(QLatin1String("[GNUPG:] KEYEXPIRED ")))
+ m_messages.append(line);
+
+ return false;
+}
+
+void
+KGpgTextOrFileTransaction::finish()
+{
+ if (getProcess()->exitCode() != 0) {
+ setSuccess(TS_MSG_SEQUENCE);
+ }
+}
+
+const QStringList &
+KGpgTextOrFileTransaction::getMessages() const
+{
+ return m_messages;
+}
+
+void
+KGpgTextOrFileTransaction::cleanUrls()
+{
+// TODO
+/* foreach (const QString &u, m_tempfiles)
+ KIO::NetAccess::removeTempFile(u);
+*/
+ m_tempfiles.clear();
+ m_locfiles.clear();
+ m_inpfiles.clear();
+}
+
+const QList<QUrl> &
+KGpgTextOrFileTransaction::getInputFiles() const
+{
+ return m_inpfiles;
+}
+
+//#include "kgpgtextorfiletransaction.moc"