summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opieftp/opieftp.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/noncore/net/opieftp/opieftp.cpp b/noncore/net/opieftp/opieftp.cpp
index 151be84..e1dd582 100644
--- a/noncore/net/opieftp/opieftp.cpp
+++ b/noncore/net/opieftp/opieftp.cpp
@@ -352,193 +352,202 @@ bool OpieFtp::remoteDirList(const QString &dir)
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));
QMessageBox::message("Note",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);
currentDir.setNameFilter(filterStr);
QString fileL, fileS, fileDate;
const QFileInfoList *list = currentDir.entryInfoList( /*QDir::All*/ /*, QDir::SortByMask*/);
QFileInfoListIterator it(*list);
QFileInfo *fi;
while ( (fi=it.current()) ) {
if (fi->isSymLink() ){
QString symLink=fi->readLink();
// qDebug("Symlink detected "+symLink);
QFileInfo sym( symLink);
fileS.sprintf( "%10li", sym.size() );
fileL.sprintf( "%s -> %s", sym.fileName().data(),sym.absFilePath().data() );
fileDate = sym.lastModified().toString();
} else {
// qDebug("Not a dir: "+currentDir.canonicalPath()+fileL);
fileS.sprintf( "%10li", fi->size() );
fileL.sprintf( "%s",fi->fileName().data() );
fileDate= fi->lastModified().toString();
if( QDir(QDir::cleanDirPath(currentDir.canonicalPath()+"/"+fileL)).exists() ) {
fileL+="/";
// qDebug( fileL);
}
}
item= new QListViewItem( Local_View,fileL,fileS, fileDate);
++it;
}
Local_View->setSorting( 3,FALSE);
currentPathEdit->setText( currentDir.canonicalPath() );
}
bool OpieFtp::populateRemoteView()
{
Remote_View->clear();
QFile tmp("./._temp");
QString s, File_Name;
QString fileL, fileS, fileDate;
new QListViewItem( Remote_View, "../");
if (tmp.open(IO_ReadOnly)) {
QTextStream t( &tmp ); // use a text stream
while ( !t.eof()) {
s = t.readLine();
fileL = s.right(s.length()-55);
fileL = fileL.stripWhiteSpace();
if(s.left(1) == "d")
fileL = fileL+"/";
fileS = s.mid( 30, 42-30);
fileS = fileS.stripWhiteSpace();
fileDate = s.mid( 42, 55-42);
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 strItem=selectedItem->text(0);
strItem=strItem.simplifyWhiteSpace();
if(strItem == "../") {
if( FtpCDUp( conn) == 0) {
QString msg;
msg.sprintf("Unable to change directories \n%s",FtpLastResponse(conn));
QMessageBox::message("Note",msg);
}
char path[256];
if( FtpPwd( path,sizeof(path),conn) == 0) {
QString msg;
msg.sprintf("Unable to get working dir\n%s",FtpLastResponse(conn));
QMessageBox::message("Note",msg);
}
currentRemoteDir=path;
} else {
- if(strItem.find("/",0,TRUE) != -1) {
+ if(strItem.find("->",0,TRUE) != -1) { //symlink on some servers
+ strItem=strItem.right( strItem.length() - strItem.find("->",0,TRUE)-3 );
+ 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);
}
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)
{
QString strItem=selectedItem->text(0);
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);
if(QDir(strItem2).exists() ) {
currentDir.cd(strItem2, TRUE);
populateLocalView();
}
} else { // not a symlink
if(strItem.find(". .",0,TRUE) && strItem.find("/",0,TRUE)!=-1 ) {
if(QDir(QDir::cleanDirPath(currentDir.canonicalPath()+"/"+strItem)).exists() ) {
strItem=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+strItem);
currentDir.cd(strItem,FALSE);
populateLocalView();
} else {
currentDir.cdUp();
populateLocalView();
}
if(QDir(strItem).exists()){
currentDir.cd(strItem, TRUE);
populateLocalView();
}
} else {
strItem=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+strItem);
if( QFile::exists(strItem ) ) {
qDebug("upload "+strItem);
}
} //end not symlink
chdir(strItem.latin1());
}
}
void OpieFtp::showHidden()
{
if (!b) {
currentDir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All);
// currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst);
b=TRUE;
} else {
currentDir.setFilter( QDir::Files | QDir::Dirs/* | QDir::Hidden*/ | QDir::All);
// currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst);
b=FALSE;
}
populateLocalView();
}
void OpieFtp::ListPressed( int mouse, QListViewItem *item, const QPoint &point, int i)
{
switch (mouse) {
case 1:
break;
case 2:
showLocalMenu();
break;
};
}
void OpieFtp::RemoteListPressed( int mouse, QListViewItem *item, const QPoint &point, int i)
{
switch (mouse) {
case 1:
break;
case 2:
showRemoteMenu();
break;
};
}
void OpieFtp::showRemoteMenu()
{
QPopupMenu m;// = new QPopupMenu( Local_View );
m.insertItem( tr( "Download" ), this, SLOT( remoteDownload() ));
m.insertItem( tr( "Make Directory" ), this, SLOT( remoteMakDir() ));
m.insertItem( tr( "Rename" ), this, SLOT( remoteRename() ));