I can see secret chats... ;)

This commit is contained in:
Sebastian Wolf 2020-11-25 00:23:38 +01:00
parent 4713fbfba6
commit a6d8328b10
21 changed files with 419 additions and 115 deletions

View file

@ -1,5 +1,6 @@
import QtQuick 2.6
import Sailfish.Silica 1.0
import WerkWolf.Fernschreiber 1.0
import "../js/twemoji.js" as Emoji
import "../js/functions.js" as Functions
@ -14,12 +15,13 @@ PhotoTextsListItem {
// chat title
primaryText.text: title ? Emoji.emojify(title + ( display.notification_settings.mute_for > 0 ? " 🔇" : "" ), Theme.fontSizeMedium) : qsTr("Unknown")
// 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") ) : qsTr("Unknown") )
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
secondaryText.text: last_message_text ? Emoji.emojify(Functions.enhanceHtmlEntities(last_message_text), Theme.fontSizeExtraSmall) : qsTr("Unknown")
secondaryText.text: last_message_text ? Emoji.emojify(Functions.enhanceHtmlEntities(last_message_text), Theme.fontSizeExtraSmall) : "<i>" + qsTr("No message in this chat.") + "</i>"
// message date
tertiaryText.text: ( last_message_date ? Functions.getDateTimeElapsed(last_message_date) : qsTr("Unknown") ) + Emoji.emojify(last_message_status, tertiaryText.font.pixelSize)
tertiaryText.text: ( last_message_date ? ( last_message_date.length === 0 ? "" : Functions.getDateTimeElapsed(last_message_date) + Emoji.emojify(last_message_status, tertiaryText.font.pixelSize) ) : "" )
unreadCount: unread_count
isSecret: ( chat_type === TelegramAPI.ChatTypeSecret )
openMenuOnPressAndHold: true//chat_id != overviewPage.ownUserId
menu: ContextMenu {

View file

@ -1,5 +1,7 @@
import QtQuick 2.6
import Sailfish.Silica 1.0
import WerkWolf.Fernschreiber 1.0
ListItem {
id: chatListViewItem
@ -10,6 +12,7 @@ ListItem {
property alias tertiaryText: tertiaryText //usually last message date
property int unreadCount
property bool isSecret: false
property alias pictureThumbnail: pictureThumbnail
contentHeight: mainRow.height + separator.height + 2 * Theme.paddingMedium
@ -50,6 +53,27 @@ ListItem {
height: parent.width
}
Rectangle {
id: chatSecretBackground
color: Theme.overlayBackgroundColor
width: Theme.fontSizeExtraLarge
height: Theme.fontSizeExtraLarge
anchors.left: parent.left
anchors.bottom: parent.bottom
radius: parent.width / 2
visible: chatListViewItem.isSecret
}
Image {
id: chatSecretImage
source: "image://theme/icon-s-secure"
height: Theme.fontSizeMedium
width: Theme.fontSizeMedium
anchors.centerIn: chatSecretBackground
visible: chatListViewItem.isSecret
}
Rectangle {
id: chatUnreadMessagesCountBackground
color: Theme.highlightBackgroundColor
@ -104,6 +128,7 @@ ListItem {
width: parent.width - Theme.paddingMedium - prologSecondaryText.width
truncationMode: TruncationMode.Fade
textFormat: Text.StyledText
visible: prologSecondaryText.width < ( parent.width - Theme.paddingLarge )
}
}

View file

@ -160,6 +160,7 @@ function getMessageText(message, simple, myself) {
return myself ? qsTr("sent an unsupported message: %1", "myself; %1 is message type").arg(message.content['@type'].substring(7)) : qsTr("sent an unsupported message: %1", "%1 is message type").arg(message.content['@type'].substring(7));
}
function getChatPartnerStatusText(statusType, was_online) {
switch(statusType) {
case "userStatusEmpty":
@ -176,6 +177,18 @@ function getChatPartnerStatusText(statusType, was_online) {
return qsTr("offline, was recently online");
}
}
function getSecretChatStatus(secretChatDetails) {
switch (secretChatDetails.state["@type"]) {
case "secretChatStateClosed":
return "<b>" + qsTr("Closed!") + "</b>";
case "secretChatStatePending":
return qsTr("Pending acknowledgement");
case "secretChatStateReady":
return qsTr("Ready to use");
}
}
function getChatMemberStatusText(statusType) {
// chatMemberStatusAdministrator, chatMemberStatusBanned, chatMemberStatusCreator, chatMemberStatusLeft, chatMemberStatusMember, and chatMemberStatusRestricted.
switch(statusType) {

View file

@ -36,8 +36,10 @@ Page {
property bool isInitialized: false;
readonly property int myUserId: tdLibWrapper.getUserInformation().id;
property var chatInformation;
property var secretChatDetails;
property alias chatPicture: chatPictureThumbnail.photoData
property bool isPrivateChat: false;
property bool isSecretChat: false;
property bool isBasicGroup: false;
property bool isSuperGroup: false;
property bool isChannel: false;
@ -104,11 +106,18 @@ Page {
}
function updateChatPartnerStatusText() {
if(chatPage.state === "selectMessages") {
if (chatPage.state === "selectMessages") {
return
}
var statusText = Functions.getChatPartnerStatusText(chatPartnerInformation.status['@type'], chatPartnerInformation.status.was_online);
if(statusText) {
if (chatPage.secretChatDetails) {
if (statusText) {
statusText += " - ";
}
statusText += Functions.getSecretChatStatus(chatPage.secretChatDetails);
}
if (statusText) {
chatStatusText.text = statusText;
}
}
@ -138,12 +147,16 @@ Page {
chatView.currentIndex = -1;
chatView.lastReadSentIndex = 0;
var chatType = chatInformation.type['@type'];
isPrivateChat = ( chatType === "chatTypePrivate" );
isPrivateChat = ( chatType === "chatTypePrivate"|| chatType === "chatTypeSecret" );
isSecretChat = chatType === "chatTypeSecret";
isBasicGroup = ( chatType === "chatTypeBasicGroup" );
isSuperGroup = ( chatType === "chatTypeSupergroup" );
if (isPrivateChat) {
chatPartnerInformation = tdLibWrapper.getUserInformation(chatInformation.type.user_id);
updateChatPartnerStatusText();
if (isSecretChat) {
tdLibWrapper.getSecretChat(chatInformation.type.secret_chat_id);
}
}
else if (isBasicGroup) {
chatGroupInformation = tdLibWrapper.getBasicGroup(chatInformation.type.basic_group_id);
@ -410,6 +423,20 @@ Page {
pinnedMessageItem.pinnedMessage = message;
}
}
onSecretChatReceived: {
if (secretChatId === chatInformation.type.secret_chat_id.toString()) {
Debug.log("[ChatPage] Received detailed information about this secret chat");
chatPage.secretChatDetails = secretChat;
updateChatPartnerStatusText();
}
}
onSecretChatUpdated: {
if (secretChatId === chatInformation.type.secret_chat_id.toString()) {
Debug.log("[ChatPage] Detailed information about this secret chat was updated");
chatPage.secretChatDetails = secretChat;
updateChatPartnerStatusText();
}
}
}
Connections {
@ -604,23 +631,49 @@ Page {
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.paddingMedium
ProfileThumbnail {
id: chatPictureThumbnail
replacementStringHint: chatNameText.text
Item {
width: chatOverviewItem.height
height: chatOverviewItem.height
anchors.bottom: parent.bottom
anchors.bottomMargin: chatPage.isPortrait ? Theme.paddingMedium : Theme.paddingSmall
// Setting it directly may cause an stale state for the thumbnail in case the chat page
// was previously loaded with a picture and now it doesn't have one. Instead setting it
// when the ChatModel indicates a change. This also avoids flickering when the page is loaded...
Connections {
target: chatModel
onSmallPhotoChanged: {
chatPictureThumbnail.photoData = chatModel.smallPhoto;
ProfileThumbnail {
id: chatPictureThumbnail
replacementStringHint: chatNameText.text
width: parent.height
height: parent.height
// Setting it directly may cause an stale state for the thumbnail in case the chat page
// was previously loaded with a picture and now it doesn't have one. Instead setting it
// when the ChatModel indicates a change. This also avoids flickering when the page is loaded...
Connections {
target: chatModel
onSmallPhotoChanged: {
chatPictureThumbnail.photoData = chatModel.smallPhoto;
}
}
}
Rectangle {
id: chatSecretBackground
color: Theme.overlayBackgroundColor
width: chatPage.isPortrait ? Theme.fontSizeLarge : Theme.fontSizeMedium
height: width
anchors.left: parent.left
anchors.bottom: parent.bottom
radius: parent.width / 2
visible: chatPage.isSecretChat
}
Image {
id: chatSecretImage
source: "image://theme/icon-s-secure"
width: chatPage.isPortrait ? Theme.fontSizeSmall : Theme.fontSizeExtraSmall
height: width
anchors.centerIn: chatSecretBackground
visible: chatPage.isSecretChat
}
}
Item {

View file

@ -166,7 +166,7 @@ Page {
Item {
id: privateChatItem
height: parent.height
width: parent.width / 2 + ( Theme.horizontalPageMargin / 2 )
width: parent.width / 2 // - ( Theme.horizontalPageMargin / 2 )
anchors.left: parent.left
anchors.top: parent.top
@ -218,7 +218,7 @@ Page {
wrapMode: Text.Wrap
elide: Text.ElideRight
textFormat: Text.StyledText
text: qsTr("Transport-encrypted, stored in Telegram Cloud, sharable across devices")
text: qsTr("Transport-encrypted, uses Telegram Cloud, sharable across devices")
}
}
@ -241,7 +241,7 @@ Page {
Item {
id: secretChatItem
height: parent.height
width: parent.width / 2 + ( Theme.horizontalPageMargin / 2 )
width: parent.width / 2 //+ ( Theme.horizontalPageMargin / 2 )
anchors.left: privateChatItem.right
anchors.top: parent.top
@ -301,7 +301,7 @@ Page {
MouseArea {
anchors.fill: parent
onClicked: {
console.log("SECRET CHAT!");
tdLibWrapper.createNewSecretChat(display.id);
}
onPressed: {
secretChatHighlightBackground.visible = true;
@ -344,7 +344,7 @@ Page {
InfoLabel {
id: loadingLabel
text: qsTr("Loading contacs...")
text: qsTr("Loading contacts...")
}
BusyIndicator {

View file

@ -10,6 +10,10 @@ FernschreiberUtils::FernschreiberUtils(QObject *parent) : QObject(parent)
QString FernschreiberUtils::getMessageShortText(const QVariantMap &messageContent, const bool &myself)
{
if (messageContent.isEmpty()) {
return QString();
}
QString contentType = messageContent.value("@type").toString();
if (contentType == "messageText") {

View file

@ -126,6 +126,8 @@ TDLibReceiver::TDLibReceiver(void *tdLibClient, QObject *parent) : QThread(paren
handlers.insert("users", &TDLibReceiver::processUsers);
handlers.insert("error", &TDLibReceiver::processError);
handlers.insert("ok", &TDLibReceiver::nop);
handlers.insert("secretChat", &TDLibReceiver::processSecretChat);
handlers.insert("updateSecretChat", &TDLibReceiver::processUpdateSecretChat);
}
void TDLibReceiver::setActive(bool active)
@ -523,3 +525,15 @@ void TDLibReceiver::processError(const QVariantMap &receivedInformation)
void TDLibReceiver::nop(const QVariantMap &)
{
}
void TDLibReceiver::processSecretChat(const QVariantMap &receivedInformation)
{
LOG("Received a secret chat");
emit secretChat(receivedInformation.value(ID).toString(), receivedInformation);
}
void TDLibReceiver::processUpdateSecretChat(const QVariantMap &receivedInformation)
{
LOG("A secret chat was updated");
emit secretChatUpdated(receivedInformation.value(ID).toString(), receivedInformation);
}

View file

@ -85,7 +85,8 @@ signals:
void chatPinnedMessageUpdated(qlonglong chatId, qlonglong pinnedMessageId);
void usersReceived(const QString &extra, const QVariantList &userIds, int totalUsers);
void errorReceived(const int code, const QString &message);
void secretChat(const QString &secretChatId, const QVariantMap &secretChat);
void secretChatUpdated(const QString &secretChatId, const QVariantMap &secretChat);
private:
typedef void (TDLibReceiver::*Handler)(const QVariantMap &);
@ -145,6 +146,8 @@ private:
void processUsers(const QVariantMap &receivedInformation);
void processError(const QVariantMap &receivedInformation);
void nop(const QVariantMap &receivedInformation);
void processSecretChat(const QVariantMap &receivedInformation);
void processUpdateSecretChat(const QVariantMap &receivedInformation);
};
#endif // TDLIBRECEIVER_H

View file

@ -94,6 +94,8 @@ TDLibWrapper::TDLibWrapper(AppSettings *appSettings, MceInterface *mceInterface,
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(chat(QVariantMap)), this, SLOT(handleChatReceived(QVariantMap)));
connect(this->tdLibReceiver, SIGNAL(secretChat(QString, QVariantMap)), this, SIGNAL(secretChatReceived(QString, QVariantMap)));
connect(this->tdLibReceiver, SIGNAL(secretChatUpdated(QString, QVariantMap)), this, SIGNAL(secretChatUpdated(QString, QVariantMap)));
connect(this->tdLibReceiver, SIGNAL(recentStickersUpdated(QVariantList)), this, SIGNAL(recentStickersUpdated(QVariantList)));
connect(this->tdLibReceiver, SIGNAL(stickers(QVariantList)), this, SIGNAL(stickersReceived(QVariantList)));
connect(this->tdLibReceiver, SIGNAL(installedStickerSetsUpdated(QVariantList)), this, SIGNAL(installedStickerSetsUpdated(QVariantList)));
@ -809,6 +811,15 @@ void TDLibWrapper::getContacts()
this->sendRequest(requestObject);
}
void TDLibWrapper::getSecretChat(const QString &secretChatId)
{
LOG("Getting detailed information about secret chat" << secretChatId);
QVariantMap requestObject;
requestObject.insert(_TYPE, "getSecretChat");
requestObject.insert("secret_chat_id", secretChatId);
this->sendRequest(requestObject);
}
void TDLibWrapper::searchEmoji(const QString &queryString)
{
LOG("Searching emoji" << queryString);

View file

@ -164,6 +164,7 @@ public:
Q_INVOKABLE void joinChatByInviteLink(const QString &inviteLink);
Q_INVOKABLE void getDeepLinkInfo(const QString &link);
Q_INVOKABLE void getContacts();
Q_INVOKABLE void getSecretChat(const QString &secretChatId);
// Others (candidates for extraction ;))
Q_INVOKABLE void searchEmoji(const QString &queryString);
@ -207,6 +208,8 @@ signals:
void messagesDeleted(const QString &chatId, const QVariantList &messageIds);
void chatsReceived(const QVariantMap &chats);
void chatReceived(const QVariantMap &chat);
void secretChatReceived(const QString &secretChatId, const QVariantMap &secretChat);
void secretChatUpdated(const QString &secretChatId, const QVariantMap &secretChat);
void recentStickersUpdated(const QVariantList &stickerIds);
void stickersReceived(const QVariantList &stickers);
void installedStickerSetsUpdated(const QVariantList &stickerSetIds);

View file

@ -260,6 +260,10 @@
<source>Mark all messages as read</source>
<translation>Nachrichten als gelesen markieren</translation>
</message>
<message>
<source>No message in this chat.</source>
<translation>Keine Nachricht in diesem Chat</translation>
</message>
</context>
<context>
<name>ChatPage</name>
@ -894,35 +898,35 @@
<name>NewChatPage</name>
<message>
<source>Your Contacts</source>
<translation type="unfinished"></translation>
<translation>Ihre Kontakte</translation>
</message>
<message>
<source>You don&apos;t have any contacts.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacs...</source>
<translation type="unfinished"></translation>
<translation>Sie haben keine Kontakte</translation>
</message>
<message>
<source>Private Chat</source>
<translation type="unfinished"></translation>
<translation>Privater Chat</translation>
</message>
<message>
<source>Transport-encrypted, stored in Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation>Transportverschlüsselt, nutzt Telegram-Cloud, teilbar zwischen Geräten</translation>
</message>
<message>
<source>Secret Chat</source>
<translation type="unfinished"></translation>
<translation>Geheimer Chat</translation>
</message>
<message>
<source>End-to-end-encrypted, accessible on this device only</source>
<translation type="unfinished"></translation>
<translation>Ende-zu-Ende-verschlüsselt, nur auf diesem Gerät zugreifbar</translation>
</message>
<message>
<source>Search a contact</source>
<translation type="unfinished"></translation>
<translation>Suchen Sie einen Kontakt</translation>
</message>
<message>
<source>Loading contacts...</source>
<translation>Lade Kontakte...</translation>
</message>
</context>
<context>
@ -979,7 +983,7 @@
</message>
<message>
<source>New Chat</source>
<translation type="unfinished"></translation>
<translation>Neuer Chat</translation>
</message>
</context>
<context>
@ -1643,5 +1647,17 @@
<source>You are already a member of this chat.</source>
<translation>Sie sind bereits Mitglied dieses Chats.</translation>
</message>
<message>
<source>Closed!</source>
<translation>Geschlossen!</translation>
</message>
<message>
<source>Pending acknowledgement</source>
<translation>Ausstehende Bestätigung</translation>
</message>
<message>
<source>Ready to use</source>
<translation>Einsatzbereit</translation>
</message>
</context>
</TS>

View file

@ -260,6 +260,10 @@
<source>Mark all messages as read</source>
<translation>Mark all messages as read</translation>
</message>
<message>
<source>No message in this chat.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChatPage</name>
@ -900,18 +904,10 @@
<source>You don&apos;t have any contacts.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacs...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Private Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, stored in Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Secret Chat</source>
<translation type="unfinished"></translation>
@ -924,6 +920,14 @@
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacts...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NotificationManager</name>
@ -1643,5 +1647,17 @@
<source>You are already a member of this chat.</source>
<translation>You are already a member of this chat.</translation>
</message>
<message>
<source>Closed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pending acknowledgement</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -257,6 +257,10 @@
<source>Mark all messages as read</source>
<translation>Marcar todos como leídos</translation>
</message>
<message>
<source>No message in this chat.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChatPage</name>
@ -890,18 +894,10 @@
<source>You don&apos;t have any contacts.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacs...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Private Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, stored in Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Secret Chat</source>
<translation type="unfinished"></translation>
@ -914,6 +910,14 @@
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacts...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NotificationManager</name>
@ -1624,5 +1628,17 @@
<source>You are already a member of this chat.</source>
<translation>Ya eres miembro de este grupo.</translation>
</message>
<message>
<source>Closed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pending acknowledgement</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -260,6 +260,10 @@
<source>Mark all messages as read</source>
<translation>Merkitse kaikki viestit luetuiksi</translation>
</message>
<message>
<source>No message in this chat.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChatPage</name>
@ -901,18 +905,10 @@
<source>You don&apos;t have any contacts.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacs...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Private Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, stored in Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Secret Chat</source>
<translation type="unfinished"></translation>
@ -925,6 +921,14 @@
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacts...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NotificationManager</name>
@ -1644,5 +1648,17 @@
<source>You are already a member of this chat.</source>
<translation>Olet jo tämän ryhmän jäsen.</translation>
</message>
<message>
<source>Closed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pending acknowledgement</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -257,6 +257,10 @@
<source>Mark all messages as read</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>No message in this chat.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChatPage</name>
@ -890,18 +894,10 @@
<source>You don&apos;t have any contacts.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacs...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Private Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, stored in Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Secret Chat</source>
<translation type="unfinished"></translation>
@ -914,6 +910,14 @@
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacts...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NotificationManager</name>
@ -1624,5 +1628,17 @@
<source>You are already a member of this chat.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Closed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pending acknowledgement</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -260,6 +260,10 @@
<source>Mark all messages as read</source>
<translation>Segna tutti i messaggi come già letti</translation>
</message>
<message>
<source>No message in this chat.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChatPage</name>
@ -900,18 +904,10 @@
<source>You don&apos;t have any contacts.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacs...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Private Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, stored in Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Secret Chat</source>
<translation type="unfinished"></translation>
@ -924,6 +920,14 @@
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacts...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NotificationManager</name>
@ -1643,5 +1647,17 @@
<source>You are already a member of this chat.</source>
<translation>Sei già membro di questa chat.</translation>
</message>
<message>
<source>Closed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pending acknowledgement</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -263,6 +263,10 @@
<source>Mark all messages as read</source>
<translation>Zaznacz wszystkie wiadomości jako przeczytane</translation>
</message>
<message>
<source>No message in this chat.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChatPage</name>
@ -910,18 +914,10 @@
<source>You don&apos;t have any contacts.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacs...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Private Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, stored in Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Secret Chat</source>
<translation type="unfinished"></translation>
@ -934,6 +930,14 @@
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacts...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NotificationManager</name>
@ -1662,5 +1666,17 @@
<source>You are already a member of this chat.</source>
<translation>Jesteś już członkiem tego czatu.</translation>
</message>
<message>
<source>Closed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pending acknowledgement</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -263,6 +263,10 @@
<source>Mark all messages as read</source>
<translation>Отметить все сообщения как прочитанные</translation>
</message>
<message>
<source>No message in this chat.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChatPage</name>
@ -910,18 +914,10 @@
<source>You don&apos;t have any contacts.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacs...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Private Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, stored in Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Secret Chat</source>
<translation type="unfinished"></translation>
@ -934,6 +930,14 @@
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacts...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NotificationManager</name>
@ -1662,5 +1666,17 @@
<source>You are already a member of this chat.</source>
<translation>Вы уже в этом чате.</translation>
</message>
<message>
<source>Closed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pending acknowledgement</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -260,6 +260,10 @@
<source>Mark all messages as read</source>
<translation>Markera alla meddelanden som lästa</translation>
</message>
<message>
<source>No message in this chat.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChatPage</name>
@ -900,18 +904,10 @@
<source>You don&apos;t have any contacts.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacs...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Private Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, stored in Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Secret Chat</source>
<translation type="unfinished"></translation>
@ -924,6 +920,14 @@
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacts...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NotificationManager</name>
@ -1643,5 +1647,17 @@
<source>You are already a member of this chat.</source>
<translation>Du är redan medlem i den här chatten.</translation>
</message>
<message>
<source>Closed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pending acknowledgement</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -257,6 +257,10 @@
<source>Mark all messages as read</source>
<translation></translation>
</message>
<message>
<source>No message in this chat.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChatPage</name>
@ -890,18 +894,10 @@
<source>You don&apos;t have any contacts.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacs...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Private Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, stored in Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Secret Chat</source>
<translation type="unfinished"></translation>
@ -914,6 +910,14 @@
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacts...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NotificationManager</name>
@ -1624,5 +1628,17 @@
<source>You are already a member of this chat.</source>
<translation></translation>
</message>
<message>
<source>Closed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pending acknowledgement</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View file

@ -260,6 +260,10 @@
<source>Mark all messages as read</source>
<translation>Mark all messages as read</translation>
</message>
<message>
<source>No message in this chat.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ChatPage</name>
@ -900,18 +904,10 @@
<source>You don&apos;t have any contacts.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacs...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Private Chat</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, stored in Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Secret Chat</source>
<translation type="unfinished"></translation>
@ -924,6 +920,14 @@
<source>Search a contact</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Loading contacts...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Transport-encrypted, uses Telegram Cloud, sharable across devices</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>NotificationManager</name>
@ -1643,5 +1647,17 @@
<source>You are already a member of this chat.</source>
<translation>You are already a member of this chat.</translation>
</message>
<message>
<source>Closed!</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Pending acknowledgement</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Ready to use</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>