/***************************************************************************
 *   Copyright (C) 2005 by Will Entriken                                   *
 *   william.entriken@villanova.edu                                        *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/


#include "processcontroller.h"
#include "processlistviewitem.h"

ProcessController::ProcessController(ProcessListViewItem * parent)
  : TQObject((TQObject *)parent), myParent(parent), myStatus(false), myAutomatic(false), myProcess(new TQProcess(this))
{
	connect (myProcess, TQT_SIGNAL( readyReadStdout() ), (ProcessController *) this, TQT_SLOT( readStdout()) );
	// connect (myProcess, TQT_SIGNAL( destroyed() ), myProcess, TQT_SLOT( kill()) );
	// this should work, according to http://doc.trolltech.com/3.2/qobject.html#~TQObject but it doesn't
}

ProcessController::~ProcessController()
{
	myProcess->kill();
}

void ProcessController::readStdout()
{
	TQString tempOutput = myProcess->readStdout();
	
	if( tempOutput.contains( "ripping..." ))
	{
		TQString songname = tempOutput.mid( tempOutput.find( "]" )+1, tempOutput.findRev( "[" ) - tempOutput.find( "]" ) - 1);
		myParent->setText( 1, songname.stripWhiteSpace() );
		
		TQString bytesR = tempOutput.mid( tempOutput.findRev( "[" )+1, tempOutput.findRev( "]" ) - tempOutput.findRev( "[" ) - 1);
		myParent->setText( 2, bytesR.stripWhiteSpace() );
	}
		
	if( tempOutput.contains( "Connecting..." ))
	{
		myParent->setText( 1, "Connecting..." );
		myParent->setText( 2, "" );
	}
		
	if( tempOutput.contains( "buffering" ))
	{
		myParent->setText( 1, "Buffering..." );
		myParent->setText( 2, "" );
	}
		
	if( tempOutput.contains( "Time to stop is here" ))
	{
		myParent->setText( 1, "Complete" );
		myParent->setText( 2, "" );
		//TQTimer::singleShot( 1500, myParent, TQT_SLOT( setEmptyText(3) ));
	}
}


void ProcessController::startRip(TQString destination, TQString time)
{
	myStatus = true;
	myParent->setText( 1, "Ripping" );
	
	myProcess->clearArguments();
	myProcess->addArgument( "streamripper" );
	myProcess->addArgument( myUrl );
	myProcess->addArgument( "-d " );
	myProcess->addArgument( destination );
	if( time.toInt() )
	{
		myProcess->addArgument( "-l " );
		myProcess->addArgument( time );
	}

	myProcess->setCommunication( TQProcess::Stdout | TQProcess::Stderr | TQProcess::DupStderr );
	myProcess->start();
}


void ProcessController::stopRip()
{
	myStatus = false;
	myParent->setText( 1, "" );
	myParent->setText( 2, "" );

	myProcess->tryTerminate();
	TQTimer::singleShot( 2000, myProcess, TQT_SLOT( kill() ) );
}


bool ProcessController::getStatus()
{
	return myStatus;
}

TQString ProcessController::getUrl()
{
	return myUrl;
}

void ProcessController::setAutomatic(bool a)
{
	myAutomatic = a;
}

bool ProcessController::getAutomatic()
{
	return myAutomatic;
}
#if KDE_IS_VERSION(3,3,90)
void ProcessController::setService(DNSSD::RemoteService::Ptr service)
{
	myService = service;
}

DNSSD::RemoteService::Ptr ProcessController::getService()
{
	return myService;
}
#endif

TQString ProcessController::getDescription()
{
	return myDescription;
}

void ProcessController::setUrl(TQString Url)
{
	myUrl = Url;
}

void ProcessController::setDescription(TQString Description)
{
	myDescription = Description;
}
