blob: a004337124389de12b25bb82c3ea93194c2922ae [file] [log] [blame]
Olivier SOLDANO47aa97f2017-04-04 10:40:00 -04001 /**************************************************************************
Anthony Léonard2fde81d2017-04-17 10:06:55 -04002 * Copyright (C) 2015-2017 by Savoir-faire Linux *
Edric Milaret67007d12015-05-07 09:40:09 -04003 * Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>*
Olivier SOLDANO47aa97f2017-04-04 10:40:00 -04004 * Author: Anthony Léonard <anthony.leonard@savoirfairelinux.com> *
5 * Author: Olivier Soldano <olivier.soldano@savoirfairelinux.com> *
Edric Milaret67007d12015-05-07 09:40:09 -04006 * *
7 * This program is free software; you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation; either version 3 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * This program is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
19 **************************************************************************/
20
Edric Milaret559bda52015-04-29 17:02:31 -040021#include "wizarddialog.h"
22#include "ui_wizarddialog.h"
23
Edric Milaret74e4b8b2015-05-15 10:25:00 -040024#include <QMovie>
Anthony Léonardaa90e1a2016-10-12 11:24:17 -040025#include <QMessageBox>
Olivier SOLDANO1cd96172017-09-22 16:57:22 -040026#include <QFileDialog>
Edric Milaret74e4b8b2015-05-15 10:25:00 -040027
Edric Milaret559bda52015-04-29 17:02:31 -040028#include "accountmodel.h"
Edric Milaret74e4b8b2015-05-15 10:25:00 -040029#include "account.h"
Edric Milaret25236d92016-03-28 09:40:58 -040030#include "profilemodel.h"
31#include "profile.h"
Olivier SOLDANO3dad1752017-07-13 14:08:53 -040032#include "namedirectory.h"
Edric Milaret559bda52015-04-29 17:02:31 -040033
34#include "utils.h"
35
Anthony Léonard199a5752017-06-22 15:43:03 -040036const QString DEFAULT_RING_ACCT_ALIAS = QObject::tr("Ring account", "Default alias for new Ring account");
37
Edric Milaret57467842016-08-30 13:06:11 -040038WizardDialog::WizardDialog(WizardMode wizardMode, Account* toBeMigrated, QWidget* parent) :
Edric Milaret559bda52015-04-29 17:02:31 -040039 QDialog(parent),
Edric Milaret57467842016-08-30 13:06:11 -040040 ui(new Ui::WizardDialog),
41 account_(toBeMigrated),
Anthony Léonardaa90e1a2016-10-12 11:24:17 -040042 wizardMode_(wizardMode),
43 nameLookupTimer_(this)
Edric Milaret559bda52015-04-29 17:02:31 -040044{
45 ui->setupUi(this);
46
Edric Milaret4097d2f2016-02-09 14:41:50 -050047 Qt::WindowFlags flags = windowFlags();
48 flags = flags & (~Qt::WindowContextHelpButtonHint);
Edric Milaret74e4b8b2015-05-15 10:25:00 -040049
Edric Milaret4097d2f2016-02-09 14:41:50 -050050 setWindowFlags(flags);
Edric Milareted0b2802015-10-01 15:10:02 -040051
52 QPixmap logo(":/images/logo-ring-standard-coul.png");
Edric Milaret36587362016-02-04 12:30:52 -050053
Edric Milaret57467842016-08-30 13:06:11 -040054 ui->welcomeLogo->setPixmap(logo.scaledToHeight(65, Qt::SmoothTransformation));
55 ui->welcomeLogo->setAlignment(Qt::AlignHCenter);
56
Anthony Léonard955b9572016-11-10 13:28:39 -050057 ui->fullNameEdit->setText(Utils::GetCurrentUserName());
Edric Milaret57467842016-08-30 13:06:11 -040058
59 movie_ = new QMovie(":/images/loading.gif");
60 ui->spinnerLabel->setMovie(movie_);
61 movie_->start();
62
63 if (wizardMode_ == MIGRATION) {
Olivier SOLDANO1cd96172017-09-22 16:57:22 -040064 Utils::slidePage(ui->stackedWidget, ui->profilePage);
Anthony Léonardd97aabc2016-10-27 11:53:42 -040065 ui->usernameEdit->setEnabled(false);
66 ui->usernameEdit->setText(toBeMigrated->displayName());
Edric Milaret57467842016-08-30 13:06:11 -040067 ui->previousButton->hide();
Olivier SOLDANO3dad1752017-07-13 14:08:53 -040068 ui->photoBooth->hide();
Edric Milaret57467842016-08-30 13:06:11 -040069 ui->pinEdit->hide();
Olivier SOLDANOaa47f602017-08-17 16:38:11 -040070 ui->infoLabel->setText(tr("Your account needs to be migrated. Enter your password."));
Olivier SOLDANOe0556b02017-09-15 15:26:41 -040071 } else {
Anthony Léonard955b9572016-11-10 13:28:39 -050072 ui->navBarWidget->hide();
Olivier SOLDANOe0556b02017-09-15 15:26:41 -040073 }
Anthony Léonard955b9572016-11-10 13:28:39 -050074
Anthony Léonardaa90e1a2016-10-12 11:24:17 -040075 ui->searchingStateLabel->clear();
Olivier SOLDANOb58f9c22017-07-20 13:44:05 -040076 connect(&NameDirectory::instance(), SIGNAL(registeredNameFound(Account*,NameDirectory::LookupStatus,const QString&,const QString&)),
77 this, SLOT(handle_registeredNameFound(Account*,NameDirectory::LookupStatus,const QString&,const QString&)));
Anthony Léonardaa90e1a2016-10-12 11:24:17 -040078
79 nameLookupTimer_.setSingleShot(true);
80 connect(&nameLookupTimer_, QTimer::timeout, this, WizardDialog::timeoutNameLookupTimer);
Olivier SOLDANO3dad1752017-07-13 14:08:53 -040081 connect(ui->photoBooth, &PhotoboothWidget::photoTaken, this, WizardDialog::on_photoTaken);
82 ui->avatarLabel->hide();
Edric Milaret559bda52015-04-29 17:02:31 -040083}
84
85WizardDialog::~WizardDialog()
86{
Olivier SOLDANOb58f9c22017-07-20 13:44:05 -040087 disconnect(&NameDirectory::instance(), SIGNAL(registeredNameFound(Account*,NameDirectory::LookupStatus,const QString&,const QString&)),
88 this, SLOT(handle_registeredNameFound(Account*,NameDirectory::LookupStatus,const QString&,const QString&)));
Edric Milaret559bda52015-04-29 17:02:31 -040089 delete ui;
90}
91
92void
Olivier SOLDANO1cd96172017-09-22 16:57:22 -040093WizardDialog::processWizardInformations()
Edric Milaret67007d12015-05-07 09:40:09 -040094{
Anthony Léonard955b9572016-11-10 13:28:39 -050095 if (wizardMode_ == MIGRATION)
96 ui->progressLabel->setText(tr("Migrating your Ring account..."));
Olivier SOLDANO1cd96172017-09-22 16:57:22 -040097 else if (wizardMode_ == IMPORT)
98 ui->progressLabel->setText(tr("Importing account archive..."));
Anthony Léonard955b9572016-11-10 13:28:39 -050099 else
100 ui->progressLabel->setText(tr("Generating your Ring account..."));
Olivier SOLDANOe0556b02017-09-15 15:26:41 -0400101
Olivier SOLDANO1cd96172017-09-22 16:57:22 -0400102 if (wizardMode_ != IMPORT) {
103 if (ui->pinEdit->isVisible() && ui->pinEdit->text().isEmpty()) {
104 ui->pinEdit->setStyleSheet("border-color: rgb(204, 0, 0);");
105 return;
106 }
107
108 if (ui->passwordEdit->text() != ui->confirmPasswordEdit->text()) {
109 ui->passwordEdit->setStyleSheet("border-color: rgb(204, 0, 0);");
110 ui->confirmPasswordEdit->setStyleSheet("border-color: rgb(204, 0, 0);");
111 return;
112 } else {
113 ui->passwordEdit->setStyleSheet("border-color: rgb(0, 192, 212);");
114 ui->confirmPasswordEdit->setStyleSheet("border-color: rgb(0, 192, 212);");
115 ui->pinEdit->setStyleSheet("border-color: rgb(0, 192, 212);");
116 }
117
118 QString accountAlias = (ui->fullNameEdit->text().isEmpty() ||
119 ui->fullNameEdit->text().isNull()) ? DEFAULT_RING_ACCT_ALIAS : ui->fullNameEdit->text();
120 QString archivePin = (ui->pinEdit->text().isEmpty() || ui->pinEdit->text().isNull()) ? QString() : ui->pinEdit->text();
121
122 createRingAccount(accountAlias, ui->passwordEdit->text(), archivePin);
123
124 ui->passwordEdit->clear();
125 ui->confirmPasswordEdit->clear();
126 ui->pinEdit->clear();
127 }
128
Anthony Léonard955b9572016-11-10 13:28:39 -0500129 ui->navBarWidget->hide();
Olivier SOLDANO1cd96172017-09-22 16:57:22 -0400130 Utils::slidePage(ui->stackedWidget, ui->spinnerPage);
Edric Milaret74e4b8b2015-05-15 10:25:00 -0400131 repaint();
Edric Milaret74e4b8b2015-05-15 10:25:00 -0400132 Utils::CreateStartupLink();
Edric Milaret74e4b8b2015-05-15 10:25:00 -0400133}
134
135void
Edric Milaret57467842016-08-30 13:06:11 -0400136WizardDialog::endSetup(Account::RegistrationState state)
Edric Milaret74e4b8b2015-05-15 10:25:00 -0400137{
Olivier SOLDANO1cd96172017-09-22 16:57:22 -0400138#pragma push_macro("ERROR")
139#undef ERROR
Edric Milaret57467842016-08-30 13:06:11 -0400140 switch (state) {
Olivier SOLDANO1cd96172017-09-22 16:57:22 -0400141 case Account::RegistrationState::UNREGISTERED:
142 case Account::RegistrationState::READY:
143 if (ui->signUpCheckbox->isChecked()) { // If the user wants to register its name on the blockchain
144 bool regSuccess = account_->registerName(ui->passwordEdit->text(), ui->usernameEdit->text());
145 ui->usernameEdit->clear();
146 if (!regSuccess) {
147 usernameFailedRegistration();
148 } else {
149 connect(account_, SIGNAL(nameRegistrationEnded(NameDirectory::RegisterNameStatus,QString)),
150 this, SLOT(handle_nameRegistrationEnded(NameDirectory::RegisterNameStatus,QString)));
151 ui->progressLabel->setText(tr("Registering your public username, it may take a few minutes..."));
152 }
153 } else {
154 account_->performAction(Account::EditAction::RELOAD);
155 accept();
Anthony Léonard00ec9562016-11-04 11:55:22 -0400156 }
Olivier SOLDANO1cd96172017-09-22 16:57:22 -0400157
158 { //avoid scope crossing init
159 auto profile = ProfileModel::instance().selectedProfile();
160 if (profile && AccountModel::instance().size() == 1) {
161 profile->setAccounts({account_});
162 profile->save();
163 }
164 }
165 break;
166 case Account::RegistrationState::ERROR:
167 ui->spinnerLabel->hide();
168 ui->navBarWidget->show();
169 ui->nextButton->hide();
170 ui->progressLabel->setText(tr("An error has occured during your account creation"));
171 AccountModel::instance().remove(account_);
172 break;
173 case Account::RegistrationState::TRYING:
174 case Account::RegistrationState::COUNT__:
175 break;
Edric Milaret57467842016-08-30 13:06:11 -0400176 }
Olivier SOLDANO1cd96172017-09-22 16:57:22 -0400177#pragma pop_macro("ERROR")
Edric Milaret559bda52015-04-29 17:02:31 -0400178}
179
180void
Edric Milaret25236d92016-03-28 09:40:58 -0400181WizardDialog::closeEvent(QCloseEvent* event)
Edric Milareted0b2802015-10-01 15:10:02 -0400182{
Edric Milaret57467842016-08-30 13:06:11 -0400183 Q_UNUSED(event);
Olivier SOLDANO2100f1c2017-09-06 16:45:20 -0400184 if (wizardMode_ == WIZARD){
185 done(QDialog::Rejected);
186 } else {
Edric Milaret57467842016-08-30 13:06:11 -0400187 QDialog::closeEvent(event);
Olivier SOLDANO2100f1c2017-09-06 16:45:20 -0400188 }
Edric Milaret559bda52015-04-29 17:02:31 -0400189}
Edric Milaret25236d92016-03-28 09:40:58 -0400190
191void
Anthony Léonardaa90e1a2016-10-12 11:24:17 -0400192WizardDialog::usernameFailedRegistration()
193{
194 QMessageBox::warning(this, "Username not registered", "Your account has been created, but we could not register your username. Try again from the settings menu.");
195}
196
197void
Olivier SOLDANO3dad1752017-07-13 14:08:53 -0400198WizardDialog::on_photoTaken(QString fileName)
Edric Milaret25236d92016-03-28 09:40:58 -0400199{
Olivier SOLDANO3dad1752017-07-13 14:08:53 -0400200 auto image = QImage(fileName);
201 auto avatar = image.scaled(100, 100, Qt::KeepAspectRatioByExpanding, Qt::SmoothTransformation);
202 ProfileModel::instance().selectedProfile()->person()->setPhoto(avatar);
203 ui->avatarLabel->setPixmap(QPixmap::fromImage(Utils::getCirclePhoto(avatar, ui->avatarLabel->width())));
204 ui->photoBooth->stopBooth();
205 ui->avatarLabel->show();
Edric Milaret25236d92016-03-28 09:40:58 -0400206}
Edric Milaret57467842016-08-30 13:06:11 -0400207
208void
209WizardDialog::on_existingPushButton_clicked()
210{
Olivier SOLDANO1cd96172017-09-22 16:57:22 -0400211 ui->navBarWidget->show();
212 ui->nextButton->hide();
213 Utils::slidePage(ui->stackedWidget, ui->linkMethodPage);
Edric Milaret57467842016-08-30 13:06:11 -0400214}
215
216void
217WizardDialog::on_newAccountButton_clicked()
218{
Olivier SOLDANO1cd96172017-09-22 16:57:22 -0400219 wizardMode_ = NEW_ACCOUNT;
Edric Milaret57467842016-08-30 13:06:11 -0400220 changePage(false);
221}
222
223void
224WizardDialog::changePage(bool existingAccount)
225{
Anthony Léonard955b9572016-11-10 13:28:39 -0500226 if (existingAccount) { // If user want to add a device
227 ui->accountLabel->setText(tr("Add a device"));
Olivier SOLDANO1cd96172017-09-22 16:57:22 -0400228 Utils::slidePage(ui->stackedWidget, ui->explanationPage);
Olivier SOLDANO3dad1752017-07-13 14:08:53 -0400229 ui->photoBooth->hide();
Anthony Léonard955b9572016-11-10 13:28:39 -0500230 } else { // If user want to create a new account
231 ui->accountLabel->setText(tr("Create your account"));
Olivier SOLDANO1cd96172017-09-22 16:57:22 -0400232 Utils::slidePage(ui->stackedWidget, ui->profilePage);
Olivier SOLDANO3dad1752017-07-13 14:08:53 -0400233 ui->photoBooth->startBooth();
234 ui->photoBooth->show();
Anthony Léonard955b9572016-11-10 13:28:39 -0500235 }
236 ui->navBarWidget->show();
Olivier SOLDANO3dad1752017-07-13 14:08:53 -0400237 ui->avatarLabel->setHidden(true);
Olivier SOLDANOaa47f602017-08-17 16:38:11 -0400238 ui->infoLabel->setHidden(existingAccount);
Edric Milaret57467842016-08-30 13:06:11 -0400239 ui->usernameEdit->setHidden(existingAccount);
Anthony Léonardaa90e1a2016-10-12 11:24:17 -0400240 ui->signUpCheckbox->setHidden(existingAccount);
241 ui->signUpCheckbox->setChecked(!existingAccount);
Edric Milaret57467842016-08-30 13:06:11 -0400242 ui->confirmPasswordEdit->setHidden(existingAccount);
Anthony Léonardaa90e1a2016-10-12 11:24:17 -0400243 ui->searchingStateLabel->setHidden(existingAccount);
Edric Milaret57467842016-08-30 13:06:11 -0400244
245 ui->pinEdit->setVisible(existingAccount);
246}
247
248void
Anthony Léonard955b9572016-11-10 13:28:39 -0500249WizardDialog::on_nextButton_clicked()
250{
251 const QWidget* curWidget = ui->stackedWidget->currentWidget();
252
Olivier SOLDANO1cd96172017-09-22 16:57:22 -0400253 if (curWidget == ui->profilePage || curWidget == ui->explanationPage) {
254 Utils::slidePage(ui->stackedWidget, ui->accountPage);
255 } else if (curWidget == ui->accountPage) {
256 processWizardInformations();
257 } else if (curWidget == ui->fileImportPage) {
258 validateFileImport();
Anthony Léonard955b9572016-11-10 13:28:39 -0500259 }
260}
261
262void
Edric Milaret57467842016-08-30 13:06:11 -0400263WizardDialog::on_previousButton_clicked()
264{
Anthony Léonard955b9572016-11-10 13:28:39 -0500265 const QWidget* curWidget = ui->stackedWidget->currentWidget();
266
267 if (curWidget == ui->profilePage) {
268 ui->navBarWidget->hide();
Olivier SOLDANO1cd96172017-09-22 16:57:22 -0400269 Utils::slidePage(ui->stackedWidget, ui->welcomePage);
270 } else if (curWidget == ui->explanationPage || curWidget == ui->fileImportPage) {
271 ui->navBarWidget->show();
272 ui->nextButton->hide();
273 Utils::slidePage(ui->stackedWidget, ui->linkMethodPage);
274 } else if (curWidget == ui->accountPage) {
Anthony Léonard955b9572016-11-10 13:28:39 -0500275
Olivier SOLDANO1cd96172017-09-22 16:57:22 -0400276 if (ui->pinEdit->isVisible()) // If we are adding a device
277 Utils::slidePage(ui->stackedWidget, ui->explanationPage);
278 else // If we are creating a new account
279 Utils::slidePage(ui->stackedWidget, ui->profilePage);
280
281 ui->passwordEdit->setStyleSheet("border-color: rgb(0, 192, 212);");
282 ui->confirmPasswordEdit->setStyleSheet("border-color: rgb(0, 192, 212);");
283 ui->pinEdit->setStyleSheet("border-color: rgb(0, 192, 212);");
284
285 } else if (curWidget == ui->linkMethodPage) {
286 ui->navBarWidget->hide();
287 ui->nextButton->show();
288 Utils::slidePage(ui->stackedWidget, ui->welcomePage);
289 } else if (curWidget == ui->spinnerPage) {
290 ui->nextButton->show();
291 ui->navBarWidget->hide();
292 Utils::slidePage(ui->stackedWidget, ui->welcomePage);
293 }
Edric Milaret57467842016-08-30 13:06:11 -0400294}
295
296void
297WizardDialog::on_passwordEdit_textChanged(const QString& arg1)
298{
299 Q_UNUSED(arg1)
300
301 if (ui->pinEdit->isVisible()) {
302 ui->confirmPasswordEdit->setText(ui->passwordEdit->text());
303 }
304}
Anthony Léonardaa90e1a2016-10-12 11:24:17 -0400305
306void
307WizardDialog::on_usernameEdit_textChanged(const QString &arg1)
308{
309 Q_UNUSED(arg1)
310 if(ui->signUpCheckbox->isChecked() && !arg1.isEmpty()) {
311 ui->searchingStateLabel->setText(tr("Searching..."));
312 nameLookupTimer_.start(1500);
313 } else {
314 ui->searchingStateLabel->clear();
315 nameLookupTimer_.stop();
316 }
317}
318
319void
320WizardDialog::timeoutNameLookupTimer()
321{
322 if(ui->signUpCheckbox->isChecked() && !ui->usernameEdit->text().isEmpty()) {
323 NameDirectory::instance().lookupName(nullptr, QString(), ui->usernameEdit->text());
324 } else {
325 ui->searchingStateLabel->clear();
326 }
327}
328
329void
Olivier SOLDANOb58f9c22017-07-20 13:44:05 -0400330WizardDialog::handle_registeredNameFound (Account* account, NameDirectory::LookupStatus status, const QString& address, const QString& name)
Anthony Léonardaa90e1a2016-10-12 11:24:17 -0400331{
332 Q_UNUSED(account)
333 Q_UNUSED(address)
334 Q_UNUSED(name)
335#pragma push_macro("ERROR")
336#undef ERROR
337 switch(status) {
338 case NameDirectory::LookupStatus::SUCCESS:
339 ui->searchingStateLabel->setText(tr("Username not available."));
340 break;
341 case NameDirectory::LookupStatus::NOT_FOUND:
342 ui->searchingStateLabel->setText(tr("Username is available."));
343 break;
344 case NameDirectory::LookupStatus::INVALID_NAME:
345 ui->searchingStateLabel->setText(tr("Username is invalid."));
346 break;
347 case NameDirectory::LookupStatus::ERROR:
348 ui->searchingStateLabel->setText(tr("Network error."));
349 break;
350 }
351#pragma pop_macro("ERROR")
352}
353
354void
355WizardDialog::handle_nameRegistrationEnded(NameDirectory::RegisterNameStatus status, const QString& name)
356{
357 Q_UNUSED(name)
358
359 disconnect(account_, SIGNAL(nameRegistrationEnded(NameDirectory::RegisterNameStatus,QString)),
360 this, SLOT(handle_nameRegistrationEnded(NameDirectory::RegisterNameStatus,QString)));
361 if(status != NameDirectory::RegisterNameStatus::SUCCESS) {
362 usernameFailedRegistration();
363 }
364 account_->performAction(Account::EditAction::RELOAD);
Olivier SOLDANO1cd96172017-09-22 16:57:22 -0400365 accept();
Anthony Léonardaa90e1a2016-10-12 11:24:17 -0400366}
Olivier SOLDANOaa47f602017-08-17 16:38:11 -0400367
Olivier SOLDANO1cd96172017-09-22 16:57:22 -0400368void
369WizardDialog::on_signUpCheckbox_toggled(bool checked)
Olivier SOLDANOaa47f602017-08-17 16:38:11 -0400370{
371 if (checked) {
372 ui->usernameEdit->setEnabled(true);
373 } else {
374 ui->usernameEdit->setEnabled(false);
375 ui->usernameEdit->clear();
376 }
377}
Olivier SOLDANO1cd96172017-09-22 16:57:22 -0400378
379void
380WizardDialog::validateFileImport()
381{
382 // reset original color
383 ui->archivePasswordInput->setStyleSheet("border-color: rgb(0, 192, 212);");
384
385 // A file has been selected
386 if (! ui->archivePathSelector->text().isEmpty() && ! ui->archivePathSelector->text().isNull()){
387 ui->archivePasswordInput->setEnabled(true);
388 Profile *profile = ProfileModel::instance().selectedProfile();
389 ui->signUpCheckbox->setChecked(false);
390 createRingAccount(profile->person()->formattedName(),
391 ui->archivePasswordInput->text(),
392 QString(),
393 ui->archivePathSelector->text());
394 processWizardInformations();
395 }
396}
397
398void WizardDialog::on_archivePathSelector_clicked()
399{
400 QString filePath;
401 filePath = QFileDialog::getOpenFileName(this,
402 tr("Open File"),
403 QString(),
404 tr("Ring archive files (*.gz);; All files (*)"));
405
406 // for export get current account archive path
407 // for import use set path
408 // check if archive has password
409 // if it has, prompt for password
410 filePath = QDir::toNativeSeparators(filePath);
411 ui->archivePathSelector->setText(filePath);
412}
413
414void
415WizardDialog::createRingAccount(const QString &displayName,
416 const QString &password,
417 const QString &pin,
418 const QString &archivePath)
419{
420 QString alias = (displayName.isEmpty() || displayName.isNull()) ? DEFAULT_RING_ACCT_ALIAS :
421 displayName;
422 // set display name
423 account_ = AccountModel::instance().add(alias, Account::Protocol::RING);
424 account_->setDisplayName(alias);
425
426 // archive properties
427 account_->setArchivePassword(password);
428 // import from DHT
429 if (!pin.isEmpty() && !pin.isNull())
430 account_->setArchivePin(pin);
431 // import from file
432 if (!archivePath.isEmpty() && !archivePath.isNull())
433 account_->setArchivePath(archivePath);
434
435 // set default UPNP behavior
436 account_->setUpnpEnabled(true);
437
438 //set default ringtone
439 account_->setRingtonePath(Utils::GetRingtonePath());
440
441 connect(account_, &Account::stateChanged, this, &WizardDialog::endSetup);
442
443 account_->performAction(Account::EditAction::SAVE);
444 auto profile = ProfileModel::instance().selectedProfile();
445 if (profile && AccountModel::instance().size() == 1) {
446 profile->person()->setFormattedName(alias);
447 }
448
449}
450
451void
452WizardDialog::on_dhtImportBtn_clicked()
453{
454 ui->nextButton->show();
455 changePage(true);
456}
457
458void
459WizardDialog::on_fileImportBtn_clicked()
460{
461 ui->navBarWidget->show();
462 ui->nextButton->show();
463 wizardMode_ = IMPORT;
464 Utils::slidePage(ui->stackedWidget, ui->fileImportPage);
465
466}