author | mickeyl <mickeyl> | 2005-08-22 09:36:38 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2005-08-22 09:36:38 (UTC) |
commit | 7202ac536ac98e7e433984d98cb9236330b25cc8 (patch) (side-by-side diff) | |
tree | c8b5d4e57dd4b9b302999d1f88a89c28e4ee0e5e /core/obex/obex.cc | |
parent | 140e4dc44a29678de1ae8b2cef5b1d081993223e (diff) | |
download | opie-7202ac536ac98e7e433984d98cb9236330b25cc8.zip opie-7202ac536ac98e7e433984d98cb9236330b25cc8.tar.gz opie-7202ac536ac98e7e433984d98cb9236330b25cc8.tar.bz2 |
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!
-rw-r--r-- | core/obex/obex.cc | 187 |
1 files changed, 0 insertions, 187 deletions
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 <opie2/oprocess.h> -#include <opie2/odebug.h> - -/* QT */ -#include <qfileinfo.h> - - - -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; - } - } - -} |