diff --git a/qml/components/messageContent/SponsoredMessage.qml b/qml/components/messageContent/SponsoredMessage.qml
index 4350c15..55e0e8d 100644
--- a/qml/components/messageContent/SponsoredMessage.qml
+++ b/qml/components/messageContent/SponsoredMessage.qml
@@ -70,7 +70,6 @@ Column {
}
if (advertisesBot) {
tdLibWrapper.createPrivateChat(tdLibWrapper.getUserInformationByName(sponsoredMessageData.link.bot_username).id, "openAndSendStartToBot:" + sponsoredMessageData.link.start_parameter);
- //tdLibWrapper.sendBotStartMessage(tdLibWrapper.getUserInformationByName(sponsoredMessageData.link.bot_username).id, sponsoredMessageData.sponsor_chat_id, sponsoredMessageData.link.start_parameter, "");
}
}
}
diff --git a/qml/js/functions.js b/qml/js/functions.js
index 166bd1e..b3a7d53 100644
--- a/qml/js/functions.js
+++ b/qml/js/functions.js
@@ -393,6 +393,19 @@ function handleTMeLink(link, usedPrefix) {
function handleLink(link) {
var tMePrefix = tdLibWrapper.getOptionString("t_me_url");
var tMePrefixHttp = tMePrefix.replace('https', 'http');
+
+ // Checking if we have a direct message link...
+ Debug.log("URL open requested: " + link);
+ if ( (link.indexOf(tMePrefix) === 0 && link.substring(tMePrefix.length).indexOf("/") > 0) ||
+ (link.indexOf(tMePrefixHttp) === 0 && link.substring(tMePrefixHttp.length).indexOf("/") > 0) ||
+ link.indexOf("tg://privatepost") === 0 ||
+ link.indexOf("tg://resolve") === 0 ) {
+ Debug.log("Using message link info for: " + link);
+ tdLibWrapper.getMessageLinkInfo(link, "openDirectly");
+ return;
+ }
+
+ Debug.log("Trying to parse link ourselves: " + link);
if (link.indexOf("user://") === 0) {
var userName = link.substring(8);
var userInformation = tdLibWrapper.getUserInformationByName(userName);
diff --git a/qml/pages/ChatPage.qml b/qml/pages/ChatPage.qml
index 9d83561..25d5f1a 100644
--- a/qml/pages/ChatPage.qml
+++ b/qml/pages/ChatPage.qml
@@ -52,6 +52,8 @@ Page {
property int chatOnlineMemberCount: 0;
property var emojiProposals;
property bool iterativeInitialization: false;
+ property var messageToShow;
+ property string messageIdToShow;
readonly property bool userIsMember: ((isPrivateChat || isSecretChat) && chatInformation["@type"]) || // should be optimized
(isBasicGroup || isSuperGroup) && (
(chatGroupInformation.status["@type"] === "chatMemberStatusMember")
@@ -530,6 +532,11 @@ Page {
if (chatInformation.draft_message && messageId === chatInformation.draft_message.reply_to_message_id) {
newMessageInReplyToRow.inReplyToMessage = message;
}
+ Debug.log("Received message ID: " + messageId + ", message ID to show: " + chatPage.messageIdToShow)
+ if (chatPage.messageIdToShow && chatPage.messageIdToShow === String(messageId)) {
+ messageOverlayLoader.overlayMessage = message;
+ messageOverlayLoader.active = true;
+ }
}
onSecretChatReceived: {
if (secretChatId === chatInformation.type.secret_chat_id) {
@@ -1115,6 +1122,13 @@ Page {
if (chatPage.isChannel) {
tdLibWrapper.getChatSponsoredMessages(chatInformation.id);
}
+ if (typeof chatPage.messageToShow !== "undefined" && chatPage.messageToShow !== {}) {
+ messageOverlayLoader.overlayMessage = chatPage.messageToShow;
+ messageOverlayLoader.active = true;
+ }
+ if (typeof chatPage.messageIdToShow !== "undefined") {
+ tdLibWrapper.getMessage(chatPage.chatInformation.id, chatPage.messageIdToShow);
+ }
}
}
}
diff --git a/qml/pages/OverviewPage.qml b/qml/pages/OverviewPage.qml
index 1fd3104..4f828b6 100644
--- a/qml/pages/OverviewPage.qml
+++ b/qml/pages/OverviewPage.qml
@@ -49,8 +49,10 @@ Page {
Connections {
target: dBusAdaptor
onPleaseOpenMessage: {
- Debug.log("[OverviewPage] Opening chat from external requested: ", chatId);
- openMessage(chatId, messageId);
+ Debug.log("[OverviewPage] Opening chat from external requested: ", chatId, messageId);
+ // We open the chat only for now - as it's automatically positioned at the last read message
+ // it's probably better as if the message itself is displayed in the overlay
+ openChat(chatId);
}
onPleaseOpenUrl: {
Debug.log("[OverviewPage] Opening URL requested: ", url);
@@ -74,8 +76,6 @@ Page {
titleInteractionHint.opacity = 1.0;
appSettings.remainingInteractionHints = remainingInteractionHints - 1;
}
- openUrl();
- openMessage();
}
}
@@ -110,14 +110,35 @@ Page {
filterText: chatSearchField.text
}
- function openMessage(chatId, messageId) {
+ function openChat(chatId) {
+ if(chatListCreated && chatId) {
+ Debug.log("[OverviewPage] Opening Chat: ", chatId);
+ pageStack.pop(overviewPage, PageStackAction.Immediate);
+ pageStack.push(Qt.resolvedUrl("../pages/ChatPage.qml"), { "chatInformation" : tdLibWrapper.getChat(chatId) }, PageStackAction.Immediate);
+ chatToOpen = null;
+ }
+ }
+
+ function openChatWithMessageId(chatId, messageId) {
if(chatId && messageId) {
chatToOpen = [chatId, messageId];
}
- if(chatListCreated && chatToOpen && chatToOpen.length === 2) { // messageId not handled (yet)
- Debug.log("[OverviewPage] Opening Chat: ", chatToOpen[0]);
+ if(chatListCreated && chatToOpen && chatToOpen.length === 2) {
+ Debug.log("[OverviewPage] Opening Chat: ", chatToOpen[0], "message ID: " + chatToOpen[1]);
pageStack.pop(overviewPage, PageStackAction.Immediate);
- pageStack.push(Qt.resolvedUrl("../pages/ChatPage.qml"), { "chatInformation" : chatListModel.getById(chatToOpen[0]) }, PageStackAction.Immediate);
+ pageStack.push(Qt.resolvedUrl("../pages/ChatPage.qml"), { "chatInformation" : tdLibWrapper.getChat(chatToOpen[0]), "messageIdToShow" : chatToOpen[1] }, PageStackAction.Immediate);
+ chatToOpen = null;
+ }
+ }
+
+ function openChatWithMessage(chatId, message) {
+ if(chatId && message) {
+ chatToOpen = [chatId, message];
+ }
+ if(chatListCreated && chatToOpen && chatToOpen.length === 2) {
+ Debug.log("[OverviewPage] Opening Chat (with provided message): ", chatToOpen[0]);
+ pageStack.pop(overviewPage, PageStackAction.Immediate);
+ pageStack.push(Qt.resolvedUrl("../pages/ChatPage.qml"), { "chatInformation" : tdLibWrapper.getChat(chatToOpen[0]), "messageToShow" : chatToOpen[1] }, PageStackAction.Immediate);
chatToOpen = null;
}
}
@@ -272,6 +293,15 @@ Page {
onCopyToDownloadsError: {
appNotification.show(qsTr("Download failed."));
}
+ onMessageLinkInfoReceived: {
+ if (extra === "openDirectly") {
+ if (messageLinkInfo.chat_id === 0) {
+ appNotification.show(qsTr("Unable to open link."));
+ } else {
+ openChatWithMessage(messageLinkInfo.chat_id, messageLinkInfo.message);
+ }
+ }
+ }
}
Component.onCompleted: {
diff --git a/src/tdlibreceiver.cpp b/src/tdlibreceiver.cpp
index f6d5c23..f42d3b6 100644
--- a/src/tdlibreceiver.cpp
+++ b/src/tdlibreceiver.cpp
@@ -383,9 +383,18 @@ void TDLibReceiver::processMessage(const QVariantMap &receivedInformation)
void TDLibReceiver::processMessageLinkInfo(const QVariantMap &receivedInformation)
{
- const QString url = receivedInformation.value(EXTRA).toString();
- LOG("Received message link info " << url);
- emit messageLinkInfoReceived(url, receivedInformation);
+ const QString oldExtra = receivedInformation.value(EXTRA).toString();
+ QString url = "";
+ QString extra = "";
+ LOG("Received message link info " << oldExtra);
+ if (oldExtra.contains("|")) {
+ const int midIndex = oldExtra.indexOf("|");
+ url = oldExtra.left(midIndex);
+ extra = oldExtra.mid(midIndex + 1);
+ } else {
+ url = oldExtra;
+ }
+ emit messageLinkInfoReceived(url, receivedInformation, extra);
}
void TDLibReceiver::processMessageSendSucceeded(const QVariantMap &receivedInformation)
diff --git a/src/tdlibreceiver.h b/src/tdlibreceiver.h
index 910ed3f..53f4c70 100644
--- a/src/tdlibreceiver.h
+++ b/src/tdlibreceiver.h
@@ -56,7 +56,7 @@ signals:
void superGroupUpdated(qlonglong groupId, const QVariantMap &groupInformation);
void chatOnlineMemberCountUpdated(const QString &chatId, int onlineMemberCount);
void messagesReceived(const QVariantList &messages, int totalCount);
- void messageLinkInfoReceived(const QString &url, const QVariantMap &messageLinkInfo);
+ void messageLinkInfoReceived(const QString &url, const QVariantMap &messageLinkInfo, const QString &extra);
void sponsoredMessagesReceived(qlonglong chatId, const QVariantList &messages);
void newMessageReceived(qlonglong chatId, const QVariantMap &message);
void messageInformation(qlonglong chatId, qlonglong messageId, const QVariantMap &message);
diff --git a/src/tdlibwrapper.cpp b/src/tdlibwrapper.cpp
index e54d8e5..cf2be5b 100644
--- a/src/tdlibwrapper.cpp
+++ b/src/tdlibwrapper.cpp
@@ -119,7 +119,7 @@ void TDLibWrapper::initializeTDLibReciever() {
connect(this->tdLibReceiver, SIGNAL(chatOnlineMemberCountUpdated(QString, int)), this, SIGNAL(chatOnlineMemberCountUpdated(QString, int)));
connect(this->tdLibReceiver, SIGNAL(messagesReceived(QVariantList, int)), this, SIGNAL(messagesReceived(QVariantList, int)));
connect(this->tdLibReceiver, SIGNAL(sponsoredMessagesReceived(qlonglong, QVariantList)), this, SLOT(handleSponsoredMess(qlonglong, QVariantList)));
- connect(this->tdLibReceiver, SIGNAL(messageLinkInfoReceived(QString, QVariantMap)), this, SIGNAL(messageLinkInfoReceived(QString, QVariantMap)));
+ connect(this->tdLibReceiver, SIGNAL(messageLinkInfoReceived(QString, QVariantMap, QString)), this, SIGNAL(messageLinkInfoReceived(QString, QVariantMap, QString)));
connect(this->tdLibReceiver, SIGNAL(newMessageReceived(qlonglong, QVariantMap)), this, SIGNAL(newMessageReceived(qlonglong, QVariantMap)));
connect(this->tdLibReceiver, SIGNAL(messageInformation(qlonglong, qlonglong, QVariantMap)), this, SLOT(handleMessageInformation(qlonglong, qlonglong, QVariantMap)));
connect(this->tdLibReceiver, SIGNAL(messageSendSucceeded(qlonglong, qlonglong, QVariantMap)), this, SIGNAL(messageSendSucceeded(qlonglong, qlonglong, QVariantMap)));
@@ -656,13 +656,18 @@ void TDLibWrapper::getMessage(qlonglong chatId, qlonglong messageId)
this->sendRequest(requestObject);
}
-void TDLibWrapper::getMessageLinkInfo(const QString &url)
+void TDLibWrapper::getMessageLinkInfo(const QString &url, const QString &extra)
{
- LOG("Retrieving message link info" << url);
+ LOG("Retrieving message link info" << url << extra);
QVariantMap requestObject;
requestObject.insert(_TYPE, "getMessageLinkInfo");
requestObject.insert("url", url);
- requestObject.insert(_EXTRA, url);
+ if (extra == "") {
+ requestObject.insert(_EXTRA, url);
+ } else {
+ requestObject.insert(_EXTRA, url + "|" + extra);
+ }
+
this->sendRequest(requestObject);
}
diff --git a/src/tdlibwrapper.h b/src/tdlibwrapper.h
index eadfd0c..f16b90b 100644
--- a/src/tdlibwrapper.h
+++ b/src/tdlibwrapper.h
@@ -172,7 +172,7 @@ public:
Q_INVOKABLE void sendPollMessage(const QString &chatId, const QString &question, const QVariantList &options, bool anonymous, int correctOption, bool multiple, const QString &explanation, const QString &replyToMessageId = "0");
Q_INVOKABLE void forwardMessages(const QString &chatId, const QString &fromChatId, const QVariantList &messageIds, bool sendCopy, bool removeCaption);
Q_INVOKABLE void getMessage(qlonglong chatId, qlonglong messageId);
- Q_INVOKABLE void getMessageLinkInfo(const QString &url);
+ Q_INVOKABLE void getMessageLinkInfo(const QString &url, const QString &extra = "");
Q_INVOKABLE void getCallbackQueryAnswer(const QString &chatId, const QString &messageId, const QVariantMap &payload);
Q_INVOKABLE void getChatPinnedMessage(qlonglong chatId);
Q_INVOKABLE void getChatSponsoredMessages(qlonglong chatId);
@@ -265,7 +265,7 @@ signals:
void chatOnlineMemberCountUpdated(const QString &chatId, int onlineMemberCount);
void messagesReceived(const QVariantList &messages, int totalCount);
void sponsoredMessagesReceived(qlonglong chatId, const QVariantList &messages);
- void messageLinkInfoReceived(const QString &url, const QVariantMap &messageLinkInfo);
+ void messageLinkInfoReceived(const QString &url, const QVariantMap &messageLinkInfo, const QString &extra);
void newMessageReceived(qlonglong chatId, const QVariantMap &message);
void copyToDownloadsSuccessful(const QString &fileName, const QString &filePath);
void copyToDownloadsError(const QString &fileName, const QString &filePath);
diff --git a/translations/harbour-fernschreiber-de.ts b/translations/harbour-fernschreiber-de.ts
index e0441a0..6c640d1 100644
--- a/translations/harbour-fernschreiber-de.ts
+++ b/translations/harbour-fernschreiber-de.ts
@@ -1304,6 +1304,10 @@
Abmelden
+
+
+ Kann Link nicht öffnen.
+
PinnedMessageItem
diff --git a/translations/harbour-fernschreiber-en.ts b/translations/harbour-fernschreiber-en.ts
index 3574c2b..785f109 100644
--- a/translations/harbour-fernschreiber-en.ts
+++ b/translations/harbour-fernschreiber-en.ts
@@ -1306,6 +1306,10 @@ messages
Logging out
+
+
+ Unable to open link.
+
PinnedMessageItem
diff --git a/translations/harbour-fernschreiber-es.ts b/translations/harbour-fernschreiber-es.ts
index 178d9e1..75153bd 100644
--- a/translations/harbour-fernschreiber-es.ts
+++ b/translations/harbour-fernschreiber-es.ts
@@ -1304,6 +1304,10 @@
Saliendo de la cuenta
+
+
+
+
PinnedMessageItem
diff --git a/translations/harbour-fernschreiber-fi.ts b/translations/harbour-fernschreiber-fi.ts
index 4dc3038..ec5ec04 100644
--- a/translations/harbour-fernschreiber-fi.ts
+++ b/translations/harbour-fernschreiber-fi.ts
@@ -1305,6 +1305,10 @@
Kirjaudutaan ulos
+
+
+
+
PinnedMessageItem
diff --git a/translations/harbour-fernschreiber-fr.ts b/translations/harbour-fernschreiber-fr.ts
index fd5111f..00b4d8e 100644
--- a/translations/harbour-fernschreiber-fr.ts
+++ b/translations/harbour-fernschreiber-fr.ts
@@ -1304,6 +1304,10 @@
Se déconnecte
+
+
+
+
PinnedMessageItem
diff --git a/translations/harbour-fernschreiber-hu.ts b/translations/harbour-fernschreiber-hu.ts
index 6a2ec41..5254d34 100644
--- a/translations/harbour-fernschreiber-hu.ts
+++ b/translations/harbour-fernschreiber-hu.ts
@@ -1285,6 +1285,10 @@
+
+
+
+
PinnedMessageItem
diff --git a/translations/harbour-fernschreiber-it.ts b/translations/harbour-fernschreiber-it.ts
index aa727c1..1a54a7a 100644
--- a/translations/harbour-fernschreiber-it.ts
+++ b/translations/harbour-fernschreiber-it.ts
@@ -1304,6 +1304,10 @@
Disconnetto
+
+
+
+
PinnedMessageItem
diff --git a/translations/harbour-fernschreiber-pl.ts b/translations/harbour-fernschreiber-pl.ts
index 3d4c95b..635d73c 100644
--- a/translations/harbour-fernschreiber-pl.ts
+++ b/translations/harbour-fernschreiber-pl.ts
@@ -1323,6 +1323,10 @@
Wylogowywanie
+
+
+
+
PinnedMessageItem
diff --git a/translations/harbour-fernschreiber-ru.ts b/translations/harbour-fernschreiber-ru.ts
index fc0d823..c194131 100644
--- a/translations/harbour-fernschreiber-ru.ts
+++ b/translations/harbour-fernschreiber-ru.ts
@@ -1326,6 +1326,10 @@
Завершение сеанса
+
+
+
+
PinnedMessageItem
diff --git a/translations/harbour-fernschreiber-sk.ts b/translations/harbour-fernschreiber-sk.ts
index b6d53cb..504d2b4 100644
--- a/translations/harbour-fernschreiber-sk.ts
+++ b/translations/harbour-fernschreiber-sk.ts
@@ -1323,6 +1323,10 @@
Odhlasovanie
+
+
+
+
PinnedMessageItem
diff --git a/translations/harbour-fernschreiber-sv.ts b/translations/harbour-fernschreiber-sv.ts
index cb46eb9..17c5be0 100644
--- a/translations/harbour-fernschreiber-sv.ts
+++ b/translations/harbour-fernschreiber-sv.ts
@@ -1304,6 +1304,10 @@
Loggar ut
+
+
+
+
PinnedMessageItem
diff --git a/translations/harbour-fernschreiber-zh_CN.ts b/translations/harbour-fernschreiber-zh_CN.ts
index bf2cfd5..3c984a7 100644
--- a/translations/harbour-fernschreiber-zh_CN.ts
+++ b/translations/harbour-fernschreiber-zh_CN.ts
@@ -1286,6 +1286,10 @@
正在登出
+
+
+
+
PinnedMessageItem
diff --git a/translations/harbour-fernschreiber.ts b/translations/harbour-fernschreiber.ts
index 539083f..9e0c5e1 100644
--- a/translations/harbour-fernschreiber.ts
+++ b/translations/harbour-fernschreiber.ts
@@ -1304,6 +1304,10 @@
+
+
+
+
PinnedMessageItem