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) (show whitespace changes)
-rw-r--r--noncore/net/opietooth/manager/obexftpdialog.cpp27
1 files changed, 20 insertions, 7 deletions
diff --git a/noncore/net/opietooth/manager/obexftpdialog.cpp b/noncore/net/opietooth/manager/obexftpdialog.cpp
index 2f04ecf..efb3ff2 100644
--- a/noncore/net/opietooth/manager/obexftpdialog.cpp
+++ b/noncore/net/opietooth/manager/obexftpdialog.cpp
@@ -103,28 +103,33 @@ ObexFtpDialog::ObexFtpDialog(const QString& device, int port,
SIGNAL(clicked()),
SLOT(slotBrowseLog()));
}
ObexFtpDialog::~ObexFtpDialog()
{
if (client != NULL) {
obexftp_disconnect(client);
obexftp_close(client);
}
}
+void ObexFtpDialog::slotBrowse()
+{
+ doBrowse(TRUE);
+}
+
/*
* Do device browsing
*/
-void ObexFtpDialog::slotBrowse()
+void ObexFtpDialog::doBrowse(bool reconnect)
{
stat_entry_t* ent; //Directory entry
void *dir; //Directory to read
const uint8_t* use_uuid; //uuid
int len; //uuid length
FileListItem* root; //root node
int fsize; //file size
bool numOk; //true if the string is a number
int tmp; //just a temp var
status(tr("Connecting to ") + m_device);
odebug << "Browse device " << m_device << oendl;
@@ -140,25 +145,25 @@ void ObexFtpDialog::slotBrowse()
nRetries = tmp;
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)) {
+ if (!cli_connect_uuid(use_uuid, len, reconnect)) {
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);
@@ -231,25 +236,25 @@ void ObexFtpDialog::slotCd(QListViewItem* item)
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(tr("CD failed: ") + tr(strerror(errno)));
- slotBrowse();
+ doBrowse();
}
}
/*
* Copy file from a remote device to the local device
*/
void ObexFtpDialog::getFile()
{
FileListItem* file = (FileListItem*)fileList->selectedItem();
int result;
if (file == NULL)
return;
@@ -324,25 +329,25 @@ void ObexFtpDialog::putFile()
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:\n") + tr(strerror(errno)));
errBox(local + QString(" send ERROR"));
status(local + QString(" send ERROR"));
}
else {
- slotBrowse();
+ doBrowse();
log(local + QString(" sent"));
status(local + QString(" sent"));
}
}
/*
* Delete file on a remote device
*/
void ObexFtpDialog::delFile()
{
FileListItem* file = (FileListItem*)fileList->selectedItem();
int result;
@@ -362,36 +367,44 @@ void ObexFtpDialog::delFile()
result = QMessageBox::warning(this, tr("Remove File"),
tr("Do you want to remove\n") + file2get, "Yes", "No");
if (result != 0)
return;
odebug << "Remove " << file2get << oendl;
result = obexftp_del(client, file2get);
if (result < 0) {
log(file2get + QString(" remove ERROR\n") + tr(strerror(errno)));
errBox(file2get + QString(" remove ERROR"));
status(file2get + QString(" remove ERROR"));
}
else {
- slotBrowse();
+ doBrowse();
log(file2get + QString(" removed"));
status(file2get + QString(" removed"));
}
}
/* connect with given uuid. re-connect every time */
-int ObexFtpDialog::cli_connect_uuid(const uint8_t *uuid, int uuid_len)
+int ObexFtpDialog::cli_connect_uuid(const uint8_t *uuid, int uuid_len,
+ bool reconnect)
{
int retry;
- if (client != NULL)
+ if (client != NULL) {
+ if (reconnect) {
+ obexftp_disconnect(client);
+ obexftp_close(client);
+ sleep(3);
+ }
+ else
return TRUE;
+ }
/* Open */
client = obexftp_open (transport, NULL, info_cb, this);
if(client == NULL) {
errBox("Error opening obexftp-client");
return FALSE;
}
if (!use_conn)
client->quirks &= ~OBEXFTP_CONN_HEADER;
if (!use_path)
client->quirks &= ~OBEXFTP_SPLIT_SETPATH;
for (retry = 0; retry < nRetries; retry++) {
/* Connect */