Jump to post from quote (#538)
* Jump to post from quote * Add a setting to go to quoted message. --------- Co-authored-by: Mikhail Barashkov <git@mbarashkov.ru>
This commit is contained in:
parent
bba4a6468c
commit
2dd1d2c380
20 changed files with 183 additions and 2 deletions
|
@ -489,8 +489,12 @@ ListItem {
|
|||
page.toggleMessageSelection(myMessage)
|
||||
} else {
|
||||
messageOptionsDrawer.open = false
|
||||
messageOverlayLoader.overlayMessage = messageInReplyToRow.inReplyToMessage
|
||||
messageOverlayLoader.active = true
|
||||
if(appSettings.goToQuotedMessage) {
|
||||
chatPage.showMessage(messageInReplyToRow.inReplyToMessage.id, true)
|
||||
} else {
|
||||
messageOverlayLoader.active = true
|
||||
messageOverlayLoader.overlayMessage = messageInReplyToRow.inReplyToMessage
|
||||
}
|
||||
}
|
||||
}
|
||||
onPressAndHold: {
|
||||
|
|
|
@ -103,6 +103,17 @@ AccordionItem {
|
|||
}
|
||||
}
|
||||
|
||||
TextSwitch {
|
||||
width: parent.columnWidth
|
||||
checked: appSettings.goToQuotedMessage
|
||||
text: qsTr("Go to quoted message")
|
||||
description: qsTr("When tapping a quoted message, open it in chat instead of showing it in an overlay.")
|
||||
automaticCheck: false
|
||||
onClicked: {
|
||||
appSettings.goToQuotedMessage = !checked
|
||||
}
|
||||
}
|
||||
|
||||
ComboBox {
|
||||
id: feedbackComboBox
|
||||
width: parent.columnWidth
|
||||
|
|
|
@ -54,6 +54,7 @@ Page {
|
|||
property bool iterativeInitialization: false;
|
||||
property var messageToShow;
|
||||
property string messageIdToShow;
|
||||
property string messageIdToScrollTo;
|
||||
readonly property bool userIsMember: ((isPrivateChat || isSecretChat) && chatInformation["@type"]) || // should be optimized
|
||||
(isBasicGroup || isSuperGroup) && (
|
||||
(chatGroupInformation.status["@type"] === "chatMemberStatusMember")
|
||||
|
@ -409,6 +410,23 @@ Page {
|
|||
chatPage.focus = true;
|
||||
}
|
||||
|
||||
function showMessage(messageId, initialRun) {
|
||||
// Means we tapped a quoted message and had to load it.
|
||||
if(initialRun) {
|
||||
chatPage.messageIdToScrollTo = messageId
|
||||
}
|
||||
if (chatPage.messageIdToScrollTo && chatPage.messageIdToScrollTo != "") {
|
||||
var index = chatModel.getMessageIndex(chatPage.messageIdToScrollTo);
|
||||
if(index !== -1) {
|
||||
chatPage.messageIdToScrollTo = "";
|
||||
chatView.scrollToIndex(index);
|
||||
} else if(initialRun) {
|
||||
// we only want to do this once.
|
||||
chatModel.triggerLoadHistoryForMessage(chatPage.messageIdToScrollTo)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: forwardMessagesTimer
|
||||
interval: 200
|
||||
|
@ -657,6 +675,8 @@ Page {
|
|||
if (chatView.height > chatView.contentHeight) {
|
||||
Debug.log("[ChatPage] Chat content quite small...");
|
||||
viewMessageTimer.queueViewMessage(chatView.count - 1);
|
||||
} else if (chatPage.messageIdToScrollTo && chatPage.messageIdToScrollTo != "") {
|
||||
showMessage(chatPage.messageIdToScrollTo, false)
|
||||
}
|
||||
chatViewCooldownTimer.restart();
|
||||
chatViewStartupReadTimer.restart();
|
||||
|
|
|
@ -32,6 +32,7 @@ namespace {
|
|||
const QString KEY_NOTIFICATION_SUPPRESS_ENABLED("notificationSuppressContent");
|
||||
const QString KEY_NOTIFICATION_FEEDBACK("notificationFeedback");
|
||||
const QString KEY_NOTIFICATION_ALWAYS_SHOW_PREVIEW("notificationAlwaysShowPreview");
|
||||
const QString KEY_GO_TO_QUOTED_MESSAGE("goToQuotedMessage");
|
||||
const QString KEY_STORAGE_OPTIMIZER("useStorageOptimizer");
|
||||
const QString KEY_INLINEBOT_LOCATION_ACCESS("allowInlineBotLocationAccess");
|
||||
const QString KEY_REMAINING_INTERACTION_HINTS("remainingInteractionHints");
|
||||
|
@ -201,6 +202,20 @@ void AppSettings::setNotificationAlwaysShowPreview(bool enable)
|
|||
}
|
||||
}
|
||||
|
||||
bool AppSettings::goToQuotedMessage() const
|
||||
{
|
||||
return settings.value(KEY_GO_TO_QUOTED_MESSAGE, false).toBool();
|
||||
}
|
||||
|
||||
void AppSettings::setGoToQuotedMessage(bool enable)
|
||||
{
|
||||
if (goToQuotedMessage() != enable) {
|
||||
LOG(KEY_GO_TO_QUOTED_MESSAGE << enable);
|
||||
settings.setValue(KEY_GO_TO_QUOTED_MESSAGE, enable);
|
||||
emit goToQuotedMessageChanged();
|
||||
}
|
||||
}
|
||||
|
||||
bool AppSettings::storageOptimizer() const
|
||||
{
|
||||
return settings.value(KEY_STORAGE_OPTIMIZER, true).toBool();
|
||||
|
|
|
@ -35,6 +35,7 @@ class AppSettings : public QObject {
|
|||
Q_PROPERTY(bool notificationSuppressContent READ notificationSuppressContent WRITE setNotificationSuppressContent NOTIFY notificationSuppressContentChanged)
|
||||
Q_PROPERTY(NotificationFeedback notificationFeedback READ notificationFeedback WRITE setNotificationFeedback NOTIFY notificationFeedbackChanged)
|
||||
Q_PROPERTY(bool notificationAlwaysShowPreview READ notificationAlwaysShowPreview WRITE setNotificationAlwaysShowPreview NOTIFY notificationAlwaysShowPreviewChanged)
|
||||
Q_PROPERTY(bool goToQuotedMessage READ goToQuotedMessage WRITE setGoToQuotedMessage NOTIFY goToQuotedMessageChanged)
|
||||
Q_PROPERTY(bool storageOptimizer READ storageOptimizer WRITE setStorageOptimizer NOTIFY storageOptimizerChanged)
|
||||
Q_PROPERTY(bool allowInlineBotLocationAccess READ allowInlineBotLocationAccess WRITE setAllowInlineBotLocationAccess NOTIFY allowInlineBotLocationAccessChanged)
|
||||
Q_PROPERTY(int remainingInteractionHints READ remainingInteractionHints WRITE setRemainingInteractionHints NOTIFY remainingInteractionHintsChanged)
|
||||
|
@ -96,6 +97,9 @@ public:
|
|||
bool notificationAlwaysShowPreview() const;
|
||||
void setNotificationAlwaysShowPreview(bool enable);
|
||||
|
||||
bool goToQuotedMessage() const;
|
||||
void setGoToQuotedMessage(bool enable);
|
||||
|
||||
bool storageOptimizer() const;
|
||||
void setStorageOptimizer(bool enable);
|
||||
|
||||
|
@ -135,6 +139,7 @@ signals:
|
|||
void notificationSuppressContentChanged();
|
||||
void notificationFeedbackChanged();
|
||||
void notificationAlwaysShowPreviewChanged();
|
||||
void goToQuotedMessageChanged();
|
||||
void storageOptimizerChanged();
|
||||
void allowInlineBotLocationAccessChanged();
|
||||
void remainingInteractionHintsChanged();
|
||||
|
|
|
@ -363,6 +363,15 @@ void ChatModel::initialize(const QVariantMap &chatInformation)
|
|||
tdLibWrapper->getChatHistory(chatId, this->chatInformation.value(LAST_READ_INBOX_MESSAGE_ID).toLongLong());
|
||||
}
|
||||
|
||||
void ChatModel::triggerLoadHistoryForMessage(qlonglong messageId)
|
||||
{
|
||||
if (!this->inIncrementalUpdate && !messages.isEmpty()) {
|
||||
LOG("Trigger loading message with id..." << messageId);
|
||||
this->inIncrementalUpdate = true;
|
||||
this->tdLibWrapper->getChatHistory(chatId, messageId);
|
||||
}
|
||||
}
|
||||
|
||||
void ChatModel::triggerLoadMoreHistory()
|
||||
{
|
||||
if (!this->inIncrementalUpdate && !messages.isEmpty()) {
|
||||
|
@ -400,6 +409,17 @@ QVariantMap ChatModel::getMessage(int index)
|
|||
return QVariantMap();
|
||||
}
|
||||
|
||||
int ChatModel::getMessageIndex(qlonglong messageId)
|
||||
{
|
||||
if (messages.size() == 0) {
|
||||
return -1;
|
||||
}
|
||||
if (messageIndexMap.contains(messageId)) {
|
||||
return messageIndexMap.value(messageId);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int ChatModel::getLastReadMessageIndex()
|
||||
{
|
||||
LOG("Obtaining last read message index");
|
||||
|
|
|
@ -40,12 +40,14 @@ public:
|
|||
Q_INVOKABLE void clear(bool contentOnly = false);
|
||||
Q_INVOKABLE void initialize(const QVariantMap &chatInformation);
|
||||
Q_INVOKABLE void triggerLoadMoreHistory();
|
||||
Q_INVOKABLE void triggerLoadHistoryForMessage(qlonglong messageId);
|
||||
Q_INVOKABLE void triggerLoadMoreFuture();
|
||||
Q_INVOKABLE QVariantMap getChatInformation();
|
||||
Q_INVOKABLE QVariantMap getMessage(int index);
|
||||
Q_INVOKABLE int getLastReadMessageIndex();
|
||||
Q_INVOKABLE void setSearchQuery(const QString newSearchQuery);
|
||||
|
||||
Q_INVOKABLE int getMessageIndex(qlonglong messageId);
|
||||
QVariantMap smallPhoto() const;
|
||||
qlonglong getChatId() const;
|
||||
|
||||
|
|
|
@ -1606,6 +1606,14 @@
|
|||
<source>Hide content in notifications</source>
|
||||
<translation>Inhalte in Hinweisen verbergen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Go to quoted message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When tapping a quoted message, open it in chat instead of showing it in an overlay.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
|
|
|
@ -1608,6 +1608,14 @@ messages</numerusform>
|
|||
<source>Hide content in notifications</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Go to quoted message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When tapping a quoted message, open it in chat instead of showing it in an overlay.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
|
|
|
@ -1606,6 +1606,14 @@
|
|||
<source>Hide content in notifications</source>
|
||||
<translation>Ocultar contenido a notificaciones</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Go to quoted message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When tapping a quoted message, open it in chat instead of showing it in an overlay.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
|
|
|
@ -1607,6 +1607,14 @@
|
|||
<source>Hide content in notifications</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Go to quoted message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When tapping a quoted message, open it in chat instead of showing it in an overlay.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
|
|
|
@ -1606,6 +1606,14 @@
|
|||
<source>Hide content in notifications</source>
|
||||
<translation>Masquer le contenu dans les notifications</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Go to quoted message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When tapping a quoted message, open it in chat instead of showing it in an overlay.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
|
|
|
@ -1579,6 +1579,14 @@
|
|||
<source>Hide content in notifications</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Go to quoted message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When tapping a quoted message, open it in chat instead of showing it in an overlay.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
|
|
|
@ -1606,6 +1606,14 @@
|
|||
<source>Hide content in notifications</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Go to quoted message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When tapping a quoted message, open it in chat instead of showing it in an overlay.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
|
|
|
@ -1633,6 +1633,14 @@
|
|||
<source>Hide content in notifications</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Go to quoted message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When tapping a quoted message, open it in chat instead of showing it in an overlay.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
|
|
|
@ -1636,6 +1636,14 @@
|
|||
<source>Hide content in notifications</source>
|
||||
<translation>Не показывать содержимое сообщений в уведомлениях</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Go to quoted message</source>
|
||||
<translation>Переходить к цитируемому сообщению</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When tapping a quoted message, open it in chat instead of showing it in an overlay.</source>
|
||||
<translation>По нажатию на цитируемое сообщение, переходить к нему в чате вместо отображения во всплывающем окне.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
|
|
|
@ -1633,6 +1633,14 @@
|
|||
<source>Hide content in notifications</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Go to quoted message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When tapping a quoted message, open it in chat instead of showing it in an overlay.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
|
|
|
@ -1606,6 +1606,14 @@
|
|||
<source>Hide content in notifications</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Go to quoted message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When tapping a quoted message, open it in chat instead of showing it in an overlay.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
|
|
|
@ -1580,6 +1580,14 @@
|
|||
<source>Hide content in notifications</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Go to quoted message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When tapping a quoted message, open it in chat instead of showing it in an overlay.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
|
|
|
@ -1606,6 +1606,14 @@
|
|||
<source>Hide content in notifications</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Go to quoted message</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>When tapping a quoted message, open it in chat instead of showing it in an overlay.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SettingsPage</name>
|
||||
|
|
Loading…
Reference in a new issue