2010-04-08 12:33:10 -04:00
/****************************************************************
* RetroShare is distributed under the following license :
*
* Copyright ( C ) 2006 - 2010 RetroShare Team
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor ,
* Boston , MA 02110 - 1301 , USA .
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include "ShareDialog.h"
2010-08-06 05:40:23 -04:00
# include <retroshare/rsfiles.h>
2010-04-08 12:33:10 -04:00
# include <QContextMenuEvent>
2010-09-17 14:27:30 -04:00
# include <QFileDialog>
2010-04-08 12:33:10 -04:00
# include <QMessageBox>
# include <QComboBox>
/** Default constructor */
2010-09-18 12:05:32 -04:00
ShareDialog : : ShareDialog ( std : : string filename , QWidget * parent , Qt : : WFlags flags )
2010-04-08 12:33:10 -04:00
: QDialog ( parent , flags )
{
2010-09-17 14:27:30 -04:00
/* Invoke Qt Designer generated QObject setup routine */
ui . setupUi ( this ) ;
connect ( ui . browseButton , SIGNAL ( clicked ( bool ) ) , this , SLOT ( browseDirectory ( ) ) ) ;
connect ( ui . okButton , SIGNAL ( clicked ( bool ) ) , this , SLOT ( addDirectory ( ) ) ) ;
2010-09-18 12:05:32 -04:00
connect ( ui . closeButton , SIGNAL ( clicked ( ) ) , this , SLOT ( close ( ) ) ) ;
2010-04-08 12:33:10 -04:00
2010-09-17 14:27:30 -04:00
ui . okButton - > setEnabled ( false ) ;
2010-04-08 12:33:10 -04:00
2010-09-18 12:05:32 -04:00
if ( filename . empty ( ) = = false ) {
/* edit exisiting share */
std : : list < SharedDirInfo > dirs ;
rsFiles - > getSharedDirectories ( dirs ) ;
std : : list < SharedDirInfo > : : const_iterator it ;
for ( it = dirs . begin ( ) ; it ! = dirs . end ( ) ; it + + ) {
if ( it - > filename = = filename ) {
/* fill dialog */
ui . okButton - > setEnabled ( true ) ;
ui . localpath_lineEdit - > setText ( QString : : fromUtf8 ( it - > filename . c_str ( ) ) ) ;
ui . localpath_lineEdit - > setDisabled ( true ) ;
ui . browseButton - > setDisabled ( true ) ;
ui . virtualpath_lineEdit - > setText ( QString : : fromUtf8 ( it - > virtualname . c_str ( ) ) ) ;
ui . browsableCheckBox - > setChecked ( it - > shareflags & RS_FILE_HINTS_BROWSABLE ) ;
ui . networkwideCheckBox - > setChecked ( it - > shareflags & RS_FILE_HINTS_NETWORK_WIDE ) ;
break ;
}
}
}
2010-04-08 12:33:10 -04:00
}
void ShareDialog : : browseDirectory ( )
{
2010-09-17 14:27:30 -04:00
/* select a dir*/
QString qdir = QFileDialog : : getExistingDirectory ( this , tr ( " Select A Folder To Share " ) , " " , QFileDialog : : DontUseNativeDialog | QFileDialog : : ShowDirsOnly | QFileDialog : : DontResolveSymlinks ) ;
/* add it to the server */
if ( qdir . isEmpty ( ) ) {
ui . okButton - > setEnabled ( false ) ;
return ;
}
ui . okButton - > setEnabled ( true ) ;
ui . localpath_lineEdit - > setText ( qdir ) ;
2010-04-08 12:33:10 -04:00
}
void ShareDialog : : addDirectory ( )
{
2010-09-17 14:27:30 -04:00
SharedDirInfo sdi ;
sdi . filename = ui . localpath_lineEdit - > text ( ) . toUtf8 ( ) . constData ( ) ;
sdi . virtualname = ui . virtualpath_lineEdit - > text ( ) . toUtf8 ( ) . constData ( ) ;
2010-04-08 12:33:10 -04:00
2010-09-17 14:27:30 -04:00
sdi . shareflags = 0 ;
2010-04-08 12:33:10 -04:00
2010-09-17 14:27:30 -04:00
if ( ui . browsableCheckBox - > isChecked ( ) ) {
sdi . shareflags | = RS_FILE_HINTS_BROWSABLE ;
}
if ( ui . networkwideCheckBox - > isChecked ( ) ) {
sdi . shareflags | = RS_FILE_HINTS_NETWORK_WIDE ;
}
2010-09-18 12:05:32 -04:00
if ( ui . localpath_lineEdit - > isEnabled ( ) ) {
/* add new share */
rsFiles - > addSharedDirectory ( sdi ) ;
} else {
/* edit exisiting share */
bool found = false ;
std : : list < SharedDirInfo > dirs ;
rsFiles - > getSharedDirectories ( dirs ) ;
std : : list < SharedDirInfo > : : iterator it ;
for ( it = dirs . begin ( ) ; it ! = dirs . end ( ) ; it + + ) {
if ( it - > filename = = sdi . filename ) {
found = true ;
if ( it - > virtualname ! = sdi . virtualname ) {
/* virtual name changed, remove shared directory and add it again */
rsFiles - > removeSharedDirectory ( it - > filename ) ;
rsFiles - > addSharedDirectory ( sdi ) ;
break ;
}
if ( it - > shareflags ^ sdi . shareflags ) {
/* modifies the flags */
it - > shareflags = sdi . shareflags ;
rsFiles - > updateShareFlags ( * it ) ;
break ;
}
/* nothing changed */
break ;
}
}
if ( found = = false ) {
/* not modified, add share directory instead */
rsFiles - > addSharedDirectory ( sdi ) ;
}
2010-09-17 14:27:30 -04:00
}
2010-04-08 12:33:10 -04:00
2010-09-17 14:27:30 -04:00
close ( ) ;
2010-04-08 12:33:10 -04:00
}