2015-06-04 01:04:28 +08:00
# include "loginscreen.h"
# include "ui_loginscreen.h"
2015-06-04 05:20:47 +08:00
# include "src/profile.h"
2015-06-04 08:10:06 +08:00
# include "src/profilelocker.h"
# include "src/nexus.h"
2015-06-04 20:19:18 +08:00
# include "src/misc/settings.h"
2015-06-05 01:21:22 +08:00
# include "src/widget/form/setpassworddialog.h"
2015-06-04 08:10:06 +08:00
# include <QMessageBox>
2015-06-04 20:19:18 +08:00
# include <QDebug>
2015-06-04 01:04:28 +08:00
LoginScreen : : LoginScreen ( QWidget * parent ) :
QWidget ( parent ) ,
ui ( new Ui : : LoginScreen )
{
ui - > setupUi ( this ) ;
2015-06-04 01:28:16 +08:00
connect ( ui - > newProfilePgbtn , & QPushButton : : clicked , this , & LoginScreen : : onNewProfilePageClicked ) ;
connect ( ui - > loginPgbtn , & QPushButton : : clicked , this , & LoginScreen : : onLoginPageClicked ) ;
connect ( ui - > createAccountButton , & QPushButton : : clicked , this , & LoginScreen : : onCreateNewProfile ) ;
2015-06-04 16:56:48 +08:00
connect ( ui - > newUsername , & QLineEdit : : returnPressed , this , & LoginScreen : : onCreateNewProfile ) ;
connect ( ui - > newPass , & QLineEdit : : returnPressed , this , & LoginScreen : : onCreateNewProfile ) ;
connect ( ui - > newPassConfirm , & QLineEdit : : returnPressed , this , & LoginScreen : : onCreateNewProfile ) ;
2015-06-04 01:28:16 +08:00
connect ( ui - > loginButton , & QPushButton : : clicked , this , & LoginScreen : : onLogin ) ;
2015-06-04 07:30:17 +08:00
connect ( ui - > loginUsernames , & QComboBox : : currentTextChanged , this , & LoginScreen : : onLoginUsernameSelected ) ;
2015-06-04 16:56:48 +08:00
connect ( ui - > loginPassword , & QLineEdit : : returnPressed , this , & LoginScreen : : onLogin ) ;
2015-06-05 01:21:22 +08:00
connect ( ui - > newPass , & QLineEdit : : textChanged , this , & LoginScreen : : onPasswordEdited ) ;
connect ( ui - > newPassConfirm , & QLineEdit : : textChanged , this , & LoginScreen : : onPasswordEdited ) ;
2015-06-04 05:20:47 +08:00
2015-06-04 07:30:17 +08:00
reset ( ) ;
}
LoginScreen : : ~ LoginScreen ( )
{
delete ui ;
}
void LoginScreen : : reset ( )
{
ui - > newUsername - > clear ( ) ;
ui - > newPass - > clear ( ) ;
2015-06-05 00:51:27 +08:00
ui - > newPassConfirm - > clear ( ) ;
2015-06-04 07:30:17 +08:00
ui - > loginPassword - > clear ( ) ;
ui - > loginUsernames - > clear ( ) ;
Profile : : scanProfiles ( ) ;
2015-06-04 20:19:18 +08:00
QString lastUsed = Settings : : getInstance ( ) . getCurrentProfile ( ) ;
qDebug ( ) < < " Last used is " < < lastUsed ;
2015-06-04 05:20:47 +08:00
QVector < QString > profiles = Profile : : getProfiles ( ) ;
for ( QString profile : profiles )
2015-06-04 20:19:18 +08:00
{
2015-06-04 05:20:47 +08:00
ui - > loginUsernames - > addItem ( profile ) ;
2015-06-04 20:19:18 +08:00
if ( profile = = lastUsed )
ui - > loginUsernames - > setCurrentIndex ( ui - > loginUsernames - > count ( ) - 1 ) ;
}
2015-06-04 05:20:47 +08:00
if ( profiles . isEmpty ( ) )
ui - > stackedWidget - > setCurrentIndex ( 0 ) ;
else
ui - > stackedWidget - > setCurrentIndex ( 1 ) ;
2015-06-04 01:04:28 +08:00
}
2015-06-04 01:28:16 +08:00
void LoginScreen : : onNewProfilePageClicked ( )
{
ui - > stackedWidget - > setCurrentIndex ( 0 ) ;
}
void LoginScreen : : onLoginPageClicked ( )
{
ui - > stackedWidget - > setCurrentIndex ( 1 ) ;
}
void LoginScreen : : onCreateNewProfile ( )
2015-06-04 08:10:06 +08:00
{
QString name = ui - > newUsername - > text ( ) ;
QString pass = ui - > newPass - > text ( ) ;
if ( name . isEmpty ( ) )
{
QMessageBox : : critical ( this , tr ( " Couldn't create a new profile " ) , tr ( " The username must not be empty. " ) ) ;
return ;
}
2015-06-04 01:28:16 +08:00
2015-06-05 00:41:58 +08:00
if ( pass . size ( ) ! = 0 & & pass . size ( ) < 6 )
2015-06-04 21:22:14 +08:00
{
2015-06-05 15:28:16 +08:00
QMessageBox : : critical ( this , tr ( " Couldn't create a new profile " ) , tr ( " The password must be at least 6 characters long. " ) ) ;
2015-06-04 21:22:14 +08:00
return ;
}
2015-06-04 08:10:06 +08:00
if ( ui - > newPassConfirm - > text ( ) ! = pass )
{
2015-06-05 15:28:16 +08:00
QMessageBox : : critical ( this , tr ( " Couldn't create a new profile " ) , tr ( " The passwords you've entered are different. \n Please make sure to enter same password twice. " ) ) ;
2015-06-04 08:10:06 +08:00
return ;
}
2015-06-05 18:44:22 +08:00
if ( Profile : : exists ( name ) )
2015-06-04 08:10:06 +08:00
{
2015-06-05 15:28:16 +08:00
QMessageBox : : critical ( this , tr ( " Couldn't create a new profile " ) , tr ( " A profile with this name already exists. " ) ) ;
2015-06-04 08:10:06 +08:00
return ;
}
Profile * profile = Profile : : createProfile ( name , pass ) ;
if ( ! profile )
{
// Unknown error
2015-06-05 15:28:16 +08:00
QMessageBox : : critical ( this , tr ( " Couldn't create a new profile " ) , tr ( " Unknown error: Couldn't create a new profile. \n If you encountered this error, please report it. " ) ) ;
2015-06-04 08:10:06 +08:00
return ;
}
Nexus & nexus = Nexus : : getInstance ( ) ;
nexus . setProfile ( profile ) ;
nexus . showMainGUI ( ) ;
2015-06-04 01:28:16 +08:00
}
2015-06-04 07:30:17 +08:00
void LoginScreen : : onLoginUsernameSelected ( const QString & name )
{
if ( name . isEmpty ( ) )
return ;
2015-06-04 08:10:06 +08:00
ui - > loginPassword - > clear ( ) ;
2015-06-04 21:16:25 +08:00
if ( Profile : : isEncrypted ( name ) )
2015-06-04 07:30:17 +08:00
{
ui - > loginPasswordLabel - > show ( ) ;
ui - > loginPassword - > show ( ) ;
}
else
{
ui - > loginPasswordLabel - > hide ( ) ;
ui - > loginPassword - > hide ( ) ;
}
}
2015-06-04 01:28:16 +08:00
void LoginScreen : : onLogin ( )
{
2015-06-04 08:10:06 +08:00
QString name = ui - > loginUsernames - > currentText ( ) ;
QString pass = ui - > loginPassword - > text ( ) ;
if ( ! ProfileLocker : : isLockable ( name ) )
{
QMessageBox : : critical ( this , tr ( " Couldn't load this profile " ) , tr ( " This profile is already in use. " ) ) ;
return ;
}
Profile * profile = Profile : : loadProfile ( name , pass ) ;
if ( ! profile )
{
// Unknown error
QMessageBox : : critical ( this , tr ( " Couldn't load this profile " ) , tr ( " Couldn't load this profile. " ) ) ;
return ;
}
2015-06-04 20:19:18 +08:00
if ( ! profile - > checkPassword ( ) )
2015-06-04 08:43:07 +08:00
{
QMessageBox : : critical ( this , tr ( " Couldn't load this profile " ) , tr ( " Wrong password. " ) ) ;
delete profile ;
return ;
}
2015-06-04 08:10:06 +08:00
Nexus & nexus = Nexus : : getInstance ( ) ;
2015-06-04 01:28:16 +08:00
2015-06-04 08:10:06 +08:00
nexus . setProfile ( profile ) ;
nexus . showMainGUI ( ) ;
2015-06-04 01:28:16 +08:00
}
2015-06-05 01:21:22 +08:00
void LoginScreen : : onPasswordEdited ( )
{
ui - > passStrengthMeter - > setValue ( SetPasswordDialog : : getPasswordStrength ( ui - > newPass - > text ( ) ) ) ;
}