1 /*
2 SPDX-FileCopyrightText: 2020-2021 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "backupresourcefilejobbase.h"
8 #include "pimdataexportcore_debug.h"
9 #include "storeresourcejob.h"
10
11 #include <KLocalizedString>
12
13 #include <QFileInfo>
14
BackupResourceFileJobBase(QObject * parent)15 BackupResourceFileJobBase::BackupResourceFileJobBase(QObject *parent)
16 : QObject(parent)
17 {
18 }
19
~BackupResourceFileJobBase()20 BackupResourceFileJobBase::~BackupResourceFileJobBase()
21 {
22 }
23
storeResource(const QString & archivePath)24 void BackupResourceFileJobBase::storeResource(const QString &archivePath)
25 {
26 auto job = new StoreResourceJob(this);
27 connect(job, &StoreResourceJob::error, this, &BackupResourceFileJobBase::error);
28 connect(job, &StoreResourceJob::info, this, &BackupResourceFileJobBase::info);
29 job->setArchivePath(archivePath);
30 job->setZip(mZip);
31 job->setIdentifier(mIdentifier);
32 job->start();
33 }
34
start()35 void BackupResourceFileJobBase::start()
36 {
37 if (!canStart()) {
38 qCWarning(PIMDATAEXPORTERCORE_LOG) << "Impossible to start backupResourceFileJob";
39 deleteLater();
40 return;
41 }
42
43 const QString archivePath = mDefaultPath + mIdentifier + QLatin1Char('/');
44
45 const QString url = resourcePath(mIdentifier);
46 if (!url.isEmpty()) {
47 QFileInfo fi(url);
48 if (!fi.isFile()) {
49 Q_EMIT info(i18n("\"%1\" is not a file.", url));
50 } else {
51 const QString filename = fi.fileName();
52 const bool fileAdded = mZip->addLocalFile(url, archivePath + filename);
53 if (fileAdded) {
54 storeResource(archivePath);
55 Q_EMIT info(i18n("\"%1\" was backed up.", filename));
56 } else {
57 Q_EMIT error(i18n("\"%1\" file cannot be added to backup file.", filename));
58 }
59 }
60 } else {
61 storeResource(archivePath);
62 Q_EMIT info(i18n("\"%1\" was backed up.", mIdentifier));
63 }
64 deleteLater();
65 }
66
canStart() const67 bool BackupResourceFileJobBase::canStart() const
68 {
69 return mZip && !mDefaultPath.isEmpty() && !mIdentifier.isEmpty();
70 }
71
identifier() const72 QString BackupResourceFileJobBase::identifier() const
73 {
74 return mIdentifier;
75 }
76
setIdentifier(const QString & identifier)77 void BackupResourceFileJobBase::setIdentifier(const QString &identifier)
78 {
79 mIdentifier = identifier;
80 }
81
zip() const82 KZip *BackupResourceFileJobBase::zip() const
83 {
84 return mZip;
85 }
86
setZip(KZip * zip)87 void BackupResourceFileJobBase::setZip(KZip *zip)
88 {
89 mZip = zip;
90 }
91
defaultPath() const92 QString BackupResourceFileJobBase::defaultPath() const
93 {
94 return mDefaultPath;
95 }
96
setDefaultPath(const QString & defaultPath)97 void BackupResourceFileJobBase::setDefaultPath(const QString &defaultPath)
98 {
99 mDefaultPath = defaultPath;
100 }
101