summaryrefslogtreecommitdiff
path: root/noncore/net/opie-smb/qsmb.cpp
authorllornkcor <llornkcor>2005-08-16 09:32:25 (UTC)
committer llornkcor <llornkcor>2005-08-16 09:32:25 (UTC)
commit8c44cc4fdb67ea6b96cf7e49ec648de4049a9f1c (patch) (side-by-side diff)
tree28fbe8466b5b93173513402f7b46e6c7ce5222ac /noncore/net/opie-smb/qsmb.cpp
parent2176aa6c353e794798aa8ecddc28be365e94989c (diff)
downloadopie-8c44cc4fdb67ea6b96cf7e49ec648de4049a9f1c.zip
opie-8c44cc4fdb67ea6b96cf7e49ec648de4049a9f1c.tar.gz
opie-8c44cc4fdb67ea6b96cf7e49ec648de4049a9f1c.tar.bz2
add current mount when selecting server
Diffstat (limited to 'noncore/net/opie-smb/qsmb.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opie-smb/qsmb.cpp33
1 files changed, 27 insertions, 6 deletions
diff --git a/noncore/net/opie-smb/qsmb.cpp b/noncore/net/opie-smb/qsmb.cpp
index e2ddc7f..7f3ae89 100644
--- a/noncore/net/opie-smb/qsmb.cpp
+++ b/noncore/net/opie-smb/qsmb.cpp
@@ -171,57 +171,61 @@ void Qsmb::hostSelected(int /*index*/ )
scanning = true;
QString cmd;
QStringList ccmd;
LScan->setText("Scanning...");
ccmd << "/usr/bin/smbclient";
ccmd << "-L";
ccmd << CBHost->currentText();
ccmd << "-N";
if(username->text().isEmpty()) {
//do nothing
} else {
ccmd << "-U";
ccmd << username->text()+"\%"+ password->text();
}
runCommand(ccmd);
QTextStream s(&out, IO_ReadOnly);
while ( !s.atEnd() ) {
QString share;
QString comment;
+ QString mount;
QString tmp = s.readLine();
if( tmp.find("$") == -1 && tmp.find("Disk") != -1) {
QStringList token = QStringList::split(' ', tmp );
share = token[0];
comment = token[2];
share = share.stripWhiteSpace();
comment = comment.stripWhiteSpace();
- element = new QListViewItem(ListViewScan, share, comment);
+// if(isMounted(share))
+
+ mount = getMount(share);
+ element = new QListViewItem(ListViewScan, share, comment, mount);
element->setOpen(true);
// top_element = element;
// parent = element;
}
}
// owarn << "i="<< index << "cmd:" << cmd << oendl;
TextViewOutput->append(cmd);
/* run smbclient & read output */
// if ((pipe = popen(cmd.latin1(), "r")) == NULL) {
// snprintf(result, 256, "Error: Can't run %s", cmd.latin1());
// // cmd = "Error: Can't run "+cmd;
// TextViewOutput->append(result);
// return;
// }
/* parse output and display in ListViewScan */
// while(fgets(result, 256, pipe) != NULL) {
// /* put result into TextViewOutput */
// TextViewOutput->append(result);
// if( strchr(result, '$') == NULL ) {
@@ -299,64 +303,62 @@ void Qsmb::DoIt()
ccmd << "mkdir";
ccmd << "-p";
ccmd << text;
qWarning( "cmd: "+ ccmd.join(" "));
runCommand(ccmd);
}
share = element->text(0);
qWarning("selected share is "+share);
QString service = CBHost->currentText();
service = service.stripWhiteSpace();
if(mount.left(1) != "/")
mount = QDir::currentDirPath()+"/"+mount;
mount = mount.stripWhiteSpace();
ccmd.clear();
ccmd << "/usr/bin/smbmount";
ccmd << "//"+ service+"/"+share;
ccmd << mount;
ccmd << "-o";
ccmd << "username="+username->text()+",password="+password->text()+"";
- TextViewOutput->append(ccmd.join(" ").latin1());
-
if(onbootBtn->isChecked()) {
qWarning("Saving Setting permanently...");
QFile sambenv("/opt/QtPalmtop/etc/samba.env");
QTextStream smbv(&sambenv);
sambenv.open(IO_WriteOnly);
smbv << ccmd.join(" ") ;
sambenv.close();
}
noerr = runCommand(ccmd);
LScan->setText("");
- if(noerr) {
+ if(noerr && isMounted(mount)) {
element->setText(2, mount);
TextViewOutput->append("\n\n================CheckMounts==================\n");
ccmd = "/bin/mount";
runCommand(ccmd);
TextViewOutput->append("\n\n============================================\n");
qApp->processEvents();
} else {
//do nothing
}
scanning = false;
}
void Qsmb::umountIt()
{
QString mount = mountpt->currentText();
if(!isMounted(mount)) {
qWarning(mount +" is not mounted");
TextViewOutput->append(mount +" is not mounted");
return;
}
QStringList ccmd;
QString share;
@@ -377,40 +379,59 @@ void Qsmb::umountIt()
ccmd = "/bin/mount";
runCommand(ccmd);
}
bool Qsmb::runCommand(const QStringList & command) {
qWarning( "runCommand " + command.join(" ") );
TextViewOutput->append(command.join(" "));
out = "";
Process ipkg_status( command);
bool r = ipkg_status.exec("",out);
qWarning("result is %d"+ r );
qWarning("Output " + out );
TextViewOutput->append(out);
//very hacky
if(out.find("failed") !=-1) {
r = false;
}
return r;
}
-bool Qsmb::isMounted(const QString &mountPoint) {
+bool Qsmb::isMounted(const QString &mountPoint)
+{
struct mntent *me;
bool mounted = false;
FILE *mntfp = setmntent( "/etc/mtab", "r" );
if ( mntfp ){
while ( (me = getmntent( mntfp )) != 0 ) {
QString deviceName = me->mnt_fsname;
QString mountDir = me->mnt_dir;
QString fsType = me->mnt_type;
- if( fsType == "smbfs" && mountDir.find(mountPoint) !=-1)
+ if( fsType == "smbfs" && (mountDir.find(mountPoint) != -1 | deviceName.find(mountPoint) != -1))
mounted = true;
}
}
endmntent( mntfp );
return mounted;
}
+
+QString Qsmb::getMount(const QString &shareName)
+{
+ struct mntent *me;
+ QString mount;
+ FILE *mntfp = setmntent( "/etc/mtab", "r" );
+ if ( mntfp ){
+ while ( (me = getmntent( mntfp )) != 0 ) {
+ QString deviceName = me->mnt_fsname;
+ QString mountDir = me->mnt_dir;
+ QString fsType = me->mnt_type;
+ if( fsType == "smbfs" && deviceName.find(shareName) != -1)
+ mount = mountDir;
+ }
+ }
+ endmntent( mntfp );
+ return mount;
+}