~ubuntu-branches/ubuntu/precise/kgpg/precise-updates

« back to all changes in this revision

Viewing changes to kgpgexternalactions.cpp

  • Committer: Package Import Robot
  • Author(s): Philip Muškovac
  • Date: 2011-12-24 23:16:12 UTC
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: package-import@ubuntu.com-20111224231612-6w15s57d2106roq2
Tags: upstream-4.7.95
Import upstream version 4.7.95

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
 
21
21
#include <KActionCollection>
22
22
#include <KMessageBox>
23
 
#include <KPassivePopup>
24
23
#include <KTar>
25
24
#include <KTemporaryFile>
26
25
#include <KToolInvocation>
27
26
#include <KUniqueApplication>
28
27
#include <KZip>
29
28
#include <kio/renamedialog.h>
 
29
#include <kio/global.h>
 
30
#include <kjobtrackerinterface.h>
30
31
 
31
32
#include "images.h"
32
33
#include "keyservers.h"
41
42
#include "selectsecretkey.h"
42
43
#include "kgpginterface.h"
43
44
#include "transactions/kgpgdecrypt.h"
 
45
#include "foldercompressjob.h"
 
46
#include "kgpgencrypt.h"
44
47
 
45
48
KGpgExternalActions::KGpgExternalActions(KeysManager *parent, KGpgItemModel *model)
46
49
        : QObject(parent),
79
82
        if (KMessageBox::Cancel == KMessageBox::warningContinueCancel(m_keysmanager,
80
83
                                i18n("<qt>KGpg will now create a temporary archive file:<br /><b>%1</b> to process the encryption. The file will be deleted after the encryption is finished.</qt>",
81
84
                                kgpgfoldertmp->fileName()), i18n("Temporary File Creation"), KStandardGuiItem::cont(),
82
 
                                KStandardGuiItem::cancel(), QLatin1String( "FolderTmpFile" )))
 
85
                                KStandardGuiItem::cancel(), QLatin1String( "FolderTmpFile" ))) {
 
86
                delete kgpgfoldertmp;
 
87
                kgpgfoldertmp = NULL;
83
88
                return;
 
89
        }
84
90
 
85
91
        dialog = new KgpgSelectPublicKeyDlg(m_keysmanager, m_model, goDefaultKey(), false, droppedUrls);
86
92
 
106
112
{
107
113
        dialog->deleteLater();
108
114
        dialog = NULL;
 
115
        delete kgpgfoldertmp;
 
116
        kgpgfoldertmp = NULL;
109
117
}
110
118
 
111
119
void KGpgExternalActions::slotSetCompression(int cp)
115
123
 
116
124
void KGpgExternalActions::startFolderEncode()
117
125
{
118
 
        const QStringList selec(dialog->selectedKeys());
119
 
        QStringList encryptOptions(dialog->getCustomOptions().split(QLatin1Char( ' ' ),  QString::SkipEmptyParts));
120
 
        bool symetric = dialog->getSymmetric();
 
126
        QStringList selec = dialog->selectedKeys();
 
127
        KGpgEncrypt::EncryptOptions encOptions = KGpgEncrypt::DefaultEncryption;
 
128
        const QStringList encryptOptions = dialog->getCustomOptions().split(QLatin1Char(' '),  QString::SkipEmptyParts);
 
129
        if (dialog->getSymmetric()) {
 
130
                selec.clear();
 
131
        } else {
 
132
                Q_ASSERT(!selec.isEmpty());
 
133
        }
121
134
        QString extension;
122
135
 
123
136
        switch (compressionScheme) {
149
162
                extension += QLatin1String( ".gpg" );
150
163
 
151
164
        if (dialog->getArmor())
152
 
                encryptOptions << QLatin1String( "--armor" );
 
165
                encOptions |= KGpgEncrypt::AsciiArmored;
153
166
        if (dialog->getHideId())
154
 
                encryptOptions << QLatin1String( "--throw-keyids" );
155
 
 
156
 
        QString fname(droppedUrls.first().path());
157
 
        if (fname.endsWith(QLatin1Char( '/' )))
158
 
                fname.remove(fname.length() - 1, 1);
159
 
 
160
 
        KUrl encryptedFile(KUrl::fromPath(fname + extension));
 
167
                encOptions |= KGpgEncrypt::HideKeyId;
 
168
        if (dialog->getUntrusted())
 
169
                encOptions |= KGpgEncrypt::AllowUntrustedEncryption;
 
170
 
 
171
        KUrl encryptedFile(KUrl::fromPath(droppedUrls.first().path(KUrl::RemoveTrailingSlash) + extension));
161
172
        QFile encryptedFolder(encryptedFile.path());
 
173
        dialog->hide();
162
174
        if (encryptedFolder.exists()) {
163
 
                dialog->hide();
164
175
                QPointer<KIO::RenameDialog> over = new KIO::RenameDialog(m_keysmanager, i18n("File Already Exists"), KUrl(), encryptedFile, KIO::M_OVERWRITE);
165
176
                if (over->exec() == QDialog::Rejected) {
166
177
                        dialog->deleteLater();
170
181
                }
171
182
                encryptedFile = over->newDestUrl();
172
183
                delete over;
173
 
                dialog->show(); // strange, but if dialog is hidden, the passive popup is not displayed...
174
184
        }
175
185
 
176
 
        pop = new KPassivePopup();
177
 
        pop->setView(i18n("Processing folder compression and encryption"), i18n("Please wait..."), Images::kgpg());
178
 
        pop->setAutoDelete(false);
179
 
        pop->show();
180
 
        kapp->processEvents();
 
186
        FolderCompressJob *trayinfo = new FolderCompressJob(m_keysmanager, droppedUrls.first(), encryptedFile, kgpgfoldertmp, selec, encryptOptions, encOptions);
 
187
        connect(trayinfo, SIGNAL(result(KJob*)), SLOT(slotFolderFinished(KJob *)));
 
188
        KIO::getJobTracker()->registerJob(trayinfo);
 
189
        trayinfo->start();
 
190
 
181
191
        dialog->accept();
182
192
        dialog->deleteLater();
183
193
        dialog = NULL;
184
 
 
185
 
        KArchive *arch = NULL;
186
 
        switch (compressionScheme) {
187
 
        case 0:
188
 
                arch = new KZip(kgpgfoldertmp->fileName());
189
 
                break;
190
 
        case 1:
191
 
                arch = new KTar(kgpgfoldertmp->fileName(), QLatin1String( "application/x-gzip" ));
192
 
                break;
193
 
        case 2:
194
 
                arch = new KTar(kgpgfoldertmp->fileName(), QLatin1String( "application/x-bzip" ));
195
 
                break;
196
 
        case 3:
197
 
                arch = new KTar(kgpgfoldertmp->fileName(), QLatin1String( "application/x-tar" ));
198
 
                break;
199
 
        case 4:
200
 
                arch = new KTar(kgpgfoldertmp->fileName(), QLatin1String( "application/x-xz" ));
201
 
                break;
202
 
        default:
203
 
                Q_ASSERT(0);
204
 
        }
205
 
 
206
 
        if (!arch->open(QIODevice::WriteOnly))
207
 
        {
208
 
                KMessageBox::sorry(0, i18n("Unable to create temporary file"));
209
 
                delete arch;
210
 
                return;
211
 
        }
212
 
 
213
 
        arch->addLocalDirectory(droppedUrls.first().path(), droppedUrls.first().fileName());
214
 
        arch->close();
215
 
        delete arch;
216
 
 
217
 
        KGpgTextInterface *folderprocess = new KGpgTextInterface(this);
218
 
        connect(folderprocess, SIGNAL(fileEncryptionFinished(KUrl)), SLOT(slotFolderFinished(KUrl)));
219
 
        connect(folderprocess, SIGNAL(errorMessage(QString)), SLOT(slotFolderFinishedError(QString)));
220
 
        folderprocess->encryptFile(selec, KUrl(kgpgfoldertmp->fileName()), encryptedFile, encryptOptions, symetric);
221
 
}
222
 
 
223
 
void KGpgExternalActions::slotFolderFinished(const KUrl &)
224
 
{
225
 
        delete pop;
226
 
        delete kgpgfoldertmp;
227
 
        sender()->deleteLater();
228
 
}
229
 
 
230
 
void KGpgExternalActions::slotFolderFinishedError(const QString &errmsge)
231
 
{
232
 
        delete pop;
233
 
        delete kgpgfoldertmp;
234
 
        sender()->deleteLater();
235
 
        KMessageBox::sorry(0, errmsge);
 
194
        kgpgfoldertmp = NULL;
 
195
}
 
196
 
 
197
void KGpgExternalActions::slotFolderFinished(KJob *job)
 
198
{
 
199
        FolderCompressJob *trayinfo = qobject_cast<FolderCompressJob *>(job);
 
200
        Q_ASSERT(trayinfo != NULL);
 
201
 
 
202
        delete kgpgfoldertmp;
 
203
        kgpgfoldertmp = NULL;
 
204
        if (trayinfo->error())
 
205
                KMessageBox::sorry(m_keysmanager, trayinfo->errorString());
236
206
}
237
207
 
238
208
void KGpgExternalActions::busyMessage(const QString &mssge)