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