File indexing completed on 2025-02-09 07:11:24

0001 /*
0002     This file is part of the Kasten Framework, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2008-2009, 2011, 2014 Friedrich W. H. Kossebau <kossebau@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #include "abstractfilesystemexportjob_p.hpp"
0010 
0011 // KF
0012 #include <KIO/FileCopyJob>
0013 #include <KJobWidgets>
0014 // Qt
0015 #include <QTemporaryFile>
0016 
0017 namespace Kasten {
0018 
0019 void AbstractFileSystemExportJobPrivate::exportToFile()
0020 {
0021     Q_Q(AbstractFileSystemExportJob);
0022 
0023     bool isWorkFileOk;
0024     if (mUrl.isLocalFile()) {
0025         mWorkFilePath = mUrl.toLocalFile();
0026         mFile = new QFile(mWorkFilePath);
0027         isWorkFileOk = mFile->open(QIODevice::WriteOnly);
0028     } else {
0029 
0030         auto* temporaryFile = new QTemporaryFile();
0031         isWorkFileOk = temporaryFile->open();
0032 
0033         mWorkFilePath = temporaryFile->fileName();
0034         mFile = temporaryFile;
0035     }
0036 
0037     if (isWorkFileOk) {
0038         q->startExportToFile();
0039     } else {
0040         q->setError(KJob::KilledJobError);
0041         q->setErrorText(mFile->errorString());
0042 
0043         q->completeExport(false);
0044     }
0045 }
0046 
0047 void AbstractFileSystemExportJobPrivate::completeExport(bool success)
0048 {
0049     Q_Q(AbstractFileSystemExportJob);
0050 
0051     if (success) {
0052         if (!mUrl.isLocalFile()) {
0053             KIO::FileCopyJob* fileCopyJob =
0054                 KIO::file_copy(QUrl::fromLocalFile(mWorkFilePath), mUrl, -1, KIO::Overwrite);
0055             KJobWidgets::setWindow(fileCopyJob, /*mWidget*/ nullptr);
0056 
0057             success = fileCopyJob->exec();
0058             if (!success) {
0059                 q->setError(KJob::KilledJobError);
0060                 q->setErrorText(fileCopyJob->errorString());
0061             }
0062         }
0063     } else {
0064         q->setError(KJob::KilledJobError);
0065         q->setErrorText(mFile->errorString());
0066     }
0067 
0068     delete mFile;
0069 
0070     q->emitResult();
0071 }
0072 
0073 }