kde-extraapps/kgpg/transactions/kgpgexport.cpp
2015-02-27 11:02:43 +00:00

197 lines
3.9 KiB
C++

/*
* Copyright (C) 2009,2012 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) any later version. *
* *
***************************************************************************/
#include "kgpgexport.h"
#include "gpgproc.h"
#include <QFile>
#include <QProcess>
KGpgExport::KGpgExport(QObject *parent, const QStringList &ids, QProcess *outp, const QStringList &options, const bool secret)
: KGpgTransaction(parent),
m_keyids(ids),
m_outp(outp),
m_outputmode(ModeProcess)
{
procSetup(options, secret);
}
KGpgExport::KGpgExport(QObject *parent, const QStringList &ids, const QString &file, const QStringList &options, const bool secret)
: KGpgTransaction(parent),
m_keyids(ids),
m_outp(NULL),
m_outf(file),
m_outputmode(ModeFile)
{
procSetup(options, secret);
}
KGpgExport::KGpgExport(QObject *parent, const QStringList &ids, const QStringList &options, const bool secret)
: KGpgTransaction(parent),
m_keyids(ids),
m_outp(NULL),
m_outputmode(ModeStdout)
{
procSetup(options, secret);
}
KGpgExport::KGpgExport(QObject *parent, const QStringList &ids, KGpgTransaction *outt, const QStringList &options, const bool secret)
: KGpgTransaction(parent),
m_keyids(ids),
m_outp(NULL),
m_outputmode(ModeTransaction)
{
procSetup(options, secret);
outt->setInputTransaction(this);
}
KGpgExport::~KGpgExport()
{
}
void
KGpgExport::setKeyId(const QString &id)
{
m_keyids.clear();
m_keyids.append(id);
}
void
KGpgExport::setKeyIds(const QStringList &ids)
{
m_keyids = ids;
}
const QStringList &
KGpgExport::getKeyIds() const
{
return m_keyids;
}
void
KGpgExport::setOutputProcess(QProcess *outp)
{
m_outf.clear();
m_outp = outp;
m_outputmode = ModeProcess;
}
void
KGpgExport::setOutputFile(const QString &filename)
{
m_outp = NULL;
m_outf = filename;
if (filename.isEmpty())
m_outputmode = ModeStdout;
else
m_outputmode = ModeFile;
}
void
KGpgExport::setOutputTransaction(KGpgTransaction *outt)
{
m_outp = NULL;
m_outf.clear();
m_outputmode = ModeTransaction;
outt->setInputTransaction(this);
}
const QString &
KGpgExport::getOutputFile() const
{
return m_outf;
}
const QByteArray &
KGpgExport::getOutputData() const
{
return m_data;
}
bool
KGpgExport::preStart()
{
setSuccess(TS_OK);
switch (m_outputmode) {
case ModeFile:
{
Q_ASSERT(!m_outf.isEmpty());
Q_ASSERT(m_outp == NULL);
addArgument(QLatin1String( "--output" ));
addArgument(m_outf);
QFile ofile(m_outf);
if (ofile.exists())
ofile.remove();
break;
}
case ModeProcess:
Q_ASSERT(m_outf.isEmpty());
Q_ASSERT(m_outp != NULL);
getProcess()->setStandardOutputProcess(m_outp);
break;
case ModeStdout:
Q_ASSERT(m_outf.isEmpty());
Q_ASSERT(m_outp == NULL);
break;
case ModeTransaction:
Q_ASSERT(m_outf.isEmpty());
Q_ASSERT(m_outp == NULL);
break;
default:
Q_ASSERT(0);
}
addArguments(m_keyids);
m_data.clear();
return true;
}
bool
KGpgExport::nextLine(const QString &line)
{
// key exporting does not send any messages
m_data.append(line.toAscii() + '\n');
if (m_outputmode != 2)
setSuccess(TS_MSG_SEQUENCE);
return false;
}
void
KGpgExport::procSetup(const QStringList &options, const bool secret)
{
getProcess()->resetProcess();
if (secret)
addArgument(QLatin1String( "--export-secret-key" ));
else
addArgument(QLatin1String( "--export" ));
if ((m_outputmode == 2) && !options.contains(QLatin1String( "--armor" )))
addArgument(QLatin1String( "--armor" ));
addArguments(options);
}
#include "moc_kgpgexport.cpp"