1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00

I learned some things: improve thread safety

This commit is contained in:
dubslow 2014-10-14 21:06:44 -05:00
parent a0ca379c1b
commit 63671ae3ff
5 changed files with 9 additions and 4 deletions

View File

@ -1184,7 +1184,7 @@ void Core::saveConfiguration(const QString& path)
}
}
void Core::switchConfiguration(QString profile)
void Core::switchConfiguration(const QString& profile)
{
if (profile.isEmpty())
{
@ -1204,7 +1204,7 @@ void Core::switchConfiguration(QString profile)
tox = nullptr;
}
emit selfAvatarChanged(QPixmap(":/img/contact_dark.png"));
Widget::getInstance()->clearContactsList(); // we need this to block, so no signals for us
emit blockingClearContacts(); // we need this to block, but signals are required for thread safety
loadPath = QDir(Settings::getSettingsDirPath()).filePath(profile + TOX_EXT);
Settings::getInstance().setCurrentProfile(profile);

View File

@ -53,7 +53,6 @@ public:
void saveConfiguration();
void saveConfiguration(const QString& path);
void switchConfiguration(QString profile);
QString getIDString();
@ -70,6 +69,7 @@ public slots:
void start();
void process();
void bootstrapDht();
void switchConfiguration(const QString& profile);
void acceptFriendRequest(const QString& userId);
void requestFriendship(const QString& friendAddress, const QString& message);
@ -107,6 +107,7 @@ public slots:
signals:
void connected();
void disconnected();
void blockingClearContacts();
void friendRequestReceived(const QString& userId, const QString& message);
void friendMessageReceived(int friendId, const QString& message, bool isAction);

View File

@ -114,7 +114,8 @@ void IdentityForm::onLoadClicked()
QMessageBox::warning(this, tr("Call active", "popup title"),
tr("You can't switch profiles while a call is active!", "popup text"));
else
Core::getInstance()->switchConfiguration(bodyUI->profiles->currentText());
emit Widget::getInstance()->changeProfile(bodyUI->profiles->currentText());
// I think by directly calling the function, I may have been causing thread issues
}
}

View File

@ -146,6 +146,7 @@ Widget::Widget(QWidget *parent)
connect(core, &Core::groupNamelistChanged, this, &Widget::onGroupNamelistChanged);
connect(core, &Core::emptyGroupCreated, this, &Widget::onEmptyGroupCreated);
connect(core, &Core::avInvite, this, &Widget::playRingtone);
connect(core, &Core::blockingClearContacts, this, &Widget::clearContactsList, Qt::BlockingQueuedConnection);
connect(core, SIGNAL(messageSentResult(int,QString,int)), this, SLOT(onMessageSendResult(int,QString,int)));
connect(core, SIGNAL(groupSentResult(int,QString,int)), this, SLOT(onGroupSendResult(int,QString,int)));
@ -153,6 +154,7 @@ Widget::Widget(QWidget *parent)
connect(this, &Widget::statusSet, core, &Core::setStatus);
connect(this, &Widget::friendRequested, core, &Core::requestFriendship);
connect(this, &Widget::friendRequestAccepted, core, &Core::acceptFriendRequest);
connect(this, &Widget::changeProfile, core, &Core::switchConfiguration);
connect(ui->addButton, SIGNAL(clicked()), this, SLOT(onAddClicked()));
connect(ui->groupButton, SIGNAL(clicked()), this, SLOT(onGroupClicked()));

View File

@ -69,6 +69,7 @@ signals:
void statusSelected(Status status);
void usernameChanged(const QString& username);
void statusMessageChanged(const QString& statusMessage);
void changeProfile(const QString& profile);
private slots:
void onConnected();