OSDN Git Service

Ver0.26
[gefu/Gefu.git] / filereadworker.cpp
1 #include "filereadworker.h"
2
3 #include <QDebug>
4 #include <QThread>
5
6 const int BUFFER_SIZE = 4096;
7
8 ///////////////////////////////////////////////////////////////////////////////
9 /// \brief FileReadWorker::FileReadWorker
10 ///
11 /// コンストラクタ
12 ///
13 FileReadWorker::FileReadWorker() :
14     AbstractWorker(),
15     m_file()
16 {
17 }
18
19 ///////////////////////////////////////////////////////////////////////////////
20 /// \brief FileReadWorker::open
21 /// \param path ファイルパス
22 /// \return ファイルオープンに成功した場合はtrueを返します。
23 ///
24 bool FileReadWorker::open(const QString &path)
25 {
26     m_file.setFileName(path);
27     return m_file.open(QIODevice::ReadOnly);
28 }
29
30 ///////////////////////////////////////////////////////////////////////////////
31 /// \brief FileReadWorker::run
32 ///
33 /// ファイル読込を実行します。
34 ///
35 void FileReadWorker::run()
36 {
37     if (!m_file.isOpen()) {
38         emit finished();
39         return;
40     }
41
42     emit size(m_file.size());
43
44     QByteArray data;
45     while (!m_file.atEnd()) {
46         this->thread()->msleep(1);
47         if (isAborted()) {
48             emit finished(true);
49             m_file.close();
50             return;
51         }
52
53         data.append(m_file.read(BUFFER_SIZE));
54         emit progress(data.size());
55     }
56
57     emit resultReady(data);
58     emit finished();
59 }