Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F8219854
D245.1760462230.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
5 KB
Referenced Files
None
Subscribers
None
D245.1760462230.diff
View Options
diff --git a/src/contents/ui/RoomPage.qml b/src/contents/ui/RoomPage.qml
--- a/src/contents/ui/RoomPage.qml
+++ b/src/contents/ui/RoomPage.qml
@@ -180,8 +180,7 @@
}
function setDraftRelation(relType, eventId) {
- sendMessageBox.draftRelType = relType;
- sendMessageBox.draftRelatedTo = eventId;
+ sendMessageBox.setDraftRelation(relType, eventId);
}
property var joinRoomHandler: Kazv.AsyncHandler {
diff --git a/src/contents/ui/SendMessageBox.qml b/src/contents/ui/SendMessageBox.qml
--- a/src/contents/ui/SendMessageBox.qml
+++ b/src/contents/ui/SendMessageBox.qml
@@ -16,11 +16,14 @@
ColumnLayout {
id: sendMessageBox
+ objectName: 'sendMessageBox'
property var room
property var draftRelType: ''
property var draftRelatedTo: ''
property var timeline: room.timeline()
property var members: room.members()
+ property var oldDraft: ''
+ property var changeDraftRelTypes: ['m.replace']
function getRelationPrompt(draftRelType) {
if (draftRelType === 'm.in_reply_to') {
@@ -42,6 +45,25 @@
textArea.changeText(newDraft, /* inhibitTyping = */ true);
}
+ // Some relation type will replace user's draft, this function will save the draft and restore it.
+ function setDraftRelation(relType, eventId) {
+ if (!sendMessageBox.changeDraftRelTypes.includes(sendMessageBox.draftRelType)
+ && sendMessageBox.changeDraftRelTypes.includes(relType)) {
+ oldDraft = textArea.text;
+ }
+ if (!sendMessageBox.changeDraftRelTypes.includes(relType)
+ && sendMessageBox.changeDraftRelTypes.includes(sendMessageBox.draftRelType)) {
+ replaceDraft(oldDraft);
+ oldDraft = '';
+ }
+ sendMessageBox.draftRelType = relType;
+ sendMessageBox.draftRelatedTo = eventId;
+ }
+
+ function resetDraftRelation() {
+ sendMessageBox.setDraftRelation('', '');
+ }
+
onRoomChanged: {
textArea.changeText(room.localDraft, true);
}
@@ -309,8 +331,7 @@
icon.name: 'window-close-symbolic'
text: getCancelRelationPrompt(sendMessageBox.draftRelType)
onTriggered: {
- sendMessageBox.draftRelType = '';
- sendMessageBox.draftRelatedTo = '';
+ sendMessageBox.resetDraftRelation();
}
}
@@ -322,8 +343,7 @@
room.setTyping(false);
room.sendTextMessage(textArea.text, draftRelType, draftRelatedTo);
textArea.changeText("", true);
- sendMessageBox.draftRelType = '';
- sendMessageBox.draftRelatedTo = '';
+ sendMessageBox.resetDraftRelation();
}
enabled: textArea.text !== ''
}
@@ -357,8 +377,7 @@
room.roomId, sdkVars.roomList, room.encrypted,
draftRelType, draftRelatedTo
);
- sendMessageBox.draftRelType = '';
- sendMessageBox.draftRelatedTo = '';
+ sendMessageBox.resetDraftRelation();
}
property var stickerPopup: Kirigami.OverlaySheet {
@@ -372,8 +391,7 @@
onSendMessageRequested: eventJson => {
console.log(JSON.stringify(eventJson));
room.sendMessage(eventJson, draftRelType, draftRelatedTo);
- draftRelType = '';
- draftRelatedTo = '';
+ sendMessageBox.resetDraftRelation();
stickerPopup.close();
}
}
diff --git a/src/tests/quick-tests/tst_SendMessageBoxDrafts.qml b/src/tests/quick-tests/tst_SendMessageBoxDrafts.qml
--- a/src/tests/quick-tests/tst_SendMessageBoxDrafts.qml
+++ b/src/tests/quick-tests/tst_SendMessageBoxDrafts.qml
@@ -39,6 +39,7 @@
property var room: makeRoom()
property var room2: makeRoom()
+ property var room3: makeRoom()
property var sendMessageBoxComp: Component {
id: comp
@@ -74,6 +75,23 @@
}
}
+ property var sendMessageBoxComp3: Component {
+ id: comp3
+ Kirigami.Page {
+ id: page
+ Label {
+ text: 'room 3'
+ }
+ footer: Item {
+ height: childrenRect.height
+ width: parent.width
+ Kazv.SendMessageBox {
+ room: item.room3
+ }
+ }
+ }
+ }
+
property var mockMainPageComp: Component {
id: mockMainPageComp
Kirigami.Page {}
@@ -88,6 +106,11 @@
name: 'SendMessageBoxDraftsTest'
when: windowShown
+ function init() {
+ window.pageStack.clear();
+ mockHelper.clearAll();
+ }
+
function test_saveDraftsOnSwitching() {
// simulates the MainPage when starting up kazv
window.pageStack.push(mockMainPageComp);
@@ -114,5 +137,23 @@
tryVerify(() => item.room.localDraft === 'foo', 1000);
verify(item.room.updateLocalDraftNow.calledTimes() === 1);
}
+
+ function test_restoreDraftOnExitEditing() {
+ window.pageStack.push(comp3);
+ const sendMessageBox = findChild(window.pageStack, 'sendMessageBox');
+ const textArea = findChild(window.pageStack, 'draftMessage');
+ textArea.text = 'some draft';
+ sendMessageBox.setDraftRelation('m.replace', '$someevent');
+ // m.replace will change textArea
+ textArea.text = 'foo';
+ // Old draft has been saved.
+ compare(sendMessageBox.oldDraft, 'some draft');
+ // Exit editing
+ sendMessageBox.resetDraftRelation();
+ // Old draft has been restored.
+ compare(textArea.text, 'some draft');
+
+ window.pageStack.clear();
+ }
}
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Oct 14, 10:17 AM (7 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
517254
Default Alt Text
D245.1760462230.diff (5 KB)
Attached To
Mode
D245: Restore draft after editing
Attached
Detach File
Event Timeline
Log In to Comment