Skip to content

Commit

Permalink
Change the way stdout & stderr files are read.
Browse files Browse the repository at this point in the history
  • Loading branch information
adeas31 committed Dec 27, 2016
1 parent 15a75e0 commit bce55d4
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 34 deletions.
28 changes: 14 additions & 14 deletions OMEdit/OMEditGUI/MainWindow.cpp
Expand Up @@ -138,15 +138,15 @@ void MainWindow::setUpMainWindow()
setbuf(stdout, NULL); // used non-buffered stdout
mpOutputFileDataNotifier = 0;
mpOutputFileDataNotifier = new FileDataNotifier(outputFileName);
connect(mpOutputFileDataNotifier, SIGNAL(bytesAvailable(qint64)), SLOT(readOutputFile(qint64)));
connect(mpOutputFileDataNotifier, SIGNAL(sendData(QString)), SLOT(writeOutputFileData(QString)));
mpOutputFileDataNotifier->start();
// Reopen the standard error stream.
QString errorFileName = Utilities::tempDirectory() + "/omediterror.txt";
freopen(errorFileName.toStdString().c_str(), "w", stderr);
setbuf(stderr, NULL); // used non-buffered stderr
mpErrorFileDataNotifier = 0;
mpErrorFileDataNotifier = new FileDataNotifier(errorFileName);
connect(mpErrorFileDataNotifier, SIGNAL(bytesAvailable(qint64)), SLOT(readErrorFile(qint64)));
connect(mpErrorFileDataNotifier, SIGNAL(sendData(QString)), SLOT(writeErrorFileData(QString)));
mpErrorFileDataNotifier->start();
// Create an object of QProgressBar
mpProgressBar = new QProgressBar;
Expand Down Expand Up @@ -1378,25 +1378,25 @@ void MainWindow::loadSystemLibrary()
}

/*!
* \brief MainWindow::readOutputFile
* Reads the available output data from file and adds it to MessagesWidget.
* \param bytes
* \brief MainWindow::writeOutputFileData
* Writes the output data from stdout file and adds it to MessagesWidget.
* \param data
*/
void MainWindow::readOutputFile(qint64 bytes)
void MainWindow::writeOutputFileData(QString data)
{
QString data = mpOutputFileDataNotifier->read(bytes);
MessagesWidget::instance()->addGUIMessage(MessageItem(MessageItem::Modelica, "", false, 0, 0, 0, 0, data, Helper::scriptingKind, Helper::notificationLevel));
MessagesWidget::instance()->addGUIMessage(MessageItem(MessageItem::Modelica, "", false, 0, 0, 0, 0, data,
Helper::scriptingKind, Helper::notificationLevel));
}

/*!
* \brief MainWindow::readErrorFile
* Reads the available error data from file and adds it to MessagesWidget.
* \param bytes
* \brief MainWindow::writeErrorFileData
* Writes the error data from stderr file and adds it to MessagesWidget.
* \param data
*/
void MainWindow::readErrorFile(qint64 bytes)
void MainWindow::writeErrorFileData(QString data)
{
QString data = mpErrorFileDataNotifier->read(bytes);
MessagesWidget::instance()->addGUIMessage(MessageItem(MessageItem::Modelica, "", false, 0, 0, 0, 0, data, Helper::scriptingKind, Helper::notificationLevel));
MessagesWidget::instance()->addGUIMessage(MessageItem(MessageItem::Modelica, "", false, 0, 0, 0, 0, data,
Helper::scriptingKind, Helper::errorLevel));
}

//! Opens the recent file.
Expand Down
4 changes: 2 additions & 2 deletions OMEdit/OMEditGUI/MainWindow.h
Expand Up @@ -368,8 +368,8 @@ public slots:
void loadExternalModels();
void openDirectory();
void loadSystemLibrary();
void readOutputFile(qint64 bytes);
void readErrorFile(qint64 bytes);
void writeOutputFileData(QString data);
void writeErrorFileData(QString data);
void openRecentFile();
void clearRecentFilesList();
void undo();
Expand Down
17 changes: 2 additions & 15 deletions OMEdit/OMEditGUI/Util/Utilities.cpp
Expand Up @@ -149,7 +149,6 @@ FileDataNotifier::FileDataNotifier(const QString fileName)
{
mFile.setFileName(fileName);
mStop = false;
mBytesAvailable = 0;
}

/*!
Expand All @@ -164,17 +163,6 @@ void FileDataNotifier::exit(int retcode)
QThread::exit(retcode);
}

/*!
* \brief FileDataNotifier::read
* Reads the bytes from the file.
* \param maxlen
* \return
*/
QByteArray FileDataNotifier::read(qint64 maxlen)
{
return mFile.read(maxlen);
}

/*!
* \brief FileDataNotifier::run
* Reimplentation of QThread::run().
Expand All @@ -190,9 +178,8 @@ void FileDataNotifier::run()
break;
}
// if file has bytes available to read.
if (mFile.bytesAvailable() > mBytesAvailable) {
mBytesAvailable = mFile.bytesAvailable();
emit bytesAvailable(mFile.bytesAvailable());
if (mFile.bytesAvailable() > 0) {
emit sendData(QString(mFile.readAll()));
}
Sleep::sleep(1);
}
Expand Down
4 changes: 1 addition & 3 deletions OMEdit/OMEditGUI/Util/Utilities.h
Expand Up @@ -120,17 +120,15 @@ class FileDataNotifier : public QThread
public:
FileDataNotifier(const QString fileName);
void exit(int retcode = 0);
QByteArray read(qint64 maxlen);
private:
QFile mFile;
bool mStop;
qint64 mBytesAvailable;
protected:
void run();
public slots:
void start(Priority = InheritPriority);
signals:
void bytesAvailable(qint64 bytes);
void sendData(QString data);
};

/*!
Expand Down

0 comments on commit bce55d4

Please sign in to comment.