author | llornkcor <llornkcor> | 2005-08-16 08:48:50 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2005-08-16 08:48:50 (UTC) |
commit | e49f60f79b86a6feb3cae4bc33c19123deec4eb3 (patch) (side-by-side diff) | |
tree | 0dbfa09072fcdd70f19a06ac93ad8f3f97b2978c | |
parent | 373b2f0bdc2be62c6e275c74488a8921d03fc299 (diff) | |
download | opie-e49f60f79b86a6feb3cae4bc33c19123deec4eb3.zip opie-e49f60f79b86a6feb3cae4bc33c19123deec4eb3.tar.gz opie-e49f60f79b86a6feb3cae4bc33c19123deec4eb3.tar.bz2 |
remove last popen. add umount.
-rw-r--r-- | noncore/net/opie-smb/qsmb.cpp | 184 | ||||
-rw-r--r-- | noncore/net/opie-smb/qsmb.h | 2 | ||||
-rw-r--r-- | noncore/net/opie-smb/qsmbbase.ui | 59 |
3 files changed, 153 insertions, 92 deletions
diff --git a/noncore/net/opie-smb/qsmb.cpp b/noncore/net/opie-smb/qsmb.cpp index 422b9f3..b978b46 100644 --- a/noncore/net/opie-smb/qsmb.cpp +++ b/noncore/net/opie-smb/qsmb.cpp @@ -9,2 +9,3 @@ #include <qfileinfo.h> +#include <qtabwidget.h> @@ -28,8 +29,9 @@ #include <arpa/inet.h> - #include <rpc/clnt.h> +#include <sys/vfs.h> +#include <mntent.h> -#include <opie2/odebug.h> -using namespace Opie::Core; +// #include <opie2/odebug.h> +// using namespace Opie::Core; @@ -41,2 +43,3 @@ Qsmb::Qsmb( QWidget* parent, const char* name, WFlags fl ) connect(DoItBtn, SIGNAL(clicked()), this, SLOT(DoItClicked())); + connect(UnmountBtn, SIGNAL(clicked()), this, SLOT(umountIt())); connect(BtnScan, SIGNAL(clicked()), this, SLOT(scanClicked())); @@ -44,2 +47,3 @@ Qsmb::Qsmb( QWidget* parent, const char* name, WFlags fl ) + mountpt->setEditable(true); mountpt->insertItem("/mnt/samba1",-1); @@ -48,2 +52,4 @@ Qsmb::Qsmb( QWidget* parent, const char* name, WFlags fl ) +// TextViewOutput + top_element = NULL; @@ -97,4 +103,2 @@ void Qsmb::scan() { -// int i; - if (scanning) return; @@ -111,3 +115,3 @@ void Qsmb::scan() QString ip = inet_ntoa( my_addr.sin_addr); - owarn << "IP Address : " << ip<< oendl; + qWarning("IP Address : "+ip); @@ -149,9 +153,9 @@ void Qsmb::scan() -void Qsmb::hostSelected(int index) +void Qsmb::hostSelected(int /*index*/ ) { - owarn << "hostSelected" << oendl; QListViewItem *element; - QListViewItem *parent; +// QListViewItem *parent; QString text = CBHost->currentText(); + ListViewScan->clear(); @@ -188,2 +192,4 @@ void Qsmb::hostSelected(int index) comment = token[2]; + share = share.stripWhiteSpace(); + comment = comment.stripWhiteSpace(); element = new QListViewItem(ListViewScan,share, comment); @@ -252,4 +258,6 @@ void Qsmb::hostSelected(int index) + void Qsmb::DoIt() { + QListViewItem *element; @@ -257,3 +265,2 @@ void Qsmb::DoIt() if(!element) { - QMessageBox::warning(this, tr("Error!!"),tr("<p><b>No</b> share selected!!</p>")); return; @@ -264,13 +271,16 @@ void Qsmb::DoIt() - int i; - bool err = false; + QString mount = mountpt->currentText(); + if(isMounted(mount)) { + qWarning(mount +" is already mounted"); + TextViewOutput->append(mount +" is already mounted"); + return; + } + + bool noerr = false; - char share[512]; + QString share; QString cmd; QString cmd2; - char result[256]; -// QString result; QString text = mountpt->currentText(); - - FILE *pipe,*pipe2; + QStringList ccmd; @@ -279,5 +289,3 @@ void Qsmb::DoIt() - if(! QFileInfo(text).exists()) { - QStringList ccmd; ccmd << "mkdir"; @@ -286,3 +294,3 @@ void Qsmb::DoIt() - owarn<<"cmd: "<< ccmd << oendl; + qWarning( "cmd: "+ ccmd.join(" ")); runCommand(ccmd); @@ -290,68 +298,75 @@ void Qsmb::DoIt() + share = element->text(0); + qWarning("selected share is "+share); - strcpy(share,(const char *)element->text(0)); + QString service = CBHost->currentText(); + service = service.stripWhiteSpace(); + if(mount.left(1) != "/") + mount = QDir::currentDirPath()+"/"+mount; + mount = mount.stripWhiteSpace(); + ccmd.clear(); - for(i = 0; i < 256; i++) { - if(isalpha( share[i])) { - strcpy( share, share + i); - break; - } - } - - cmd = "/usr/bin/smbmount //"+CBHost->currentText()+"/"+share+" "+mountpt->currentText()+" -o username="+username->text()+",password="+password->text(); - - owarn << "cmd: " << cmd << oendl; - TextViewOutput->append(cmd.latin1()); + 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()) { - owarn << "Saving Setting permanently..." << oendl; - cmd2 = "echo '" + cmd + "'>/opt/QtPalmtop/etc/samba.env"; - /* run command & read output */ - if ((pipe = popen(cmd2.latin1(), "r")) == NULL) { - snprintf(result, 256, "Error: Can't run %s", cmd.latin1()); - return; - } - /* parse output and display in ListViewScan */ - while(fgets(result, 256, pipe) != NULL) { - } + 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); - /* run command & read output */ - if ((pipe = popen(cmd.latin1(), "r")) == NULL) { - snprintf(result, 256, "Error: Can't run %s", cmd.latin1()); - TextViewOutput->append(result); - return; - } + LScan->setText(""); - /* parse output and display in ListViewScan */ - while(fgets(result, 256, pipe) != NULL) { - /* put result into TextViewOutput */ - TextViewOutput->append(result); + if(noerr) { + 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; +} - TextViewOutput->append("\n\n================CheckMounts==================\n"); - LScan->setText(""); +void Qsmb::umountIt() +{ + QString mount = mountpt->currentText(); + if(!isMounted(mount)) { + qWarning(mount +" is not mounted"); + TextViewOutput->append(mount +" is not mounted"); + return; + } - cmd = "/bin/mount 2>&1"; - owarn << "cmd: " << cmd << oendl; + QStringList ccmd; + QString share; + QListViewItem *element; + element = ListViewScan->selectedItem(); + share = element->text(0); + qWarning("selected share is "+share); - if ((pipe2 = popen(cmd.latin1(), "r")) == NULL) { + if(mount.left(1) != "/") + mount = QDir::currentDirPath()+"/"+mount; + mount = mount.stripWhiteSpace(); - snprintf(result, 256, "Error: Can't run %s", cmd.latin1()); -// result = "Error: Can't run "+ cmd; + ccmd << "/usr/bin/smbumount"; + ccmd << mount; + runCommand(ccmd); - TextViewOutput->append(result); - return; - } - /* parse output and display in ListViewScan */ - while(fgets(result, 256, pipe2) != NULL) { - /* put result into TextViewOutput */ - TextViewOutput->append(result); - } + element->setText(2, ""); - TextViewOutput->append("\n\n============================================\n"); - scanning = false; + ccmd = "/bin/mount"; + runCommand(ccmd); } @@ -359,3 +374,4 @@ void Qsmb::DoIt() bool Qsmb::runCommand(const QStringList & command) { - owarn << "runCommand " << command.join(" ") << oendl; + qWarning( "runCommand " + command.join(" ") ); + TextViewOutput->append(command.join(" ")); out = ""; @@ -364,8 +380,10 @@ bool Qsmb::runCommand(const QStringList & command) { - if(!r) { - QMessageBox::warning(this, tr("Error!!"),tr("<p>"+out+"</p>")); - } + qWarning("result is %d"+ r ); + qWarning("Output " + out ); + TextViewOutput->append(out); - owarn << "Output " << out << oendl; - TextViewOutput->append(out.latin1()); +//very hacky + if(out.find("failed") !=-1) { + r = false; + } return r; @@ -374 +392,17 @@ bool Qsmb::runCommand(const QStringList & command) { +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) + mounted = true; + } + } + endmntent( mntfp ); + return mounted; +} diff --git a/noncore/net/opie-smb/qsmb.h b/noncore/net/opie-smb/qsmb.h index b406a1e..fba94d0 100644 --- a/noncore/net/opie-smb/qsmb.h +++ b/noncore/net/opie-smb/qsmb.h @@ -28,2 +28,3 @@ private: bool scanning; + bool isMounted(const QString &); @@ -34,2 +35,3 @@ public slots: void DoItClicked(); + void umountIt(); QString out; diff --git a/noncore/net/opie-smb/qsmbbase.ui b/noncore/net/opie-smb/qsmbbase.ui index 297eb2a..4692282 100644 --- a/noncore/net/opie-smb/qsmbbase.ui +++ b/noncore/net/opie-smb/qsmbbase.ui @@ -13,4 +13,4 @@ <y>0</y> - <width>250</width> - <height>352</height> + <width>259</width> + <height>395</height> </rect> @@ -70,3 +70,3 @@ <name>spacing</name> - <number>0</number> + <number>2</number> </property> @@ -138,2 +138,16 @@ </column> + <column> + <property> + <name>text</name> + <string>Mount</string> + </property> + <property> + <name>clickable</name> + <bool>true</bool> + </property> + <property> + <name>resizeable</name> + <bool>true</bool> + </property> + </column> <property stdset="1"> @@ -180,14 +194,3 @@ </widget> - <widget row="5" column="0" rowspan="1" colspan="2" > - <class>QPushButton</class> - <property stdset="1"> - <name>name</name> - <cstring>DoItBtn</cstring> - </property> - <property stdset="1"> - <name>text</name> - <string>&Mount</string> - </property> - </widget> - <widget row="5" column="2" rowspan="1" colspan="2" > + <widget row="5" column="2" rowspan="2" colspan="2" > <class>QLayoutWidget</class> @@ -278,2 +281,24 @@ </widget> + <widget row="6" column="0" rowspan="1" colspan="2" > + <class>QPushButton</class> + <property stdset="1"> + <name>name</name> + <cstring>UnmountBtn</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>&Umount</string> + </property> + </widget> + <widget row="5" column="0" rowspan="1" colspan="2" > + <class>QPushButton</class> + <property stdset="1"> + <name>name</name> + <cstring>DoItBtn</cstring> + </property> + <property stdset="1"> + <name>text</name> + <string>&Mount</string> + </property> + </widget> </grid> @@ -293,3 +318,3 @@ <name>margin</name> - <number>11</number> + <number>2</number> </property> @@ -297,3 +322,3 @@ <name>spacing</name> - <number>6</number> + <number>2</number> </property> |