mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
refactor: remove Core dependency from Group
Replace the direct call with a signal connection in Widget, this keeps Group clean.
This commit is contained in:
parent
445340a0e9
commit
0f4dc940ce
|
@ -503,11 +503,11 @@ void CoreAV::groupCallCallback(void* tox, uint32_t group, uint32_t peer, const i
|
||||||
* @param group Group Index
|
* @param group Group Index
|
||||||
* @param peer Peer Index
|
* @param peer Peer Index
|
||||||
*/
|
*/
|
||||||
void CoreAV::invalidateGroupCallPeerSource(int group, ToxPk peerPk)
|
void CoreAV::invalidateGroupCallPeerSource(const Group& group, ToxPk peerPk)
|
||||||
{
|
{
|
||||||
QWriteLocker locker{&callsLock};
|
QWriteLocker locker{&callsLock};
|
||||||
|
|
||||||
auto it = groupCalls.find(group);
|
auto it = groupCalls.find(group.getId());
|
||||||
if (it == groupCalls.end()) {
|
if (it == groupCalls.end()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,7 +81,7 @@ public:
|
||||||
static void groupCallCallback(void* tox, uint32_t group, uint32_t peer, const int16_t* data,
|
static void groupCallCallback(void* tox, uint32_t group, uint32_t peer, const int16_t* data,
|
||||||
unsigned samples, uint8_t channels, uint32_t sample_rate,
|
unsigned samples, uint8_t channels, uint32_t sample_rate,
|
||||||
void* core);
|
void* core);
|
||||||
void invalidateGroupCallPeerSource(int group, ToxPk peerPk);
|
void invalidateGroupCallPeerSource(const Group& group, ToxPk peerPk);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
bool startCall(uint32_t friendNum, bool video);
|
bool startCall(uint32_t friendNum, bool video);
|
||||||
|
|
|
@ -20,14 +20,12 @@
|
||||||
#include "group.h"
|
#include "group.h"
|
||||||
#include "friend.h"
|
#include "friend.h"
|
||||||
#include "src/core/contactid.h"
|
#include "src/core/contactid.h"
|
||||||
#include "src/core/core.h"
|
|
||||||
#include "src/core/coreav.h"
|
|
||||||
#include "src/core/groupid.h"
|
#include "src/core/groupid.h"
|
||||||
#include "src/core/toxpk.h"
|
#include "src/core/toxpk.h"
|
||||||
#include "src/friendlist.h"
|
#include "src/friendlist.h"
|
||||||
#include "src/persistence/settings.h"
|
|
||||||
#include "src/widget/form/groupchatform.h"
|
#include <cassert>
|
||||||
#include "src/widget/groupwidget.h"
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
static const int MAX_GROUP_TITLE_LENGTH = 128;
|
static const int MAX_GROUP_TITLE_LENGTH = 128;
|
||||||
|
@ -105,7 +103,6 @@ void Group::regeneratePeerList()
|
||||||
for (const auto& pk : oldPeerNames.keys()) {
|
for (const auto& pk : oldPeerNames.keys()) {
|
||||||
if (!peerDisplayNames.contains(pk)) {
|
if (!peerDisplayNames.contains(pk)) {
|
||||||
emit userLeft(pk, oldPeerNames.value(pk));
|
emit userLeft(pk, oldPeerNames.value(pk));
|
||||||
stopAudioOfDepartedPeers(pk);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (const auto& pk : peerDisplayNames.keys()) {
|
for (const auto& pk : peerDisplayNames.keys()) {
|
||||||
|
@ -209,11 +206,3 @@ bool Group::useHistory() const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Group::stopAudioOfDepartedPeers(const ToxPk& peerPk)
|
|
||||||
{
|
|
||||||
if (avGroupchat) {
|
|
||||||
Core* core = Core::getInstance();
|
|
||||||
core->getAv()->invalidateGroupCallPeerSource(toxGroupNum, peerPk);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -70,9 +70,6 @@ signals:
|
||||||
void numPeersChanged(int numPeers);
|
void numPeersChanged(int numPeers);
|
||||||
void peerNameChanged(const ToxPk& peer, const QString& oldName, const QString& newName);
|
void peerNameChanged(const ToxPk& peer, const QString& oldName, const QString& newName);
|
||||||
|
|
||||||
private:
|
|
||||||
void stopAudioOfDepartedPeers(const ToxPk& peerPk);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ICoreGroupQuery& groupQuery;
|
ICoreGroupQuery& groupQuery;
|
||||||
ICoreIdHandler& idHandler;
|
ICoreIdHandler& idHandler;
|
||||||
|
|
|
@ -2079,6 +2079,15 @@ Group* Widget::createGroup(uint32_t groupnumber, const GroupId& groupId)
|
||||||
const bool enabled = core->getGroupAvEnabled(groupnumber);
|
const bool enabled = core->getGroupAvEnabled(groupnumber);
|
||||||
Group* newgroup =
|
Group* newgroup =
|
||||||
GroupList::addGroup(*core, groupnumber, groupId, groupName, enabled, core->getUsername());
|
GroupList::addGroup(*core, groupnumber, groupId, groupName, enabled, core->getUsername());
|
||||||
|
assert(newgroup);
|
||||||
|
|
||||||
|
if (enabled) {
|
||||||
|
connect(newgroup, &Group::userLeft, [=](const ToxPk& user){
|
||||||
|
CoreAV *av = core->getAv();
|
||||||
|
assert(av);
|
||||||
|
av->invalidateGroupCallPeerSource(*newgroup, user);
|
||||||
|
});
|
||||||
|
}
|
||||||
auto dialogManager = ContentDialogManager::getInstance();
|
auto dialogManager = ContentDialogManager::getInstance();
|
||||||
auto rawChatroom = new GroupChatroom(newgroup, dialogManager);
|
auto rawChatroom = new GroupChatroom(newgroup, dialogManager);
|
||||||
std::shared_ptr<GroupChatroom> chatroom(rawChatroom);
|
std::shared_ptr<GroupChatroom> chatroom(rawChatroom);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user