I can see secret chats... ;)
This commit is contained in:
parent
4713fbfba6
commit
a6d8328b10
21 changed files with 419 additions and 115 deletions
|
@ -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 {
|
||||
|
|
|
@ -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 )
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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") {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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'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>
|
||||
|
|
|
@ -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'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>
|
||||
|
|
|
@ -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'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>
|
||||
|
|
|
@ -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'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>
|
||||
|
|
|
@ -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'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>
|
||||
|
|
|
@ -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'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>
|
||||
|
|
|
@ -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'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>
|
||||
|
|
|
@ -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'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>
|
||||
|
|
|
@ -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'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>
|
||||
|
|
|
@ -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'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>
|
||||
|
|
|
@ -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'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>
|
||||
|
|
Loading…
Reference in a new issue