Secret chats begin to work properly...

This commit is contained in:
Sebastian Wolf 2020-11-26 00:25:15 +01:00
parent 3b8d284b2b
commit 90f7535fda
17 changed files with 134 additions and 138 deletions

View file

@ -13,7 +13,7 @@ PhotoTextsListItem {
property int ownUserId property int ownUserId
// chat title // chat title
primaryText.text: title ? Emoji.emojify(title + ( display.notification_settings.mute_for > 0 ? " 🔇" : "" ), Theme.fontSizeMedium) : qsTr("Unknown") primaryText.text: title ? Emoji.emojify((listItem.isSecret ? "🔒 " : "" ) + title + ( display.notification_settings.mute_for > 0 ? " 🔇" : "" ), Theme.fontSizeMedium) : qsTr("Unknown")
// last user // last user
prologSecondaryText.text: is_channel ? "" : ( last_message_sender_id ? ( last_message_sender_id !== ownUserId ? Emoji.emojify(Functions.getUserName(tdLibWrapper.getUserInformation(last_message_sender_id)), primaryText.font.pixelSize) : qsTr("You") ) : "" ) prologSecondaryText.text: is_channel ? "" : ( last_message_sender_id ? ( last_message_sender_id !== ownUserId ? Emoji.emojify(Functions.getUserName(tdLibWrapper.getUserInformation(last_message_sender_id)), primaryText.font.pixelSize) : qsTr("You") ) : "" )
// last message // last message

View file

@ -185,7 +185,7 @@ function getSecretChatStatus(secretChatDetails) {
case "secretChatStatePending": case "secretChatStatePending":
return qsTr("Pending acknowledgement"); return qsTr("Pending acknowledgement");
case "secretChatStateReady": case "secretChatStateReady":
return qsTr("Ready to use"); return "";
} }
} }

View file

@ -40,6 +40,7 @@ Page {
property alias chatPicture: chatPictureThumbnail.photoData property alias chatPicture: chatPictureThumbnail.photoData
property bool isPrivateChat: false; property bool isPrivateChat: false;
property bool isSecretChat: false; property bool isSecretChat: false;
property bool isSecretChatReady: false;
property bool isBasicGroup: false; property bool isBasicGroup: false;
property bool isSuperGroup: false; property bool isSuperGroup: false;
property bool isChannel: false; property bool isChannel: false;
@ -48,7 +49,7 @@ Page {
property int chatOnlineMemberCount: 0; property int chatOnlineMemberCount: 0;
property var emojiProposals; property var emojiProposals;
property bool iterativeInitialization: false; property bool iterativeInitialization: false;
readonly property bool userIsMember: (isPrivateChat && 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")
|| (chatGroupInformation.status["@type"] === "chatMemberStatusAdministrator") || (chatGroupInformation.status["@type"] === "chatMemberStatusAdministrator")
@ -111,10 +112,13 @@ Page {
} }
var statusText = Functions.getChatPartnerStatusText(chatPartnerInformation.status['@type'], chatPartnerInformation.status.was_online); var statusText = Functions.getChatPartnerStatusText(chatPartnerInformation.status['@type'], chatPartnerInformation.status.was_online);
if (chatPage.secretChatDetails) { if (chatPage.secretChatDetails) {
if (statusText) { var secretChatStatus = Functions.getSecretChatStatus(chatPage.secretChatDetails);
if (statusText && secretChatStatus) {
statusText += " - "; statusText += " - ";
} }
statusText += Functions.getSecretChatStatus(chatPage.secretChatDetails); if (secretChatStatus) {
statusText += secretChatStatus;
}
} }
if (statusText) { if (statusText) {
@ -147,11 +151,11 @@ Page {
chatView.currentIndex = -1; chatView.currentIndex = -1;
chatView.lastReadSentIndex = 0; chatView.lastReadSentIndex = 0;
var chatType = chatInformation.type['@type']; var chatType = chatInformation.type['@type'];
isPrivateChat = ( chatType === "chatTypePrivate"|| chatType === "chatTypeSecret" ); isPrivateChat = chatType === "chatTypePrivate";
isSecretChat = chatType === "chatTypeSecret"; isSecretChat = chatType === "chatTypeSecret";
isBasicGroup = ( chatType === "chatTypeBasicGroup" ); isBasicGroup = ( chatType === "chatTypeBasicGroup" );
isSuperGroup = ( chatType === "chatTypeSupergroup" ); isSuperGroup = ( chatType === "chatTypeSupergroup" );
if (isPrivateChat) { if (isPrivateChat || isSecretChat) {
chatPartnerInformation = tdLibWrapper.getUserInformation(chatInformation.type.user_id); chatPartnerInformation = tdLibWrapper.getUserInformation(chatInformation.type.user_id);
updateChatPartnerStatusText(); updateChatPartnerStatusText();
if (isSecretChat) { if (isSecretChat) {
@ -304,11 +308,12 @@ Page {
|| groupStatusType === "chatMemberStatusAdministrator" || groupStatusType === "chatMemberStatusAdministrator"
|| groupStatusType === "chatMemberStatusCreator" || groupStatusType === "chatMemberStatusCreator"
|| (groupStatusType === "chatMemberStatusRestricted" && groupStatus.permissions[privilege]) || (groupStatusType === "chatMemberStatusRestricted" && groupStatus.permissions[privilege])
|| (chatPage.isSecretChat && chatPage.isSecretChatReady)
} }
function canPinMessages() { function canPinMessages() {
Debug.log("Can we pin messages?"); Debug.log("Can we pin messages?");
if (chatPage.isPrivateChat) { if (chatPage.isPrivateChat || chatPage.isSecretChat) {
Debug.log("Private Chat: No!"); Debug.log("Private/Secret Chat: No!");
return false; return false;
} }
if (chatPage.chatGroupInformation.status["@type"] === "chatMemberStatusCreator") { if (chatPage.chatGroupInformation.status["@type"] === "chatMemberStatusCreator") {
@ -380,7 +385,7 @@ Page {
Connections { Connections {
target: tdLibWrapper target: tdLibWrapper
onUserUpdated: { onUserUpdated: {
if (isPrivateChat && chatPartnerInformation.id.toString() === userId ) { if ((isPrivateChat || isSecretChat) && chatPartnerInformation.id.toString() === userId ) {
chatPartnerInformation = userInformation; chatPartnerInformation = userInformation;
updateChatPartnerStatusText(); updateChatPartnerStatusText();
} }
@ -428,6 +433,7 @@ Page {
Debug.log("[ChatPage] Received detailed information about this secret chat"); Debug.log("[ChatPage] Received detailed information about this secret chat");
chatPage.secretChatDetails = secretChat; chatPage.secretChatDetails = secretChat;
updateChatPartnerStatusText(); updateChatPartnerStatusText();
chatPage.isSecretChatReady = chatPage.secretChatDetails.state["@type"] === "secretChatStateReady";
} }
} }
onSecretChatUpdated: { onSecretChatUpdated: {
@ -435,6 +441,7 @@ Page {
Debug.log("[ChatPage] Detailed information about this secret chat was updated"); Debug.log("[ChatPage] Detailed information about this secret chat was updated");
chatPage.secretChatDetails = secretChat; chatPage.secretChatDetails = secretChat;
updateChatPartnerStatusText(); updateChatPartnerStatusText();
chatPage.isSecretChatReady = chatPage.secretChatDetails.state["@type"] === "secretChatStateReady";
} }
} }
} }
@ -534,7 +541,7 @@ Page {
Timer { Timer {
id: chatContactTimeUpdater id: chatContactTimeUpdater
interval: 60000 interval: 60000
running: isPrivateChat running: isPrivateChat || isSecretChat
repeat: true repeat: true
onTriggered: { onTriggered: {
updateChatPartnerStatusText(); updateChatPartnerStatusText();
@ -686,7 +693,7 @@ Page {
id: chatNameText id: chatNameText
width: Math.min(implicitWidth, parent.width) width: Math.min(implicitWidth, parent.width)
anchors.right: parent.right anchors.right: parent.right
text: chatInformation.title !== "" ? Emoji.emojify(chatInformation.title, font.pixelSize) : qsTr("Unknown") text: chatInformation.title !== "" ? Emoji.emojify((chatPage.isSecretChat ? "🔒 " : "" ) + chatInformation.title, font.pixelSize) : qsTr("Unknown")
textFormat: Text.StyledText textFormat: Text.StyledText
font.pixelSize: chatPage.isPortrait ? Theme.fontSizeLarge : Theme.fontSizeMedium font.pixelSize: chatPage.isPortrait ? Theme.fontSizeLarge : Theme.fontSizeMedium
font.family: Theme.fontFamilyHeading font.family: Theme.fontFamilyHeading
@ -908,8 +915,9 @@ Page {
VerticalScrollDecorator {} VerticalScrollDecorator {}
ViewPlaceholder { ViewPlaceholder {
id: chatViewPlaceholder
enabled: chatView.count === 0 enabled: chatView.count === 0
text: qsTr("This chat is empty.") text: (chatPage.isSecretChat && !chatPage.isSecretChatReady) ? qsTr("This secret chat is not yet ready. Your chat partner needs to go online first.") : qsTr("This chat is empty.")
} }
} }
@ -1103,7 +1111,7 @@ Page {
} }
} }
IconButton { IconButton {
visible: !chatPage.isPrivateChat && chatPage.hasSendPrivilege("can_send_polls") visible: !(chatPage.isPrivateChat || chatPage.isSecretChat) && chatPage.hasSendPrivilege("can_send_polls")
icon.source: "image://theme/icon-m-question" icon.source: "image://theme/icon-m-question"
onClicked: { onClicked: {
pageStack.push(Qt.resolvedUrl("../pages/PollCreationPage.qml"), { "chatId" : chatInformation.id, groupName: chatInformation.title}); pageStack.push(Qt.resolvedUrl("../pages/PollCreationPage.qml"), { "chatId" : chatInformation.id, groupName: chatInformation.title});
@ -1383,7 +1391,7 @@ Page {
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
} }
visible: selectedMessages.every(function(message){ visible: selectedMessages.every(function(message){
return message.can_be_forwarded return message.can_be_forwarded && !chatPage.isSecretChat
}) })
width: visible ? Theme.itemSizeMedium : 0 width: visible ? Theme.itemSizeMedium : 0
icon.source: "image://theme/icon-m-forward" icon.source: "image://theme/icon-m-forward"

View file

@ -69,7 +69,7 @@ Page {
SearchField { SearchField {
id: contactsSearchField id: contactsSearchField
width: parent.width width: parent.width
placeholderText: qsTr("Search a contact") placeholderText: qsTr("Search a contact...")
active: !newChatPage.isLoading active: !newChatPage.isLoading
onTextChanged: contactsModel.applyFilter(text); onTextChanged: contactsModel.applyFilter(text);
EnterKey.iconSource: "image://theme/icon-m-enter-close" EnterKey.iconSource: "image://theme/icon-m-enter-close"

View file

@ -46,6 +46,7 @@ namespace {
const QString IS_CHANNEL("is_channel"); const QString IS_CHANNEL("is_channel");
const QString PINNED_MESSAGE_ID("pinned_message_id"); const QString PINNED_MESSAGE_ID("pinned_message_id");
const QString _TYPE("@type"); const QString _TYPE("@type");
const QString SECRET_CHAT_ID("secret_chat_id");
} }
class ChatListModel::ChatData class ChatListModel::ChatData
@ -518,13 +519,16 @@ void ChatListModel::updateChatVisibility(const TDLibWrapper::Group *group)
void ChatListModel::updateSecretChatVisibility(const QVariantMap secretChatDetails) void ChatListModel::updateSecretChatVisibility(const QVariantMap secretChatDetails)
{ {
LOG("Updating secret chat visibility" << secretChatDetails.value(ID)); LOG("Updating secret chat visibility" << secretChatDetails.value(ID).toString());
// See if any group has been removed from from view // See if any secret chat has been closed
for (int i = 0; i < chatList.size(); i++) { for (int i = 0; i < chatList.size(); i++) {
ChatData *chat = chatList.at(i); ChatData *chat = chatList.at(i);
if (chat->chatType != TDLibWrapper::ChatTypeSecret) { if (chat->chatType != TDLibWrapper::ChatTypeSecret) {
continue; continue;
} }
if (chat->chatData.value(TYPE).toMap().value(SECRET_CHAT_ID).toString() != secretChatDetails.value(ID).toString()) {
continue;
}
const QVector<int> changedRoles(chat->updateSecretChat(secretChatDetails)); const QVector<int> changedRoles(chat->updateSecretChat(secretChatDetails));
if (chat->isHidden() && !showHiddenChats) { if (chat->isHidden() && !showHiddenChats) {
LOG("Hiding chat" << chat->chatId << "at" << i); LOG("Hiding chat" << chat->chatId << "at" << i);
@ -543,21 +547,6 @@ void ChatListModel::updateSecretChatVisibility(const QVariantMap secretChatDetai
emit dataChanged(modelIndex, modelIndex, changedRoles); emit dataChanged(modelIndex, modelIndex, changedRoles);
} }
} }
// And see if any group been added to the view
const QList<ChatData*> hiddenChatList = hiddenChats.values();
const int n = hiddenChatList.size();
for (int j = 0; j < n; j++) {
ChatData *chat = hiddenChatList.at(j);
if (chat->chatType != TDLibWrapper::ChatTypeSecret) {
continue;
}
chat->updateSecretChat(secretChatDetails);
if (!chat->isHidden() || showHiddenChats) {
hiddenChats.remove(chat->chatId);
addVisibleChat(chat);
}
}
} }
bool ChatListModel::showAllChats() const bool ChatListModel::showAllChats() const
@ -584,7 +573,7 @@ void ChatListModel::handleChatDiscovered(const QString &, const QVariantMap &cha
} }
if (chat->chatType == TDLibWrapper::ChatTypeSecret) { if (chat->chatType == TDLibWrapper::ChatTypeSecret) {
QVariantMap secretChatDetails = tdLibWrapper->getSecretChatFromCache(chatToBeAdded.value(TYPE).toMap().value("secret_chat_id").toString()); QVariantMap secretChatDetails = tdLibWrapper->getSecretChatFromCache(chatToBeAdded.value(TYPE).toMap().value(SECRET_CHAT_ID).toString());
if (!secretChatDetails.isEmpty()) { if (!secretChatDetails.isEmpty()) {
chat->updateSecretChat(secretChatDetails); chat->updateSecretChat(secretChatDetails);
} }

View file

@ -530,8 +530,7 @@ void TDLibReceiver::nop(const QVariantMap &)
void TDLibReceiver::processSecretChat(const QVariantMap &receivedInformation) void TDLibReceiver::processSecretChat(const QVariantMap &receivedInformation)
{ {
LOG("Received a secret chat"); LOG("Received a secret chat");
QVariantMap discoveredSecretChat = receivedInformation.value(SECRET_CHAT).toMap(); emit secretChat(receivedInformation.value(ID).toString(), receivedInformation);
emit secretChat(discoveredSecretChat.value(ID).toString(), discoveredSecretChat);
} }
void TDLibReceiver::processUpdateSecretChat(const QVariantMap &receivedInformation) void TDLibReceiver::processUpdateSecretChat(const QVariantMap &receivedInformation)

View file

@ -379,6 +379,10 @@
<numerusform>%1 online</numerusform> <numerusform>%1 online</numerusform>
</translation> </translation>
</message> </message>
<message>
<source>This secret chat is not yet ready. Your chat partner needs to go online first.</source>
<translation>Dieser geheime Chat ist noch nicht bereit. Ihr Chatpartner muss erst noch online gehen.</translation>
</message>
</context> </context>
<context> <context>
<name>ChatSelectionPage</name> <name>ChatSelectionPage</name>
@ -921,8 +925,8 @@
<translation>Ende-zu-Ende-verschlüsselt, nur auf diesem Gerät zugreifbar</translation> <translation>Ende-zu-Ende-verschlüsselt, nur auf diesem Gerät zugreifbar</translation>
</message> </message>
<message> <message>
<source>Search a contact</source> <source>Search a contact...</source>
<translation>Suchen Sie einen Kontakt</translation> <translation>Einen Kontakt suchen...</translation>
</message> </message>
<message> <message>
<source>Loading contacts...</source> <source>Loading contacts...</source>
@ -1655,9 +1659,5 @@
<source>Pending acknowledgement</source> <source>Pending acknowledgement</source>
<translation>Ausstehende Bestätigung</translation> <translation>Ausstehende Bestätigung</translation>
</message> </message>
<message>
<source>Ready to use</source>
<translation>Einsatzbereit</translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -262,7 +262,7 @@
</message> </message>
<message> <message>
<source>No message in this chat.</source> <source>No message in this chat.</source>
<translation type="unfinished"></translation> <translation>No message in this chat.</translation>
</message> </message>
</context> </context>
<context> <context>
@ -379,6 +379,10 @@
<numerusform>%1 online</numerusform> <numerusform>%1 online</numerusform>
</translation> </translation>
</message> </message>
<message>
<source>This secret chat is not yet ready. Your chat partner needs to go online first.</source>
<translation>This secret chat is not yet ready. Your chat partner needs to go online first.</translation>
</message>
</context> </context>
<context> <context>
<name>ChatSelectionPage</name> <name>ChatSelectionPage</name>
@ -873,7 +877,7 @@
</message> </message>
<message> <message>
<source>Pin Message</source> <source>Pin Message</source>
<translation type="unfinished"></translation> <translation>Pin Message</translation>
</message> </message>
</context> </context>
<context> <context>
@ -887,46 +891,46 @@
<name>MessageOverlayFlickable</name> <name>MessageOverlayFlickable</name>
<message> <message>
<source>You</source> <source>You</source>
<translation type="unfinished">You</translation> <translation>You</translation>
</message> </message>
<message> <message>
<source>This message was forwarded. Original author: %1</source> <source>This message was forwarded. Original author: %1</source>
<translation type="unfinished"></translation> <translation>This message was forwarded. Original author: %1</translation>
</message> </message>
</context> </context>
<context> <context>
<name>NewChatPage</name> <name>NewChatPage</name>
<message> <message>
<source>Your Contacts</source> <source>Your Contacts</source>
<translation type="unfinished"></translation> <translation>Your Contacts</translation>
</message> </message>
<message> <message>
<source>You don&apos;t have any contacts.</source> <source>You don&apos;t have any contacts.</source>
<translation type="unfinished"></translation> <translation>You don&apos;t have any contacts.</translation>
</message> </message>
<message> <message>
<source>Private Chat</source> <source>Private Chat</source>
<translation type="unfinished"></translation> <translation>Private Chat</translation>
</message> </message>
<message> <message>
<source>Secret Chat</source> <source>Secret Chat</source>
<translation type="unfinished"></translation> <translation>Secret Chat</translation>
</message> </message>
<message> <message>
<source>End-to-end-encrypted, accessible on this device only</source> <source>End-to-end-encrypted, accessible on this device only</source>
<translation type="unfinished"></translation> <translation>End-to-end-encrypted, accessible on this device only</translation>
</message> </message>
<message> <message>
<source>Search a contact</source> <source>Search a contact...</source>
<translation type="unfinished"></translation> <translation>Search a contact...</translation>
</message> </message>
<message> <message>
<source>Loading contacts...</source> <source>Loading contacts...</source>
<translation type="unfinished"></translation> <translation>Loading contacts...</translation>
</message> </message>
<message> <message>
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source> <source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation> <translation>Transport-encrypted, uses Telegram Cloud, sharable across devices</translation>
</message> </message>
</context> </context>
<context> <context>
@ -983,22 +987,22 @@
</message> </message>
<message> <message>
<source>New Chat</source> <source>New Chat</source>
<translation type="unfinished"></translation> <translation>New Chat</translation>
</message> </message>
</context> </context>
<context> <context>
<name>PinnedMessageItem</name> <name>PinnedMessageItem</name>
<message> <message>
<source>You</source> <source>You</source>
<translation type="unfinished">You</translation> <translation>You</translation>
</message> </message>
<message> <message>
<source>Pinned Message</source> <source>Pinned Message</source>
<translation type="unfinished"></translation> <translation>Pinned Message</translation>
</message> </message>
<message> <message>
<source>Message unpinned</source> <source>Message unpinned</source>
<translation type="unfinished"></translation> <translation>Message unpinned</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1243,7 +1247,7 @@
</message> </message>
<message> <message>
<source>Notification turns on the display</source> <source>Notification turns on the display</source>
<translation type="unfinished"></translation> <translation>Notification turns on the display</translation>
</message> </message>
</context> </context>
<context> <context>
@ -1649,15 +1653,11 @@
</message> </message>
<message> <message>
<source>Closed!</source> <source>Closed!</source>
<translation type="unfinished"></translation> <translation>Closed!</translation>
</message> </message>
<message> <message>
<source>Pending acknowledgement</source> <source>Pending acknowledgement</source>
<translation type="unfinished"></translation> <translation>Pending acknowledgement</translation>
</message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message> </message>
</context> </context>
</TS> </TS>

View file

@ -369,6 +369,10 @@
<numerusform>%1 en línea</numerusform> <numerusform>%1 en línea</numerusform>
</translation> </translation>
</message> </message>
<message>
<source>This secret chat is not yet ready. Your chat partner needs to go online first.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ChatSelectionPage</name> <name>ChatSelectionPage</name>
@ -906,10 +910,6 @@
<source>End-to-end-encrypted, accessible on this device only</source> <source>End-to-end-encrypted, accessible on this device only</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Loading contacts...</source> <source>Loading contacts...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -918,6 +918,10 @@
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source> <source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact...</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>NotificationManager</name> <name>NotificationManager</name>
@ -1636,9 +1640,5 @@
<source>Pending acknowledgement</source> <source>Pending acknowledgement</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -379,6 +379,10 @@
<numerusform>%1 paikalla</numerusform> <numerusform>%1 paikalla</numerusform>
</translation> </translation>
</message> </message>
<message>
<source>This secret chat is not yet ready. Your chat partner needs to go online first.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ChatSelectionPage</name> <name>ChatSelectionPage</name>
@ -917,10 +921,6 @@
<source>End-to-end-encrypted, accessible on this device only</source> <source>End-to-end-encrypted, accessible on this device only</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Loading contacts...</source> <source>Loading contacts...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -929,6 +929,10 @@
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source> <source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact...</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>NotificationManager</name> <name>NotificationManager</name>
@ -1656,9 +1660,5 @@
<source>Pending acknowledgement</source> <source>Pending acknowledgement</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -369,6 +369,10 @@
<numerusform></numerusform> <numerusform></numerusform>
</translation> </translation>
</message> </message>
<message>
<source>This secret chat is not yet ready. Your chat partner needs to go online first.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ChatSelectionPage</name> <name>ChatSelectionPage</name>
@ -906,10 +910,6 @@
<source>End-to-end-encrypted, accessible on this device only</source> <source>End-to-end-encrypted, accessible on this device only</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Loading contacts...</source> <source>Loading contacts...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -918,6 +918,10 @@
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source> <source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact...</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>NotificationManager</name> <name>NotificationManager</name>
@ -1636,9 +1640,5 @@
<source>Pending acknowledgement</source> <source>Pending acknowledgement</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -379,6 +379,10 @@
<numerusform>%1 online</numerusform> <numerusform>%1 online</numerusform>
</translation> </translation>
</message> </message>
<message>
<source>This secret chat is not yet ready. Your chat partner needs to go online first.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ChatSelectionPage</name> <name>ChatSelectionPage</name>
@ -916,10 +920,6 @@
<source>End-to-end-encrypted, accessible on this device only</source> <source>End-to-end-encrypted, accessible on this device only</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Loading contacts...</source> <source>Loading contacts...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -928,6 +928,10 @@
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source> <source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact...</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>NotificationManager</name> <name>NotificationManager</name>
@ -1655,9 +1659,5 @@
<source>Pending acknowledgement</source> <source>Pending acknowledgement</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -389,6 +389,10 @@
<numerusform>%1 online</numerusform> <numerusform>%1 online</numerusform>
</translation> </translation>
</message> </message>
<message>
<source>This secret chat is not yet ready. Your chat partner needs to go online first.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ChatSelectionPage</name> <name>ChatSelectionPage</name>
@ -926,10 +930,6 @@
<source>End-to-end-encrypted, accessible on this device only</source> <source>End-to-end-encrypted, accessible on this device only</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Loading contacts...</source> <source>Loading contacts...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -938,6 +938,10 @@
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source> <source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact...</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>NotificationManager</name> <name>NotificationManager</name>
@ -1674,9 +1678,5 @@
<source>Pending acknowledgement</source> <source>Pending acknowledgement</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -389,6 +389,10 @@
<numerusform></numerusform> <numerusform></numerusform>
</translation> </translation>
</message> </message>
<message>
<source>This secret chat is not yet ready. Your chat partner needs to go online first.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ChatSelectionPage</name> <name>ChatSelectionPage</name>
@ -926,10 +930,6 @@
<source>End-to-end-encrypted, accessible on this device only</source> <source>End-to-end-encrypted, accessible on this device only</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Loading contacts...</source> <source>Loading contacts...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -938,6 +938,10 @@
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source> <source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact...</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>NotificationManager</name> <name>NotificationManager</name>
@ -1674,9 +1678,5 @@
<source>Pending acknowledgement</source> <source>Pending acknowledgement</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -379,6 +379,10 @@
<numerusform>%1 online</numerusform> <numerusform>%1 online</numerusform>
</translation> </translation>
</message> </message>
<message>
<source>This secret chat is not yet ready. Your chat partner needs to go online first.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ChatSelectionPage</name> <name>ChatSelectionPage</name>
@ -916,10 +920,6 @@
<source>End-to-end-encrypted, accessible on this device only</source> <source>End-to-end-encrypted, accessible on this device only</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Loading contacts...</source> <source>Loading contacts...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -928,6 +928,10 @@
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source> <source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact...</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>NotificationManager</name> <name>NotificationManager</name>
@ -1655,9 +1659,5 @@
<source>Pending acknowledgement</source> <source>Pending acknowledgement</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -369,6 +369,10 @@
<numerusform>%1 线</numerusform> <numerusform>%1 线</numerusform>
</translation> </translation>
</message> </message>
<message>
<source>This secret chat is not yet ready. Your chat partner needs to go online first.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ChatSelectionPage</name> <name>ChatSelectionPage</name>
@ -906,10 +910,6 @@
<source>End-to-end-encrypted, accessible on this device only</source> <source>End-to-end-encrypted, accessible on this device only</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Loading contacts...</source> <source>Loading contacts...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -918,6 +918,10 @@
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source> <source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact...</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>NotificationManager</name> <name>NotificationManager</name>
@ -1636,9 +1640,5 @@
<source>Pending acknowledgement</source> <source>Pending acknowledgement</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>

View file

@ -379,6 +379,10 @@
<numerusform>%1 online</numerusform> <numerusform>%1 online</numerusform>
</translation> </translation>
</message> </message>
<message>
<source>This secret chat is not yet ready. Your chat partner needs to go online first.</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>ChatSelectionPage</name> <name>ChatSelectionPage</name>
@ -916,10 +920,6 @@
<source>End-to-end-encrypted, accessible on this device only</source> <source>End-to-end-encrypted, accessible on this device only</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Loading contacts...</source> <source>Loading contacts...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -928,6 +928,10 @@
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source> <source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Search a contact...</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>NotificationManager</name> <name>NotificationManager</name>
@ -1655,9 +1659,5 @@
<source>Pending acknowledgement</source> <source>Pending acknowledgement</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
</TS> </TS>