summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opietooth/manager/obexdialog.cpp69
-rw-r--r--noncore/net/opietooth/manager/obexdialog.h15
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,5 +1,6 @@
#include "obexdialog.h"
+#include <errno.h>
#include <qpushbutton.h>
#include <qmultilineedit.h>
#include <qlineedit.h>
@@ -19,20 +20,27 @@ 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;
@@ -45,16 +53,29 @@ ObexDialog::ObexDialog( QWidget* parent, const char* name, bool modal, WFlags f
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() {
@@ -66,26 +87,54 @@ void ObexDialog::browse() {
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
@@ -4,13 +4,15 @@
#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 {
@@ -18,22 +20,29 @@ namespace OpieTooth {
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