summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/advancedfm/advancedfm.cpp216
-rw-r--r--noncore/apps/advancedfm/advancedfm.h6
2 files changed, 141 insertions, 81 deletions
diff --git a/noncore/apps/advancedfm/advancedfm.cpp b/noncore/apps/advancedfm/advancedfm.cpp
index b5fcccf..ee3f736 100644
--- a/noncore/apps/advancedfm/advancedfm.cpp
+++ b/noncore/apps/advancedfm/advancedfm.cpp
@@ -63,4 +63,7 @@
#include <time.h>
#include <fcntl.h>
+#include <mntent.h>
+#include <string.h>
+#include <errno.h>
AdvancedFm::AdvancedFm( )
@@ -272,13 +275,4 @@ void AdvancedFm::tabChanged(QWidget *w)
void AdvancedFm::populateLocalView()
{
-// QList<QListViewItem> * getSelectedItems( QListView * Local_View );
-// QListViewItemIterator it( Local_View );
-// for ( ; it.current(); ++it ) {
-// if ( it.current()->isSelected() ) {
-// QString strItem = it.current()->text(0);
-// QString localFile = currentDir.canonicalPath()+"/"+strItem;
-// QFileInfo fi(localFile);
-// }
-// }
QPixmap pm;
Local_View->clear();
@@ -288,5 +282,8 @@ void AdvancedFm::populateLocalView()
QString fileL, fileS, fileDate;
// qDebug(currentDir.canonicalPath());
-
+// struct stat buf;
+// mode_t mode;
+ QString fs= getFileSystemType((const QString &) currentDir.canonicalPath());
+ setCaption("AdvancedFm :: "+fs);
bool isDir=FALSE;
const QFileInfoList *list = currentDir.entryInfoList( /*QDir::All*/ /*, QDir::SortByMask*/);
@@ -305,5 +302,5 @@ void AdvancedFm::populateLocalView()
fileL.sprintf( "%s",fi->fileName().data() );
fileDate= fi->lastModified().toString();
- if( QDir(QDir::cleanDirPath(currentDir.canonicalPath()+"/"+fileL)).exists() ) {
+ if( QDir(QDir::cleanDirPath( currentDir.canonicalPath()+"/"+fileL)).exists() ) {
fileL+="/";
isDir=TRUE;
@@ -311,31 +308,30 @@ void AdvancedFm::populateLocalView()
}
}
+ QFileInfo fileInfo( currentDir.canonicalPath()+"/"+fileL);
if(fileL !="./" && fi->exists()) {
item= new QListViewItem( Local_View, fileL, fileS , fileDate);
+
if(isDir || fileL.find("/",0,TRUE) != -1) {
- if( !QDir( fi->filePath() ).isReadable())
+
+ if( !QDir( fi->filePath() ).isReadable()) //is directory
pm = Resource::loadPixmap( "lockedfolder" );
else
pm= Resource::loadPixmap( "folder" );
- item->setPixmap( 0,pm );
- } else {
-// if(fi->isExecutable()) {
-// pm = Resource::loadPixmap( "exec");
-// item->setPixmap( 0,pm);
-// }
- if( !fi->isReadable() ) {
- pm = Resource::loadPixmap( "locked" );
- item->setPixmap( 0,pm);
-
- }
- else {
- MimeType mt(fi->filePath());
- pm=mt.pixmap(); //sets the correct pixmap for mimetype
- if(pm.isNull())
- pm = Resource::loadPixmap( "UnknownDocument-14" );
- item->setPixmap( 0,pm);
- }
+// item->setPixmap( 0,pm );
+ } else if( fileInfo.isExecutable() || fs == "vfat" && fi->filePath().contains("/bin") ) { //is exec
+ pm = Resource::loadPixmap( "exec");
+// item->setPixmap( 0,pm);
+ } else if( !fi->isReadable() ) {
+ pm = Resource::loadPixmap( "locked" );
+// item->setPixmap( 0,pm);
+ } else { //everything else goes by mimetype
+ MimeType mt(fi->filePath());
+ pm=mt.pixmap(); //sets the correct pixmap for mimetype
+ if(pm.isNull())
+ pm = Resource::loadPixmap( "UnknownDocument-14" );
+// item->setPixmap( 0,pm);
}
- if( fileL.find("->",0,TRUE) != -1) {
+ item->setPixmap( 0,pm);
+ if( fi->isSymLink() &&fileL.find("->",0,TRUE) != -1) {
// overlay link image
pm= Resource::loadPixmap( "folder" );
@@ -346,5 +342,6 @@ void AdvancedFm::populateLocalView()
item->setPixmap( 0, pm);
}
- } isDir=FALSE;
+ }
+ isDir=FALSE;
++it;
}
@@ -352,11 +349,11 @@ void AdvancedFm::populateLocalView()
if(currentDir.canonicalPath().find("dev",0,TRUE) != -1) {
struct stat buf;
- struct stat st;
+// struct stat st;
dev_t devT;
- mode_t mode;
+// mode_t mode;
DIR *dir;
- int fd = 0;
+// int fd = 0;
struct dirent *mydirent;
- int i = 1;
+// int i = 1;
if((dir = opendir( currentDir.canonicalPath().latin1())) != NULL)
while ((mydirent = readdir(dir)) != NULL) {
@@ -402,4 +399,7 @@ void AdvancedFm::populateRemoteView()
currentRemoteDir.setNameFilter(filterStr);
QString fileL, fileS, fileDate;
+
+ QString fs= getFileSystemType((const QString &) currentRemoteDir.canonicalPath());
+ setCaption("AdvancedFm :: "+fs);
bool isDir=FALSE;
const QFileInfoList *list = currentRemoteDir.entryInfoList( /*QDir::All*/ /*, QDir::SortByMask*/);
@@ -434,31 +434,30 @@ void AdvancedFm::populateRemoteView()
else
pm= Resource::loadPixmap( "folder" );
- item->setPixmap( 0,pm );
+// item->setPixmap( 0,pm );
+ } else if( fi->isExecutable() || fs == "vfat" && fi->filePath().contains("/bin") ) {
+ pm = Resource::loadPixmap( "exec");
+// item->setPixmap( 0,pm);
+ } else if( !fi->isReadable() ) {
+ pm = Resource::loadPixmap( "locked" );
+// item->setPixmap( 0,pm);
} else {
-// if(fi->isExecutable()) {
-// pm = Resource::loadPixmap( "exec");
+ MimeType mt(fi->filePath());
+ pm=mt.pixmap(); //sets the correct pixmap for mimetype
+ if(pm.isNull())
+ pm = Resource::loadPixmap( "UnknownDocument-14" );
// item->setPixmap( 0,pm);
-// }
- if( !fi->isReadable() ) {
- pm = Resource::loadPixmap( "locked" );
- item->setPixmap( 0,pm);
- } else {
- MimeType mt(fi->filePath());
- pm=mt.pixmap(); //sets the correct pixmap for mimetype
- if(pm.isNull())
- pm = Resource::loadPixmap( "UnknownDocument-14" );
- item->setPixmap( 0,pm);
- }
- }
- if( fileL.find("->",0,TRUE) != -1) {
- // overlay link image
- pm= Resource::loadPixmap( "folder" );
- QPixmap lnk = Resource::loadPixmap( "opie/symlink" );
- QPainter painter( &pm );
- painter.drawPixmap( pm.width()-lnk.width(), pm.height()-lnk.height(), lnk );
- pm.setMask( pm.createHeuristicMask( FALSE ) );
- item->setPixmap( 0, pm);
}
- } isDir=FALSE;
+ if( fi->isSymLink() && fileL.find("->",0,TRUE) != -1) {
+ // overlay link image
+ pm= Resource::loadPixmap( "folder" );
+ QPixmap lnk = Resource::loadPixmap( "opie/symlink" );
+ QPainter painter( &pm );
+ painter.drawPixmap( pm.width()-lnk.width(), pm.height()-lnk.height(), lnk );
+ pm.setMask( pm.createHeuristicMask( FALSE ) );
+// item->setPixmap( 0, pm);
+ }
+ item->setPixmap( 0, pm);
+ }
+ isDir=FALSE;
++it;
}
@@ -466,10 +465,10 @@ void AdvancedFm::populateRemoteView()
if(currentRemoteDir.canonicalPath().find("dev",0,TRUE) != -1) {
struct stat buf;
- struct stat st;
- mode_t mode;
+// struct stat st;
+// mode_t mode;
DIR *dir;
- int fd = 0;
+// int fd = 0;
struct dirent *mydirent;
- int i = 1;
+// int i = 1;
if((dir = opendir( currentRemoteDir.canonicalPath().latin1())) != NULL)
while ((mydirent = readdir(dir)) != NULL) {
@@ -661,4 +660,5 @@ void AdvancedFm::showLocalMenu(QListViewItem * item)
m.insertItem( tr( "Move" ), this, SLOT( move() ));
m.insertSeparator();
+ m.insertItem( tr( "Rescan" ), this, SLOT( populateLocalView() ));
m.insertItem( tr( "Run Command" ), this, SLOT( runCommand() ));
m.insertItem( tr( "File Info" ), this, SLOT( fileStatus() ));
@@ -696,4 +696,5 @@ void AdvancedFm::showRemoteMenu(QListViewItem * item)
m.insertItem( tr( "Move" ), this, SLOT( move() ));
m.insertSeparator();
+ m.insertItem( tr( "Rescan" ), this, SLOT( populateRemoteView() ));
m.insertItem( tr( "Run Command" ), this, SLOT( runCommand() ));
m.insertItem( tr( "File Info" ), this, SLOT( fileStatus() ));
@@ -714,11 +715,15 @@ void AdvancedFm::showRemoteMenu(QListViewItem * item)
void AdvancedFm::runThis() {
// QFileInfo *fi;
+QString fs;
if (TabWidget->currentPageIndex() == 0) {
QString curFile = Local_View->currentItem()->text(0);
+
+ fs= getFileSystemType((const QString &) currentDir.canonicalPath());
QFileInfo fileInfo( currentDir.canonicalPath()+"/"+curFile);
-// if(fileInfo.isExecutable()) {
-// QCopEnvelope e("QPE/System", "execute(QString)" );
-// e << curFile;
-// } else {
+ qDebug( fileInfo.owner());
+ if( fileInfo.isExecutable() || fs == "vfat" && fileInfo.filePath().contains("/bin") ) {
+ QCopEnvelope e("QPE/System", "execute(QString)" );
+ e << curFile;
+ } else {
curFile = currentDir.canonicalPath()+"/"+curFile;
DocLnk nf(curFile);
@@ -729,13 +734,15 @@ void AdvancedFm::runThis() {
nf.execute();
}
-// }
+ }
// MimeType mt( curFile);
} else {
QString curFile = Remote_View->currentItem()->text(0);
+ fs= getFileSystemType((const QString &) currentRemoteDir.canonicalPath());
+ qDebug("Filesystemtype is "+fs);
QFileInfo fileInfo( currentRemoteDir.canonicalPath()+"/"+curFile);
-// if(fileInfo.isExecutable()) {
-// QCopEnvelope e("QPE/System", "execute(QString)" );
-// e << curFile;
-// } else {
+ if(fileInfo.isExecutable() || fs == "vfat" && fileInfo.filePath().contains("/bin") ) {
+ QCopEnvelope e("QPE/System", "execute(QString)" );
+ e << curFile;
+ } else {
curFile = currentRemoteDir.canonicalPath()+"/"+curFile;
DocLnk nf(curFile);
@@ -746,5 +753,5 @@ void AdvancedFm::runThis() {
nf.execute();
}
-// }
+ }
// MimeType mt( curFile);
}
@@ -1345,5 +1352,5 @@ void AdvancedFm::runCommand() {
command = fileDlg->LineEdit1->text();
- int err=0;
+// int err=0;
Output *outDlg;
outDlg = new Output(this, tr("AdvancedFm Output"),FALSE);
@@ -1403,5 +1410,5 @@ void AdvancedFm::fileStatus() {
}
QString command = " stat -l "+ curFile +" 2>&1";
- int err=0;
+// int err=0;
Output *outDlg;
outDlg = new Output(this, tr("AdvancedFm Output"),FALSE);
@@ -1520,9 +1527,5 @@ void AdvancedFm::keyReleaseEvent( QKeyEvent *e)
case Key_0:
break;
-
-
-
}
-
}
@@ -1568,4 +1571,57 @@ void AdvancedFm::QPEButtonPushed() {
}
update();
+}
+void AdvancedFm::parsetab(const QString &fileName) {
+
+ fileSystemTypeList.clear();
+ fsList.clear();
+ struct mntent *me;
+// if(fileName == "/etc/mtab") {
+ FILE *mntfp = setmntent( fileName.latin1(), "r" );
+ if ( mntfp ) {
+ while ( (me = getmntent( mntfp )) != 0 ) {
+ QString deviceName = me->mnt_fsname;
+ QString filesystemType = me->mnt_type;
+ QString mountDir = me->mnt_dir;
+ if(deviceName != "none") {
+ if( fsList.contains(filesystemType) == 0
+ & filesystemType.find("proc",0,TRUE) == -1
+ & filesystemType.find("cramfs",0,TRUE) == -1
+ & filesystemType.find("auto",0,TRUE) == -1)
+ fsList << filesystemType;
+// deviceList << deviceName;
+// qDebug(mountDir+"::"+filesystemType);
+ fileSystemTypeList << mountDir+"::"+filesystemType;
+ }
+ }
+ }
+ endmntent( mntfp );
}
+
+QString AdvancedFm::getFileSystemType(const QString &currentText) {
+ parsetab("/etc/mtab"); //why did TT forget filesystem type?
+ QString current = currentText;//.right( currentText.length()-1);
+ QString baseFs;
+ for ( QStringList::Iterator it = fileSystemTypeList.begin(); it != fileSystemTypeList.end(); ++it ) {
+ QString temp = (*it);
+ QString path = temp.left(temp.find("::",0,TRUE) );
+ path = path.right( path.length()-1);
+ if(path.isEmpty()) baseFs = temp.right( temp.length() - temp.find("::",0,TRUE) - 2);
+ if( current.find( path,0,TRUE) != -1 && !path.isEmpty()) {
+ return temp.right( temp.length() - temp.find("::",0,TRUE) - 2);
+ }
+ }
+ return baseFs;
+}
+
+
+// QList<QListViewItem> * getSelectedItems( QListView * Local_View );
+// QListViewItemIterator it( Local_View );
+// for ( ; it.current(); ++it ) {
+// if ( it.current()->isSelected() ) {
+// QString strItem = it.current()->text(0);
+// QString localFile = currentDir.canonicalPath()+"/"+strItem;
+// QFileInfo fi(localFile);
+// }
+// }
diff --git a/noncore/apps/advancedfm/advancedfm.h b/noncore/apps/advancedfm/advancedfm.h
index 5c2719e..90619ba 100644
--- a/noncore/apps/advancedfm/advancedfm.h
+++ b/noncore/apps/advancedfm/advancedfm.h
@@ -59,4 +59,5 @@ public:
QListViewItem * item;
bool b;
+ QStringList fileSystemTypeList, fsList;
int currentServerConfig;
protected slots:
@@ -103,5 +104,8 @@ protected:
QGridLayout *tabLayout, *tabLayout_2, *tabLayout_3;
QStringList remoteDirPathStringList, localDirPathStringList;
- void keyReleaseEvent( QKeyEvent *);
+ void keyReleaseEvent( QKeyEvent *);
+ QString getFileSystemType(const QString &);
+ void parsetab(const QString &fileName);
+
protected slots:
void homeButtonPushed();