-rw-r--r-- | noncore/net/opietooth/manager/obexdialog.cpp | 69 | ||||
-rw-r--r-- | noncore/net/opietooth/manager/obexdialog.h | 15 |
2 files changed, 71 insertions, 13 deletions
diff --git a/noncore/net/opietooth/manager/obexdialog.cpp b/noncore/net/opietooth/manager/obexdialog.cpp index 951d87a..d3fdd14 100644 --- a/noncore/net/opietooth/manager/obexdialog.cpp +++ b/noncore/net/opietooth/manager/obexdialog.cpp @@ -1,6 +1,7 @@ #include "obexdialog.h" +#include <errno.h> #include <qpushbutton.h> #include <qmultilineedit.h> #include <qlineedit.h> #include <qlayout.h> @@ -18,22 +19,29 @@ using namespace OpieTooth; using namespace Opie::Core; using namespace Opie::Ui; using namespace Opie::Core; -ObexDialog::ObexDialog( QWidget* parent, const char* name, bool modal, WFlags fl, const QString& device ) +ObexDialog::ObexDialog(const QString& device, QWidget* parent, const char* name, bool modal, WFlags fl) : QDialog( parent, name, modal, fl ) { if ( !name ) - setName( "ObexDialog" ); + setName( "ObexDialog" ); setCaption( tr( "beam files " ) ) ; m_device = device; layout = new QVBoxLayout( this ); + obexSend = new OProcess(); - QLabel* info = new QLabel( this ); + info = new QLabel( this ); info->setText( tr("Which file should be beamed?") ); + statLine = new QLabel(this); + statLine->setText( tr("Ready") ); + + status = new QMultiLineEdit(this); + status->setReadOnly(true); + cmdLine = new QLineEdit( this ); QPushButton *browserButton; browserButton = new QPushButton( Resource::loadIconSet("fileopen"),"",this,"BrowseButton"); @@ -44,18 +52,31 @@ ObexDialog::ObexDialog( QWidget* parent, const char* name, bool modal, WFlags f sendButton = new QPushButton( this ); sendButton->setText( tr( "Send" ) ); layout->addWidget(info); + layout->addWidget(status); layout->addWidget(cmdLine); layout->addWidget(browserButton); layout->addWidget(chNameLine); layout->addWidget(sendButton); + layout->addWidget(statLine); connect( sendButton, SIGNAL( clicked() ), this, SLOT( sendData() ) ); + connect(obexSend, SIGNAL(processExited(Opie::Core::OProcess*)), + this, SLOT(slotProcessExited(Opie::Core::OProcess*))); + connect(obexSend, SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int)), + this, SLOT(slotPushOut(Opie::Core::OProcess*, char*, int))); + connect(obexSend, SIGNAL(receivedStderr(Opie::Core::OProcess*, char*, int)), + this, SLOT(slotPushErr(Opie::Core::OProcess*, char*, int))); + } ObexDialog::~ObexDialog() { + if (obexSend->isRunning()) + obexSend->kill(); + delete obexSend; + obexSend = NULL; } void ObexDialog::browse() { @@ -65,27 +86,55 @@ void ObexDialog::browse() { types.insert("All Files", all ); QString str = OFileDialog::getOpenFileName( 1,"/","", types, 0 ); cmdLine->setText( str ); - + statLine->setText( tr("Ready") ); } void ObexDialog::sendData() { QString fileURL = cmdLine->text(); QString file = QFileInfo( fileURL ).fileName(); QString modifiedName = chNameLine->text(); + QString execName = "ussp-push"; + if (obexSend->isRunning()) + return; + obexSend->clearArguments(); // vom popupmenu beziehen - OProcess* obexSend = new OProcess(); if ( !modifiedName.isEmpty() ) { - *obexSend << "ussp-push" << m_device << fileURL << modifiedName; + *obexSend << execName << "--timeo 30" << m_device << fileURL << modifiedName; } else { - *obexSend << "ussp-push" << m_device << fileURL << file; + *obexSend << execName << "--timeo 30" << m_device << fileURL << file; } - if (!obexSend->start(OProcess::DontCare, OProcess::AllOutput) ) { - owarn << "could not start" << oendl; - delete obexSend; + obexSend->setUseShell(true); + if (!obexSend->start(OProcess::NotifyOnExit, OProcess::All) ) { + statLine->setText( tr("Error: couln't start process") ); } + else + statLine->setText( tr("Sending") ); +} +void ObexDialog::slotPushOut(OProcess*, char* buf, int len) { + QCString str(buf, len); + status->append(str); +} +void ObexDialog::slotPushErr(OProcess*, char* buf, int len) { + QCString str(buf, len); + status->append(str); +} +void ObexDialog::slotProcessExited(OProcess*) { + if (obexSend == NULL) + return; + if (obexSend->normalExit()) { + status->append( tr("Finished with result ") ); + status->append( QString::number(obexSend->exitStatus()) ); + status->append( tr("\n") ); + odebug << obexSend->exitStatus() << oendl; + statLine->setText( tr("Finished: ") + tr(strerror(obexSend->exitStatus())) ); + } + else { + status->append( tr("Exited abnormally\n") ); + statLine->setText( tr("Exited abnormally") ); + } } diff --git a/noncore/net/opietooth/manager/obexdialog.h b/noncore/net/opietooth/manager/obexdialog.h index d5b5682..44a26f3 100644 --- a/noncore/net/opietooth/manager/obexdialog.h +++ b/noncore/net/opietooth/manager/obexdialog.h @@ -3,37 +3,46 @@ #include <qdialog.h> #include <opie2/oprocess.h> +#include <qlabel.h> +#include <qmultilineedit.h> class QVBoxLayout; class QPushButton; class QMultiLineEdit; class QLineEdit; - +namespace Opie {namespace Core {class OProcess;}} namespace OpieTooth { class ObexDialog : public QDialog { Q_OBJECT public: - ObexDialog( QWidget* parent = 0, const char* name = 0, bool modal = TRUE, WFlags fl = 0, const QString& device = 0); + ObexDialog( const QString& device = 0, QWidget* parent = 0, const char* name = 0, bool modal = TRUE, WFlags fl = 0); ~ObexDialog(); private slots: void browse(); void sendData(); - + void slotPushOut(Opie::Core::OProcess*, char*, int); + void slotPushErr(Opie::Core::OProcess*, char*, int); + void slotProcessExited(Opie::Core::OProcess* proc); + protected: QVBoxLayout* layout; QLineEdit* cmdLine; QLineEdit* chNameLine; QPushButton* sendButton; + QLabel* info; + QMultiLineEdit* status; + QLabel* statLine; private: // Device that is used QString m_device; + Opie::Core::OProcess *obexSend; }; } #endif |