Handle many direct message links properly, fixes #312
This commit is contained in:
parent
37518d06a6
commit
b8e5fb189c
21 changed files with 141 additions and 19 deletions
|
@ -70,7 +70,6 @@ Column {
|
||||||
}
|
}
|
||||||
if (advertisesBot) {
|
if (advertisesBot) {
|
||||||
tdLibWrapper.createPrivateChat(tdLibWrapper.getUserInformationByName(sponsoredMessageData.link.bot_username).id, "openAndSendStartToBot:" + sponsoredMessageData.link.start_parameter);
|
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, "");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -393,6 +393,19 @@ function handleTMeLink(link, usedPrefix) {
|
||||||
function handleLink(link) {
|
function handleLink(link) {
|
||||||
var tMePrefix = tdLibWrapper.getOptionString("t_me_url");
|
var tMePrefix = tdLibWrapper.getOptionString("t_me_url");
|
||||||
var tMePrefixHttp = tMePrefix.replace('https', 'http');
|
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) {
|
if (link.indexOf("user://") === 0) {
|
||||||
var userName = link.substring(8);
|
var userName = link.substring(8);
|
||||||
var userInformation = tdLibWrapper.getUserInformationByName(userName);
|
var userInformation = tdLibWrapper.getUserInformationByName(userName);
|
||||||
|
|
|
@ -52,6 +52,8 @@ Page {
|
||||||
property int chatOnlineMemberCount: 0;
|
property int chatOnlineMemberCount: 0;
|
||||||
property var emojiProposals;
|
property var emojiProposals;
|
||||||
property bool iterativeInitialization: false;
|
property bool iterativeInitialization: false;
|
||||||
|
property var messageToShow;
|
||||||
|
property string messageIdToShow;
|
||||||
readonly property bool userIsMember: ((isPrivateChat || isSecretChat) && chatInformation["@type"]) || // should be optimized
|
readonly property bool userIsMember: ((isPrivateChat || isSecretChat) && chatInformation["@type"]) || // should be optimized
|
||||||
(isBasicGroup || isSuperGroup) && (
|
(isBasicGroup || isSuperGroup) && (
|
||||||
(chatGroupInformation.status["@type"] === "chatMemberStatusMember")
|
(chatGroupInformation.status["@type"] === "chatMemberStatusMember")
|
||||||
|
@ -530,6 +532,11 @@ Page {
|
||||||
if (chatInformation.draft_message && messageId === chatInformation.draft_message.reply_to_message_id) {
|
if (chatInformation.draft_message && messageId === chatInformation.draft_message.reply_to_message_id) {
|
||||||
newMessageInReplyToRow.inReplyToMessage = message;
|
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: {
|
onSecretChatReceived: {
|
||||||
if (secretChatId === chatInformation.type.secret_chat_id) {
|
if (secretChatId === chatInformation.type.secret_chat_id) {
|
||||||
|
@ -1115,6 +1122,13 @@ Page {
|
||||||
if (chatPage.isChannel) {
|
if (chatPage.isChannel) {
|
||||||
tdLibWrapper.getChatSponsoredMessages(chatInformation.id);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,8 +49,10 @@ Page {
|
||||||
Connections {
|
Connections {
|
||||||
target: dBusAdaptor
|
target: dBusAdaptor
|
||||||
onPleaseOpenMessage: {
|
onPleaseOpenMessage: {
|
||||||
Debug.log("[OverviewPage] Opening chat from external requested: ", chatId);
|
Debug.log("[OverviewPage] Opening chat from external requested: ", chatId, messageId);
|
||||||
openMessage(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: {
|
onPleaseOpenUrl: {
|
||||||
Debug.log("[OverviewPage] Opening URL requested: ", url);
|
Debug.log("[OverviewPage] Opening URL requested: ", url);
|
||||||
|
@ -74,8 +76,6 @@ Page {
|
||||||
titleInteractionHint.opacity = 1.0;
|
titleInteractionHint.opacity = 1.0;
|
||||||
appSettings.remainingInteractionHints = remainingInteractionHints - 1;
|
appSettings.remainingInteractionHints = remainingInteractionHints - 1;
|
||||||
}
|
}
|
||||||
openUrl();
|
|
||||||
openMessage();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,14 +110,35 @@ Page {
|
||||||
filterText: chatSearchField.text
|
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) {
|
if(chatId && messageId) {
|
||||||
chatToOpen = [chatId, messageId];
|
chatToOpen = [chatId, messageId];
|
||||||
}
|
}
|
||||||
if(chatListCreated && chatToOpen && chatToOpen.length === 2) { // messageId not handled (yet)
|
if(chatListCreated && chatToOpen && chatToOpen.length === 2) {
|
||||||
Debug.log("[OverviewPage] Opening Chat: ", chatToOpen[0]);
|
Debug.log("[OverviewPage] Opening Chat: ", chatToOpen[0], "message ID: " + chatToOpen[1]);
|
||||||
pageStack.pop(overviewPage, PageStackAction.Immediate);
|
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;
|
chatToOpen = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -272,6 +293,15 @@ Page {
|
||||||
onCopyToDownloadsError: {
|
onCopyToDownloadsError: {
|
||||||
appNotification.show(qsTr("Download failed."));
|
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: {
|
Component.onCompleted: {
|
||||||
|
|
|
@ -383,9 +383,18 @@ void TDLibReceiver::processMessage(const QVariantMap &receivedInformation)
|
||||||
|
|
||||||
void TDLibReceiver::processMessageLinkInfo(const QVariantMap &receivedInformation)
|
void TDLibReceiver::processMessageLinkInfo(const QVariantMap &receivedInformation)
|
||||||
{
|
{
|
||||||
const QString url = receivedInformation.value(EXTRA).toString();
|
const QString oldExtra = receivedInformation.value(EXTRA).toString();
|
||||||
LOG("Received message link info " << url);
|
QString url = "";
|
||||||
emit messageLinkInfoReceived(url, receivedInformation);
|
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)
|
void TDLibReceiver::processMessageSendSucceeded(const QVariantMap &receivedInformation)
|
||||||
|
|
|
@ -56,7 +56,7 @@ signals:
|
||||||
void superGroupUpdated(qlonglong groupId, const QVariantMap &groupInformation);
|
void superGroupUpdated(qlonglong groupId, const QVariantMap &groupInformation);
|
||||||
void chatOnlineMemberCountUpdated(const QString &chatId, int onlineMemberCount);
|
void chatOnlineMemberCountUpdated(const QString &chatId, int onlineMemberCount);
|
||||||
void messagesReceived(const QVariantList &messages, int totalCount);
|
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 sponsoredMessagesReceived(qlonglong chatId, const QVariantList &messages);
|
||||||
void newMessageReceived(qlonglong chatId, const QVariantMap &message);
|
void newMessageReceived(qlonglong chatId, const QVariantMap &message);
|
||||||
void messageInformation(qlonglong chatId, qlonglong messageId, const QVariantMap &message);
|
void messageInformation(qlonglong chatId, qlonglong messageId, const QVariantMap &message);
|
||||||
|
|
|
@ -119,7 +119,7 @@ void TDLibWrapper::initializeTDLibReciever() {
|
||||||
connect(this->tdLibReceiver, SIGNAL(chatOnlineMemberCountUpdated(QString, int)), this, SIGNAL(chatOnlineMemberCountUpdated(QString, int)));
|
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(messagesReceived(QVariantList, int)), this, SIGNAL(messagesReceived(QVariantList, int)));
|
||||||
connect(this->tdLibReceiver, SIGNAL(sponsoredMessagesReceived(qlonglong, QVariantList)), this, SLOT(handleSponsoredMess(qlonglong, QVariantList)));
|
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(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(messageInformation(qlonglong, qlonglong, QVariantMap)), this, SLOT(handleMessageInformation(qlonglong, qlonglong, QVariantMap)));
|
||||||
connect(this->tdLibReceiver, SIGNAL(messageSendSucceeded(qlonglong, qlonglong, QVariantMap)), this, SIGNAL(messageSendSucceeded(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);
|
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;
|
QVariantMap requestObject;
|
||||||
requestObject.insert(_TYPE, "getMessageLinkInfo");
|
requestObject.insert(_TYPE, "getMessageLinkInfo");
|
||||||
requestObject.insert("url", url);
|
requestObject.insert("url", url);
|
||||||
|
if (extra == "") {
|
||||||
requestObject.insert(_EXTRA, url);
|
requestObject.insert(_EXTRA, url);
|
||||||
|
} else {
|
||||||
|
requestObject.insert(_EXTRA, url + "|" + extra);
|
||||||
|
}
|
||||||
|
|
||||||
this->sendRequest(requestObject);
|
this->sendRequest(requestObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 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 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 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 getCallbackQueryAnswer(const QString &chatId, const QString &messageId, const QVariantMap &payload);
|
||||||
Q_INVOKABLE void getChatPinnedMessage(qlonglong chatId);
|
Q_INVOKABLE void getChatPinnedMessage(qlonglong chatId);
|
||||||
Q_INVOKABLE void getChatSponsoredMessages(qlonglong chatId);
|
Q_INVOKABLE void getChatSponsoredMessages(qlonglong chatId);
|
||||||
|
@ -265,7 +265,7 @@ signals:
|
||||||
void chatOnlineMemberCountUpdated(const QString &chatId, int onlineMemberCount);
|
void chatOnlineMemberCountUpdated(const QString &chatId, int onlineMemberCount);
|
||||||
void messagesReceived(const QVariantList &messages, int totalCount);
|
void messagesReceived(const QVariantList &messages, int totalCount);
|
||||||
void sponsoredMessagesReceived(qlonglong chatId, const QVariantList &messages);
|
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 newMessageReceived(qlonglong chatId, const QVariantMap &message);
|
||||||
void copyToDownloadsSuccessful(const QString &fileName, const QString &filePath);
|
void copyToDownloadsSuccessful(const QString &fileName, const QString &filePath);
|
||||||
void copyToDownloadsError(const QString &fileName, const QString &filePath);
|
void copyToDownloadsError(const QString &fileName, const QString &filePath);
|
||||||
|
|
|
@ -1304,6 +1304,10 @@
|
||||||
<source>Logging out</source>
|
<source>Logging out</source>
|
||||||
<translation>Abmelden</translation>
|
<translation>Abmelden</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Unable to open link.</source>
|
||||||
|
<translation>Kann Link nicht öffnen.</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>PinnedMessageItem</name>
|
<name>PinnedMessageItem</name>
|
||||||
|
|
|
@ -1306,6 +1306,10 @@ messages</numerusform>
|
||||||
<source>Logging out</source>
|
<source>Logging out</source>
|
||||||
<translation>Logging out</translation>
|
<translation>Logging out</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Unable to open link.</source>
|
||||||
|
<translation>Unable to open link.</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>PinnedMessageItem</name>
|
<name>PinnedMessageItem</name>
|
||||||
|
|
|
@ -1304,6 +1304,10 @@
|
||||||
<source>Logging out</source>
|
<source>Logging out</source>
|
||||||
<translation>Saliendo de la cuenta</translation>
|
<translation>Saliendo de la cuenta</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Unable to open link.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>PinnedMessageItem</name>
|
<name>PinnedMessageItem</name>
|
||||||
|
|
|
@ -1305,6 +1305,10 @@
|
||||||
<source>Logging out</source>
|
<source>Logging out</source>
|
||||||
<translation>Kirjaudutaan ulos</translation>
|
<translation>Kirjaudutaan ulos</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Unable to open link.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>PinnedMessageItem</name>
|
<name>PinnedMessageItem</name>
|
||||||
|
|
|
@ -1304,6 +1304,10 @@
|
||||||
<source>Logging out</source>
|
<source>Logging out</source>
|
||||||
<translation>Se déconnecte</translation>
|
<translation>Se déconnecte</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Unable to open link.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>PinnedMessageItem</name>
|
<name>PinnedMessageItem</name>
|
||||||
|
|
|
@ -1285,6 +1285,10 @@
|
||||||
<source>Logging out</source>
|
<source>Logging out</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Unable to open link.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>PinnedMessageItem</name>
|
<name>PinnedMessageItem</name>
|
||||||
|
|
|
@ -1304,6 +1304,10 @@
|
||||||
<source>Logging out</source>
|
<source>Logging out</source>
|
||||||
<translation>Disconnetto</translation>
|
<translation>Disconnetto</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Unable to open link.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>PinnedMessageItem</name>
|
<name>PinnedMessageItem</name>
|
||||||
|
|
|
@ -1323,6 +1323,10 @@
|
||||||
<source>Logging out</source>
|
<source>Logging out</source>
|
||||||
<translation>Wylogowywanie</translation>
|
<translation>Wylogowywanie</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Unable to open link.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>PinnedMessageItem</name>
|
<name>PinnedMessageItem</name>
|
||||||
|
|
|
@ -1326,6 +1326,10 @@
|
||||||
<source>Logging out</source>
|
<source>Logging out</source>
|
||||||
<translation>Завершение сеанса</translation>
|
<translation>Завершение сеанса</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Unable to open link.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>PinnedMessageItem</name>
|
<name>PinnedMessageItem</name>
|
||||||
|
|
|
@ -1323,6 +1323,10 @@
|
||||||
<source>Logging out</source>
|
<source>Logging out</source>
|
||||||
<translation>Odhlasovanie</translation>
|
<translation>Odhlasovanie</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Unable to open link.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>PinnedMessageItem</name>
|
<name>PinnedMessageItem</name>
|
||||||
|
|
|
@ -1304,6 +1304,10 @@
|
||||||
<source>Logging out</source>
|
<source>Logging out</source>
|
||||||
<translation>Loggar ut</translation>
|
<translation>Loggar ut</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Unable to open link.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>PinnedMessageItem</name>
|
<name>PinnedMessageItem</name>
|
||||||
|
|
|
@ -1286,6 +1286,10 @@
|
||||||
<source>Logging out</source>
|
<source>Logging out</source>
|
||||||
<translation>正在登出</translation>
|
<translation>正在登出</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Unable to open link.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>PinnedMessageItem</name>
|
<name>PinnedMessageItem</name>
|
||||||
|
|
|
@ -1304,6 +1304,10 @@
|
||||||
<source>Logging out</source>
|
<source>Logging out</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Unable to open link.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>PinnedMessageItem</name>
|
<name>PinnedMessageItem</name>
|
||||||
|
|
Loading…
Reference in a new issue