File indexing completed on 2024-05-12 05:25:33

0001 /*
0002    SPDX-FileCopyrightText: 2020-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "backupresourcefilejobbase.h"
0008 #include "pimdataexportcore_debug.h"
0009 #include "storeresourcejob.h"
0010 
0011 #include <KLocalizedString>
0012 
0013 #include <QFileInfo>
0014 
0015 BackupResourceFileJobBase::BackupResourceFileJobBase(QObject *parent)
0016     : QObject(parent)
0017 {
0018 }
0019 
0020 BackupResourceFileJobBase::~BackupResourceFileJobBase() = default;
0021 
0022 void BackupResourceFileJobBase::storeResource(const QString &archivePath)
0023 {
0024     auto job = new StoreResourceJob(this);
0025     connect(job, &StoreResourceJob::error, this, &BackupResourceFileJobBase::error);
0026     connect(job, &StoreResourceJob::info, this, &BackupResourceFileJobBase::info);
0027     job->setArchivePath(archivePath);
0028     job->setZip(mZip);
0029     job->setIdentifier(mIdentifier);
0030     job->start();
0031 }
0032 
0033 void BackupResourceFileJobBase::start()
0034 {
0035     if (!canStart()) {
0036         qCWarning(PIMDATAEXPORTERCORE_LOG) << "Impossible to start backupResourceFileJob";
0037         deleteLater();
0038         return;
0039     }
0040 
0041     const QString archivePath = mDefaultPath + mIdentifier + QLatin1Char('/');
0042 
0043     const QString url = resourcePath(mIdentifier);
0044     if (!url.isEmpty()) {
0045         QFileInfo fi(url);
0046         if (!fi.isFile()) {
0047             Q_EMIT info(i18n("\"%1\" is not a file.", url));
0048         } else {
0049             const QString filename = fi.fileName();
0050             const bool fileAdded = mZip->addLocalFile(url, archivePath + filename);
0051             if (fileAdded) {
0052                 storeResource(archivePath);
0053                 Q_EMIT info(i18n("\"%1\" was backed up.", filename));
0054             } else {
0055                 Q_EMIT error(i18n("\"%1\" file cannot be added to backup file.", filename));
0056             }
0057         }
0058     } else {
0059         storeResource(archivePath);
0060         Q_EMIT info(i18n("\"%1\" was backed up.", mIdentifier));
0061     }
0062     deleteLater();
0063 }
0064 
0065 bool BackupResourceFileJobBase::canStart() const
0066 {
0067     return mZip && !mDefaultPath.isEmpty() && !mIdentifier.isEmpty();
0068 }
0069 
0070 QString BackupResourceFileJobBase::identifier() const
0071 {
0072     return mIdentifier;
0073 }
0074 
0075 void BackupResourceFileJobBase::setIdentifier(const QString &identifier)
0076 {
0077     mIdentifier = identifier;
0078 }
0079 
0080 KZip *BackupResourceFileJobBase::zip() const
0081 {
0082     return mZip;
0083 }
0084 
0085 void BackupResourceFileJobBase::setZip(KZip *zip)
0086 {
0087     mZip = zip;
0088 }
0089 
0090 QString BackupResourceFileJobBase::defaultPath() const
0091 {
0092     return mDefaultPath;
0093 }
0094 
0095 void BackupResourceFileJobBase::setDefaultPath(const QString &defaultPath)
0096 {
0097     mDefaultPath = defaultPath;
0098 }
0099 
0100 #include "moc_backupresourcefilejobbase.cpp"