Skip to content

Commit 867daf4

Browse files
antonykampjacob271kohlros
authored
Hinzufügen von Tag-Trenner (alias "day divider") (#524)
* add first prototype Co-authored-by: Jacob Schaefer <[email protected]> Co-authored-by: kohlros <[email protected]> * fix disappearing divider Co-authored-by: Jacob Schaefer <[email protected]> * revert change in testAddingOldMessageDoesNotScroll Co-authored-by: Jacob Schaefer <[email protected]> * refactor mockTextMessageWith:withDate: Co-authored-by: Jacob Schaefer <[email protected]> * scroll after adding divider to fix not ending up at the bottom when opening a chat * rename TCUInfoMessage to TCUDayDividerMessage Co-authored-by: Jacob Schaefer <[email protected]> * fix click on replied message Co-authored-by: Jacob Schaefer <[email protected]> * fix merge conflicts Co-authored-by: Jacob Schaefer <[email protected]> * remove leftovers of lastMessageSnippet Co-authored-by: Jacob Schaefer <[email protected]> * test addDayDividerAtTop Co-authored-by: Jacob Schaefer <[email protected]> Co-authored-by: kohlros <[email protected]>
1 parent 444899d commit 867daf4

File tree

54 files changed

+324
-30
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+324
-30
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
default values
2+
defaultLastMessageDate
3+
4+
^ DateAndTime fromUnixTime: 0
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
adding
22
addNewestMessage: aMessage
33

4+
| newDate oldDate |
5+
newDate := aMessage date asDate.
6+
oldDate := self lastMessageDate asDate.
7+
(newDate > oldDate) ifTrue: [
8+
aMessage isFirstMessageOfDay: true.
9+
self lastMessage isLastMessageOfDay: true.
10+
].
411
self messageIds addFirst: aMessage id.
512
self messageDictionary at: aMessage id put: aMessage.
613
self triggerEvent: #newMessage with: aMessage.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
adding
22
addOldestMessage: aMessage
33

4+
| newDate oldDate |
5+
newDate := aMessage date asDate.
6+
oldDate := self oldestLoadedMessageDate asDate.
7+
(newDate < oldDate) ifTrue: [
8+
self oldestLoadedMessage isFirstMessageOfDay: true.
9+
aMessage isLastMessageOfDay: true].
410
self messageIds add: aMessage id.
511
self messageDictionary at: aMessage id put: aMessage.
612
self triggerEvent: #loadedMessage with: aMessage.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
accessing
2+
lastMessage
3+
4+
^ self messages
5+
ifEmpty: [ TCCNotLoadedMessage new
6+
date: self class defaultLastMessageDate]
7+
ifNotEmpty: [ self messages first ]
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
accessing
2+
lastMessageDate
3+
4+
"Date of the latest received message."
5+
6+
^ self lastMessage date
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
accessing
2+
oldestLoadedMessage
3+
4+
^ self messages
5+
ifEmpty: [ TCCNotLoadedMessage new
6+
date: self class defaultLastMessageDate]
7+
ifNotEmpty: [ self messages last ]
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
accessing
2+
oldestLoadedMessageDate
3+
4+
^ self oldestLoadedMessage date

packages/TelegramClient-Core.package/TCCChat.class/methodProperties.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"class" : {
3+
"defaultLastMessageDate" : "aka 7/10/2022 11:25",
34
"defaultLastMessageId" : "JB 8/4/2021 00:10",
45
"defaultLastMessageSenderId" : "LR 7/14/2022 11:50",
56
"defaultMessageLimit" : "RS 7/17/2021 11:45",
@@ -9,8 +10,8 @@
910
"newFromChatEvent:" : "RS 7/17/2021 17:07" },
1011
"instance" : {
1112
"addAnsweredMessage:" : "JS 5/26/2022 16:41",
12-
"addNewestMessage:" : "JS 5/26/2022 14:22",
13-
"addOldestMessage:" : "LR 6/11/2022 16:17",
13+
"addNewestMessage:" : "aka 7/14/2022 14:29",
14+
"addOldestMessage:" : "aka 7/14/2022 14:26",
1415
"canSendMessages" : "5/11/2021 10:09:15",
1516
"canSendMessages:" : "JB 8/4/2021 00:08",
1617
"chatHistoryReceived:" : "aka 7/14/2022 16:38",
@@ -36,6 +37,8 @@
3637
"isPinned:" : "js 6/18/2022 10:19",
3738
"isPrivate" : "per 6/4/2021 14:42",
3839
"isSuperGroup" : "per 6/15/2021 08:09",
40+
"lastMessage" : "aka 7/14/2022 14:28",
41+
"lastMessageDate" : " 7/22/2022 10:40:18",
3942
"lastMessageId" : "JB 8/4/2021 00:10",
4043
"lastMessageSenderId" : "LR 7/14/2022 12:16",
4144
"lastMessageSenderId:" : "LR 7/14/2022 15:11",
@@ -56,6 +59,8 @@
5659
"numberOfMessages" : "RS 7/31/2021 15:19",
5760
"numberOfRequestedMessages" : "js 8/1/2020 17:43",
5861
"numberOfRequestedMessages:" : "JS 5/20/2022 11:34",
62+
"oldestLoadedMessage" : "aka 7/14/2022 13:46",
63+
"oldestLoadedMessageDate" : "aka 7/14/2022 13:46",
5964
"photoId" : "rgw 6/2/2022 11:51",
6065
"photoId:" : "rgw 6/2/2022 11:51",
6166
"position" : "RS 5/10/2021 21:11",

packages/TelegramClient-Core.package/TCCCore.class/methodProperties.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
"freeClient" : "6/9/2021 14:12:18",
1818
"generateCallbackId" : "pk 8/5/2021 17:04",
1919
"getOwnProfile" : "pk 8/5/2021 17:05",
20-
"handleEvent:" : "LR 6/12/2022 14:28",
20+
"handleEvent:" : "aka 7/10/2022 10:28",
2121
"handleMessageEvent:" : "rgw 5/12/2022 13:44",
2222
"handlePendingEvent:" : "per 8/2/2021 15:05",
2323
"imageStore" : "pk 6/19/2021 17:15",
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
accessing
2+
initialize
3+
4+
super initialize.
5+
6+
self
7+
isFirstMessageOfDay: false;
8+
isLastMessageOfDay: false
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
accessing
2+
isFirstMessageOfDay: aBool
3+
4+
isFirstMessageOfDay := aBool
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
accessing
2+
isFirstMessageOfDay
3+
4+
^ isFirstMessageOfDay
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
accessing
2+
isLastMessageOfDay: aBool
3+
4+
isLastMessageOfDay := aBool
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
accessing
2+
isLastMessageOfDay
3+
4+
^ isLastMessageOfDay

packages/TelegramClient-Core.package/TCCMessage.class/methodProperties.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,9 @@
1010
"date" : "aka 7/14/2022 16:40",
1111
"date:" : "aka 7/14/2022 16:40",
1212
"id" : "aka 7/14/2022 16:40",
13-
"id:" : "aka 7/14/2022 16:40" } }
13+
"id:" : "aka 7/14/2022 16:40",
14+
"initialize" : " 7/22/2022 10:40:18",
15+
"isFirstMessageOfDay" : " 7/22/2022 10:40:18",
16+
"isFirstMessageOfDay:" : " 7/22/2022 10:40:18",
17+
"isLastMessageOfDay" : " 7/22/2022 10:40:18",
18+
"isLastMessageOfDay:" : " 7/22/2022 10:40:18" } }

packages/TelegramClient-Core.package/TCCMessage.class/properties.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
"chat",
1010
"id",
1111
"date",
12-
"core" ],
12+
"core",
13+
"isFirstMessageOfDay",
14+
"isLastMessageOfDay" ],
1315
"name" : "TCCMessage",
1416
"pools" : [
1517
],

packages/TelegramClient-UI.package/TCUChatMessageList.class/instance/addAtBottom..st

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ addAtBottom: aCoreMessage
55

66
(self isFromCurrentChat: aCoreMessage)
77
ifFalse: [ ^ self ].
8+
9+
(aCoreMessage isFirstMessageOfDay) ifTrue: [self addBottomDayDividerForDate: aCoreMessage date asDate].
10+
811
wasFullyScrolledDown := self isFullyScrolledDown.
912
messageItem := TCUUserMessage newFrom: aCoreMessage.
1013
messageItem when: #requestScroll send: #requestScrollToMessage: to: self with: (aCoreMessage replyToMessageId).

packages/TelegramClient-UI.package/TCUChatMessageList.class/instance/addAtTop..st

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
messages
22
addAtTop: aCoreMessage
33

4-
| wrapper messageItem |
4+
| wrapper messageItem lastMessage |
55
(self isFromCurrentChat: aCoreMessage) ifFalse: [^ self].
66

7+
(aCoreMessage isLastMessageOfDay and: self items isEmpty not) ifTrue: [
8+
lastMessage := self items first message messageModel.
9+
self addTopDayDividerForDate: (lastMessage date asDate)
10+
].
11+
712
messageItem := TCUUserMessage newFrom: aCoreMessage.
813
messageItem when: #requestScroll send: #requestScrollToMessage: to: self with: (aCoreMessage replyToMessageId).
914
wrapper := TCUMessageWrapper newFromMessage: messageItem withWidth: self scroller width.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
stepping and presenter
2+
addBottomDayDividerForDate: aDate
3+
4+
| divider wasFullyScrolledDown |
5+
wasFullyScrolledDown := self isFullyScrolledDown.
6+
divider := self createDayDividerForDate: aDate.
7+
self scroller addMorphBack: divider.
8+
self items addLast: divider.
9+
wasFullyScrolledDown
10+
ifTrue: [ self scrollToNewestMessage ]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
stepping and presenter
2+
addTopDayDividerForDate: aDate
3+
4+
| divider |
5+
divider := self createDayDividerForDate: aDate.
6+
self scroller addMorphFront: divider.
7+
self items addFirst: divider.
8+
self isFullyScrolledDown
9+
ifTrue: [self scrollToNewestMessage].
10+
self scrollBy: 0 @ (divider height negated).
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
stepping and presenter
2+
createDayDividerForDate: aDate
3+
4+
| messageItem |
5+
messageItem := TCUDayDividerMessage newFromDate: aDate.
6+
^ RectangleMorph new
7+
color: Color transparent;
8+
width: self scroller width;
9+
height: messageItem height;
10+
borderWidth: 0;
11+
addMorphCentered: messageItem;
12+
yourself

packages/TelegramClient-UI.package/TCUChatMessageList.class/instance/displayChat..st

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ displayChat: aChat
44
self chat removeActionsWithReceiver: self.
55
aChat when: #newMessage send: #addAtBottom: to: self.
66
aChat when: #loadedMessage send: #addAtTop: to: self.
7+
78
self
89
chat: aChat;
910
showMessages.
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
drawing
22
scrollToMessage: aMessageId
33

4-
| messageItem messageIndex |
5-
messageIndex := self chat messageIds reversed indexOf: aMessageId.
6-
messageItem := self items at: messageIndex.
4+
| messageItem |
5+
messageItem := self items detect: [:item | ((item isKindOf: TCUMessageWrapper)) and: [item messageId = aMessageId]].
76
self scrollToShow: messageItem

packages/TelegramClient-UI.package/TCUChatMessageList.class/methodProperties.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,21 @@
33
"defaultScrollOffsetBeforeLoading" : "JB 6/26/2021 10:15",
44
"defaultWidth" : "rgw 6/2/2022 15:39" },
55
"instance" : {
6-
"addAtBottom:" : "aka 7/14/2022 16:13",
7-
"addAtTop:" : "aka 7/14/2022 16:13",
6+
"addAtBottom:" : "aka 7/14/2022 14:58",
7+
"addAtTop:" : "aka 7/14/2022 15:18",
8+
"addBottomDayDividerForDate:" : "js 7/18/2022 07:29",
89
"addMessages" : "RS 7/17/2021 17:40",
10+
"addTopDayDividerForDate:" : "js 7/18/2022 07:30",
911
"chat" : "js 7/31/2020 16:39",
1012
"chat:" : "js 7/31/2020 16:39",
1113
"core" : "JB 6/26/2021 10:22",
12-
"displayChat:" : "RS 7/17/2021 11:54",
14+
"createDayDividerForDate:" : "aka 7/22/2022 09:29",
15+
"displayChat:" : "aka 7/14/2022 13:50",
1316
"initialize" : "RS 7/17/2021 17:40",
1417
"isFromCurrentChat:" : "pk 8/5/2021 17:07",
1518
"isFullyScrolledDown" : "JB 8/4/2021 11:15",
1619
"requestScrollToMessage:" : "aka 6/15/2022 11:56",
17-
"scrollToMessage:" : "aka 6/15/2022 12:01",
20+
"scrollToMessage:" : "aka 7/22/2022 09:34",
1821
"scrollToNewestMessage" : "per 6/24/2021 23:14",
1922
"showMessages" : "RS 7/17/2021 17:34",
2023
"step" : "JB 7/19/2021 12:12" } }
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
class for automatic generated info messages.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
defaults
2+
defaultMargin
3+
4+
^ 20
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
instance creation
2+
newFromDate: aDate
3+
4+
^ self basicNew
5+
content: aDate mmddyyyy;
6+
initialize;
7+
yourself
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
accessing
2+
content: aString
3+
4+
content := aString
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
accessing
2+
content
3+
4+
^ content
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
initialization
2+
initialize
3+
4+
| textMorph |
5+
super initialize.
6+
7+
textMorph := TextMorph new
8+
contents: self content;
9+
lock.
10+
self color: Color gray;
11+
width: textMorph width + self class defaultMargin;
12+
addMorphCentered: textMorph;
13+
useRoundedCorners;
14+
borderWidth: 0.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"class" : {
3+
"defaultMargin" : "aka 7/14/2022 15:15",
4+
"newFromDate:" : "aka 7/14/2022 15:14" },
5+
"instance" : {
6+
"content" : "aka 7/10/2022 12:37",
7+
"content:" : "aka 7/10/2022 12:37",
8+
"initialize" : "aka 7/14/2022 15:16" } }
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"category" : "TelegramClient-UI",
3+
"classinstvars" : [
4+
],
5+
"classvars" : [
6+
],
7+
"commentStamp" : "aka 7/14/2022 15:07",
8+
"instvars" : [
9+
"content" ],
10+
"name" : "TCUDayDividerMessage",
11+
"pools" : [
12+
],
13+
"super" : "RectangleMorph",
14+
"type" : "normal" }
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
accessing
2+
messageId
3+
4+
^ self message messageModel id

packages/TelegramClient-UI.package/TCUMessageWrapper.class/methodProperties.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,5 @@
77
"addProfilePhoto" : "js 6/13/2022 18:09",
88
"initialize" : "JS 6/11/2022 11:40",
99
"message" : "JS 6/11/2022 11:12",
10-
"message:" : "JS 6/11/2022 11:13" } }
10+
"message:" : "JS 6/11/2022 11:13",
11+
"messageId" : "aka 7/22/2022 09:30" } }

packages/TelegramClientTests-Core.package/TCTCChatTests.class/instance/setUp.st

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,4 @@ setUp
1717
userId: aNumber * 3;
1818
id: aNumber * 4;
1919
date: (DateAndTime fromUnixTime: aNumber * 60)).
20-
self chat messageIds add: message id.
21-
self chat messageDictionary at: message id put: message]
20+
self chat addNewestMessage: message.]
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
testing
22
testAddNewestMessage
33

4-
self chat addNewestMessage: (TCCTextMessage new text: 'test').
4+
self chat addNewestMessage: (TCCTextMessage new
5+
text: 'test';
6+
date: DateAndTime today).
57
self assert: 'test' equals: self chat messages first asText.
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
testing
22
testAddOldestMessage
33

4-
self chat addOldestMessage: (TCCTextMessage new text: 'test').
4+
self chat addOldestMessage: (TCCTextMessage new
5+
text: 'test';
6+
date: (DateAndTime fromUnixTime: 0)
7+
).
58
self assert: 'test' equals: self chat messages last asText.

0 commit comments

Comments
 (0)