From 7202ac536ac98e7e433984d98cb9236330b25cc8 Mon Sep 17 00:00:00 2001 From: mickeyl Date: Mon, 22 Aug 2005 09:36:38 +0000 Subject: Replace the existing, apparently non-working, OBEX Send form with a completely new implementation. The new implementation supports selective send over both IrDA and Bluetooth, to selected receivers (which are discovered as the form pops up). The form also indicates transfer status as the transfers progress. There is a new QT Designer UI form file, integrated into the build. There are also two new source files for the form to supply the abstract methods (typical of QT2). Patch courtesy Michael Haynie - thanks! --- (limited to 'core/obex/obex.cc') diff --git a/core/obex/obex.cc b/core/obex/obex.cc deleted file mode 100644 index 36634ec..0000000 --- a/core/obex/obex.cc +++ b/dev/null @@ -1,187 +0,0 @@ - -#include "obex.h" - -/* OPIE */ -#include -#include - -/* QT */ -#include - - - -using namespace OpieObex; - -using namespace Opie::Core; -/* TRANSLATOR OpieObex::Obex */ - -Obex::Obex( QObject *parent, const char* name ) - : QObject(parent, name ) -{ - m_rec = 0; - m_send=0; - m_count = 0; - m_receive = false; - connect( this, SIGNAL(error(int) ), // for recovering to receive - SLOT(slotError() ) ); - connect( this, SIGNAL(sent(bool) ), - SLOT(slotError() ) ); -}; -Obex::~Obex() { - delete m_rec; - delete m_send; -} -void Obex::receive() { - m_receive = true; - m_outp = QString::null; - m_rec = new OProcess(); - *m_rec << "irobex_palm3"; - // connect to the necessary slots - connect(m_rec, SIGNAL(processExited(Opie::Core::OProcess*) ), - this, SLOT(slotExited(Opie::Core::OProcess*) ) ); - - connect(m_rec, SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int ) ), - this, SLOT(slotStdOut(Opie::Core::OProcess*, char*, int) ) ); - - if(!m_rec->start(OProcess::NotifyOnExit, OProcess::AllOutput) ) { - emit done( false ); - delete m_rec; - m_rec = 0; - } -} - -void Obex::send( const QString& fileName) { // if currently receiving stop it send receive - m_count = 0; - m_file = fileName; - if (m_rec != 0 ) { - if (m_rec->isRunning() ) { - emit error(-1 ); - delete m_rec; - m_rec = 0; - - }else{ - emit error( -1 ); // we did not delete yet but it's not running slotExited is pending - return; - } - } - sendNow(); -} -void Obex::sendNow(){ - if ( m_count >= 25 ) { // could not send - emit error(-1 ); - emit sent(false); - return; - } - // OProcess inititialisation - m_send = new OProcess(); - m_send->setWorkingDirectory( QFileInfo(m_file).dirPath(true) ); - - *m_send << "irobex_palm3"; - *m_send << QFile::encodeName(QFileInfo(m_file).fileName()); - - // connect to slots Exited and and StdOut - connect(m_send, SIGNAL(processExited(Opie::Core::OProcess*) ), - this, SLOT(slotExited(Opie::Core::OProcess*)) ); - connect(m_send, SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int )), - this, SLOT(slotStdOut(Opie::Core::OProcess*, char*, int) ) ); - - // now start it - if (!m_send->start(/*OProcess::NotifyOnExit, OProcess::AllOutput*/ ) ) { - m_count = 25; - emit error(-1 ); - delete m_send; - m_send=0; - } - // end - m_count++; - emit currentTry( m_count ); -} - -void Obex::slotExited(OProcess* proc ){ - if (proc == m_rec ) // receive process - received(); - else if ( proc == m_send ) - sendEnd(); - -} -void Obex::slotStdOut(OProcess* proc, char* buf, int len){ - if ( proc == m_rec ) { // only receive - QByteArray ar( len ); - memcpy( ar.data(), buf, len ); - m_outp.append( ar ); - } -} - -void Obex::received() { - if (m_rec->normalExit() ) { - if ( m_rec->exitStatus() == 0 ) { // we got one - QString filename = parseOut(); - emit receivedFile( filename ); - } - }else{ - emit done(false); - }; - delete m_rec; - m_rec = 0; - receive(); -} - -void Obex::sendEnd() { - if (m_send->normalExit() ) { - if ( m_send->exitStatus() == 0 ) { - delete m_send; - m_send=0; - emit sent(true); - }else if (m_send->exitStatus() == 255 ) { // it failed maybe the other side wasn't ready - // let's try it again - delete m_send; - m_send = 0; - sendNow(); - } - }else { - emit error( -1 ); - delete m_send; - m_send = 0; - } -} -QString Obex::parseOut( ){ - QString path; - QStringList list = QStringList::split("\n", m_outp); - QStringList::Iterator it; - for (it = list.begin(); it != list.end(); ++it ) { - if ( (*it).startsWith("Wrote" ) ) { - int pos = (*it).findRev('(' ); - if ( pos > 0 ) { - - path = (*it).remove( pos, (*it).length() - pos ); - path = path.mid(6 ); - path = path.stripWhiteSpace(); - } - } - } - return path; -} -/** - * when sent is done slotError is called we will start receive again - */ -void Obex::slotError() { - if ( m_receive ) - receive(); -}; -void Obex::setReceiveEnabled( bool receive ) { - if ( !receive ) { // - m_receive = false; - shutDownReceive(); - } -} - -void Obex::shutDownReceive() { - if (m_rec != 0 ) { - if (m_rec->isRunning() ) { - emit error(-1 ); - delete m_rec; - m_rec = 0; - } - } - -} -- cgit v0.9.0.2