00001
00002 #include <qpe/qcopenvelope_qws.h>
00003 #include <qpe/qpeapplication.h>
00004
00005 #include "obexsend.h"
00006 #include "receiver.h"
00007 #include "obexhandler.h"
00008
00009 using namespace OpieObex;
00010
00011
00012
00013 ObexHandler::ObexHandler() {
00014 m_wasRec = false;
00015 m_sender = 0l;
00016 m_receiver = 0l;
00017 QCopChannel* chan = new QCopChannel("QPE/Obex");
00018 connect(chan, SIGNAL(received(const QCString&,const QByteArray&) ),
00019 this, SLOT(irdaMessage(const QCString&,const QByteArray&) ) );
00020 }
00021 ObexHandler::~ObexHandler() {
00022 delete m_sender;
00023 delete m_receiver;
00024 }
00025 void ObexHandler::doSend(const QString& str, const QString& desc) {
00026 delete m_sender;
00027 m_sender = new SendWidget;
00028 m_sender->raise();
00029 QPEApplication::showWidget( m_sender );
00030 connect(m_sender, SIGNAL(done() ),
00031 this, SLOT(slotSent() ) );
00032 m_sender->send( str, desc );
00033 }
00034 void ObexHandler::doReceive(bool b) {
00035 if (m_receiver && b ) return;
00036 else if (!m_receiver && !b ) return;
00037 else if (m_receiver && !b ) {
00038 delete m_receiver;
00039 m_receiver=0;
00040 }else if (!m_receiver && b ) {
00041 m_receiver= new Receiver;
00042 }
00043 }
00044 void ObexHandler::slotSent() {
00045 QString file = m_sender->file();
00046 delete m_sender;
00047 m_sender = 0;
00048 QCopEnvelope e ("QPE/Obex", "done(QString)" );
00049 e << file;
00050 doReceive(m_wasRec );
00051 m_wasRec = false;
00052 }
00053 void ObexHandler::irdaMessage( const QCString& msg, const QByteArray& data) {
00054 QDataStream stream( data, IO_ReadOnly );
00055 if ( msg == "send(QString,QString,QString)" ) {
00056 QString name, desc;
00057 stream >> desc;
00058 stream >> name;
00059 m_wasRec = (m_receiver != 0 );
00060 doReceive( false );
00061 doSend(name, desc);
00062 }else if (msg == "receive(int)") {
00063 int rec;
00064 stream >> rec;
00065 doReceive(rec);
00066 }
00067 }