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 /noncore/net/opieftp | |
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 | 86 | ||||
-rw-r--r-- | noncore/net/opieftp/opieftp.h | 3 |
2 files changed, 65 insertions, 24 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 @@ -31,24 +31,25 @@ #include <qlistview.h> #include <qmainwindow.h> #include <qlabel.h> #include <qprogressbar.h> #include <qspinbox.h> #include <qtabwidget.h> #include <qwidget.h> #include <qlayout.h> #include <qimage.h> #include <qpixmap.h> #include <qmessagebox.h> #include <qlineedit.h> +#include <qregexp.h> #include <unistd.h> #include <stdlib.h> QProgressBar *ProgressBar; static netbuf *conn=NULL; static int log_progress(netbuf *ctl, int xfered, void *arg) { int fsz = *(int *)arg; int pct = (xfered * 100) / fsz; // printf("%3d%%\r", pct); @@ -136,56 +137,57 @@ OpieFtp::OpieFtp( ) this,SLOT( RemoteListPressed(int, QListViewItem *, const QPoint&, int)) ); TabWidget->insertTab( tab_2, tr( "Remote" ) ); tab_3 = new QWidget( TabWidget, "tab_3" ); TextLabel1 = new QLabel( tab_3, "TextLabel1" ); TextLabel1->setGeometry( QRect( 10, 10, 60, 16 ) ); 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" ) ); PasswordEdit = new QLineEdit( "", tab_3, "PasswordComboBox" ); PasswordEdit->setGeometry( QRect( 10, 65, 195, 16 ) ); PasswordEdit->setEchoMode(QLineEdit::Password); TextLabel3 = new QLabel( tab_3, "TextLabel3" ); TextLabel3->setGeometry( QRect( 10, 90, 95, 16 ) ); 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*))); currentDir.setFilter( QDir::Files | QDir::Dirs/* | QDir::Hidden*/ | QDir::All); currentDir.setPath( QDir::currentDirPath()); // currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst); currentPathEdit = new QLineEdit( "/", this, "currentPathEdit" ); currentPathEdit->setGeometry( QRect( 5, 248, 220, 18 ) ); currentPathEdit->setText( currentDir.canonicalPath()); connect( currentPathEdit,SIGNAL(returnPressed()),this,SLOT(currentPathEditChanged())); @@ -229,63 +231,75 @@ void OpieFtp::localUpload() 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()); 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); +// 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()" ); qApp->processEvents(); QString strItem = Remote_View->currentItem()->text(0); QString localFile = currentDir.canonicalPath()+"/"+strItem; QString remoteFile= currentRemoteDir+strItem; if (!FtpSize( remoteFile.latin1(), &fsz, FTPLIB_ASCII, conn)) fsz = 0; QString temp; temp.sprintf( remoteFile+" "+" %dkb", fsz); 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("Get: %s, %s",localFile.latin1(),remoteFile.latin1()); 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()" ); } void OpieFtp::newConnection() { TabWidget->setCurrentPage(2); } void OpieFtp::connector() @@ -308,64 +322,68 @@ void OpieFtp::connector() port.stripWhiteSpace(); if(ftp_host.find("ftp://",0, TRUE) != -1 ) ftp_host=ftp_host.right(ftp_host.length()-6); ftp_host+=":"+port; if (!FtpConnect( ftp_host.latin1(), &conn)) { QMessageBox::message("Note","Unable to connect to\n"+ftp_host); return ; } 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 ; } remoteDirList("/") ; setCaption(ftp_host); QCopEnvelope ( "QPE/System", "notBusy()" ); } void OpieFtp::disConnector() { FtpQuit(conn); setCaption("OpieFtp"); currentRemoteDir="/"; Remote_View->clear(); } 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()" ); return true; } 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()" ); return TRUE; } void OpieFtp::populateLocalView() { Local_View->clear(); currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst); currentDir.setMatchAllDirs(TRUE); @@ -420,56 +438,66 @@ bool OpieFtp::populateRemoteView() fileDate = fileDate.stripWhiteSpace(); if(fileL.find("total",0,TRUE) == -1) new QListViewItem( Remote_View, fileL, fileS, fileDate); } tmp.close(); } return true; } 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); } } if(currentRemoteDir.right(1) !="/") currentRemoteDir +="/"; currentPathEdit->setText( currentRemoteDir ); remoteDirList( (const QString &)currentRemoteDir); QCopEnvelope ( "QPE/System", "notBusy()" ); } void OpieFtp::localListClicked(QListViewItem *selectedItem) @@ -618,80 +646,84 @@ void OpieFtp::localDelete() void OpieFtp::remoteMakDir() { InputDialog *fileDlg; fileDlg = new InputDialog(this,"Make Directory",TRUE, 0); fileDlg->exec(); if( fileDlg->result() == 1 ) { QString filename = fileDlg->LineEdit1->text();//+".playlist"; QString tmp=currentRemoteDir+filename; 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()" ); } populateRemoteView(); } void OpieFtp::remoteDelete() { QString f = Remote_View->currentItem()->text(0); QCopEnvelope ( "QPE/System", "busy()" ); if( f.right(1) =="/") { QString path= currentRemoteDir+f; switch ( QMessageBox::warning(this,"Delete","Do you really want to delete\n"+f+"?" ,"Yes","No",0,0,1) ) { case 0: { 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; }; } else { switch ( QMessageBox::warning(this,"Delete","Do you really want to delete\n"+f+"?" ,"Yes","No",0,0,1) ) { case 0: { 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; }; } QCopEnvelope ( "QPE/System", "notBusy()" ); } void OpieFtp::remoteRename() { QString curFile = Remote_View->currentItem()->text(0); InputDialog *fileDlg; fileDlg = new InputDialog(this,"Rename",TRUE, 0); fileDlg->inputText = curFile; fileDlg->exec(); if( fileDlg->result() == 1 ) { QString oldName = currentRemoteDir +"/"+ curFile; QString newName = currentRemoteDir +"/"+ fileDlg->LineEdit1->text();//+".playlist"; 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()" ); } populateRemoteView(); } void OpieFtp::localRename() { QString curFile = Local_View->currentItem()->text(0); InputDialog *fileDlg; fileDlg = new InputDialog(this,"Rename",TRUE, 0); @@ -699,30 +731,36 @@ void OpieFtp::localRename() fileDlg->exec(); if( fileDlg->result() == 1 ) { QString oldname = currentDir.canonicalPath() + "/" + curFile; QString newName = currentDir.canonicalPath() + "/" + fileDlg->LineEdit1->text();//+".playlist"; if( rename(oldname.latin1(), newName.latin1())== -1) QMessageBox::message("Note","Could not rename"); } populateLocalView(); } void OpieFtp::currentPathEditChanged() { + QString oldRemoteCurrentDir = currentRemoteDir; + qDebug("oldRemoteCurrentDir "+oldRemoteCurrentDir); if (TabWidget->currentPageIndex() == 0) { if(QDir( currentPathEdit->text()).exists()) { currentDir.setPath( currentPathEdit->text() ); populateLocalView(); } else { QMessageBox::message("Note","That directory does not exist"); } } if (TabWidget->currentPageIndex() == 1) { currentRemoteDir = currentPathEdit->text(); 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 @@ -78,15 +78,18 @@ protected slots: void RemoteListPressed( int, QListViewItem *, const QPoint&, int); void localMakDir(); void localDelete(); void remoteMakDir(); void remoteDelete(); bool remoteDirList(const QString &); bool remoteChDir(const QString &); void tabChanged(QWidget*); void cleanUp(); void remoteRename(); void localRename(); void currentPathEditChanged(); +protected: + void nullifyCallBack(); + }; #endif // OPIEFTP_H |