1 /*
2 SPDX-FileCopyrightText: 2015-2021 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "pimdatabackupthread.h"
8 #include "pimdataexportcore_debug.h"
9
10 #include <KLocalizedString>
11 #include <KZip>
12 #include <QTemporaryFile>
13
PimDataBackupThread(KZip * zip,const QString & url,const QString & archivePath,const QString & archivename,QObject * parent)14 PimDataBackupThread::PimDataBackupThread(KZip *zip, const QString &url, const QString &archivePath, const QString &archivename, QObject *parent)
15 : QThread(parent)
16 , mUrl(url)
17 , mArchivePath(archivePath)
18 , mArchiveName(archivename)
19 , mZip(zip)
20 {
21 qCDebug(PIMDATAEXPORTERCORE_LOG) << " PimDataBackupThread::PimDataBackupThread" << this;
22 }
23
~PimDataBackupThread()24 PimDataBackupThread::~PimDataBackupThread()
25 {
26 qCDebug(PIMDATAEXPORTERCORE_LOG) << " PimDataBackupThread::~PimDataBackupThread()" << this;
27 }
28
run()29 void PimDataBackupThread::run()
30 {
31 QTemporaryFile tmp;
32 tmp.open();
33 KZip *archiveFile = new KZip(tmp.fileName());
34 archiveFile->setCompression(KZip::NoCompression);
35 bool result = archiveFile->open(QIODevice::WriteOnly);
36 if (!result) {
37 Q_EMIT error(i18n("Impossible to open archive file."));
38 Q_EMIT terminated(false);
39 delete archiveFile;
40 return;
41 }
42 const bool vcarddirAdded = archiveFile->addLocalDirectory(mUrl, QString());
43 if (!vcarddirAdded) {
44 Q_EMIT error(i18n("Impossible to backup \"%1\".", mUrl));
45 Q_EMIT terminated(false);
46 delete archiveFile;
47 return;
48 }
49 archiveFile->close();
50 tmp.close();
51
52 const bool fileAdded = mZip->addLocalFile(tmp.fileName(), mArchivePath + mArchiveName);
53 if (fileAdded) {
54 Q_EMIT info(i18n("\"%1\" was backed up.", mUrl));
55 } else {
56 Q_EMIT error(i18n("\"%1\" file cannot be added to backup file.", mUrl));
57 }
58 delete archiveFile;
59 Q_EMIT terminated(fileAdded);
60 }
61