Display extra content in message overlay

This commit is contained in:
Sebastian Wolf 2020-11-17 18:18:22 +01:00
parent 2830f50a35
commit 541036d796
8 changed files with 75 additions and 29 deletions

View file

@ -25,13 +25,14 @@ Item {
id: audioMessageComponent id: audioMessageComponent
property ListItem messageListItem property ListItem messageListItem
property var rawMessage: messageListItem.myMessage property MessageOverlayFlickable overlayFlickable
property var rawMessage: messageListItem ? messageListItem.myMessage : overlayFlickable.overlayMessage
property var audioData: ( rawMessage.content['@type'] === "messageVoiceNote" ) ? rawMessage.content.voice_note : ( ( rawMessage.content['@type'] === "messageAudio" ) ? rawMessage.content.audio : ""); property var audioData: ( rawMessage.content['@type'] === "messageVoiceNote" ) ? rawMessage.content.voice_note : ( ( rawMessage.content['@type'] === "messageAudio" ) ? rawMessage.content.audio : "");
property string audioUrl; property string audioUrl;
property int previewFileId; property int previewFileId;
property int audioFileId; property int audioFileId;
property bool onScreen: messageListItem.page.status === PageStatus.Active property bool onScreen: messageListItem ? messageListItem.page.status === PageStatus.Active : true
property string audioType : "voiceNote"; property string audioType : "voiceNote";
width: parent.width width: parent.width

View file

@ -26,7 +26,8 @@ Item {
height: Theme.itemSizeLarge height: Theme.itemSizeLarge
property ListItem messageListItem property ListItem messageListItem
property var rawMessage: messageListItem.myMessage property MessageOverlayFlickable overlayFlickable
property var rawMessage: messageListItem ? messageListItem.myMessage : overlayFlickable.overlayMessage
property var documentData: rawMessage.content.document property var documentData: rawMessage.content.document
property bool openRequested: false; property bool openRequested: false;

View file

@ -24,7 +24,8 @@ Item {
id: imagePreviewItem id: imagePreviewItem
property ListItem messageListItem property ListItem messageListItem
property var rawMessage: messageListItem.myMessage property MessageOverlayFlickable overlayFlickable
property var rawMessage: messageListItem ? messageListItem.myMessage : overlayFlickable.overlayMessage
property var photoData: rawMessage.content.photo; property var photoData: rawMessage.content.photo;
property var pictureFileInformation; property var pictureFileInformation;

View file

@ -25,11 +25,12 @@ Item {
id: imagePreviewItem id: imagePreviewItem
property ListItem messageListItem property ListItem messageListItem
property var rawMessage: messageListItem.myMessage property MessageOverlayFlickable overlayFlickable
property var rawMessage: messageListItem ? messageListItem.myMessage : overlayFlickable.overlayMessage
property var locationData : ( rawMessage.content['@type'] === "messageLocation" ) ? rawMessage.content.location : ( ( rawMessage.content['@type'] === "messageVenue" ) ? rawMessage.content.venue.location : "" ) property var locationData : ( rawMessage.content['@type'] === "messageLocation" ) ? rawMessage.content.location : ( ( rawMessage.content['@type'] === "messageVenue" ) ? rawMessage.content.venue.location : "" )
property string chatId: messageListItem.page.chatInformation.id property string chatId: rawMessage.chat_id
property var pictureFileInformation; property var pictureFileInformation;
width: parent.width width: parent.width
height: width / 2 height: width / 2

View file

@ -33,6 +33,8 @@ Flickable {
property bool showHeader: true property bool showHeader: true
readonly property var userInformation: tdLibWrapper.getUserInformation(overlayMessage.sender_user_id); readonly property var userInformation: tdLibWrapper.getUserInformation(overlayMessage.sender_user_id);
readonly property bool isOwnMessage: tdLibWrapper.getUserInformation().id === overlayMessage.sender_user_id; readonly property bool isOwnMessage: tdLibWrapper.getUserInformation().id === overlayMessage.sender_user_id;
readonly property string extraContentComponentName: (typeof overlayMessage.content !== "undefined" && typeof chatView.contentComponentNames[overlayMessage.content['@type']] !== "undefined" )
? chatView.contentComponentNames[overlayMessage.content['@type']] : ""
signal requestClose; signal requestClose;
function getOriginalAuthor(forwardInformation, fontSize) { function getOriginalAuthor(forwardInformation, fontSize) {
@ -58,17 +60,17 @@ Flickable {
running: false running: false
onTriggered: { onTriggered: {
if (typeof overlayMessage.content !== "undefined") { if (typeof overlayMessage.content !== "undefined") {
// if (messageListItem.extraContentComponentName !== "") { if (messageOverlayFlickable.extraContentComponentName !== "") {
// extraContentLoader.setSource( overlayExtraContentLoader.setSource(
// "../components/" +messageListItem.extraContentComponentName +".qml", "../components/" + messageOverlayFlickable.extraContentComponentName + ".qml",
// { {
// messageListItem: messageListItem overlayFlickable: messageOverlayFlickable
// }) })
// } else { } else {
if (typeof overlayMessage.content.web_page !== "undefined") { if (typeof overlayMessage.content.web_page !== "undefined") {
overlayWebPagePreviewLoader.active = true; overlayWebPagePreviewLoader.active = true;
} }
// } }
} }
} }
} }
@ -169,6 +171,40 @@ Flickable {
} }
} }
Loader {
id: overlayExtraContentLoader
width: parent.width
asynchronous: true
}
Timer {
id: messageDateUpdater
interval: 60000
running: true
repeat: true
onTriggered: {
overlayMessageDateText.text = ( overlayMessageDateText.useElapsed ? Functions.getDateTimeElapsed(overlayMessage.date) : Functions.getDateTimeTranslated(overlayMessage.date) );
}
}
Text {
width: parent.width
property bool useElapsed: true
id: overlayMessageDateText
font.pixelSize: Theme.fontSizeExtraSmall
color: Theme.secondaryColor
text: ( useElapsed ? Functions.getDateTimeElapsed(overlayMessage.date) : Functions.getDateTimeTranslated(overlayMessage.date) )
MouseArea {
anchors.fill: parent
onClicked: {
overlayMessageDateText.useElapsed = !overlayMessageDateText.useElapsed;
overlayMessageDateText.text = ( useElapsed ? Functions.getDateTimeElapsed(overlayMessage.date) : Functions.getDateTimeTranslated(overlayMessage.date) );
}
}
}
Label { Label {
id: separatorLabel id: separatorLabel
width: parent.width width: parent.width

View file

@ -28,10 +28,11 @@ Item {
property ListItem messageListItem property ListItem messageListItem
property var rawMessage: messageListItem.myMessage property MessageOverlayFlickable overlayFlickable
property string chatId: messageListItem.page.chatInformation.id property var rawMessage: messageListItem ? messageListItem.myMessage : overlayFlickable.overlayMessage
property string chatId: rawMessage.chat_id
property bool isOwnMessage: messageListItem.isOwnMessage property bool isOwnMessage: messageListItem ? messageListItem.isOwnMessage : overlayFlickable.isOwnMessage
property string messageId: rawMessage.id property string messageId: rawMessage.id
property bool canEdit: rawMessage.can_be_edited property bool canEdit: rawMessage.can_be_edited

View file

@ -21,12 +21,15 @@ import Sailfish.Silica 1.0
import WerkWolf.Fernschreiber 1.0 import WerkWolf.Fernschreiber 1.0
Item { Item {
property ListItem messageListItem
readonly property var stickerData: messageListItem.myMessage.content.sticker; property ListItem messageListItem
property MessageOverlayFlickable overlayFlickable
readonly property var stickerData: messageListItem ? messageListItem.myMessage.content.sticker : overlayFlickable.overlayMessage.content.sticker;
readonly property bool animated: stickerData.is_animated && appSettings.animateStickers readonly property bool animated: stickerData.is_animated && appSettings.animateStickers
readonly property bool stickerVisible: staticStickerLoader.item ? staticStickerLoader.item.visible : readonly property bool stickerVisible: staticStickerLoader.item ? staticStickerLoader.item.visible :
animatedStickerLoader.item ? animatedStickerLoader.item.visible : false animatedStickerLoader.item ? animatedStickerLoader.item.visible : false
readonly property bool isOwnSticker : messageListItem ? messageListItem.isOwnMessage : overlayFlickable.isOwnMessage
property real aspectRatio: stickerData.width / stickerData.height property real aspectRatio: stickerData.width / stickerData.height
implicitWidth: stickerData.width implicitWidth: stickerData.width
@ -43,8 +46,8 @@ Item {
width: Math.min( stickerData.width, parent.width ) width: Math.min( stickerData.width, parent.width )
height: width * aspectRatio height: width * aspectRatio
// (centered in image mode, text-like in sticker mode) // (centered in image mode, text-like in sticker mode)
x: appSettings.showStickersAsImages ? (parent.width - width)/2 : x: appSettings.showStickersAsImages ? (parent.width - width) / 2 :
messageListItem.isOwnMessage ? (parent.width - width) : 0 isOwnSticker ? (parent.width - width) : 0
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
Loader { Loader {

View file

@ -25,19 +25,21 @@ Item {
id: videoMessageComponent id: videoMessageComponent
property ListItem messageListItem property ListItem messageListItem
property var rawMessage: messageListItem.myMessage property MessageOverlayFlickable overlayFlickable
property var rawMessage: messageListItem ? messageListItem.myMessage : overlayFlickable.overlayMessage
property var videoData: ( rawMessage.content['@type'] === "messageVideo" ) ? rawMessage.content.video : ( ( rawMessage.content['@type'] === "messageAnimation" ) ? rawMessage.content.animation : rawMessage.content.video_note ) property var videoData: ( rawMessage.content['@type'] === "messageVideo" ) ? rawMessage.content.video : ( ( rawMessage.content['@type'] === "messageAnimation" ) ? rawMessage.content.animation : rawMessage.content.video_note )
property string videoUrl; property string videoUrl;
property int previewFileId; property int previewFileId;
property int videoFileId; property int videoFileId;
property bool isVideoNote : false;
property bool fullscreen : false; property bool fullscreen : false;
property bool onScreen: messageListItem.page.status === PageStatus.Active; property bool onScreen: messageListItem ? messageListItem.page.status === PageStatus.Active : true;
property string videoType : "video"; property string videoType : "video";
property bool playRequested: false; property bool playRequested: false;
width: parent.width width: parent.width
height: ( rawMessage.content['@type'] === "messageVideoNote" ) ? width : Functions.getVideoHeight(width, videoData) height: videoMessageComponent.isVideoNote ? width : Functions.getVideoHeight(width, videoData)
Timer { Timer {
id: screensaverTimer id: screensaverTimer
@ -78,11 +80,11 @@ Item {
function updateVideoThumbnail() { function updateVideoThumbnail() {
if (videoData) { if (videoData) {
if (rawMessage.content['@type'] === "messageVideoNote") { if (typeof rawMessage !== "undefined") {
videoType = "video"; videoMessageComponent.isVideoNote = rawMessage.content['@type'] === "messageVideoNote";
} else {
videoType = videoData['@type'];
} }
videoMessageComponent.videoType = videoMessageComponent.isVideoNote ? "video" : videoData['@type'];
videoFileId = videoData[videoType].id; videoFileId = videoData[videoType].id;
if (typeof videoData.thumbnail !== "undefined") { if (typeof videoData.thumbnail !== "undefined") {
previewFileId = videoData.thumbnail.photo.id; previewFileId = videoData.thumbnail.photo.id;
@ -264,7 +266,7 @@ Item {
id: videoComponentLoader id: videoComponentLoader
active: false active: false
width: parent.width width: parent.width
height: ( rawMessage.content['@type'] === "messageVideoNote" ) ? width : Functions.getVideoHeight(parent.width, videoData) height: videoMessageComponent.isVideoNote ? width : Functions.getVideoHeight(parent.width, videoData)
sourceComponent: videoComponent sourceComponent: videoComponent
} }