1 #ifndef SPLITJOINCORE_H
2 #define SPLITJOINCORE_H
3 
4 #include <QThread>
5 #include <QFile>
6 #include <QList>
7 #include <QMutex>
8 #include <QModelIndex>
9 
10 class Error {
11 public:
Error(const QString & message,int number)12     explicit Error(const QString& message, int number) : message(message), number(number) {}
13     QString message;
14     int number;
15 };
16 
17 class PartProcessor : public QThread
18 {
19     Q_OBJECT
20 public:
21     static const char* kPartSuffix;
22     enum kErrorTypes {
23         kOpenFileError = 13
24     };
25     enum kProcessType {
26         kSplit = 0,
27         kMerge = 1
28     };
29 
30     explicit PartProcessor(const QString& sourceFilename_, const QString& destination, qint32 startOffset, qint32 maxSizePerPart_, qint32 originalFileSize_, int partIndex, const QModelIndex& index, kProcessType processType, QObject *parent = 0);
31     explicit PartProcessor(const QList<QString>& parts, const QString& destination, const QModelIndex& index, kProcessType processType, QObject *parent = 0);
32     ~PartProcessor(void);
33     virtual void run(void);
34     bool paused(void) const;
35     void pause(void);
36     void resume(void);
37     void cancel(void);
38     QModelIndex& modelIndex(void) const;
39     int partIndex(void) const;
40     qint32 progress(void) const;
41     qint32 originalFileSize(void) const;
42     QList<Error*> errors(void) const;
43 private:
44     static const int kBufferSize           = 4096;
45     static const int kUpdateFrequencyBytes = 2000;
46     bool cancelled_;
47     bool paused_;
48     kProcessType processType;
49     QMutex mutex_;
50     QString sourceFilename_;
51     QString destinationFilename_;
52     qint32 seekLocation_;
53     qint32 maxSizePerPart_;
54     qint32 originalFileSize_;
55     QFile *sourceFile_;
56     QFile destinationFile_;
57     QList<Error*> errors_;
58     QList<QString> parts_;
59     QModelIndex& modelIndex_;
60     int partIndex_;
61     qint32 progress_;
62     bool filesOpened;
63 
64     void closeFiles(void);
65     void openFiles(void);
66     int split(void);
67     int merge(void);
68 signals:
69     void started(PartProcessor* core);
70     void updated(PartProcessor* core);
71     void finished(PartProcessor* core);
72 public slots:
73 
74 };
75 
76 #endif // SPLITJOINCORE_H
77