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