2016-02-25 20:19:27 +00:00
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// Copyright (C) 2010 Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
# include "stdpch.h"
2016-06-12 13:40:38 +00:00
# include "installdialog.h"
2016-02-25 20:19:27 +00:00
# include "configfile.h"
2016-05-25 21:23:48 +00:00
# include "utils.h"
2016-02-25 20:19:27 +00:00
# include "nel/misc/system_info.h"
# include "nel/misc/common.h"
# ifdef DEBUG_NEW
# define new DEBUG_NEW
# endif
2016-06-12 13:40:38 +00:00
CInstallDialog : : CInstallDialog ( ) : QDialog ( )
2016-02-25 20:19:27 +00:00
{
2016-05-14 16:47:45 +00:00
setWindowFlags ( windowFlags ( ) & ~ Qt : : WindowContextHelpButtonHint ) ;
2016-02-25 20:19:27 +00:00
setupUi ( this ) ;
oldDirectoryRadioButton - > setVisible ( false ) ;
// enable download radio button by default
internetRadioButton - > setChecked ( true ) ;
m_oldDirectory = CConfigFile : : getInstance ( ) - > getOldInstallationDirectory ( ) ;
// found a previous installation
if ( CConfigFile : : getInstance ( ) - > areRyzomDataInstalledIn ( m_oldDirectory ) )
{
oldDirectoryRadioButton - > setText ( tr ( " Old installation: %1 " ) . arg ( m_oldDirectory ) ) ;
oldDirectoryRadioButton - > setVisible ( true ) ;
2016-05-25 21:23:48 +00:00
oldDirectoryRadioButton - > setChecked ( true ) ;
2016-02-25 20:19:27 +00:00
}
updateAnotherLocationText ( ) ;
2016-09-29 14:54:50 +00:00
// update default destination
onDestinationDefaultButtonClicked ( ) ;
2016-02-25 20:19:27 +00:00
// check whether OS architecture is 32 or 64 bits
if ( CConfigFile : : has64bitsOS ( ) )
{
clientArchGroupBox - > setVisible ( true ) ;
clientArch64RadioButton - > setChecked ( true ) ;
}
else
{
clientArchGroupBox - > setVisible ( false ) ;
clientArch32RadioButton - > setChecked ( true ) ;
}
const CServer & server = CConfigFile : : getInstance ( ) - > getServer ( ) ;
internetRadioButton - > setText ( tr ( " Internet (%1 to download) " ) . arg ( qBytesToHumanReadable ( server . dataCompressedSize ) ) ) ;
destinationGroupBox - > setTitle ( tr ( " Files will be installed to (requires %1): " ) . arg ( qBytesToHumanReadable ( server . dataUncompressedSize ) ) ) ;
connect ( anotherLocationBrowseButton , SIGNAL ( clicked ( ) ) , SLOT ( onAnotherLocationBrowseButtonClicked ( ) ) ) ;
2016-09-29 14:54:50 +00:00
connect ( destinationDefaultButton , SIGNAL ( clicked ( ) ) , SLOT ( onDestinationDefaultButtonClicked ( ) ) ) ;
2016-02-25 20:19:27 +00:00
connect ( destinationBrowseButton , SIGNAL ( clicked ( ) ) , SLOT ( onDestinationBrowseButtonClicked ( ) ) ) ;
// TODO: if found a folder with initial data, get its total size and check if at least that size is free on the disk
// by default, advanced parameters are hidden
onShowAdvancedParameters ( Qt : : Unchecked ) ;
connect ( advancedCheckBox , SIGNAL ( stateChanged ( int ) ) , SLOT ( onShowAdvancedParameters ( int ) ) ) ;
2016-09-21 07:55:49 +00:00
raise ( ) ;
2016-02-25 20:19:27 +00:00
}
2016-06-12 13:40:38 +00:00
CInstallDialog : : ~ CInstallDialog ( )
2016-02-25 20:19:27 +00:00
{
}
2016-06-12 13:40:38 +00:00
void CInstallDialog : : onShowAdvancedParameters ( int state )
2016-02-25 20:19:27 +00:00
{
advancedFrame - > setVisible ( state ! = Qt : : Unchecked ) ;
adjustSize ( ) ;
}
2016-06-12 13:40:38 +00:00
void CInstallDialog : : onAnotherLocationBrowseButtonClicked ( )
2016-02-25 20:19:27 +00:00
{
QString directory ;
for ( ; ; )
{
2016-09-16 16:58:33 +00:00
directory = QFileDialog : : getExistingDirectory ( this , tr ( " Please choose directory where Ryzom is currently installed. " ) ) ;
2016-02-25 20:19:27 +00:00
if ( directory . isEmpty ( ) ) return ;
if ( CConfigFile : : getInstance ( ) - > isRyzomInstalledIn ( directory ) ) break ;
2016-10-04 09:58:51 +00:00
QMessageBox : : StandardButton res = QMessageBox : : warning ( this , tr ( " Unable to find Ryzom " ) , tr ( " Unable to find Ryzom in selected directory. Please choose another one or cancel. " ) ) ;
2016-02-25 20:19:27 +00:00
}
m_anotherDirectory = directory ;
// if we browse to a Ryzom installation, we want to use it
anotherLocationRadioButton - > setChecked ( true ) ;
updateAnotherLocationText ( ) ;
}
2016-09-29 14:54:50 +00:00
void CInstallDialog : : onDestinationDefaultButtonClicked ( )
{
m_dstDirectory = CConfigFile : : getNewInstallationDirectory ( ) ;
updateDestinationText ( ) ;
}
2016-06-12 13:40:38 +00:00
void CInstallDialog : : onDestinationBrowseButtonClicked ( )
2016-02-25 20:19:27 +00:00
{
2016-09-29 15:03:59 +00:00
QString directory = QFileDialog : : getExistingDirectory ( this , tr ( " Please choose directory to install Ryzom in " ) , m_dstDirectory ) ;
2016-02-25 20:19:27 +00:00
if ( directory . isEmpty ( ) ) return ;
m_dstDirectory = directory ;
updateDestinationText ( ) ;
}
2016-06-12 13:40:38 +00:00
void CInstallDialog : : updateAnotherLocationText ( )
2016-02-25 20:19:27 +00:00
{
anotherLocationRadioButton - > setText ( tr ( " Another location: %1 " ) . arg ( m_anotherDirectory . isEmpty ( ) ? tr ( " Undefined " ) : m_anotherDirectory ) ) ;
}
2016-06-12 13:40:38 +00:00
void CInstallDialog : : updateDestinationText ( )
2016-02-25 20:19:27 +00:00
{
destinationLabel - > setText ( m_dstDirectory ) ;
}
2016-06-12 13:40:38 +00:00
void CInstallDialog : : accept ( )
2016-02-25 20:19:27 +00:00
{
// check free disk space
qint64 freeSpace = NLMISC : : CSystemInfo : : availableHDSpace ( m_dstDirectory . toUtf8 ( ) . constData ( ) ) ;
const CServer & server = CConfigFile : : getInstance ( ) - > getServer ( ) ;
if ( freeSpace < server . dataUncompressedSize )
{
2016-10-04 09:58:51 +00:00
QMessageBox : : StandardButton res = QMessageBox : : warning ( this , tr ( " Not enough free disk space " ) , tr ( " You don't have enough free space on this disk, please make more space or choose a directory on another disk. " ) ) ;
2016-02-25 20:19:27 +00:00
return ;
}
2016-09-29 15:05:20 +00:00
// create directory if doesn't exist
bool succeedsToWrite = QDir ( ) . mkpath ( m_dstDirectory ) ;
// if unable to create directory, don't expect to write a file in it
if ( succeedsToWrite )
{
// check if directory is writable by current user
QFile file ( m_dstDirectory + " /writable_test_for_ryzom_installer.txt " ) ;
if ( file . open ( QFile : : WriteOnly ) )
{
file . close ( ) ;
// remove it
file . remove ( ) ;
}
else
{
succeedsToWrite = false ;
}
}
if ( ! succeedsToWrite )
{
QMessageBox : : StandardButton res = QMessageBox : : warning ( this , tr ( " Unable to write in directory " ) , tr ( " You don't have the permission to write in this directory with your current user account, please choose another directory. " ) ) ;
return ;
}
2016-10-04 09:58:51 +00:00
// if reinstalling in same directory, don't check if directory is empty
if ( m_dstDirectory ! = CConfigFile : : getInstance ( ) - > getNewInstallationDirectory ( ) )
2016-09-29 15:05:20 +00:00
{
2016-10-04 09:58:51 +00:00
if ( ! isDirectoryEmpty ( m_dstDirectory , true ) )
{
QMessageBox : : StandardButton res = QMessageBox : : warning ( this , tr ( " Directory not empty " ) , tr ( " This directory is not empty, please choose another one. " ) ) ;
return ;
}
2016-09-29 15:05:20 +00:00
}
2016-05-25 21:23:48 +00:00
if ( oldDirectoryRadioButton - > isChecked ( ) )
2016-02-25 20:19:27 +00:00
{
CConfigFile : : getInstance ( ) - > setSrcServerDirectory ( m_oldDirectory ) ;
}
else if ( anotherLocationRadioButton - > isChecked ( ) )
{
CConfigFile : : getInstance ( ) - > setSrcServerDirectory ( m_anotherDirectory ) ;
}
else
{
CConfigFile : : getInstance ( ) - > setSrcServerDirectory ( " " ) ;
}
CConfigFile : : getInstance ( ) - > setInstallationDirectory ( m_dstDirectory ) ;
CConfigFile : : getInstance ( ) - > setUse64BitsClient ( clientArch64RadioButton - > isChecked ( ) ) ;
CConfigFile : : getInstance ( ) - > save ( ) ;
QDialog : : accept ( ) ;
}