2020-08-20 01:24:24 +03:00
|
|
|
/*
|
|
|
|
Copyright (C) 2020 Sebastian J. Wolf
|
|
|
|
|
|
|
|
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 <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
2020-08-21 13:53:03 +03:00
|
|
|
|
2020-08-19 17:47:59 +03:00
|
|
|
function getUserName(userInformation) {
|
2020-08-21 00:56:21 +03:00
|
|
|
var firstName = typeof userInformation.first_name !== "undefined" ? userInformation.first_name : "";
|
|
|
|
var lastName = typeof userInformation.last_name !== "undefined" ? userInformation.last_name : "";
|
|
|
|
return (firstName + " " + lastName).trim();
|
2020-08-19 17:47:59 +03:00
|
|
|
}
|
2020-08-20 01:24:24 +03:00
|
|
|
|
2020-08-24 16:27:44 +03:00
|
|
|
function getMessageText(message, simple) {
|
2020-08-20 01:24:24 +03:00
|
|
|
if (message.content['@type'] === 'messageText') {
|
2020-08-24 16:27:44 +03:00
|
|
|
if (simple) {
|
|
|
|
return message.content.text.text;
|
|
|
|
} else {
|
|
|
|
return enhanceMessageText(message.content.text);
|
|
|
|
}
|
2020-08-20 01:24:24 +03:00
|
|
|
}
|
2020-08-21 13:53:03 +03:00
|
|
|
if (message.content['@type'] === 'messageSticker') {
|
2020-08-27 00:14:29 +03:00
|
|
|
return simple ? qsTr("Sticker: %1").arg(message.content.sticker.emoji) : "";
|
2020-08-21 13:53:03 +03:00
|
|
|
}
|
2020-08-21 00:56:21 +03:00
|
|
|
if (message.content['@type'] === 'messagePhoto') {
|
2020-08-24 16:27:44 +03:00
|
|
|
if (message.content.caption.text !== "") {
|
2020-08-25 00:02:08 +03:00
|
|
|
return simple ? qsTr("Picture: %1").arg(message.content.caption.text) : enhanceMessageText(message.content.caption)
|
2020-08-24 16:27:44 +03:00
|
|
|
} else {
|
2020-09-13 00:22:33 +03:00
|
|
|
return simple ? qsTr("sent a picture") : "";
|
2020-08-24 16:27:44 +03:00
|
|
|
}
|
2020-08-21 00:56:21 +03:00
|
|
|
}
|
|
|
|
if (message.content['@type'] === 'messageVideo') {
|
2020-08-24 16:27:44 +03:00
|
|
|
if (message.content.caption.text !== "") {
|
2020-08-25 00:02:08 +03:00
|
|
|
return simple ? qsTr("Video: %1").arg(message.content.caption.text) : enhanceMessageText(message.content.caption)
|
2020-08-24 16:27:44 +03:00
|
|
|
} else {
|
2020-09-13 00:22:33 +03:00
|
|
|
return simple ? qsTr("sent a video") : "";
|
2020-08-28 14:02:54 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
if (message.content['@type'] === 'messageAnimation') {
|
|
|
|
if (message.content.caption.text !== "") {
|
|
|
|
return simple ? qsTr("Animation: %1").arg(message.content.caption.text) : enhanceMessageText(message.content.caption)
|
|
|
|
} else {
|
2020-09-13 00:22:33 +03:00
|
|
|
return simple ? qsTr("sent an animation") : "";
|
2020-08-24 16:27:44 +03:00
|
|
|
}
|
2020-08-22 22:43:20 +03:00
|
|
|
}
|
|
|
|
if (message.content['@type'] === 'messageAudio') {
|
2020-08-24 16:27:44 +03:00
|
|
|
if (message.content.caption.text !== "") {
|
2020-08-25 00:02:08 +03:00
|
|
|
return simple ? qsTr("Audio: %1").arg(message.content.caption.text) : enhanceMessageText(message.content.caption)
|
2020-08-24 16:27:44 +03:00
|
|
|
} else {
|
2020-09-13 00:22:33 +03:00
|
|
|
return simple ? qsTr("sent an audio") : "";
|
2020-08-24 16:27:44 +03:00
|
|
|
}
|
2020-08-22 22:43:20 +03:00
|
|
|
}
|
|
|
|
if (message.content['@type'] === 'messageVoiceNote') {
|
2020-08-24 16:27:44 +03:00
|
|
|
if (message.content.caption.text !== "") {
|
2020-08-25 00:02:08 +03:00
|
|
|
return simple ? qsTr("Voice Note: %1").arg(message.content.caption.text) : enhanceMessageText(message.content.caption)
|
2020-08-24 16:27:44 +03:00
|
|
|
} else {
|
2020-09-13 00:22:33 +03:00
|
|
|
return simple ? qsTr("sent a voice note") : "";
|
2020-08-24 16:27:44 +03:00
|
|
|
}
|
2020-08-22 22:43:20 +03:00
|
|
|
}
|
2020-08-28 17:18:33 +03:00
|
|
|
if (message.content['@type'] === 'messageDocument') {
|
|
|
|
if (message.content.document.file_name !== "") {
|
|
|
|
return simple ? qsTr("Document: %1").arg(message.content.document.file_name) : message.content.document.file_name
|
|
|
|
} else {
|
2020-09-13 00:22:33 +03:00
|
|
|
return simple ? qsTr("sent a document") : "";
|
2020-08-28 17:18:33 +03:00
|
|
|
}
|
|
|
|
}
|
2020-08-22 22:43:20 +03:00
|
|
|
if (message.content['@type'] === 'messageLocation') {
|
2020-09-13 00:22:33 +03:00
|
|
|
return qsTr("sent a location");
|
2020-08-21 00:56:21 +03:00
|
|
|
}
|
|
|
|
if (message.content['@type'] === 'messageContactRegistered') {
|
|
|
|
return qsTr("has registered with Telegram");
|
|
|
|
}
|
|
|
|
if (message.content['@type'] === 'messageChatJoinByLink') {
|
2020-09-13 00:22:33 +03:00
|
|
|
return qsTr("joined this chat");
|
2020-08-21 00:56:21 +03:00
|
|
|
}
|
2020-08-21 13:53:03 +03:00
|
|
|
if (message.content['@type'] === 'messageChatAddMembers') {
|
2020-09-13 00:22:33 +03:00
|
|
|
return qsTr("was added to this chat");
|
2020-08-21 13:53:03 +03:00
|
|
|
}
|
2020-08-21 19:03:51 +03:00
|
|
|
if (message.content['@type'] === 'messageChatDeleteMember') {
|
2020-09-13 00:22:33 +03:00
|
|
|
return qsTr("left this chat");
|
2020-08-21 19:03:51 +03:00
|
|
|
}
|
2020-08-28 17:18:33 +03:00
|
|
|
return qsTr("Unsupported message: %1").arg(message.content['@type'].substring(7));
|
2020-08-20 01:24:24 +03:00
|
|
|
}
|
2020-09-24 10:55:05 +03:00
|
|
|
function getShortenedCount(count) {
|
|
|
|
if (count >= 1000000) {
|
|
|
|
return qsTr("%1M").arg((count / 1000000).toLocaleString(Qt.locale(), 'f', 0));
|
|
|
|
} else if (count >= 1000 ) {
|
|
|
|
return qsTr("%1K").arg((count / 1000).toLocaleString(Qt.locale(), 'f', 0));
|
|
|
|
} else {
|
|
|
|
return count;
|
|
|
|
}
|
|
|
|
}
|
2020-08-20 01:24:24 +03:00
|
|
|
|
|
|
|
function getDateTimeElapsed(timestamp) {
|
|
|
|
return Format.formatDate(new Date(timestamp * 1000), Formatter.DurationElapsed);
|
|
|
|
}
|
2020-08-24 16:27:44 +03:00
|
|
|
|
|
|
|
function MessageInsertion(offset, insertionString) {
|
|
|
|
this.offset = offset;
|
|
|
|
this.insertionString = insertionString;
|
|
|
|
}
|
|
|
|
|
|
|
|
MessageInsertion.prototype.toString = function insertionToString() {
|
|
|
|
return "Offset: " + this.offset + ", Insertion String: " + this.insertionString;
|
|
|
|
}
|
|
|
|
|
|
|
|
function enhanceMessageText(formattedText) {
|
|
|
|
|
|
|
|
var messageText = formattedText.text;
|
2020-09-24 22:54:36 +03:00
|
|
|
messageText = messageText.replace("<", "<");
|
|
|
|
messageText = messageText.replace(">", ">");
|
2020-08-24 16:27:44 +03:00
|
|
|
var messageInsertions = [];
|
|
|
|
|
|
|
|
for (var i = 0; i < formattedText.entities.length; i++) {
|
|
|
|
if (formattedText.entities[i]['@type'] !== "textEntity") {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
var entityType = formattedText.entities[i].type['@type'];
|
|
|
|
if (entityType === "textEntityTypeBold") {
|
|
|
|
messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "<b>" ));
|
|
|
|
messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "</b>" ));
|
|
|
|
}
|
2020-08-24 17:30:19 +03:00
|
|
|
if (entityType === "textEntityTypeUrl") {
|
|
|
|
messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "<a href=\"" + messageText.substring(formattedText.entities[i].offset, ( formattedText.entities[i].offset + formattedText.entities[i].length )) + "\">" ));
|
|
|
|
messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "</a>" ));
|
|
|
|
}
|
|
|
|
if (entityType === "textEntityTypeCode") {
|
|
|
|
messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "<pre>" ));
|
|
|
|
messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "</pre>" ));
|
|
|
|
}
|
|
|
|
if (entityType === "textEntityTypeEmailAddress") {
|
|
|
|
messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "<a href=\"mailto:" + messageText.substring(formattedText.entities[i].offset, ( formattedText.entities[i].offset + formattedText.entities[i].length )) + "\">" ));
|
|
|
|
messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "</a>" ));
|
|
|
|
}
|
|
|
|
if (entityType === "textEntityTypeItalic") {
|
|
|
|
messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "<i>" ));
|
|
|
|
messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "</i>" ));
|
|
|
|
}
|
|
|
|
if (entityType === "textEntityTypeMention") {
|
|
|
|
messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "<a href=\"user:" + messageText.substring(formattedText.entities[i].offset, ( formattedText.entities[i].offset + formattedText.entities[i].length )) + "\">" ));
|
|
|
|
messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "</a>" ));
|
|
|
|
}
|
|
|
|
if (entityType === "textEntityTypeMentionName") {
|
|
|
|
messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "<a href=\"userId://" + formattedText.entities[i].type.user_id + "\">" ));
|
|
|
|
messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "</a>" ));
|
|
|
|
}
|
|
|
|
if (entityType === "textEntityTypePhoneNumber") {
|
|
|
|
messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "<a href=\"tel:" + messageText.substring(formattedText.entities[i].offset, ( formattedText.entities[i].offset + formattedText.entities[i].length )) + "\">" ));
|
|
|
|
messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "</a>" ));
|
|
|
|
}
|
|
|
|
if (entityType === "textEntityTypePre") {
|
|
|
|
messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "<pre>" ));
|
|
|
|
messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "</pre>" ));
|
|
|
|
}
|
|
|
|
if (entityType === "textEntityTypePreCode") {
|
|
|
|
messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "<pre>" ));
|
|
|
|
messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "</pre>" ));
|
|
|
|
}
|
|
|
|
if (entityType === "textEntityTypeTextUrl") {
|
|
|
|
messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "<a href=\"" + formattedText.entities[i].type.url + "\">" ));
|
|
|
|
messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "</a>" ));
|
|
|
|
}
|
|
|
|
if (entityType === "textEntityTypeUnderline") {
|
|
|
|
messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "<u>" ));
|
|
|
|
messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "</u>" ));
|
|
|
|
}
|
2020-08-24 16:27:44 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
messageInsertions.sort( function(a, b) { return b.offset - a.offset } );
|
|
|
|
|
|
|
|
for (var z = 0; z < messageInsertions.length; z++) {
|
|
|
|
messageText = messageText.substring(0, messageInsertions[z].offset) + messageInsertions[z].insertionString + messageText.substring(messageInsertions[z].offset);
|
|
|
|
}
|
|
|
|
|
|
|
|
messageText = messageText.replace(new RegExp("\r?\n", "g"), "<br>");
|
|
|
|
|
|
|
|
var spaceRegex = /\s{2,}/g;
|
|
|
|
function spaceReplacer(match, p1, offset, string) {
|
|
|
|
var replaceString = "";
|
|
|
|
for (var i = 0; i < match.length; i++) {
|
|
|
|
replaceString += " ";
|
|
|
|
}
|
|
|
|
return replaceString;
|
|
|
|
}
|
|
|
|
messageText = messageText.replace(spaceRegex, spaceReplacer);
|
|
|
|
|
|
|
|
return messageText;
|
|
|
|
|
|
|
|
}
|
2020-08-24 17:30:19 +03:00
|
|
|
|
|
|
|
function handleLink(link) {
|
|
|
|
if (link.indexOf("user://") === 0) {
|
|
|
|
//pageStack.push(Qt.resolvedUrl("../pages/UserPage.qml"), {"userName": link.substring(7)});
|
|
|
|
} else if (link.indexOf("userid://") === 0) {
|
|
|
|
//pageStack.push(Qt.resolvedUrl("../pages/UserPage.qml"), {"userId": link.substring(9)});
|
|
|
|
} else {
|
|
|
|
Qt.openUrlExternally(link);
|
|
|
|
}
|
|
|
|
}
|
2020-08-28 11:41:18 +03:00
|
|
|
|
|
|
|
function getVideoHeight(videoWidth, videoData) {
|
|
|
|
if (typeof videoData !== "undefined") {
|
|
|
|
var aspectRatio = videoData.height / videoData.width;
|
|
|
|
return Math.round(videoWidth * aspectRatio);
|
|
|
|
} else {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
}
|