#include "StdOutRedirector.h"
#include <QTimer>
#include <QDebug>
StdOutRedirector::StdOutRedirector()
	: QObject()
{
#ifdef __linux__
	if (pipe(fdguistd) == -1)
		printf("failed!");
#else
	// Redirect
	if (_pipe(fdguistd, 4096, _O_BINARY) == -1)
		printf("failed!");
#endif
	//int tr = fcntl(fdguistd, O_NONBLOCK);
	// Duplicate stdout file descriptor (next line will close original)
	fdStdOut = dup(fileno(stdout));
	// Duplicate write end of pipe to stdout file descriptor
	if (dup2(fdguistd[1], fileno(stdout)) != 0)
		printf("failed!");
	// Close original 
	close(1);
	// Duplicate write end of original
	dup2(fdguistd[1], 1);

	buffer = new char[bufferSize];
}

StdOutRedirector::~StdOutRedirector()
{
	delete[] buffer;
}

void StdOutRedirector::readOutsToTF()
{

	size_t len;
	char* copy;

	int n_out;
	QString str;
	//char buffer[512];
	//qDebug() << "begin read...";
	//qDebug() << "from qdebug...";
	//printf("from printf...");
	//std::cout << "from std::cout..." << std::endl;
	fflush(stdout);
	//Perhaps there is a non-blocking version of _read() that you can call ?
	memset(buffer, 0, bufferSize);
	n_out = read(fdguistd[0], buffer, bufferSize);
	if (n_out <= 0) {
		return;
	}
	if (n_out >= 1) {
		str.append(QString(buffer));
		int con = str.lastIndexOf('\n');
		int remv = str.at(con - 1) == '\n' ? 1 : 0;
		if (con > 0) {
			str = str.remove(con - remv, str.length());
			output->append(str);
		}
	}
	return;
}



