/*************************************************************************** * 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(parent), myParent(parent), myStatus(false), myAutomatic(false), myUnicodeEnabled(false), myProcess(new TQProcess(this)) { connect (myProcess, TQ_SIGNAL( readyReadStdout() ), (ProcessController *) this, TQ_SLOT( readStdout()) ); connect (myProcess, TQ_SIGNAL(processExited() ), (ProcessController *) this, TQ_SLOT( processExited()) ); // connect (myProcess, TQ_SIGNAL( destroyed() ), myProcess, TQ_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; if (myUnicodeEnabled) { tempOutput = TQString::fromUtf8(myProcess->readStdout()); } else { tempOutput = TQString::fromLocal8Bit(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, TQ_SLOT( setEmptyText(3) )); } } void ProcessController::processExited() { myStatus = false; myParent->setText( 1, "" ); myParent->setText( 2, "" ); emit stopRipSignal(this); } void ProcessController::startRip(TQString destination, TQString time, bool isUnicode) { myUnicodeEnabled = isUnicode; myStatus = true; myParent->setText( 1, "Ripping" ); myProcess->clearArguments(); myProcess->addArgument( "streamripper" ); myProcess->addArgument( myUrl ); if( isUnicode ) { myProcess->addArgument( "--codeset-filesys=UTF-8 " ); myProcess->addArgument( "--codeset-metadata=UTF-8 " ); } 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, TQ_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; } #include "processcontroller.moc"