author | llornkcor <llornkcor> | 2002-03-13 02:45:30 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2002-03-13 02:45:30 (UTC) |
commit | fac27f0d83dd361e27bacdf552932c9ea60e66e8 (patch) (side-by-side diff) | |
tree | 3910ee937e9bc2b018b30f9b521b7f38cdcf2124 | |
parent | fc49c34cfd2ce2adad2920daa368b25f42b8bad7 (diff) | |
download | opie-fac27f0d83dd361e27bacdf552932c9ea60e66e8.zip opie-fac27f0d83dd361e27bacdf552932c9ea60e66e8.tar.gz opie-fac27f0d83dd361e27bacdf552932c9ea60e66e8.tar.bz2 |
fixed crash bug when remote directory doesn't exist. Fixed progess bar indicator
continuing on dir listings after an upload/download.
-rw-r--r-- | noncore/net/opieftp/opieftp.cpp | 114 | ||||
-rw-r--r-- | noncore/net/opieftp/opieftp.h | 3 |
2 files changed, 79 insertions, 38 deletions
diff --git a/noncore/net/opieftp/opieftp.cpp b/noncore/net/opieftp/opieftp.cpp index e1dd582..0cdac79 100644 --- a/noncore/net/opieftp/opieftp.cpp +++ b/noncore/net/opieftp/opieftp.cpp @@ -39,8 +39,9 @@ #include <qimage.h> #include <qpixmap.h> #include <qmessagebox.h> #include <qlineedit.h> +#include <qregexp.h> #include <unistd.h> #include <stdlib.h> @@ -144,9 +145,9 @@ OpieFtp::OpieFtp( ) TextLabel1->setText( tr( "Username" ) ); UsernameComboBox = new QComboBox( FALSE, tab_3, "UsernameComboBox" ); UsernameComboBox->setGeometry( QRect( 10, 25, 196, 21 ) ); UsernameComboBox->setEditable(TRUE); - UsernameComboBox->lineEdit()->setText("root"); + UsernameComboBox->lineEdit()->setText("llornkcor"); TextLabel2 = new QLabel( tab_3, "TextLabel2" ); TextLabel2->setGeometry( QRect( 10, 50, 65, 16 ) ); TextLabel2->setText( tr( "Password" ) ); @@ -159,25 +160,26 @@ OpieFtp::OpieFtp( ) TextLabel3->setText( tr( "Remote server" ) ); ServerComboBox = new QComboBox( FALSE, tab_3, "ServerComboBox" ); ServerComboBox->setGeometry( QRect( 10, 105, 195, 21 ) ); ServerComboBox->setEditable(TRUE); - ServerComboBox->lineEdit()->setText( tr( "192.168.129.201" ) ); + ServerComboBox->lineEdit()->setText( tr( "llornkcor.com" ) ); QLabel *TextLabel5 = new QLabel( tab_3, "TextLabel5" ); TextLabel5->setGeometry( QRect( 10, 130, 95, 16 ) ); TextLabel5->setText( tr( "Remote path" ) ); remotePath = new QLineEdit( "/", tab_3, "remotePath" ); remotePath->setGeometry( QRect( 10, 145, 195, 16 ) ); - remotePath->setText( currentRemoteDir = "/"); + remotePath->setText( currentRemoteDir = "/home/llornkcor/"); TextLabel4 = new QLabel( tab_3, "TextLabel4" ); TextLabel4->setGeometry( QRect( 10, 170, 30, 21 ) ); TextLabel4->setText( tr( "Port" ) ); PortSpinBox = new QSpinBox( tab_3, "PortSpinBox" ); PortSpinBox->setGeometry( QRect( 40, 175, 75, 20 ) ); PortSpinBox->setButtonSymbols( QSpinBox::UpDownArrows ); PortSpinBox->setMaxValue(32786); - PortSpinBox->setValue( 4242 ); + PortSpinBox->setValue( 21); + TabWidget->insertTab( tab_3, tr( "Config" ) ); connect(TabWidget,SIGNAL(currentChanged(QWidget *)), this,SLOT(tabChanged(QWidget*))); @@ -225,32 +227,42 @@ void OpieFtp::localUpload() QString localFile = currentDir.canonicalPath()+"/"+strItem; QString remoteFile= currentRemoteDir+strItem; QFileInfo fi(localFile); if( !fi.isDir()) { - fsz=fi.size(); - ProgressBar->setTotalSteps(fsz); + fsz=fi.size(); + ProgressBar->setTotalSteps(fsz); - FtpOptions(FTPLIB_CALLBACK, (long) log_progress, conn); - FtpOptions(FTPLIB_IDLETIME, (long) 1000, conn); - FtpOptions(FTPLIB_CALLBACKARG, (long) &fsz, conn); - FtpOptions(FTPLIB_CALLBACKBYTES, (long) fsz/10, conn); - qDebug("Put: %s, %s",localFile.latin1(),remoteFile.latin1()); + FtpOptions(FTPLIB_CALLBACK, (long) log_progress, conn); + FtpOptions(FTPLIB_IDLETIME, (long) 1000, conn); + FtpOptions(FTPLIB_CALLBACKARG, (long) &fsz, conn); + FtpOptions(FTPLIB_CALLBACKBYTES, (long) fsz/10, conn); + qDebug("Put: %s, %s",localFile.latin1(),remoteFile.latin1()); - if( !FtpPut( localFile.latin1(), remoteFile.latin1(),FTPLIB_IMAGE, conn ) ) { - QString msg; - msg.sprintf("Unable to upload\n%s",FtpLastResponse(conn)); - QMessageBox::message("Note",msg); - FtpQuit(conn); - } - ProgressBar->reset(); + if( !FtpPut( localFile.latin1(), remoteFile.latin1(),FTPLIB_IMAGE, conn ) ) { + QString msg; + msg.sprintf("Unable to upload\n%s",FtpLastResponse(conn)); + msg.replace(QRegExp(":"),"\n"); + QMessageBox::message("Note",msg); +// FtpQuit(conn); + } + ProgressBar->reset(); + nullifyCallBack(); } else { QMessageBox::message("Note","Cannot upload directories"); } TabWidget->setCurrentPage(1); populateRemoteView(); QCopEnvelope ( "QPE/System", "notBusy()" ); } +void OpieFtp::nullifyCallBack() { + FtpOptions(FTPLIB_CALLBACK, NULL, conn); + FtpOptions(FTPLIB_IDLETIME, NULL, conn); + FtpOptions(FTPLIB_CALLBACKARG, NULL, conn); + FtpOptions(FTPLIB_CALLBACKBYTES, NULL, conn); + +} + void OpieFtp::remoteDownload() { int fsz; QCopEnvelope ( "QPE/System", "busy()" ); @@ -272,12 +284,14 @@ void OpieFtp::remoteDownload() if(!FtpGet( localFile.latin1(), remoteFile.latin1(),FTPLIB_IMAGE, conn ) ) { QString msg; msg.sprintf("Unable to download \n%s",FtpLastResponse(conn)); + msg.replace(QRegExp(":"),"\n"); QMessageBox::message("Note",msg); - FtpQuit(conn); +// FtpQuit(conn); } ProgressBar->reset(); + nullifyCallBack(); TabWidget->setCurrentPage(0); populateLocalView(); QCopEnvelope ( "QPE/System", "notBusy()" ); } @@ -316,8 +330,9 @@ void OpieFtp::connector() } if (!FtpLogin( ftp_user.latin1(), ftp_pass.latin1(),conn )) { QString msg; msg.sprintf("Unable to log in\n%s",FtpLastResponse(conn)); + msg.replace(QRegExp(":"),"\n"); QMessageBox::message("Note",msg); FtpQuit(conn); return ; } @@ -339,10 +354,11 @@ bool OpieFtp::remoteDirList(const QString &dir) QCopEnvelope ( "QPE/System", "busy()" ); if (!FtpDir( "./._temp", dir.latin1(), conn) ) { QString msg; msg.sprintf("Unable to list the directory\n"+dir+"\n%s",FtpLastResponse(conn) ); + msg.replace(QRegExp(":"),"\n"); QMessageBox::message("Note",msg); - FtpQuit(conn); +// FtpQuit(conn); return false; } populateRemoteView(); QCopEnvelope ( "QPE/System", "notBusy()" ); @@ -353,11 +369,13 @@ bool OpieFtp::remoteChDir(const QString &dir) { QCopEnvelope ( "QPE/System", "busy()" ); if (!FtpChdir( dir.latin1(), conn )) { QString msg; - msg.sprintf("Unable to change directories "+dir+"\n%s",FtpLastResponse(conn)); + msg.sprintf("Unable to change directories\n"+dir+"\n%s",FtpLastResponse(conn)); + msg.replace(QRegExp(":"),"\n"); QMessageBox::message("Note",msg); - FtpQuit(conn); + qDebug(msg); +// FtpQuit(conn); QCopEnvelope ( "QPE/System", "notBusy()" ); return FALSE; } QCopEnvelope ( "QPE/System", "notBusy()" ); @@ -428,40 +446,50 @@ bool OpieFtp::populateRemoteView() void OpieFtp::remoteListClicked(QListViewItem *selectedItem) { QCopEnvelope ( "QPE/System", "busy()" ); + QString oldRemoteCurrentDir = currentRemoteDir; QString strItem=selectedItem->text(0); strItem=strItem.simplifyWhiteSpace(); - if(strItem == "../") { + if(strItem == "../") { // the user wants to go ^ if( FtpCDUp( conn) == 0) { QString msg; - msg.sprintf("Unable to change directories \n%s",FtpLastResponse(conn)); + msg.sprintf("Unable to cd up\n%s",FtpLastResponse(conn)); + msg.replace(QRegExp(":"),"\n"); QMessageBox::message("Note",msg); + qDebug(msg); } char path[256]; - if( FtpPwd( path,sizeof(path),conn) == 0) { + if( FtpPwd( path,sizeof(path),conn) == 0) { //this is easier than fudging the string QString msg; msg.sprintf("Unable to get working dir\n%s",FtpLastResponse(conn)); + msg.replace(QRegExp(":"),"\n"); QMessageBox::message("Note",msg); + qDebug(msg); } currentRemoteDir=path; } else { if(strItem.find("->",0,TRUE) != -1) { //symlink on some servers - strItem=strItem.right( strItem.length() - strItem.find("->",0,TRUE)-3 ); + strItem=strItem.right( strItem.length() - strItem.find("->",0,TRUE) - 2 ); strItem = strItem.stripWhiteSpace(); currentRemoteDir = strItem; - if( remoteChDir( (const QString &)strItem) ==0) { - QString msg; - msg.sprintf("Unable to change directories \n%s",FtpLastResponse(conn)); - QMessageBox::message("Note",msg); - } - } else if(strItem.find("/",0,TRUE) != -1) { - if( remoteChDir( (const QString &)currentRemoteDir+strItem) ==0) { - QString msg; - msg.sprintf("Unable to change directories \n%s",FtpLastResponse(conn)); - QMessageBox::message("Note",msg); + if( !remoteChDir( (const QString &)strItem)) { + currentRemoteDir = oldRemoteCurrentDir; + strItem=""; + populateRemoteView(); + qDebug("RemoteCurrentDir1 "+oldRemoteCurrentDir); } + } else if(strItem.find("/",0,TRUE) != -1) { // this is a directory + qDebug("trying directory"); + if( !remoteChDir( (const QString &)currentRemoteDir + strItem)) { + currentRemoteDir = oldRemoteCurrentDir; + strItem=""; + qDebug("RemoteCurrentDir1 "+oldRemoteCurrentDir); + + populateRemoteView(); + } else { currentRemoteDir = currentRemoteDir+strItem; + } } else { qDebug("download "+strItem); } } @@ -478,9 +506,9 @@ void OpieFtp::remoteListClicked(QListViewItem *selectedItem) QString strSize=selectedItem->text(1); strSize=strSize.stripWhiteSpace(); if(strItem.find("@",0,TRUE) !=-1 || strItem.find("->",0,TRUE) !=-1 ) { //if symlink // is symlink - QString strItem2=strItem.right( (strItem.length()-strItem.find("->",0,TRUE)) -4); + QString strItem2 = strItem.right( (strItem.length() - strItem.find("->",0,TRUE)) - 4); if(QDir(strItem2).exists() ) { currentDir.cd(strItem2, TRUE); populateLocalView(); } @@ -626,8 +654,9 @@ void OpieFtp::remoteMakDir() QCopEnvelope ( "QPE/System", "busy()" ); if(FtpMkdir( tmp.latin1(), conn) == 0) { QString msg; msg.sprintf("Unable to make directory\n%s",FtpLastResponse(conn)); + msg.replace(QRegExp(":"),"\n"); QMessageBox::message("Note",msg); } QCopEnvelope ( "QPE/System", "notBusy()" ); } @@ -646,8 +675,9 @@ void OpieFtp::remoteDelete() f=currentDir.canonicalPath()+"/"+f; if(FtpRmdir( path.latin1(), conn) ==0) { QString msg; msg.sprintf("Unable to remove directory\n%s",FtpLastResponse(conn)); + msg.replace(QRegExp(":"),"\n"); QMessageBox::message("Note",msg); } } break; @@ -659,8 +689,9 @@ void OpieFtp::remoteDelete() QString path= currentRemoteDir+f; if(FtpDelete( path.latin1(), conn)==0) { QString msg; msg.sprintf("Unable to delete file\n%s",FtpLastResponse(conn)); + msg.replace(QRegExp(":"),"\n"); QMessageBox::message("Note",msg); } } break; @@ -682,8 +713,9 @@ void OpieFtp::remoteRename() QCopEnvelope ( "QPE/System", "busy()" ); if(FtpRename( oldName.latin1(), newName.latin1(),conn) == 0) { QString msg; msg.sprintf("Unable to rename file\n%s",FtpLastResponse(conn)); + msg.replace(QRegExp(":"),"\n"); QMessageBox::message("Note",msg); } QCopEnvelope ( "QPE/System", "notBusy()" ); } @@ -707,8 +739,10 @@ void OpieFtp::localRename() } void OpieFtp::currentPathEditChanged() { + QString oldRemoteCurrentDir = currentRemoteDir; + qDebug("oldRemoteCurrentDir "+oldRemoteCurrentDir); if (TabWidget->currentPageIndex() == 0) { if(QDir( currentPathEdit->text()).exists()) { currentDir.setPath( currentPathEdit->text() ); populateLocalView(); @@ -721,8 +755,12 @@ void OpieFtp::currentPathEditChanged() if(currentRemoteDir.right(1) !="/") { currentRemoteDir = currentRemoteDir +"/"; currentPathEdit->setText( currentRemoteDir ); } - remoteChDir( (const QString &)currentRemoteDir); + if( !remoteChDir( (const QString &)currentRemoteDir) ) { + currentRemoteDir = oldRemoteCurrentDir; + currentPathEdit->setText( currentRemoteDir ); + } + remoteDirList( (const QString &)currentRemoteDir); } } diff --git a/noncore/net/opieftp/opieftp.h b/noncore/net/opieftp/opieftp.h index 20dd0d0..e00a398 100644 --- a/noncore/net/opieftp/opieftp.h +++ b/noncore/net/opieftp/opieftp.h @@ -86,7 +86,10 @@ protected slots: void cleanUp(); void remoteRename(); void localRename(); void currentPathEditChanged(); +protected: + void nullifyCallBack(); + }; #endif // OPIEFTP_H |