/*
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, ignoreEntities) ) : "")).trim();
} else {
return simple ? (myself ? qsTr("sent a document", "myself") : qsTr("sent a document")) : "";
}
case 'messageLocation':
return simple ? (myself ? qsTr("sent a location", "myself") : qsTr("sent a location")) : "";
case 'messageVenue':
return simple ? (myself ? qsTr("sent a venue", "myself") : qsTr("sent a venue")) : ( "" + message.content.venue.title + ", " + message.content.venue.address );
case 'messageContactRegistered':
return myself ? qsTr("have registered with Telegram") : qsTr("has registered with Telegram");
case 'messageChatJoinByLink':
return myself ? qsTr("joined this chat", "myself") : qsTr("joined this chat");
case 'messageChatAddMembers':
return myself ? qsTr("were added to this chat", "myself") : qsTr("was added to this chat");
case 'messageChatDeleteMember':
return myself ? qsTr("left this chat", "myself") : qsTr("left this chat");
case '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);
case '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") + "");
case 'messageBasicGroupChatCreate':
case 'messageSupergroupChatCreate':
return myself ? qsTr("created this group", "myself") : qsTr("created this group");
case 'messageChatChangePhoto':
return myself ? qsTr("changed the chat photo", "myself") : qsTr("changed the chat photo");
case 'messageChatDeletePhoto':
return myself ? qsTr("deleted the chat photo", "myself") : qsTr("deleted the chat photo");
case '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");
case 'messageChatUpgradeFrom':
case 'messageChatUpgradeTo':
return myself ? qsTr("upgraded this group to a supergroup", "myself") : qsTr("upgraded this group to a supergroup");
case 'messageCustomServiceAction':
return message.content.text;
case 'messagePinMessage':
return myself ? qsTr("changed the pinned message", "myself") : qsTr("changed the pinned message");
case 'messageExpiredPhoto':
return myself ? qsTr("sent a self-destructing photo that is expired", "myself") : qsTr("sent a self-destructing photo that is expired");
case 'messageExpiredVideo':
return myself ? qsTr("sent a self-destructing video that is expired", "myself") : qsTr("sent a self-destructing video that is expired");
case 'messageScreenshotTaken':
return myself ? qsTr("created a screenshot in this chat", "myself") : qsTr("created a screenshot in this chat");
case 'messageUnsupported':
return myself ? qsTr("sent an unsupported message", "myself") : qsTr("sent an unsupported message");
default:
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":
return qsTr("was never online");
case "userStatusLastMonth":
return qsTr("last online: last month");
case "userStatusLastWeek":
return qsTr("last online: last week");
case "userStatusOffline":
return qsTr("last online: %1").arg(getDateTimeElapsed(was_online));
case "userStatusOnline":
return qsTr("online");
case "userStatusRecently":
return qsTr("was recently online");
}
}
function getSecretChatStatus(secretChatDetails) {
switch (secretChatDetails.state["@type"]) {
case "secretChatStateClosed":
return "" + qsTr("Closed!") + "";
case "secretChatStatePending":
return qsTr("Pending acknowledgement");
case "secretChatStateReady":
return "";
}
}
function getChatMemberStatusText(statusType) {
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 Silica.Format.formatDate(new Date(timestamp * 1000), Silica.Formatter.DurationElapsed);
}
function getDateTimeTranslated(timestamp) {
return new Date(timestamp * 1000).toLocaleString();
}
function handleHtmlEntity(messageText, messageInsertions, originalString, replacementString) {
var nextIndex = -1;
while ((nextIndex = messageText.indexOf(originalString, nextIndex + 1)) > -1) {
messageInsertions.push({ offset: nextIndex, insertionString: replacementString, removeLength: originalString.length });
}
}
var rawNewLineRegExp = /\r?\n/g;
var ampRegExp = /&/g;
var ltRegExp = //g;
function enhanceHtmlEntities(simpleText) {
return simpleText.replace(ampRegExp, "&").replace(ltRegExp, "<").replace(gtRegExp, ">");//.replace(rawNewLineRegExp, "
");
}
function messageInsertionSorter(a, b) { return (b.offset+b.removeLength) - (a.offset+a.removeLength) }
function enhanceMessageText(formattedText, ignoreEntities) {
var messageInsertions = [];
var messageText = formattedText.text;
var entity;
if (ignoreEntities) {
return messageText;
}
if(formattedText.entities.length === 0) {
return messageText.replace(ampRegExp, "&").replace(ltRegExp, "<").replace(gtRegExp, ">").replace(rawNewLineRegExp, "
");
}
for (var i = 0; i < formattedText.entities.length; i++) {
entity = formattedText.entities[i];
if (entity['@type'] !== "textEntity") {
continue;
}
switch(entity.type['@type']) {
case "textEntityTypeBold":
messageInsertions.push(
{ offset: entity.offset, insertionString: "", removeLength: 0 },
{ offset: (entity.offset + entity.length), insertionString: "", removeLength: 0 }
);
break;
case "textEntityTypeUrl":
messageInsertions.push(
{ offset: entity.offset, insertionString: "", removeLength: 0 },
{ offset: (entity.offset + entity.length), insertionString: "", removeLength: 0 }
);
break;
case "textEntityTypeCode":
messageInsertions.push(
{ offset: entity.offset, insertionString: "
", removeLength: 0 }, { offset: (entity.offset + entity.length), insertionString: "", removeLength: 0 } ); break; case "textEntityTypeEmailAddress": messageInsertions.push( { offset: entity.offset, insertionString: "", removeLength: 0 }, { offset: (entity.offset + entity.length), insertionString: "", removeLength: 0 } ); break; case "textEntityTypeItalic": messageInsertions.push( { offset: entity.offset, insertionString: "", removeLength: 0 }, { offset: (entity.offset + entity.length), insertionString: "", removeLength: 0 } ); break; case "textEntityTypeMention": messageInsertions.push( { offset: entity.offset, insertionString: "", removeLength: 0 }, { offset: (entity.offset + entity.length), insertionString: "", removeLength: 0 } ); break; case "textEntityTypeMentionName": messageInsertions.push( { offset: entity.offset, insertionString: "", removeLength: 0 }, { offset: (entity.offset + entity.length), insertionString: "", removeLength: 0 } ); break; case "textEntityTypePhoneNumber": messageInsertions.push( { offset: entity.offset, insertionString: "", removeLength: 0 }, { offset: (entity.offset + entity.length), insertionString: "", removeLength: 0 } ); break; case "textEntityTypePre": messageInsertions.push( { offset: entity.offset, insertionString: "
", removeLength: 0 }, { offset: (entity.offset + entity.length), insertionString: "", removeLength: 0 } ); break; case "textEntityTypePreCode": messageInsertions.push( { offset: entity.offset, insertionString: "
", removeLength: 0 }, { offset: (entity.offset + entity.length), insertionString: "", removeLength: 0 } ); break; case "textEntityTypeTextUrl": messageInsertions.push( { offset: entity.offset, insertionString: "", removeLength: 0 }, { offset: (entity.offset + entity.length), insertionString: "", removeLength: 0 } ); break; case "textEntityTypeUnderline": messageInsertions.push( { offset: entity.offset, insertionString: "", removeLength: 0 }, { offset: (entity.offset + entity.length), insertionString: "", removeLength: 0 } ); break; } } if(messageInsertions.length === 0) { return messageText.replace(ampRegExp, "&").replace(ltRegExp, "<").replace(gtRegExp, ">").replace(rawNewLineRegExp, "