diff --git a/harbour-fernschreiber.pro b/harbour-fernschreiber.pro
index 9cdc842..3e22d53 100644
--- a/harbour-fernschreiber.pro
+++ b/harbour-fernschreiber.pro
@@ -40,6 +40,8 @@ DISTFILES += qml/harbour-fernschreiber.qml \
qml/components/ImagePreview.qml \
qml/components/InReplyToRow.qml \
qml/components/LocationPreview.qml \
+ qml/components/MessageListViewItem.qml \
+ qml/components/MessageListViewItemSimple.qml \
qml/components/PollPreview.qml \
qml/components/StickerPicker.qml \
qml/components/PhotoTextsListItem.qml \
diff --git a/qml/components/MessageListViewItem.qml b/qml/components/MessageListViewItem.qml
new file mode 100644
index 0000000..caf33f6
--- /dev/null
+++ b/qml/components/MessageListViewItem.qml
@@ -0,0 +1,391 @@
+/*
+ Copyright (C) 2020 Sebastian J. Wolf and other contributors
+
+ This file is part of Fernschreiber.
+
+ Fernschreiber is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Fernschreiber is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Fernschreiber. If not, see .
+*/
+import QtQuick 2.6
+import Sailfish.Silica 1.0
+import "../js/twemoji.js" as Emoji
+import "../js/functions.js" as Functions
+
+ListItem {
+ id: messageListItem
+ contentHeight: messageBackground.height + Theme.paddingMedium
+ property variant myMessage: display
+ property variant userInformation: tdLibWrapper.getUserInformation(display.sender_user_id)
+ property Page page: chatPage
+
+ property bool isOwnMessage: chatPage.myUserId === display.sender_user_id
+ property string extraContentComponentName: typeof display.content !== "undefined"
+ && chatView.contentComponentNames.hasOwnProperty(display.content['@type']) ?
+ chatView.contentComponentNames[display.content['@type']] : ""
+ menu: ContextMenu {
+ MenuItem {
+ onClicked: {
+ newMessageInReplyToRow.inReplyToMessage = display;
+ newMessageTextField.focus = true;
+ }
+ text: qsTr("Reply to Message")
+ }
+ MenuItem {
+ onClicked: {
+ newMessageColumn.editMessageId = display.id;
+ newMessageTextField.text = Functions.getMessageText(display, false, false);
+ newMessageTextField.focus = true;
+ }
+ text: qsTr("Edit Message")
+ visible: display.can_be_edited
+ }
+ MenuItem {
+ onClicked: {
+ Clipboard.text = Functions.getMessageText(display, true, false);
+ }
+ text: qsTr("Copy Message to Clipboard")
+ }
+ MenuItem {
+ onClicked: {
+ var chatId = chatInformation.id;
+ var messageId = display.id;
+ Remorse.itemAction(messageListItem, qsTr("Message deleted"), function() { tdLibWrapper.deleteMessages(chatId, [ messageId]); })
+ }
+ text: qsTr("Delete Message")
+ visible: display.can_be_deleted_for_all_users || (display.can_be_deleted_only_for_self && display.chat_id === chatPage.myUserId)
+ }
+ }
+
+ Connections {
+ target: chatModel
+ onUnreadCountUpdated: {
+ messageBackground.color = index > ( chatView.count - unreadCount - 1 ) ? Theme.secondaryHighlightColor : Theme.secondaryColor;
+ messageBackground.opacity = index > ( chatView.count - unreadCount - 1 ) ? 0.5 : 0.2;
+ }
+ onNewMessageReceived: {
+ messageBackground.color = index > ( chatView.count - chatInformation.unreadCount - 1 ) ? Theme.secondaryHighlightColor : Theme.secondaryColor;
+ messageBackground.opacity = index > ( chatView.count - chatInformation.unreadCount - 1 ) ? 0.5 : 0.2;
+ }
+
+ onLastReadSentMessageUpdated: {
+ console.log("[ChatModel] Messages in this chat were read, new last read: " + lastReadSentIndex + ", updating description for index " + index + ", status: " + (index <= lastReadSentIndex));
+ messageDateText.text = getMessageStatusText(display, index, lastReadSentIndex, messageDateText.useElapsed);
+ }
+ onMessageUpdated: {
+ if (index === modelIndex) {
+ console.log("[ChatModel] This message was updated, index " + index + ", updating content...");
+ messageDateText.text = getMessageStatusText(display, index, chatView.lastReadSentIndex, messageDateText.useElapsed);
+ messageText.text = Emoji.emojify(Functions.getMessageText(display, false, messageListItem.isOwnMessage), messageText.font.pixelSize);
+ if(locationPreviewLoader.active && locationPreviewLoader.status === Loader.Ready) {
+ locationPreviewLoader.item.locationData = display.content.location;
+ locationPreviewLoader.item.updatePicture()
+ }
+ }
+ }
+ }
+
+ Connections {
+ target: tdLibWrapper
+ onReceivedMessage: {
+ if (messageId === display.reply_to_message_id.toString()) {
+ messageInReplyToRow.inReplyToMessage = message;
+ messageInReplyToRow.visible = true;
+ }
+ }
+ }
+
+ Component.onCompleted: {
+ delegateComponentLoadingTimer.start();
+ }
+
+ Timer {
+ id: delegateComponentLoadingTimer
+ interval: 500
+ repeat: false
+ running: false
+ onTriggered: {
+ if (typeof display.content !== "undefined") {
+ if (messageListItem.extraContentComponentName !== "") {
+ extraContentLoader.setSource(
+ "../components/" +messageListItem.extraContentComponentName +".qml",
+ {
+ messageListItem: messageListItem
+ })
+ } else {
+ if (typeof display.content.web_page !== "undefined") { // only in messageText
+ webPagePreviewLoader.active = true;
+ }
+ }
+ }
+ }
+ }
+
+ Row {
+ id: messageTextRow
+ spacing: Theme.paddingSmall
+ width: parent.width - ( 2 * Theme.horizontalPageMargin )
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+
+ Loader {
+ id: profileThumbnailLoader
+ active: (( chatPage.isBasicGroup || chatPage.isSuperGroup ) && !chatPage.isChannel)
+ asynchronous: true
+ width: active ? Theme.itemSizeSmall : 0
+ height: active ? Theme.itemSizeSmall : 0
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: Theme.paddingSmall
+ sourceComponent: Component {
+ ProfileThumbnail {
+ id: messagePictureThumbnail
+ photoData: (typeof messageListItem.userInformation.profile_photo !== "undefined") ? messageListItem.userInformation.profile_photo.small : ""
+ replacementStringHint: userText.text
+ width: visible ? Theme.itemSizeSmall : 0
+ height: visible ? Theme.itemSizeSmall : 0
+ visible: ( chatPage.isBasicGroup || chatPage.isSuperGroup ) && !chatPage.isChannel
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ tdLibWrapper.createPrivateChat(messageListItem.userInformation.id);
+ }
+ }
+ }
+ }
+ }
+
+ Item {
+ id: messageTextItem
+
+ width: parent.width - profileThumbnailLoader.width - Theme.paddingSmall
+ height: messageBackground.height
+
+ Rectangle {
+ id: messageBackground
+ anchors {
+ left: parent.left
+ leftMargin: messageListItem.isOwnMessage ? 2 * Theme.horizontalPageMargin : 0
+ right: parent.right
+ rightMargin: messageListItem.isOwnMessage ? 0 : 2 * Theme.horizontalPageMargin
+ verticalCenter: parent.verticalCenter
+ }
+ height: messageTextColumn.height + ( 2 * Theme.paddingMedium )
+
+ color: index > ( chatView.count - chatInformation.unread_count - 1 ) ? Theme.secondaryHighlightColor : Theme.secondaryColor
+ radius: parent.width / 50
+ opacity: index > ( chatView.count - chatInformation.unread_count - 1 ) ? 0.5 : 0.2
+ visible: appSettings.showStickersAsImages || display.content['@type'] !== "messageSticker"
+ Behavior on color { ColorAnimation { duration: 200 } }
+ Behavior on opacity { FadeAnimation {} }
+ }
+
+ Column {
+ id: messageTextColumn
+
+ spacing: Theme.paddingSmall
+
+ width: messageBackground.width - Theme.horizontalPageMargin
+ anchors.centerIn: messageBackground
+
+ Component.onCompleted: {
+ if (display.reply_to_message_id !== 0) {
+ tdLibWrapper.getMessage(chatInformation.id, display.reply_to_message_id);
+ }
+ }
+
+
+ Text {
+ id: userText
+
+ width: parent.width
+ text: !messageListItem.isOwnMessage ? Emoji.emojify(Functions.getUserName(messageListItem.userInformation), font.pixelSize) : qsTr("You")
+ font.pixelSize: Theme.fontSizeExtraSmall
+ font.weight: Font.ExtraBold
+ color: messageListItem.isOwnMessage ? Theme.highlightColor : Theme.primaryColor
+ maximumLineCount: 1
+ elide: Text.ElideRight
+ textFormat: Text.StyledText
+ horizontalAlignment: messageListItem.isOwnMessage ? Text.AlignRight : Text.AlignLeft
+ visible: ( chatPage.isBasicGroup || chatPage.isSuperGroup ) && !chatPage.isChannel
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ tdLibWrapper.createPrivateChat(messageListItem.userInformation.id);
+ }
+ }
+ }
+
+ InReplyToRow {
+ id: messageInReplyToRow
+ myUserId: chatPage.myUserId
+ visible: false
+ }
+
+ Loader {
+ id: forwardedInformationLoader
+ active: typeof display.forward_info !== "undefined"
+ asynchronous: true
+ width: parent.width
+ // height: active ? ( item ? item.height : Theme.itemSizeExtraSmall ) : 0
+ sourceComponent: Component {
+ Row {
+ id: forwardedMessageInformationRow
+ spacing: Theme.paddingSmall
+ width: parent.width
+
+ Component.onCompleted: {
+ if (display.forward_info.origin["@type"] === "messageForwardOriginChannel") {
+ var otherChatInformation = tdLibWrapper.getChat(display.forward_info.origin.chat_id);
+ forwardedThumbnail.photoData = (typeof otherChatInformation.photo !== "undefined") ? otherChatInformation.photo.small : "";
+ forwardedChannelText.text = Emoji.emojify(otherChatInformation.title, Theme.fontSizeExtraSmall);
+ } else if (display.forward_info.origin["@type"] === "messageForwardOriginUser") {
+ var otherUserInformation = tdLibWrapper.getUserInformation(display.forward_info.origin.sender_user_id);
+ forwardedThumbnail.photoData = (typeof otherUserInformation.profile_photo !== "undefined") ? otherUserInformation.profile_photo.small : "";
+ forwardedChannelText.text = Emoji.emojify(Functions.getUserName(otherUserInformation), Theme.fontSizeExtraSmall);
+ } else {
+ forwardedThumbnail.photoData = "";
+ forwardedChannelText.text = Emoji.emojify(display.forward_info.origin.sender_user_name, Theme.fontSizeExtraSmall);
+ }
+ }
+
+ ProfileThumbnail {
+ id: forwardedThumbnail
+ replacementStringHint: forwardedChannelText.text
+ width: Theme.itemSizeExtraSmall
+ height: Theme.itemSizeExtraSmall
+ }
+
+ Column {
+ spacing: Theme.paddingSmall
+ width: parent.width
+ Text {
+ font.pixelSize: Theme.fontSizeExtraSmall
+ color: Theme.primaryColor
+ width: parent.width
+ font.italic: true
+ elide: Text.ElideRight
+ textFormat: Text.StyledText
+ text: qsTr("Forwarded Message")
+ onTruncatedChanged: {
+ // There is obviously a bug in QML in truncating text with images.
+ // We simply remove Emojis then...
+ if (truncated) {
+ text = text.replace(/\]+\/\>/g, "");
+ }
+ }
+ }
+ Text {
+ id: forwardedChannelText
+ font.pixelSize: Theme.fontSizeExtraSmall
+ color: Theme.primaryColor
+ width: parent.width
+ font.bold: true
+ elide: Text.ElideRight
+ textFormat: Text.StyledText
+ text: Emoji.emojify(forwardedMessageInformationRow.otherChatInformation.title, font.pixelSize)
+ onTruncatedChanged: {
+ // There is obviously a bug in QML in truncating text with images.
+ // We simply remove Emojis then...
+ if (truncated) {
+ text = text.replace(/\]+\/\>/g, "");
+ }
+ }
+ }
+ }
+
+
+ }
+ }
+ }
+
+ Text {
+ id: messageText
+ width: parent.width
+ text: Emoji.emojify(Functions.getMessageText(display, false, messageListItem.isOwnMessage), font.pixelSize)
+ font.pixelSize: Theme.fontSizeSmall
+ color: messageListItem.isOwnMessage ? Theme.highlightColor : Theme.primaryColor
+ wrapMode: Text.Wrap
+ textFormat: Text.StyledText
+ onLinkActivated: {
+ Functions.handleLink(link);
+ }
+ horizontalAlignment: messageListItem.isOwnMessage ? Text.AlignRight : Text.AlignLeft
+ linkColor: Theme.highlightColor
+ visible: (text !== "")
+ }
+
+ Loader {
+ id: webPagePreviewLoader
+ active: false
+ asynchronous: true
+ width: parent.width
+ height: typeof display.content.web_page !== "undefined" ? ( (parent.width * 2 / 3) + (6 * Theme.fontSizeExtraSmall) + ( 7 * Theme.paddingSmall) ) : 0
+
+ sourceComponent: Component {
+ id: webPagePreviewComponent
+ WebPagePreview {
+ id: webPagePreview
+
+ onImplicitHeightChanged: {
+ webPagePreviewLoader.height = webPagePreview.implicitHeight;
+ }
+
+ webPageData: display.content.web_page
+ width: parent.width
+ }
+ }
+ }
+ Loader {
+ id: extraContentLoader
+ width: parent.width
+ asynchronous: true
+ property int heightPreset: messageListItem.extraContentComponentName !== "" ? chatView.getContentComponentHeight(messageListItem.extraContentComponentName, display.content, width) : 0
+ height: item ? item.height : heightPreset
+ }
+
+ Timer {
+ id: messageDateUpdater
+ interval: 60000
+ running: true
+ repeat: true
+ onTriggered: {
+ messageDateText.text = getMessageStatusText(display, index, chatView.lastReadSentIndex, messageDateText.useElapsed);
+ }
+ }
+
+
+ Text {
+ width: parent.width
+
+ property bool useElapsed: true
+
+ id: messageDateText
+ font.pixelSize: Theme.fontSizeTiny
+ color: messageListItem.isOwnMessage ? Theme.secondaryHighlightColor : Theme.secondaryColor
+ horizontalAlignment: messageListItem.isOwnMessage ? Text.AlignRight : Text.AlignLeft
+ text: getMessageStatusText(display, index, chatView.lastReadSentIndex, messageDateText.useElapsed)
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ messageDateText.useElapsed = !messageDateText.useElapsed;
+ messageDateText.text = getMessageStatusText(display, index, chatView.lastReadSentIndex, messageDateText.useElapsed);
+ }
+ }
+ }
+
+ }
+
+ }
+
+ }
+
+}
diff --git a/qml/components/MessageListViewItemSimple.qml b/qml/components/MessageListViewItemSimple.qml
new file mode 100644
index 0000000..5d86162
--- /dev/null
+++ b/qml/components/MessageListViewItemSimple.qml
@@ -0,0 +1,53 @@
+/*
+ Copyright (C) 2020 Sebastian J. Wolf and other contributors
+
+ This file is part of Fernschreiber.
+
+ Fernschreiber is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Fernschreiber is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Fernschreiber. If not, see .
+*/
+import QtQuick 2.6
+import Sailfish.Silica 1.0
+import "../js/twemoji.js" as Emoji
+import "../js/functions.js" as Functions
+
+Item {
+ id: messageListItem
+ property variant myMessage: display
+ property variant userInformation: tdLibWrapper.getUserInformation(myMessage.sender_user_id)
+ property bool isOwnMessage: chatPage.myUserId === myMessage.sender_user_id
+ height: backgroundRectangle.height + Theme.paddingMedium
+
+ Rectangle {
+ id: backgroundRectangle
+ anchors.centerIn: parent
+ height: messageText.height + Theme.paddingMedium * 2
+ width: Math.min(messageText.implicitWidth, messageText.contentWidth) + Theme.paddingMedium * 2
+ color: Theme.rgba(Theme.secondaryColor, 0.1)
+ radius: parent.width / 50
+ }
+ Text {
+ id: messageText
+ width: parent.width - Theme.paddingMedium * 4 - Theme.horizontalPageMargin * 2
+ anchors.centerIn: parent
+ color: Theme.highlightColor
+ horizontalAlignment: Text.AlignHCenter
+ font.pixelSize: Theme.fontSizeExtraSmall
+ text: "" + (!messageListItem.isOwnMessage ? Emoji.emojify(Functions.getUserName(messageListItem.userInformation), font.pixelSize) : qsTr("You")) + " " + Emoji.emojify(Functions.getMessageText(messageListItem.myMessage, false, messageListItem.isOwnMessage), font.pixelSize)
+ textFormat: Text.RichText
+ wrapMode: Text.WrapAtWordBoundaryOrAnywhere
+ onLinkActivated: {
+ Functions.handleLink(link);
+ }
+ }
+}
diff --git a/qml/js/functions.js b/qml/js/functions.js
index 681825b..30a5b59 100644
--- a/qml/js/functions.js
+++ b/qml/js/functions.js
@@ -109,9 +109,43 @@ function getMessageText(message, simple, myself) {
}
return simple ? (myself ? qsTr("sent a poll", "myself") : qsTr("sent a poll")) : ("" + qsTr("Poll") + "");
}
- return qsTr("Unsupported message: %1").arg(message.content['@type'].substring(7));
-}
+ if (message.content['@type'] === 'messageBasicGroupChatCreate' || message.content['@type'] === 'messageSupergroupChatCreate') {
+ return myself ? qsTr("created this group", "myself") : qsTr("created this group");
+ }
+ if (message.content['@type'] === 'messageChatChangePhoto') {
+ return myself ? qsTr("changed the chat photo", "myself") : qsTr("changed the chat photo");
+ }
+ if (message.content['@type'] === 'messageChatDeletePhoto') {
+ return myself ? qsTr("deleted the chat photo", "myself") : qsTr("deleted the chat photo");
+ }
+ if (message.content['@type'] === 'messageChatSetTtl') {
+ return myself ? qsTr("changed the secret chat TTL setting", "myself; TTL = Time To Live") : qsTr("changed the secret chat TTL setting", "TTL = Time To Live");
+ }
+ if (message.content['@type'] === 'messageChatUpgradeFrom' || message.content['@type'] === 'messageChatUpgradeTo' ) {
+ return myself ? qsTr("upgraded this group to a supergroup", "myself") : qsTr("upgraded this group to a supergroup");
+ }
+ if (message.content['@type'] === 'messageCustomServiceAction') {
+ return message.content.text;
+ }
+ if (message.content['@type'] === 'messagePinMessage') {
+ return myself ? qsTr("changed the pinned message", "myself") : qsTr("changed the pinned message");
+ }
+ if (message.content['@type'] === 'messageExpiredPhoto') {
+ return myself ? qsTr("sent a self-destructing photo that is expired", "myself") : qsTr("sent a self-destructing photo that is expired");
+ }
+ if (message.content['@type'] === 'messageExpiredVideo') {
+ return myself ? qsTr("sent a self-destructing video that is expired", "myself") : qsTr("sent a self-destructing video that is expired");
+ }
+ if (message.content['@type'] === 'messageScreenshotTaken') {
+ return myself ? qsTr("created a screenshot in this chat", "myself") : qsTr("created a screenshot in this chat");
+ }
+ if (message.content['@type'] === 'messageUnsupported') {
+ return myself ? qsTr("sent an unsupported message", "myself") : qsTr("sent an unsupported message");
+ }
+
+ 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":
diff --git a/qml/pages/ChatPage.qml b/qml/pages/ChatPage.qml
index 41f7901..ca84b30 100644
--- a/qml/pages/ChatPage.qml
+++ b/qml/pages/ChatPage.qml
@@ -572,379 +572,19 @@ Page {
}
}
- delegate: ListItem {
- id: messageListItem
- contentHeight: messageBackground.height + Theme.paddingMedium
- contentWidth: parent.width
-
- property variant myMessage: display
- property variant userInformation: tdLibWrapper.getUserInformation(display.sender_user_id)
- property Page page: chatPage
-
- property bool isOwnMessage: chatPage.myUserId === display.sender_user_id
- property string extraContentComponentName: typeof display.content !== "undefined"
- && chatView.contentComponentNames.hasOwnProperty(display.content['@type']) ?
- chatView.contentComponentNames[display.content['@type']] : ""
- menu: ContextMenu {
- MenuItem {
- onClicked: {
- newMessageInReplyToRow.inReplyToMessage = display;
- newMessageTextField.focus = true;
- }
- text: qsTr("Reply to Message")
- }
- MenuItem {
- onClicked: {
- newMessageColumn.editMessageId = display.id;
- newMessageTextField.text = Functions.getMessageText(display, false, false);
- newMessageTextField.focus = true;
- }
- text: qsTr("Edit Message")
- visible: display.can_be_edited
- }
- MenuItem {
- onClicked: {
- Clipboard.text = Functions.getMessageText(display, true, false);
- }
- text: qsTr("Copy Message to Clipboard")
- }
- MenuItem {
- onClicked: {
- var chatId = chatInformation.id;
- var messageId = display.id;
- Remorse.itemAction(messageListItem, qsTr("Message deleted"), function() { tdLibWrapper.deleteMessages(chatId, [ messageId]); })
- }
- text: qsTr("Delete Message")
- visible: display.can_be_deleted_for_all_users || (display.can_be_deleted_only_for_self && display.chat_id === chatPage.myUserId)
- }
+ property var simpleDelegateMessages: ["messageBasicGroupChatCreate", "messageChatAddMembers", "messageChatChangePhoto", "messageChatChangeTitle", "messageChatDeleteMember", "messageChatDeletePhoto", "messageChatJoinByLink", "messageChatSetTtl", "messageChatUpgradeFrom", "messageChatUpgradeTo", "messageCustomServiceAction", "messagePinMessage", "messageScreenshotTaken", "messageSupergroupChatCreate", "messageUnsupported"]
+ delegate: Loader {
+ width: chatView.width
+ Component {
+ id: messageListViewItemComponent
+ MessageListViewItem {}
}
-
- Connections {
- target: chatModel
- onUnreadCountUpdated: {
- messageBackground.color = index > ( chatView.count - unreadCount - 1 ) ? Theme.secondaryHighlightColor : Theme.secondaryColor;
- messageBackground.opacity = index > ( chatView.count - unreadCount - 1 ) ? 0.5 : 0.2;
- }
- onNewMessageReceived: {
- messageBackground.color = index > ( chatView.count - chatInformation.unreadCount - 1 ) ? Theme.secondaryHighlightColor : Theme.secondaryColor;
- messageBackground.opacity = index > ( chatView.count - chatInformation.unreadCount - 1 ) ? 0.5 : 0.2;
- }
-
- onLastReadSentMessageUpdated: {
- console.log("[ChatModel] Messages in this chat were read, new last read: " + lastReadSentIndex + ", updating description for index " + index + ", status: " + (index <= lastReadSentIndex));
- messageDateText.text = getMessageStatusText(display, index, lastReadSentIndex, messageDateText.useElapsed);
- }
- onMessageUpdated: {
- if (index === modelIndex) {
- console.log("[ChatModel] This message was updated, index " + index + ", updating content...");
- messageDateText.text = getMessageStatusText(display, index, chatView.lastReadSentIndex, messageDateText.useElapsed);
- messageText.text = Emoji.emojify(Functions.getMessageText(display, false, messageListItem.isOwnMessage), messageText.font.pixelSize);
- if(locationPreviewLoader.active && locationPreviewLoader.status === Loader.Ready) {
- locationPreviewLoader.item.locationData = display.content.location;
- locationPreviewLoader.item.updatePicture()
- }
- }
- }
+ Component {
+ id: messageListViewItemSimpleComponent
+ MessageListViewItemSimple {}
}
-
- Connections {
- target: tdLibWrapper
- onReceivedMessage: {
- if (messageId === display.reply_to_message_id.toString()) {
- messageInReplyToRow.inReplyToMessage = message;
- messageInReplyToRow.visible = true;
- }
- }
- }
-
- Component.onCompleted: {
- delegateComponentLoadingTimer.start();
- }
-
- Timer {
- id: delegateComponentLoadingTimer
- interval: 500
- repeat: false
- running: false
- onTriggered: {
- if (typeof display.content !== "undefined") {
- if (messageListItem.extraContentComponentName !== "") {
- extraContentLoader.setSource(
- "../components/" +messageListItem.extraContentComponentName +".qml",
- {
- messageListItem: messageListItem
- })
- } else {
- if (typeof display.content.web_page !== "undefined") { // only in messageText
- webPagePreviewLoader.active = true;
- }
- }
- }
- }
- }
-
-
- Row {
- id: messageTextRow
- spacing: Theme.paddingSmall
- width: parent.width - ( 2 * Theme.horizontalPageMargin )
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.verticalCenter: parent.verticalCenter
-
- Loader {
- id: profileThumbnailLoader
- active: (( chatPage.isBasicGroup || chatPage.isSuperGroup ) && !chatPage.isChannel)
- asynchronous: true
- width: active ? Theme.itemSizeSmall : 0
- height: active ? Theme.itemSizeSmall : 0
- anchors.bottom: parent.bottom
- anchors.bottomMargin: Theme.paddingSmall
- sourceComponent: Component {
- ProfileThumbnail {
- id: messagePictureThumbnail
- photoData: (typeof messageListItem.userInformation.profile_photo !== "undefined") ? messageListItem.userInformation.profile_photo.small : ""
- replacementStringHint: userText.text
- width: visible ? Theme.itemSizeSmall : 0
- height: visible ? Theme.itemSizeSmall : 0
- visible: ( chatPage.isBasicGroup || chatPage.isSuperGroup ) && !chatPage.isChannel
- MouseArea {
- anchors.fill: parent
- onClicked: {
- tdLibWrapper.createPrivateChat(messageListItem.userInformation.id);
- }
- }
- }
- }
- }
-
- Item {
- id: messageTextItem
-
- width: parent.width - profileThumbnailLoader.width - Theme.paddingSmall
- height: messageBackground.height
-
- Rectangle {
- id: messageBackground
- anchors {
- left: parent.left
- leftMargin: messageListItem.isOwnMessage ? 2 * Theme.horizontalPageMargin : 0
- right: parent.right
- rightMargin: messageListItem.isOwnMessage ? 0 : 2 * Theme.horizontalPageMargin
- verticalCenter: parent.verticalCenter
- }
- height: messageTextColumn.height + ( 2 * Theme.paddingMedium )
-
- color: index > ( chatView.count - chatInformation.unread_count - 1 ) ? Theme.secondaryHighlightColor : Theme.secondaryColor
- Behavior on color { ColorAnimation { duration: 200 } }
- Behavior on opacity { FadeAnimation {} }
- radius: parent.width / 50
- opacity: index > ( chatView.count - chatInformation.unread_count - 1 ) ? 0.5 : 0.2
- visible: appSettings.showStickersAsImages || display.content['@type'] !== "messageSticker"
- }
-
- Column {
- id: messageTextColumn
-
- spacing: Theme.paddingSmall
-
- width: messageBackground.width - Theme.horizontalPageMargin
- anchors.centerIn: messageBackground
-
- Component.onCompleted: {
- if (display.reply_to_message_id !== 0) {
- tdLibWrapper.getMessage(chatInformation.id, display.reply_to_message_id);
- }
- }
-
-
- Text {
- id: userText
-
- width: parent.width
- text: !messageListItem.isOwnMessage ? Emoji.emojify(Functions.getUserName(messageListItem.userInformation), font.pixelSize) : qsTr("You")
- font.pixelSize: Theme.fontSizeExtraSmall
- font.weight: Font.ExtraBold
- color: messageListItem.isOwnMessage ? Theme.highlightColor : Theme.primaryColor
- maximumLineCount: 1
- elide: Text.ElideRight
- textFormat: Text.StyledText
- horizontalAlignment: messageListItem.isOwnMessage ? Text.AlignRight : Text.AlignLeft
- visible: ( chatPage.isBasicGroup || chatPage.isSuperGroup ) && !chatPage.isChannel
- MouseArea {
- anchors.fill: parent
- onClicked: {
- tdLibWrapper.createPrivateChat(messageListItem.userInformation.id);
- }
- }
- }
-
- InReplyToRow {
- id: messageInReplyToRow
- myUserId: chatPage.myUserId
- visible: false
- }
-
- Loader {
- id: forwardedInformationLoader
- active: typeof display.forward_info !== "undefined"
- asynchronous: true
- width: parent.width
-// height: active ? ( item ? item.height : Theme.itemSizeExtraSmall ) : 0
- sourceComponent: Component {
- Row {
- id: forwardedMessageInformationRow
- spacing: Theme.paddingSmall
- width: parent.width
-
- Component.onCompleted: {
- if (display.forward_info.origin["@type"] === "messageForwardOriginChannel") {
- var otherChatInformation = tdLibWrapper.getChat(display.forward_info.origin.chat_id);
- forwardedThumbnail.photoData = (typeof otherChatInformation.photo !== "undefined") ? otherChatInformation.photo.small : "";
- forwardedChannelText.text = Emoji.emojify(otherChatInformation.title, Theme.fontSizeExtraSmall);
- } else if (display.forward_info.origin["@type"] === "messageForwardOriginUser") {
- var otherUserInformation = tdLibWrapper.getUserInformation(display.forward_info.origin.sender_user_id);
- forwardedThumbnail.photoData = (typeof otherUserInformation.profile_photo !== "undefined") ? otherUserInformation.profile_photo.small : "";
- forwardedChannelText.text = Emoji.emojify(Functions.getUserName(otherUserInformation), Theme.fontSizeExtraSmall);
- } else {
- forwardedThumbnail.photoData = "";
- forwardedChannelText.text = Emoji.emojify(display.forward_info.origin.sender_user_name, Theme.fontSizeExtraSmall);
- }
- }
-
- ProfileThumbnail {
- id: forwardedThumbnail
- replacementStringHint: forwardedChannelText.text
- width: Theme.itemSizeExtraSmall
- height: Theme.itemSizeExtraSmall
- }
-
- Column {
- spacing: Theme.paddingSmall
- width: parent.width
- Text {
- font.pixelSize: Theme.fontSizeExtraSmall
- color: Theme.primaryColor
- width: parent.width
- font.italic: true
- elide: Text.ElideRight
- textFormat: Text.StyledText
- text: qsTr("Forwarded Message")
- onTruncatedChanged: {
- // There is obviously a bug in QML in truncating text with images.
- // We simply remove Emojis then...
- if (truncated) {
- text = text.replace(/\]+\/\>/g, "");
- }
- }
- }
- Text {
- id: forwardedChannelText
- font.pixelSize: Theme.fontSizeExtraSmall
- color: Theme.primaryColor
- width: parent.width
- font.bold: true
- elide: Text.ElideRight
- textFormat: Text.StyledText
- text: Emoji.emojify(forwardedMessageInformationRow.otherChatInformation.title, font.pixelSize)
- onTruncatedChanged: {
- // There is obviously a bug in QML in truncating text with images.
- // We simply remove Emojis then...
- if (truncated) {
- text = text.replace(/\]+\/\>/g, "");
- }
- }
- }
- }
-
-
- }
- }
- }
-
- Text {
- id: messageText
-
- width: parent.width
- text: Emoji.emojify(Functions.getMessageText(display, false, messageListItem.isOwnMessage), font.pixelSize)
- font.pixelSize: Theme.fontSizeSmall
- color: messageListItem.isOwnMessage ? Theme.highlightColor : Theme.primaryColor
- wrapMode: Text.Wrap
- textFormat: Text.StyledText
- onLinkActivated: {
- Functions.handleLink(link);
- }
- horizontalAlignment: messageListItem.isOwnMessage ? Text.AlignRight : Text.AlignLeft
- linkColor: Theme.highlightColor
- visible: (text !== "")
- }
-
- Loader {
- id: webPagePreviewLoader
- active: false
- asynchronous: true
- width: parent.width
- height: typeof display.content.web_page !== "undefined" ? ( (parent.width * 2 / 3) + (6 * Theme.fontSizeExtraSmall) + ( 7 * Theme.paddingSmall) ) : 0
-
- sourceComponent: Component {
- id: webPagePreviewComponent
- WebPagePreview {
- id: webPagePreview
-
- onImplicitHeightChanged: {
- webPagePreviewLoader.height = webPagePreview.implicitHeight;
- }
-
- webPageData: display.content.web_page
- width: parent.width
- }
- }
- }
- Loader {
- id: extraContentLoader
- width: parent.width
- asynchronous: true
- property int heightPreset: messageListItem.extraContentComponentName !== "" ? chatView.getContentComponentHeight(messageListItem.extraContentComponentName, display.content, width) : 0
- height: item ? item.height : heightPreset
- }
-
- Timer {
- id: messageDateUpdater
- interval: 60000
- running: true
- repeat: true
- onTriggered: {
- messageDateText.text = getMessageStatusText(display, index, chatView.lastReadSentIndex, messageDateText.useElapsed);
- }
- }
-
-
- Text {
- width: parent.width
-
- property bool useElapsed: true
-
- id: messageDateText
- font.pixelSize: Theme.fontSizeTiny
- color: messageListItem.isOwnMessage ? Theme.secondaryHighlightColor : Theme.secondaryColor
- horizontalAlignment: messageListItem.isOwnMessage ? Text.AlignRight : Text.AlignLeft
- text: getMessageStatusText(display, index, chatView.lastReadSentIndex, messageDateText.useElapsed)
- MouseArea {
- anchors.fill: parent
- onClicked: {
- messageDateText.useElapsed = !messageDateText.useElapsed;
- messageDateText.text = getMessageStatusText(display, index, chatView.lastReadSentIndex, messageDateText.useElapsed);
- }
- }
- }
-
- }
-
- }
-
- }
-
+ sourceComponent: chatView.simpleDelegateMessages.indexOf(display.content['@type']) > -1 ? messageListViewItemSimpleComponent : messageListViewItemComponent
}
-
VerticalScrollDecorator {}
ViewPlaceholder {
diff --git a/src/fernschreiberutils.cpp b/src/fernschreiberutils.cpp
index 99c05e6..26a7e93 100644
--- a/src/fernschreiberutils.cpp
+++ b/src/fernschreiberutils.cpp
@@ -60,5 +60,39 @@ QString FernschreiberUtils::getMessageShortText(const QVariantMap &messageConten
}
return myself ? tr("sent a poll", "myself") : tr("sent a poll");
}
- return tr("Unsupported message: %1").arg(contentType.mid(7));
+ if (contentType == "messageBasicGroupChatCreate" || contentType == "messageSupergroupChatCreate") {
+ return myself ? tr("created this group", "myself") : tr("created this group");
+ }
+ if (contentType == "messageChatChangePhoto") {
+ return myself ? tr("changed the chat photo", "myself") : tr("changed the chat photo");
+ }
+ if (contentType == "messageChatDeletePhoto") {
+ return myself ? tr("deleted the chat photo", "myself") : tr("deleted the chat photo");
+ }
+ if (contentType == "messageChatSetTtl") {
+ return myself ? tr("changed the secret chat TTL setting", "myself") : tr("changed the secret chat TTL setting");
+ }
+ if (contentType == "messageChatUpgradeFrom" || contentType == "messageChatUpgradeTo") {
+ return myself ? tr("upgraded this group to a supergroup", "myself") : tr("upgraded this group to a supergroup");
+ }
+ if (contentType == "messageCustomServiceAction") {
+ return messageContent.value("text").toString();
+ }
+ if (contentType == "messagePinMessage") {
+ return myself ? tr("changed the pinned message", "myself") : tr("changed the pinned message");
+ }
+ if (contentType == "messageExpiredPhoto") {
+ return myself ? tr("sent a self-destructing photo that is expired", "myself") : tr("sent a self-destructing photo that is expired");
+ }
+ if (contentType == "messageExpiredVideo") {
+ return myself ? tr("sent a self-destructing video that is expired", "myself") : tr("sent a self-destructing video that is expired");
+ }
+ if (contentType == "messageScreenshotTaken") {
+ return myself ? tr("created a screenshot in this chat", "myself") : tr("created a screenshot in this chat");
+ }
+ if (contentType == "messageUnsupported") {
+ return myself ? tr("sent an unsupported message", "myself") : tr("sent an unsupported message");
+ }
+
+ return myself ? tr("sent an unsupported message: %1", "myself").arg(contentType.mid(7)) : tr("sent an unsupported message: %1").arg(contentType.mid(7));
}
diff --git a/translations/harbour-fernschreiber-de.ts b/translations/harbour-fernschreiber-de.ts
index 7aebd6d..f90ac96 100644
--- a/translations/harbour-fernschreiber-de.ts
+++ b/translations/harbour-fernschreiber-de.ts
@@ -257,14 +257,6 @@
%1 Abonnenten
-
-
- Auf Nachricht antworten
-
-
-
- Sie
-
Lade Nachrichten...
@@ -281,34 +273,18 @@
Nachricht bearbeiten
-
-
- Nachricht in die Zwischenablage kopieren
-
bearbeitet
-
-
- Nachricht löschen
-
Lade hoch...
-
-
- Weitergeleitete Nachricht
-
Dieser Chat ist leer.
-
-
- Nachricht gelöscht
-
CoverPage
@@ -519,10 +495,6 @@
hat diesen Chat verlassen
-
-
- Nicht unterstützte Nachricht: %1
-
Sticker: %1
@@ -568,6 +540,105 @@
hat ein Quiz geschickt
+
+
+ myself
+ haben diese Gruppe erstellt
+
+
+
+ hat diese Gruppe erstellt
+
+
+
+ myself
+ haben das Chatbild geändert
+
+
+
+ hat das Chatbild geändert
+
+
+
+ myself
+ haben das Chatbild gelöscht
+
+
+
+ hat das Chatbild gelöscht
+
+
+
+ myself
+ haben die TTL-Einstellung des geheimen Chats geändert
+
+
+
+ hat die TTL-Einstellung des geheimen Chats geändert
+
+
+
+ myself
+ haben die Gruppe zu einer Supergruppe erweitert
+
+
+
+ myself
+ haben die angeheftete Nachricht geändert
+
+
+
+ hat die angeheftete Nachricht geändert
+
+
+
+ myself
+ haben ein Bildschirmfoto dieses Chats erstellt
+
+
+
+ hat ein Bildschirmfoto dieses Chats erstellt
+
+
+
+ myself
+ haben eine nicht unterstützte Nachricht gesendet
+
+
+
+ hat eine nicht unterstützte Nachricht gesendet
+
+
+
+ hat eine nicht unterstützte Nachricht geschickt: %1
+
+
+
+ hat die Gruppe zu einer Supergruppe erweitert
+
+
+
+ myself
+ haben ein selbstzerstörendes Bild gesendet, das abgelaufen ist
+
+
+
+ myself
+ haben ein selbstzerstörendes Video gesendet, das abgelaufen ist
+
+
+
+ haben ein selbstzerstörendes Video gesendet, das abgelaufen ist
+
+
+
+ myself
+ haben eine nicht unterstützte Nachricht geschickt: %1
+
+
+
+ hat ein selbstzerstörendes Bild gesendet, das abgelaufen ist
+
ImagePage
@@ -661,6 +732,44 @@
Installieren Sie Pure Maps, um diesen Ort zu erkunden.
+
+ MessageListViewItem
+
+
+ Auf Nachricht antworten
+
+
+
+ Nachricht bearbeiten
+
+
+
+ Nachricht in die Zwischenablage kopieren
+
+
+
+ Nachricht gelöscht
+
+
+
+ Nachricht löschen
+
+
+
+ Sie
+
+
+
+ Weitergeleitete Nachricht
+
+
+
+ MessageListViewItemSimple
+
+
+ Sie
+
+
NotificationManager
@@ -990,10 +1099,6 @@
Animation: %1
-
-
- Nicht unterstützte Nachricht: %1
-
Dokument: %1
@@ -1214,5 +1319,106 @@
Umfrage
+
+
+ myself
+ haben diese Gruppe erstellt
+
+
+
+ hat diese Gruppe erstellt
+
+
+
+ myself
+ haben das Chatbild geändert
+
+
+
+ hat das Chatbild geändert
+
+
+
+ myself
+ haben das Chatbild gelöscht
+
+
+
+ hat das Chatbild gelöscht
+
+
+
+ myself; TTL = Time To Live
+ haben die TTL-Einstellung des geheimen Chats geändert
+
+
+
+ TTL = Time To Live
+ hat die TTL-Einstellung des geheimen Chats geändert
+
+
+
+ myself
+ haben die Gruppe zu einer Supergruppe erweitert
+
+
+
+ myself
+ haben die angeheftete Nachricht geändert
+
+
+
+ hat die angeheftete Nachricht geändert
+
+
+
+ myself
+ haben ein Bildschirmfoto dieses Chats erstellt
+
+
+
+ hat ein Bildschirmfoto dieses Chats erstellt
+
+
+
+ myself
+ haben eine nicht unterstützte Nachricht geschickt
+
+
+
+ hat eine nicht unterstützte Nachricht geschickt
+
+
+
+ myself; %1 is message type
+ haben eine nicht unterstützte Nachricht geschickt: %1
+
+
+
+ %1 is message type
+ hat eine nicht unterstützte Nachricht geschickt: %1
+
+
+
+ hat die Gruppe zu einer Supergruppe erweitert
+
+
+
+ myself
+ haben ein selbstzerstörendes Bild gesendet, das abgelaufen ist
+
+
+
+ hat ein selbstzerstörendes Bild gesendet, das abgelaufen ist
+
+
+
+ myself
+ haben ein selbstzerstörendes Video gesendet, das abgelaufen ist
+
+
+
+ hat ein selbstzerstörendes Bild gesendet, das abgelaufen ist
+
diff --git a/translations/harbour-fernschreiber-es.ts b/translations/harbour-fernschreiber-es.ts
index ac5d8f9..a29fdb0 100644
--- a/translations/harbour-fernschreiber-es.ts
+++ b/translations/harbour-fernschreiber-es.ts
@@ -257,14 +257,6 @@
%1 suscriptores
-
-
- Responder
-
-
-
- usted
-
Cargando mensajes...
@@ -285,30 +277,14 @@
editado
-
-
- Borrar
-
Subiendo...
-
-
- Mensaje reenviado
-
Esta charla está vacía.
-
-
- Mensaje borrado
-
-
-
- Copiar mensaje
-
CoverPage
@@ -519,10 +495,6 @@
dejó esta charla
-
-
- Mensaje no soportado: %1
-
Pegatina: %1
@@ -568,6 +540,105 @@
envió un cuestionario
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
ImagePage
@@ -661,6 +732,44 @@
Instalar Pure Maps para inspeccionar esta ubicación.
+
+ MessageListViewItem
+
+
+ Responder
+
+
+
+ Editar
+
+
+
+ Copiar mensaje
+
+
+
+ Mensaje borrado
+
+
+
+ Borrar
+
+
+
+ Usted
+
+
+
+ Mensaje reenviado
+
+
+
+ MessageListViewItemSimple
+
+
+ Usted
+
+
NotificationManager
@@ -984,10 +1093,6 @@
Animación: %1
-
-
- Mensaje no soportado: %1
-
Documento: %1
@@ -1208,5 +1313,106 @@
Encuesta
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; TTL = Time To Live
+
+
+
+
+ TTL = Time To Live
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; %1 is message type
+
+
+
+
+ %1 is message type
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
diff --git a/translations/harbour-fernschreiber-fi.ts b/translations/harbour-fernschreiber-fi.ts
index d18dc12..ba5be31 100644
--- a/translations/harbour-fernschreiber-fi.ts
+++ b/translations/harbour-fernschreiber-fi.ts
@@ -257,14 +257,6 @@
%1 tilaajaa
-
-
- Vastaa viestiin
-
-
-
- Sinä
-
Ladataan viestejä...
@@ -285,30 +277,14 @@
muokattu
-
-
- Poista viesti
-
Lähetetään...
-
-
- Välitetty viesti
-
Tämä keskustelu on tyhjä.
-
-
-
-
-
-
-
-
CoverPage
@@ -538,10 +514,6 @@
poistui keskustelusta
-
-
- Viestityyppiä ei tueta: %1
-
myself
@@ -569,6 +541,105 @@
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
ImagePage
@@ -662,6 +733,44 @@
Asenna Pure Maps tarkastellaksesi sijaintia.
+
+ MessageListViewItem
+
+
+ Vastaa viestiin
+
+
+
+ Muokkaa viestiä
+
+
+
+
+
+
+
+
+
+
+
+ Poista viesti
+
+
+
+ Sinä
+
+
+
+ Välitetty viesti
+
+
+
+ MessageListViewItemSimple
+
+
+ Sinä
+
+
NotificationManager
@@ -991,10 +1100,6 @@
Animaatio: %1
-
-
- Viestityyppiä ei tueta: %1
-
Dokumentti: %1
@@ -1215,5 +1320,106 @@
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; TTL = Time To Live
+
+
+
+
+ TTL = Time To Live
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; %1 is message type
+
+
+
+
+ %1 is message type
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
diff --git a/translations/harbour-fernschreiber-hu.ts b/translations/harbour-fernschreiber-hu.ts
index 4c81b7f..b38cea6 100644
--- a/translations/harbour-fernschreiber-hu.ts
+++ b/translations/harbour-fernschreiber-hu.ts
@@ -257,14 +257,6 @@
%1 feliratkozott
-
-
- Válasz az üzenetre
-
-
-
- Te
-
Üzenetek betöltése...
@@ -285,30 +277,14 @@
Szerkesztett
-
-
- Üzenet törlése
-
-
-
-
-
-
-
-
-
-
-
-
-
CoverPage
@@ -519,10 +495,6 @@
kilépett a csevegésből
-
-
- Nem támogatott üzenet: %1
-
Matrica: %1
@@ -568,6 +540,105 @@
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
ImagePage
@@ -661,6 +732,44 @@
+
+ MessageListViewItem
+
+
+ Válasz az üzenetre
+
+
+
+ Üzenet szerkesztése
+
+
+
+
+
+
+
+
+
+
+
+ Üzenet törlése
+
+
+
+ Te
+
+
+
+
+
+
+
+ MessageListViewItemSimple
+
+
+ Te
+
+
NotificationManager
@@ -984,10 +1093,6 @@
Animáció: %1
-
-
- Nem támogatott üzenet: %1
-
Dokument: %1
@@ -1208,5 +1313,106 @@
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; TTL = Time To Live
+
+
+
+
+ TTL = Time To Live
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; %1 is message type
+
+
+
+
+ %1 is message type
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
diff --git a/translations/harbour-fernschreiber-it.ts b/translations/harbour-fernschreiber-it.ts
index 22e660f..2d38521 100644
--- a/translations/harbour-fernschreiber-it.ts
+++ b/translations/harbour-fernschreiber-it.ts
@@ -257,14 +257,6 @@
%1 abbonati
-
-
- Rispondi al messaggio
-
-
-
- Tu
-
Riattiva suoni chat
@@ -281,14 +273,6 @@
modificato
-
-
- Cancella messaggio
-
-
-
- Messaggio inoltrato
-
Questa chat è vuota.
@@ -301,14 +285,6 @@
Carica...
-
-
- Messaggio cancellato
-
-
-
- Copia messaggio nella clipboard
-
CoverPage
@@ -519,10 +495,6 @@
ha lasciato questa chat
-
-
- Messaggio non supportato: %1
-
Sticker: %1
@@ -568,6 +540,105 @@
ha inviato un quiz
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
ImagePage
@@ -661,6 +732,44 @@
Installa Pure Maps per conoscere questo luogo.
+
+ MessageListViewItem
+
+
+ Rispondi al messaggio
+
+
+
+ Modifica messaggio
+
+
+
+ Copia messaggio nella clipboard
+
+
+
+ Messaggio cancellato
+
+
+
+ Cancella messaggio
+
+
+
+ Tu
+
+
+
+ Messaggio inoltrato
+
+
+
+ MessageListViewItemSimple
+
+
+ Tu
+
+
NotificationManager
@@ -990,10 +1099,6 @@
Animazione: %1
-
-
- Messaggio non supportato: %1
-
Documento: %1
@@ -1214,5 +1319,106 @@
Sondaggio
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; TTL = Time To Live
+
+
+
+
+ TTL = Time To Live
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; %1 is message type
+
+
+
+
+ %1 is message type
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
diff --git a/translations/harbour-fernschreiber-pl.ts b/translations/harbour-fernschreiber-pl.ts
index 0ffe8c4..54337f9 100644
--- a/translations/harbour-fernschreiber-pl.ts
+++ b/translations/harbour-fernschreiber-pl.ts
@@ -257,14 +257,6 @@
%1 subskrybentów
-
-
- Odpowiedz na wiadomość
-
-
-
- Ty
-
Ładowanie wiadomości...
@@ -285,30 +277,14 @@
edytowana
-
-
- Usuń wiadomość
-
-
-
-
-
-
-
-
-
-
-
-
-
CoverPage
@@ -519,10 +495,6 @@
opuścił ten czat
-
-
- Nieobsługiwana wiadomość: %1
-
Naklejka: %1
@@ -568,6 +540,105 @@
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
ImagePage
@@ -661,6 +732,44 @@
Zainstaluj Pure Maps, aby sprawdzić tę lokalizację.
+
+ MessageListViewItem
+
+
+ Odpowiedz na wiadomość
+
+
+
+ Edytuj widomość
+
+
+
+
+
+
+
+
+
+
+
+ Usuń wiadomość
+
+
+
+ Ty
+
+
+
+
+
+
+
+ MessageListViewItemSimple
+
+
+ Ty
+
+
NotificationManager
@@ -996,10 +1105,6 @@
Animacja: %1
-
-
- Nieobsługiwana wiadomość: %1
-
Dokument: %1
@@ -1220,5 +1325,106 @@
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; TTL = Time To Live
+
+
+
+
+ TTL = Time To Live
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; %1 is message type
+
+
+
+
+ %1 is message type
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
diff --git a/translations/harbour-fernschreiber-ru.ts b/translations/harbour-fernschreiber-ru.ts
index 9985b86..375e63f 100644
--- a/translations/harbour-fernschreiber-ru.ts
+++ b/translations/harbour-fernschreiber-ru.ts
@@ -257,14 +257,6 @@
%1 подписчиков
-
-
- Ответить
-
-
-
- Вы
-
Загрузка сообщений...
@@ -285,30 +277,14 @@
изменено
-
-
- Удалить
-
Отправка...
-
-
- Пересланное сообщение
-
-
-
-
-
-
-
-
-
CoverPage
@@ -519,10 +495,6 @@
покунул(а) чат
-
-
- Не поддерживается: %1
-
Стикер: %1
@@ -568,6 +540,105 @@
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
ImagePage
@@ -661,6 +732,44 @@
Для просмотра карты, установите Pure Maps.
+
+ MessageListViewItem
+
+
+ Ответить
+
+
+
+ Редактировать
+
+
+
+
+
+
+
+
+
+
+
+ Удалить
+
+
+
+ Вы
+
+
+
+ Пересланное сообщение
+
+
+
+ MessageListViewItemSimple
+
+
+ Вы
+
+
NotificationManager
@@ -996,10 +1105,6 @@
Анимация: %1
-
-
- Не поддерживается: %1
-
Документ: %1
@@ -1220,5 +1325,106 @@
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; TTL = Time To Live
+
+
+
+
+ TTL = Time To Live
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; %1 is message type
+
+
+
+
+ %1 is message type
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
diff --git a/translations/harbour-fernschreiber-sv.ts b/translations/harbour-fernschreiber-sv.ts
index 5ed63b3..8fedd0a 100644
--- a/translations/harbour-fernschreiber-sv.ts
+++ b/translations/harbour-fernschreiber-sv.ts
@@ -257,14 +257,6 @@
%1 prenumerant(er)
-
-
- Svara på meddelandet
-
-
-
- Du
-
Läser in meddelanden...
@@ -285,30 +277,14 @@
redigerade
-
-
- Ta bort meddelandet
-
Ladda upp...
-
-
- Vidarebefordrat meddelande
-
Denna chatt är tom.
-
-
-
-
-
-
-
-
CoverPage
@@ -519,10 +495,6 @@
lämnade denna chatt
-
-
- Mededelande som inte stöds: %1
-
Dekal: %1
@@ -568,6 +540,105 @@
skickade en omröstning
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
ImagePage
@@ -661,6 +732,44 @@
Installera Pure Maps för att inspektera den här platsen.
+
+ MessageListViewItem
+
+
+ Svara på meddelandet
+
+
+
+ Redigera meddelandet
+
+
+
+
+
+
+
+
+
+
+
+ Ta bort meddelandet
+
+
+
+ Du
+
+
+
+ Vidarebefordrat meddelande
+
+
+
+ MessageListViewItemSimple
+
+
+ Du
+
+
NotificationManager
@@ -990,10 +1099,6 @@
Animering: %1
-
-
- Meeddelande som inte stöds: %1
-
Dokument: %1
@@ -1214,5 +1319,106 @@
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; TTL = Time To Live
+
+
+
+
+ TTL = Time To Live
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; %1 is message type
+
+
+
+
+ %1 is message type
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
diff --git a/translations/harbour-fernschreiber-zh_CN.ts b/translations/harbour-fernschreiber-zh_CN.ts
index 5325eb2..0da104e 100644
--- a/translations/harbour-fernschreiber-zh_CN.ts
+++ b/translations/harbour-fernschreiber-zh_CN.ts
@@ -257,14 +257,6 @@
%1 位订阅者
-
-
- 回复该消息
-
-
-
- 你
-
正在加载消息…
@@ -285,30 +277,14 @@
已编辑
-
-
- 删除消息
-
正在上传…
-
-
- 转发消息
-
-
-
-
-
-
-
-
-
CoverPage
@@ -519,10 +495,6 @@
离开此对话
-
-
- 未读消息: %1
-
表情贴图: %1
@@ -568,6 +540,105 @@
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
ImagePage
@@ -661,6 +732,44 @@
安装 Pure Maps 以插入位置
+
+ MessageListViewItem
+
+
+ 回复该消息
+
+
+
+ 编辑消息
+
+
+
+
+
+
+
+
+
+
+
+ 删除消息
+
+
+
+ 你
+
+
+
+ 转发消息
+
+
+
+ MessageListViewItemSimple
+
+
+ 你
+
+
NotificationManager
@@ -984,10 +1093,6 @@
动画: %1
-
-
- 未读消息: %1
-
文档: %1
@@ -1208,5 +1313,106 @@
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; TTL = Time To Live
+
+
+
+
+ TTL = Time To Live
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; %1 is message type
+
+
+
+
+ %1 is message type
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
diff --git a/translations/harbour-fernschreiber.ts b/translations/harbour-fernschreiber.ts
index 8f38b08..0668c88 100644
--- a/translations/harbour-fernschreiber.ts
+++ b/translations/harbour-fernschreiber.ts
@@ -257,14 +257,6 @@
-
-
-
-
-
-
-
-
@@ -285,30 +277,14 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
CoverPage
@@ -519,10 +495,6 @@
-
-
-
-
@@ -568,6 +540,105 @@
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
ImagePage
@@ -661,6 +732,44 @@
+
+ MessageListViewItem
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MessageListViewItemSimple
+
+
+
+
+
NotificationManager
@@ -984,10 +1093,6 @@
-
-
-
-
@@ -1208,5 +1313,106 @@
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; TTL = Time To Live
+
+
+
+
+ TTL = Time To Live
+
+
+
+
+ myself
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself; %1 is message type
+
+
+
+
+ %1 is message type
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+
+
+
+ myself
+
+
+
+
+
+