/*
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
" + enhanceMessageText(message.content.caption) ) : "")).trim();
} else {
return simple ? (myself ? qsTr("sent a document", "myself") : qsTr("sent a document")) : "";
}
}
if (message.content['@type'] === 'messageLocation') {
return simple ? (myself ? qsTr("sent a location", "myself") : qsTr("sent a location")) : "";
}
if (message.content['@type'] === 'messageVenue') {
return simple ? (myself ? qsTr("sent a venue", "myself") : qsTr("sent a venue")) : ( "" + message.content.venue.title + ", " + message.content.venue.address );
}
if (message.content['@type'] === 'messageContactRegistered') {
return myself ? qsTr("have registered with Telegram") : qsTr("has registered with Telegram");
}
if (message.content['@type'] === 'messageChatJoinByLink') {
return myself ? qsTr("joined this chat", "myself") : qsTr("joined this chat");
}
if (message.content['@type'] === 'messageChatAddMembers') {
return myself ? qsTr("were added to this chat", "myself") : qsTr("was added to this chat");
}
if (message.content['@type'] === 'messageChatDeleteMember') {
return myself ? qsTr("left this chat", "myself") : qsTr("left this chat");
}
if (message.content['@type'] === 'messageChatChangeTitle') {
return myself ? qsTr("changed the chat title to %1", "myself").arg(message.content.title) : qsTr("changed the chat title to %1").arg(message.content.title);
}
if (message.content['@type'] === 'messagePoll') {
if (message.content.poll.type['@type'] === "pollTypeQuiz") {
if (message.content.poll.is_anonymous) {
return simple ? (myself ? qsTr("sent an anonymous quiz", "myself") : qsTr("sent an anonymous quiz")) : ("" + qsTr("Anonymous Quiz") + "");
}
return simple ? (myself ? qsTr("sent a quiz", "myself") : qsTr("sent a quiz")) : ("" + qsTr("Quiz") + "");
}
if (message.content.poll.is_anonymous) {
return simple ? (myself ? qsTr("sent an anonymous poll", "myself") : qsTr("sent an anonymous poll")) : ("" + qsTr("Anonymous Poll") + "");
}
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));
}
function getChatPartnerStatusText(statusType, was_online) {
switch(statusType) {
case "userStatusEmpty":
return qsTr("was never online");
case "userStatusLastMonth":
return qsTr("offline, last online: last month");
case "userStatusLastWeek":
return qsTr("offline, last online: last week");
case "userStatusOffline":
return qsTr("offline, last online: %1").arg(getDateTimeElapsed(was_online));
case "userStatusOnline":
return qsTr("online");
case "userStatusRecently":
return qsTr("offline, was recently online");
}
}
function getChatMemberStatusText(statusType) {
// chatMemberStatusAdministrator, chatMemberStatusBanned, chatMemberStatusCreator, chatMemberStatusLeft, chatMemberStatusMember, and chatMemberStatusRestricted.
switch(statusType) {
case "chatMemberStatusAdministrator":
return qsTr("Admin", "channel user role");
case "chatMemberStatusBanned":
return qsTr("Banned", "channel user role");
case "chatMemberStatusCreator":
return qsTr("Creator", "channel user role");
case "chatMemberStatusRestricted":
return qsTr("Restricted", "channel user role");
case "chatMemberStatusLeft":
case "chatMemberStatusMember":
return ""
}
return statusType || "";
}
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;
}
}
function getDateTimeElapsed(timestamp) {
return Format.formatDate(new Date(timestamp * 1000), Formatter.DurationElapsed);
}
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;
messageText = messageText.replace("&", "&");
messageText = messageText.replace("<", "<");
messageText = messageText.replace(">", ">");
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, "" ));
messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "" ));
}
if (entityType === "textEntityTypeUrl") {
messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "" ));
messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "" ));
}
if (entityType === "textEntityTypeCode") {
messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "
" )); messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "" )); } if (entityType === "textEntityTypeEmailAddress") { messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "" )); messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "" )); } if (entityType === "textEntityTypeItalic") { messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "" )); messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "" )); } if (entityType === "textEntityTypeMention") { messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "" )); messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "" )); } if (entityType === "textEntityTypeMentionName") { messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "" )); messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "" )); } if (entityType === "textEntityTypePhoneNumber") { messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "" )); messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "" )); } if (entityType === "textEntityTypePre") { messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "
" )); messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "" )); } if (entityType === "textEntityTypePreCode") { messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "
" )); messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "" )); } if (entityType === "textEntityTypeTextUrl") { messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "" )); messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "" )); } if (entityType === "textEntityTypeUnderline") { messageInsertions.push(new MessageInsertion(formattedText.entities[i].offset, "" )); messageInsertions.push(new MessageInsertion((formattedText.entities[i].offset + formattedText.entities[i].length), "" )); } } 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"), "