File indexing completed on 2024-05-05 17:57:24

0001 /*
0002     SPDX-FileCopyrightText: 2003 Csaba Karai <krusader@users.sourceforge.net>
0003     SPDX-FileCopyrightText: 2004-2022 Krusader Krew <https://krusader.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #ifndef SPLITTER_H
0009 #define SPLITTER_H
0010 
0011 // QtCore
0012 #include <QString>
0013 #include <QUrl>
0014 // QtWidgets
0015 #include <QProgressDialog>
0016 
0017 #include <KIO/Job>
0018 
0019 #include "crc32.h"
0020 
0021 class Splitter : public QProgressDialog
0022 {
0023     Q_OBJECT
0024 
0025 public:
0026     Splitter(QWidget *parent, QUrl fileNameIn, QUrl destinationDirIn, bool overWriteIn);
0027     ~Splitter() override;
0028 
0029     void split(KIO::filesize_t splitSizeIn);
0030 
0031 private slots:
0032     void splitDataReceived(KIO::Job *, const QByteArray &);
0033     void splitDataSend(KIO::Job *, QByteArray &);
0034     void splitSendFinished(KJob *);
0035     void splitReceiveFinished(KJob *);
0036     void splitReceivePercent(KJob *, unsigned long);
0037     void splitFileSend(KIO::Job *, QByteArray &);
0038     void splitFileFinished(KJob *);
0039     void statOutputFileResult(KJob *job);
0040 
0041 private:
0042     void splitAbortJobs();
0043     void nextOutputFile();
0044     void openOutputFile();
0045 
0046     // parameters
0047     QUrl fileName;
0048     QUrl destinationDir;
0049     KIO::filesize_t splitSize;
0050     int permissions;
0051     bool overwrite;
0052 
0053     // current split file stuff
0054     int fileNumber;
0055     QUrl writeURL;
0056     // how much can still be written to the current output file
0057     KIO::filesize_t outputFileRemaining;
0058 
0059     QByteArray transferArray;
0060     KIO::filesize_t receivedSize;
0061     QString splitInfoFileContent;
0062     CRC32 *crcContext;
0063     KIO::Job *statJob;
0064     KIO::TransferJob *splitReadJob;
0065     KIO::TransferJob *splitWriteJob;
0066 };
0067 
0068 #endif /* __SPLITTER_H__ */