Experiment a bit with opening new chats

This commit is contained in:
Sebastian Wolf 2020-11-05 00:02:27 +01:00
parent c2c3bed55c
commit 6d3b3464bf
3 changed files with 61 additions and 4 deletions

View file

@ -341,12 +341,12 @@ Page {
} }
Timer { Timer {
id: viewMessageTimer id: viewMessageTimer
interval: 2000 interval: 1000
property int lastQueuedIndex: -1 property int lastQueuedIndex: -1
function queueViewMessage(index) { function queueViewMessage(index) {
if (index > lastQueuedIndex) { if (index > lastQueuedIndex) {
lastQueuedIndex = index; lastQueuedIndex = index;
start() start();
} }
} }

View file

@ -41,6 +41,8 @@
namespace { namespace {
const QString STATUS("status"); const QString STATUS("status");
const QString ID("id");
const QString TYPE("type");
const QString _TYPE("@type"); const QString _TYPE("@type");
const QString _EXTRA("@extra"); const QString _EXTRA("@extra");
} }
@ -88,7 +90,7 @@ TDLibWrapper::TDLibWrapper(QObject *parent) : QObject(parent)
connect(this->tdLibReceiver, SIGNAL(messageContentUpdated(QString, QString, QVariantMap)), this, SIGNAL(messageContentUpdated(QString, QString, QVariantMap))); connect(this->tdLibReceiver, SIGNAL(messageContentUpdated(QString, QString, QVariantMap)), this, SIGNAL(messageContentUpdated(QString, QString, QVariantMap)));
connect(this->tdLibReceiver, SIGNAL(messagesDeleted(QString, QVariantList)), this, SIGNAL(messagesDeleted(QString, QVariantList))); connect(this->tdLibReceiver, SIGNAL(messagesDeleted(QString, QVariantList)), this, SIGNAL(messagesDeleted(QString, QVariantList)));
connect(this->tdLibReceiver, SIGNAL(chats(QVariantMap)), this, SIGNAL(chatsReceived(QVariantMap))); connect(this->tdLibReceiver, SIGNAL(chats(QVariantMap)), this, SIGNAL(chatsReceived(QVariantMap)));
connect(this->tdLibReceiver, SIGNAL(chat(QVariantMap)), this, SIGNAL(chatReceived(QVariantMap))); connect(this->tdLibReceiver, SIGNAL(chat(QVariantMap)), this, SLOT(handleChatReceived(QVariantMap)));
connect(this->tdLibReceiver, SIGNAL(recentStickersUpdated(QVariantList)), this, SIGNAL(recentStickersUpdated(QVariantList))); connect(this->tdLibReceiver, SIGNAL(recentStickersUpdated(QVariantList)), this, SIGNAL(recentStickersUpdated(QVariantList)));
connect(this->tdLibReceiver, SIGNAL(stickers(QVariantList)), this, SIGNAL(stickersReceived(QVariantList))); connect(this->tdLibReceiver, SIGNAL(stickers(QVariantList)), this, SIGNAL(stickersReceived(QVariantList)));
connect(this->tdLibReceiver, SIGNAL(installedStickerSetsUpdated(QVariantList)), this, SIGNAL(installedStickerSetsUpdated(QVariantList))); connect(this->tdLibReceiver, SIGNAL(installedStickerSetsUpdated(QVariantList)), this, SIGNAL(installedStickerSetsUpdated(QVariantList)));
@ -567,6 +569,26 @@ void TDLibWrapper::createPrivateChat(const QString &userId)
this->sendRequest(requestObject); this->sendRequest(requestObject);
} }
void TDLibWrapper::createSupergroupChat(const QString &supergroupId)
{
LOG("Creating Supergroup Chat");
QVariantMap requestObject;
requestObject.insert(_TYPE, "createSupergroupChat");
requestObject.insert("supergroup_id", supergroupId);
requestObject.insert(_EXTRA, "openDirectly"); //gets matched in qml
this->sendRequest(requestObject);
}
void TDLibWrapper::createBasicGroupChat(const QString &basicGroupId)
{
LOG("Creating Basic Group Chat");
QVariantMap requestObject;
requestObject.insert(_TYPE, "createBasicGroupChat");
requestObject.insert("basic_group_id", basicGroupId);
requestObject.insert(_EXTRA, "openDirectly"); //gets matched in qml
this->sendRequest(requestObject);
}
void TDLibWrapper::getGroupsInCommon(const QString &userId, int limit, int offset) void TDLibWrapper::getGroupsInCommon(const QString &userId, int limit, int offset)
{ {
LOG("Retrieving Groups in Common"); LOG("Retrieving Groups in Common");
@ -690,6 +712,7 @@ void TDLibWrapper::getPollVoters(const QString &chatId, const qlonglong &message
void TDLibWrapper::searchPublicChat(const QString &userName) void TDLibWrapper::searchPublicChat(const QString &userName)
{ {
LOG("Search public chat" << userName); LOG("Search public chat" << userName);
this->activeChatSearchName = userName;
QVariantMap requestObject; QVariantMap requestObject;
requestObject.insert(_TYPE, "searchPublicChat"); requestObject.insert(_TYPE, "searchPublicChat");
requestObject.insert("username", userName); requestObject.insert("username", userName);
@ -956,6 +979,25 @@ void TDLibWrapper::handleNewChatDiscovered(const QVariantMap &chatInformation)
emit newChatDiscovered(chatId, chatInformation); emit newChatDiscovered(chatId, chatInformation);
} }
void TDLibWrapper::handleChatReceived(const QVariantMap &chatInformation)
{
emit chatReceived(chatInformation);
if (!this->activeChatSearchName.isEmpty()) {
QVariantMap chatType = chatInformation.value(TYPE).toMap();
ChatType receivedChatType = chatTypeFromString(chatType.value(_TYPE).toString());
if (receivedChatType == ChatTypeBasicGroup) {
LOG("Found basic group for active search" << this->activeChatSearchName);
this->activeChatSearchName.clear();
this->createBasicGroupChat(chatType.value("basic_group_id").toString());
}
if (receivedChatType == ChatTypeSupergroup) {
LOG("Found supergroup for active search" << this->activeChatSearchName);
this->activeChatSearchName.clear();
this->createSupergroupChat(chatType.value("supergroup_id").toString());
}
}
}
void TDLibWrapper::handleUnreadMessageCountUpdated(const QVariantMap &messageCountInformation) void TDLibWrapper::handleUnreadMessageCountUpdated(const QVariantMap &messageCountInformation)
{ {
if (messageCountInformation.value("chat_list_type").toString() == "chatListMain") { if (messageCountInformation.value("chat_list_type").toString() == "chatListMain") {
@ -975,11 +1017,21 @@ void TDLibWrapper::handleUnreadChatCountUpdated(const QVariantMap &chatCountInfo
void TDLibWrapper::handleBasicGroupUpdated(qlonglong groupId, const QVariantMap &groupInformation) void TDLibWrapper::handleBasicGroupUpdated(qlonglong groupId, const QVariantMap &groupInformation)
{ {
emit basicGroupUpdated(updateGroup(groupId, groupInformation, &basicGroups)->groupId); emit basicGroupUpdated(updateGroup(groupId, groupInformation, &basicGroups)->groupId);
if (!this->activeChatSearchName.isEmpty() && this->activeChatSearchName == groupInformation.value("username").toString()) {
LOG("Found basic group for active search" << this->activeChatSearchName);
this->activeChatSearchName.clear();
this->createBasicGroupChat(groupInformation.value(ID).toString());
}
} }
void TDLibWrapper::handleSuperGroupUpdated(qlonglong groupId, const QVariantMap &groupInformation) void TDLibWrapper::handleSuperGroupUpdated(qlonglong groupId, const QVariantMap &groupInformation)
{ {
emit superGroupUpdated(updateGroup(groupId, groupInformation, &superGroups)->groupId); emit superGroupUpdated(updateGroup(groupId, groupInformation, &superGroups)->groupId);
if (!this->activeChatSearchName.isEmpty() && this->activeChatSearchName == groupInformation.value("username").toString()) {
LOG("Found supergroup for active search" << this->activeChatSearchName);
this->activeChatSearchName.clear();
this->createSupergroupChat(groupInformation.value(ID).toString());
}
} }
void TDLibWrapper::handleStickerSets(const QVariantList &stickerSets) void TDLibWrapper::handleStickerSets(const QVariantList &stickerSets)

View file

@ -137,6 +137,8 @@ public:
Q_INVOKABLE void getGroupFullInfo(const QString &groupId, bool isSuperGroup); Q_INVOKABLE void getGroupFullInfo(const QString &groupId, bool isSuperGroup);
Q_INVOKABLE void getUserFullInfo(const QString &userId); Q_INVOKABLE void getUserFullInfo(const QString &userId);
Q_INVOKABLE void createPrivateChat(const QString &userId); Q_INVOKABLE void createPrivateChat(const QString &userId);
Q_INVOKABLE void createSupergroupChat(const QString &supergroupId);
Q_INVOKABLE void createBasicGroupChat(const QString &basicGroupId);
Q_INVOKABLE void getGroupsInCommon(const QString &userId, int limit, int offset); Q_INVOKABLE void getGroupsInCommon(const QString &userId, int limit, int offset);
Q_INVOKABLE void getUserProfilePhotos(const QString &userId, int limit, int offset); Q_INVOKABLE void getUserProfilePhotos(const QString &userId, int limit, int offset);
Q_INVOKABLE void setChatPermissions(const QString &chatId, const QVariantMap &chatPermissions); Q_INVOKABLE void setChatPermissions(const QString &chatId, const QVariantMap &chatPermissions);
@ -218,6 +220,7 @@ public slots:
void handleUserStatusUpdated(const QString &userId, const QVariantMap &userStatusInformation); void handleUserStatusUpdated(const QString &userId, const QVariantMap &userStatusInformation);
void handleFileUpdated(const QVariantMap &fileInformation); void handleFileUpdated(const QVariantMap &fileInformation);
void handleNewChatDiscovered(const QVariantMap &chatInformation); void handleNewChatDiscovered(const QVariantMap &chatInformation);
void handleChatReceived(const QVariantMap &chatInformation);
void handleUnreadMessageCountUpdated(const QVariantMap &messageCountInformation); void handleUnreadMessageCountUpdated(const QVariantMap &messageCountInformation);
void handleUnreadChatCountUpdated(const QVariantMap &chatCountInformation); void handleUnreadChatCountUpdated(const QVariantMap &chatCountInformation);
void handleBasicGroupUpdated(qlonglong groupId, const QVariantMap &groupInformation); void handleBasicGroupUpdated(qlonglong groupId, const QVariantMap &groupInformation);
@ -251,6 +254,8 @@ private:
QHash<qlonglong,Group*> superGroups; QHash<qlonglong,Group*> superGroups;
EmojiSearchWorker emojiSearchWorker; EmojiSearchWorker emojiSearchWorker;
QString activeChatSearchName;
}; };
#endif // TDLIBWRAPPER_H #endif // TDLIBWRAPPER_H