summaryrefslogtreecommitdiff
path: root/noncore/net/opietooth/manager/obexftpdialog.cpp
Side-by-side diff
Diffstat (limited to 'noncore/net/opietooth/manager/obexftpdialog.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opietooth/manager/obexftpdialog.cpp47
1 files changed, 43 insertions, 4 deletions
diff --git a/noncore/net/opietooth/manager/obexftpdialog.cpp b/noncore/net/opietooth/manager/obexftpdialog.cpp
index 80a81b4..f479ca2 100644
--- a/noncore/net/opietooth/manager/obexftpdialog.cpp
+++ b/noncore/net/opietooth/manager/obexftpdialog.cpp
@@ -10,39 +10,44 @@
***************************************************************************/
/*
* This code uses and is based on ObexFTP project code: http://triq.net/obexftp/
*/
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <qpushbutton.h>
#include <qmessagebox.h>
#include <qmultilineedit.h>
+#include <qlineedit.h>
#include <qspinbox.h>
#include <qcombobox.h>
#include <qlistview.h>
#include <qprogressbar.h>
#include <qlabel.h>
#include <qlayout.h>
#include <errno.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qstringlist.h>
#include "obexftpdialog.h"
#include "filelistitem.h"
#include <qpe/qpeapplication.h>
#include <qpe/resource.h>
#include <qpe/config.h>
#include <opie2/odebug.h>
#include <opie2/ofileselector.h>
+#include <opie2/ofiledialog.h>
using namespace Opie::Core;
using namespace Opie::Ui;
using namespace OpieTooth;
#define MAX_PROGRESS 14 //Maximal progress bar
static void info_cb(int event, const char *msg, int len, void* data);
/*
* Public constructor
@@ -79,24 +84,30 @@ ObexFtpDialog::ObexFtpDialog(const QString& device, int port,
connect(browseOK, SIGNAL(clicked()), SLOT(slotBrowse()));
connect(fileList, SIGNAL(clicked(QListViewItem*)),
SLOT(slotCd(QListViewItem*)));
connect(getButton,
SIGNAL(clicked()),
SLOT(getFile()));
connect(putButton,
SIGNAL(clicked()),
SLOT(putFile()));
connect(destFile,
SIGNAL(dirSelected (const QString&)),
SLOT(updateDir(const QString&)));
+ connect(saveButton,
+ SIGNAL(clicked()),
+ SLOT(slotSaveLog()));
+ connect(browseButton,
+ SIGNAL(clicked()),
+ SLOT(slotBrowseLog()));
}
ObexFtpDialog::~ObexFtpDialog()
{
if (client != NULL) {
obexftp_disconnect(client);
obexftp_close(client);
}
}
/*
* Do device browsing
@@ -127,25 +138,25 @@ void ObexFtpDialog::slotBrowse()
if (uuidType->currentText() == "FBS") {
use_uuid = UUID_FBS;
len = sizeof(UUID_FBS);
} else if (uuidType->currentText() == "S45") {
use_uuid = UUID_S45;
len = sizeof(UUID_S45);
} else {
use_uuid = UUID_FBS;
len = sizeof(UUID_FBS);
}
if (!cli_connect_uuid(use_uuid, len)) {
- log("Connection failed");
+ log(tr("Connection failed: ") + tr(strerror(errno)));
errBox("Connection failed");
status("Connection failed");
return;
}
else {
log(QString("Connected to ") + m_device);
status(QString("Connected to ") + m_device);
}
/* List folder */
root = new FileListItem(fileList, NULL);
dir = obexftp_opendir(client, curdir);
while ((ent = obexftp_readdir(dir)) != NULL) {
@@ -216,25 +227,25 @@ void ObexFtpDialog::slotCd(QListViewItem* item)
if (idx >= 0)
curdir.remove(idx, curdir.length() - idx);
else
curdir = "";
}
else {
if (curdir != "" && curdir.right(1) != "/")
curdir += "/";
curdir += file->text(0);
}
odebug << "Browse " << curdir << oendl;
if (obexftp_setpath(client, curdir, 0) < 0)
- log("CD failed");
+ log(tr("CD failed: ") + tr(strerror(errno)));
slotBrowse();
}
}
/*
* Get the file
*/
void ObexFtpDialog::getFile()
{
FileListItem* file = (FileListItem*)fileList->selectedItem();
int result;
if (file == NULL)
@@ -255,25 +266,25 @@ void ObexFtpDialog::getFile()
file2get += curdir;
if (curdir != "" && curdir.right(1) != "/")
file2get += "/";
file2get += file->text(0);
local += file->text(0);
odebug << "Copy " << file2get << " to " << local << oendl;
progressStatus = 0;
fileProgress->setTotalSteps(file->getsize() / 1024);
fileProgress->reset();
status(tr("Receiving file ") + file2get);
result = obexftp_get(client, local, file2get);
if (result < 0) {
- log(file2get + QString(" receive ERROR"));
+ log(file2get + QString(" receive ERROR: ") + tr(strerror(errno)));
errBox(file2get + QString(" receive ERROR"));
status(file2get + QString(" receive ERROR"));
}
else {
log(file2get + QString(" received"));
status(file2get + QString(" received"));
destFile->reread();
}
}
}
/*
@@ -305,25 +316,25 @@ void ObexFtpDialog::putFile()
file2get = local.right(local.length() - idx - 1);
}
else
file2get = local;
odebug << "Copy " << local << " to " << file2get << oendl;
progressStatus = 0;
fileProgress->setTotalSteps(localFStat.st_size / 1024);
fileProgress->reset();
status(tr("Sending file ") + local);
result = obexftp_put_file(client, local, file2get);
if (result < 0) {
- log(local + QString(" send ERROR"));
+ log(local + QString(" send ERROR: ") + tr(strerror(errno)));
errBox(local + QString(" send ERROR"));
status(local + QString(" send ERROR"));
}
else {
log(local + QString(" sent"));
status(local + QString(" sent"));
}
}
/* connect with given uuid. re-connect every time */
int ObexFtpDialog::cli_connect_uuid(const uint8_t *uuid, int uuid_len)
{
@@ -394,24 +405,52 @@ void ObexFtpDialog::incProgress()
void ObexFtpDialog::doneProgress()
{
progressStatus = 0;
fileProgress->reset();
}
void ObexFtpDialog::updateDir(const QString& newdir)
{
localCurdir = newdir;
}
+/**
+ * Save Log to the specified file
+ */
+void ObexFtpDialog::slotSaveLog()
+{
+ QFile logFile(saveLogEdit->text());
+ if (!logFile.open(IO_WriteOnly)) {
+ errBox(tr("Unable to open file ") + saveLogEdit->text() + tr(" ") +
+ tr(strerror(errno)));
+ return;
+ }
+ QTextStream stream(&logFile);
+ stream << browseLog->text() << endl;
+ QMessageBox::information(this, tr("Saving"),
+ tr("Log file saved to ") + saveLogEdit->text());
+}
+
+void ObexFtpDialog::slotBrowseLog()
+{
+ MimeTypes types;
+ QStringList all;
+ all << "*/*";
+ types.insert("All Files", all );
+
+ QString str = OFileDialog::getOpenFileName( 1,"/","", types, 0 );
+ saveLogEdit->setText(str);
+}
+
/*
* Event callback function
*/
static void info_cb(int event, const char *msg, int len, void* data)
{
ObexFtpDialog* dlg = (ObexFtpDialog*)data;
QCString cmsg(msg, len); //Message to display
switch (event) {
case OBEXFTP_EV_ERRMSG:
dlg->log(QCString("Error: ") + cmsg);