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 }