fix more animations
This commit is contained in:
1 parent
3e990e7af9
commit
28e8c2e2a8
3 files changed
+14
-165
No files matched your search
@@ -7,6 +7,10 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
AB12CD34EF56010203040503 /* ChatMessageEntrancePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB12CD34EF56010203040501 /* ChatMessageEntrancePolicy.swift */; };
|
||||
AB12CD34EF56010203040504 /* ChatMessageEntrancePolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB12CD34EF56010203040501 /* ChatMessageEntrancePolicy.swift */; };
|
||||
AB12CD34EF56010203040505 /* MessageBubbleEntrance.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB12CD34EF56010203040502 /* MessageBubbleEntrance.swift */; };
|
||||
AB12CD34EF56010203040506 /* MessageBubbleEntrance.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB12CD34EF56010203040502 /* MessageBubbleEntrance.swift */; };
|
||||
00FCAB7210D005D2C30747CB /* AccountConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2006464EAC88C6E4E2B08AC8 /* AccountConfiguration.swift */; };
|
||||
01039E013AB84FA338B2A5CF /* MessageCorrectionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 096748EF4DC92889BCAB3260 /* MessageCorrectionTests.swift */; };
|
||||
01E4131ED4DBED0BEAD465A2 /* ServerInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBA20B768A9C675FABCDC821 /* ServerInfoView.swift */; };
|
||||
@@ -332,6 +336,8 @@
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
AB12CD34EF56010203040501 /* ChatMessageEntrancePolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatMessageEntrancePolicy.swift; sourceTree = "<group>"; };
|
||||
AB12CD34EF56010203040502 /* MessageBubbleEntrance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageBubbleEntrance.swift; sourceTree = "<group>"; };
|
||||
0142FF4A1B05C373DAB4CDBE /* VideoNoteCaptureView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VideoNoteCaptureView.swift; sourceTree = "<group>"; };
|
||||
0386C2687C1C60EC734FDBB0 /* BubbleShapes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BubbleShapes.swift; sourceTree = "<group>"; };
|
||||
03AC6BC7FC7CFFD69A20DA17 /* MessageBubble.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageBubble.swift; sourceTree = "<group>"; };
|
||||
@@ -569,6 +575,7 @@
|
||||
C04D749B7CA93CB7C59127D6 /* AttachmentDraft.swift */,
|
||||
6079CE75BAB995515A8D5460 /* CallSnapshot.swift */,
|
||||
12C6A6B83DA076867481CCF3 /* ChatMessage.swift */,
|
||||
AB12CD34EF56010203040501 /* ChatMessageEntrancePolicy.swift */,
|
||||
C37AAE886AA3B8782B89E1A0 /* ChatScrollPositionPolicy.swift */,
|
||||
13E35F7F0CB0243311FCDD61 /* ChatTimelineEntry.swift */,
|
||||
1C3E51BB890F05FD02C71F6E /* ChatTypingPolicy.swift */,
|
||||
@@ -816,6 +823,7 @@
|
||||
B96E7970930AB7F09CB5DA9C /* LocationMessagePreview.swift */,
|
||||
4380219D3AF1D75EDF4D3167 /* MediaViewer.swift */,
|
||||
03AC6BC7FC7CFFD69A20DA17 /* MessageBubble.swift */,
|
||||
AB12CD34EF56010203040502 /* MessageBubbleEntrance.swift */,
|
||||
8D2294F0FE44B2268A0620BB /* PhotoAttachmentPreview.swift */,
|
||||
19C556A41E640592AF6376B6 /* ReplyThreadOverlay.swift */,
|
||||
5003B4F9DF154543555E9825 /* RTCVideoRendererView.swift */,
|
||||
@@ -1054,6 +1062,7 @@
|
||||
97A3A0635ADA8A8227C94216 /* ChatBubbleShape.swift in Sources */,
|
||||
7AC93485DA12BC90717739E9 /* ChatMediaImageCache.swift in Sources */,
|
||||
66489D4D15366683D3095B3D /* ChatMessage.swift in Sources */,
|
||||
AB12CD34EF56010203040503 /* ChatMessageEntrancePolicy.swift in Sources */,
|
||||
D5E6B1859101ABBD33D90C3C /* ChatScrollPositionPolicy.swift in Sources */,
|
||||
1E239B9338CEEA7EA704626C /* ChatTimelineEntry.swift in Sources */,
|
||||
433A7B65E635FB59021F7D87 /* ChatTypingPolicy.swift in Sources */,
|
||||
@@ -1100,6 +1109,7 @@
|
||||
B33870CD89289E44882750C3 /* MediaViewer.swift in Sources */,
|
||||
EBAF4861DD93FBEAA4B37D1C /* MediaViewerItem.swift in Sources */,
|
||||
230E0DAA5396EA507D6F6D47 /* MessageBubble.swift in Sources */,
|
||||
AB12CD34EF56010203040505 /* MessageBubbleEntrance.swift in Sources */,
|
||||
FD9F8640841236BB78563573 /* MessageReaction.swift in Sources */,
|
||||
30BE19F459FDDAD640F66C68 /* MessageReplyFallback.swift in Sources */,
|
||||
94FB3597E01FC508F872861E /* MessageReplySwipePolicy.swift in Sources */,
|
||||
@@ -1180,6 +1190,7 @@
|
||||
2A7611650AB52EDABB978362 /* ChatBubbleShape.swift in Sources */,
|
||||
6FCF6A4EFF8AE1FBFC2D81E1 /* ChatMediaImageCache.swift in Sources */,
|
||||
8714A5A67956D6A78D4D3E4B /* ChatMessage.swift in Sources */,
|
||||
AB12CD34EF56010203040504 /* ChatMessageEntrancePolicy.swift in Sources */,
|
||||
8B98B818AC4379F03907B0E0 /* ChatScrollPositionPolicy.swift in Sources */,
|
||||
7F7BA6805C1D1EBCEAFDD3AD /* ChatTimelineEntry.swift in Sources */,
|
||||
B4AA654DF3A53AAAAC23915D /* ChatTypingPolicy.swift in Sources */,
|
||||
@@ -1226,6 +1237,7 @@
|
||||
CC5297F90A3DBD45C5E41A3A /* MediaViewer.swift in Sources */,
|
||||
2C5BAAEF4EC7AAE5FE0FEEDB /* MediaViewerItem.swift in Sources */,
|
||||
A90142509385DE6E83818953 /* MessageBubble.swift in Sources */,
|
||||
AB12CD34EF56010203040506 /* MessageBubbleEntrance.swift in Sources */,
|
||||
ECCD95DD4E16E0B393C707A9 /* MessageReaction.swift in Sources */,
|
||||
C2CC9BABAE68FA9258694766 /* MessageReplyFallback.swift in Sources */,
|
||||
D4E1CF1F7D948B2E72C063BE /* MessageReplySwipePolicy.swift in Sources */,
|
||||
|
||||
@@ -155,7 +155,6 @@ struct ChatView: View {
|
||||
)
|
||||
_knownEntranceIDs = State<Set<String>>(initialValue: [])
|
||||
_hasPlayedOpeningEntrance = State(initialValue: false)
|
||||
_entranceConversationID = State<String?>(initialValue: nil)
|
||||
_entranceReleaseToken = State(initialValue: UUID())
|
||||
}
|
||||
|
||||
@@ -494,8 +493,7 @@ struct ChatView: View {
|
||||
}
|
||||
}
|
||||
|
||||
private func rebuildTimelineEntries(from newMessages: [ChatMessage]? = nil)
|
||||
{
|
||||
private func rebuildTimelineEntries(from newMessages: [ChatMessage]? = nil) {
|
||||
let source = newMessages ?? messages
|
||||
timelineEntries = ChatTimelineEntry.make(from: source)
|
||||
updateEntranceModes(for: source)
|
||||
@@ -1568,8 +1566,7 @@ struct ChatView: View {
|
||||
}
|
||||
}
|
||||
|
||||
private func sendRecordedVideoNote(_ recording: VideoNoteRecorder.Recording)
|
||||
{
|
||||
private func sendRecordedVideoNote(_ recording: VideoNoteRecorder.Recording) {
|
||||
videoNoteIsSending = true
|
||||
Task { @MainActor in
|
||||
defer {
|
||||
|
||||
@@ -1,160 +0,0 @@
|
||||
|
||||
[34mSources/Shared/UI/ChatView.swift[0m
|
||||
[34m────────────────────────────────────────────────────────────────────────────────────────────[0m
|
||||
|
||||
[34m────────────────────────────[0m[34m┐[0m
|
||||
[34m75[0m:[38;2;248;248;242m [38;2;102;217;239mstruct[38;2;248;248;242m ChatView: View { [0m[34m│[0m
|
||||
[34m────────────────────────────[0m[34m┘[0m
|
||||
[38;2;248;248;242m [38;2;249;38;114m@State[38;2;248;248;242m [38;2;249;38;114mprivate[38;2;248;248;242m [38;2;102;217;239mvar[38;2;248;248;242m captureSuspendsArchiveSync [38;2;249;38;114m=[38;2;248;248;242m [38;2;249;38;114mfalse[0m
|
||||
[38;2;248;248;242m [38;2;249;38;114m@State[38;2;248;248;242m [38;2;249;38;114mprivate[38;2;248;248;242m [38;2;102;217;239mvar[38;2;248;248;242m pickerResetToken [38;2;249;38;114m=[38;2;248;248;242m UUID()[0m
|
||||
[38;2;248;248;242m [38;2;249;38;114m@State[38;2;248;248;242m [38;2;249;38;114mprivate[38;2;248;248;242m [38;2;102;217;239mvar[38;2;248;248;242m timelineEntries: [ChatTimelineEntry] [38;2;249;38;114m=[38;2;248;248;242m [][0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;117;113;94m/// Messages-style entrance state: which rows currently animate, which IDs[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;117;113;94m/// the timeline already showed, and whether the opening cascade of this[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;117;113;94m/// conversation has played.[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114m@State[38;2;248;248;242m [38;2;249;38;114mprivate[38;2;248;248;242m [38;2;102;217;239mvar[38;2;248;248;242m entranceModes: [[38;2;166;226;46mString[38;2;248;248;242m: MessageBubbleEntrance[38;2;249;38;114m.[38;2;248;248;242mMode] [38;2;249;38;114m=[38;2;248;248;242m [[38;2;249;38;114m:[38;2;248;248;242m][0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114m@State[38;2;248;248;242m [38;2;249;38;114mprivate[38;2;248;248;242m [38;2;102;217;239mvar[38;2;248;248;242m knownEntranceIDs: Set[38;2;249;38;114m<[38;2;166;226;46mString[38;2;249;38;114m>[38;2;248;248;242m [38;2;249;38;114m=[38;2;248;248;242m [][0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114m@State[38;2;248;248;242m [38;2;249;38;114mprivate[38;2;248;248;242m [38;2;102;217;239mvar[38;2;248;248;242m hasPlayedOpeningEntrance [38;2;249;38;114m=[38;2;248;248;242m [38;2;249;38;114mfalse[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114m@State[38;2;248;248;242m [38;2;249;38;114mprivate[38;2;248;248;242m [38;2;102;217;239mvar[38;2;248;248;242m entranceReleaseToken [38;2;249;38;114m=[38;2;248;248;242m UUID()[0m[48;2;0;40;0m[0K[0m
|
||||
|
||||
[38;2;248;248;242m [38;2;117;113;94m/// Messages of this conversation straight from the SwiftData store,[0m
|
||||
[38;2;248;248;242m [38;2;117;113;94m/// ordered like `AppModel.selectedMessages`: timestamp, then clientID.[0m
|
||||
|
||||
[34m─────────────────────────────[0m[34m┐[0m
|
||||
[34m150[0m:[38;2;248;248;242m [38;2;102;217;239mstruct[38;2;248;248;242m ChatView: View { [0m[34m│[0m
|
||||
[34m─────────────────────────────[0m[34m┘[0m
|
||||
[38;2;248;248;242m _captureSuspendsArchiveSync [38;2;249;38;114m=[38;2;248;248;242m State(initialValue: [38;2;249;38;114mfalse[38;2;248;248;242m)[0m
|
||||
[38;2;248;248;242m _pickerResetToken [38;2;249;38;114m=[38;2;248;248;242m State(initialValue: UUID())[0m
|
||||
[38;2;248;248;242m _timelineEntries [38;2;249;38;114m=[38;2;248;248;242m State[38;2;249;38;114m<[38;2;248;248;242m[ChatTimelineEntry][38;2;249;38;114m>[38;2;248;248;242m(initialValue: [])[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m _entranceModes [38;2;249;38;114m=[38;2;248;248;242m State[38;2;249;38;114m<[38;2;248;248;242m[[38;2;166;226;46mString[38;2;248;248;242m: MessageBubbleEntrance[38;2;249;38;114m.[38;2;248;248;242mMode][38;2;249;38;114m>[38;2;248;248;242m([0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m initialValue: [[38;2;249;38;114m:[38;2;248;248;242m][0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m )[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m _knownEntranceIDs [38;2;249;38;114m=[38;2;248;248;242m State[38;2;249;38;114m<[38;2;248;248;242mSet[38;2;249;38;114m<[38;2;166;226;46mString[38;2;249;38;114m>>[38;2;248;248;242m(initialValue: [])[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m _hasPlayedOpeningEntrance [38;2;249;38;114m=[38;2;248;248;242m State(initialValue: [38;2;249;38;114mfalse[38;2;248;248;242m)[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m _entranceConversationID [38;2;249;38;114m=[38;2;248;248;242m State[38;2;249;38;114m<[38;2;166;226;46mString[38;2;248;248;242m?[38;2;249;38;114m>[38;2;248;248;242m(initialValue: nil)[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m _entranceReleaseToken [38;2;249;38;114m=[38;2;248;248;242m State(initialValue: UUID())[0m[48;2;0;40;0m[0K[0m
|
||||
[38;2;248;248;242m }[0m
|
||||
|
||||
[38;2;248;248;242m [38;2;102;217;239mvar[38;2;248;248;242m body: some View {[0m
|
||||
|
||||
[34m─────────────────────────────[0m[34m┐[0m
|
||||
[34m390[0m:[38;2;248;248;242m [38;2;102;217;239mstruct[38;2;248;248;242m ChatView: View { [0m[34m│[0m
|
||||
[34m─────────────────────────────[0m[34m┘[0m
|
||||
[38;2;248;248;242m historyTopTriggerVisible [38;2;249;38;114m=[38;2;248;248;242m [38;2;249;38;114mfalse[0m
|
||||
[38;2;248;248;242m historyAutoContinueCount [38;2;249;38;114m=[38;2;248;248;242m [38;2;190;132;255m0[0m
|
||||
[38;2;248;248;242m emptyHistoryRetryCount [38;2;249;38;114m=[38;2;248;248;242m [38;2;190;132;255m0[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m entranceModes [38;2;249;38;114m=[38;2;248;248;242m [[38;2;249;38;114m:[38;2;248;248;242m][0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m knownEntranceIDs [38;2;249;38;114m=[38;2;248;248;242m [][0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m hasPlayedOpeningEntrance [38;2;249;38;114m=[38;2;248;248;242m [38;2;249;38;114mfalse[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m entranceReleaseToken [38;2;249;38;114m=[38;2;248;248;242m UUID()[0m[48;2;0;40;0m[0K[0m
|
||||
[38;2;248;248;242m }[0m
|
||||
[38;2;248;248;242m [38;2;249;38;114m.[38;2;248;248;242monDisappear {[0m
|
||||
[38;2;248;248;242m model[38;2;249;38;114m.[38;2;248;248;242mendConversationViewing(jid: conversation[38;2;249;38;114m.[38;2;248;248;242mjid)[0m
|
||||
|
||||
[34m─────────────────────────────[0m[34m┐[0m
|
||||
[34m496[0m:[38;2;248;248;242m [38;2;102;217;239mstruct[38;2;248;248;242m ChatView: View { [0m[34m│[0m
|
||||
[34m─────────────────────────────[0m[34m┘[0m
|
||||
|
||||
[38;2;248;248;242m [38;2;249;38;114mprivate[38;2;248;248;242m [38;2;102;217;239mfunc[38;2;248;248;242m [38;2;166;226;46mrebuildTimelineEntries[38;2;248;248;242m(from newMessages: [ChatMessage]? [38;2;249;38;114m=[38;2;248;248;242m nil)[0m
|
||||
[38;2;248;248;242m {[0m
|
||||
[48;2;63;0;1m [48;2;144;16;17mtimelineEntries[48;2;63;0;1m = [48;2;144;16;17mChatTimelineEntry.make(from: [48;2;63;0;1mnewMessages ?? messages[48;2;144;16;17m)[0m[48;2;63;0;1m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [48;2;0;96;0;38;2;102;217;239mlet[38;2;248;248;242m source[48;2;0;40;0m [38;2;249;38;114m=[38;2;248;248;242m newMessages ?? messages[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m timelineEntries [38;2;249;38;114m=[38;2;248;248;242m ChatTimelineEntry[38;2;249;38;114m.[38;2;248;248;242mmake(from: source)[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m updateEntranceModes([38;2;249;38;114mfor[38;2;248;248;242m: source)[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m }[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;117;113;94m/// Decides which rows play a Messages-style entrance after a rebuild.[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;117;113;94m/// The first page of an opened conversation cascades bottom-up; rows that[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;117;113;94m/// appear later (a send, an incoming message) launch from the composer's[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;117;113;94m/// edge. Modes are released once the animation window closes so a row[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;117;113;94m/// recycled by the lazy stack during scrolling reappears statically.[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114mprivate[38;2;248;248;242m [38;2;102;217;239mfunc[38;2;248;248;242m [38;2;166;226;46mupdateEntranceModes[38;2;248;248;242m([38;2;249;38;114mfor[38;2;248;248;242m newMessages: [ChatMessage]) {[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;102;217;239mlet[38;2;248;248;242m ids [38;2;249;38;114m=[38;2;248;248;242m newMessages[38;2;249;38;114m.[38;2;248;248;242mmap(\[38;2;249;38;114m.[38;2;248;248;242mclientID)[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;102;217;239mlet[38;2;248;248;242m known [38;2;249;38;114m=[38;2;248;248;242m knownEntranceIDs[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m knownEntranceIDs [38;2;249;38;114m=[38;2;248;248;242m Set(ids)[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114mguard[38;2;248;248;242m hasPlayedOpeningEntrance [38;2;249;38;114melse[38;2;248;248;242m {[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114mguard[38;2;248;248;242m [38;2;249;38;114m![38;2;248;248;242mids[38;2;249;38;114m.[38;2;248;248;242misEmpty [38;2;249;38;114melse[38;2;248;248;242m { [38;2;249;38;114mreturn[38;2;248;248;242m }[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m hasPlayedOpeningEntrance [38;2;249;38;114m=[38;2;248;248;242m [38;2;249;38;114mtrue[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;117;113;94m// The first message ever in an empty chat should launch out of[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;117;113;94m// the composer like any other send, not cascade in.[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114mif[38;2;248;248;242m ids[38;2;249;38;114m.[38;2;248;248;242mcount [38;2;249;38;114m==[38;2;248;248;242m [38;2;190;132;255m1[38;2;248;248;242m, known[38;2;249;38;114m.[38;2;248;248;242misEmpty,[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m newMessages[38;2;249;38;114m.[38;2;248;248;242mfirst?[38;2;249;38;114m.[38;2;248;248;242mdirection [38;2;249;38;114m==[38;2;248;248;242m [38;2;249;38;114m.[38;2;248;248;242moutgoing[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m {[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m applyLaunch([38;2;249;38;114mfor[38;2;248;248;242m: newMessages, ids: ids)[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114mreturn[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m }[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;102;217;239mlet[38;2;248;248;242m delays [38;2;249;38;114m=[38;2;248;248;242m ChatMessageEntrancePolicy[38;2;249;38;114m.[38;2;248;248;242mentranceDelays([0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m forIDs: ids[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m )[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114mfor[38;2;248;248;242m (id, delay) [38;2;249;38;114min[38;2;248;248;242m delays {[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m entranceModes[id] [38;2;249;38;114m=[38;2;248;248;242m [38;2;249;38;114m.[38;2;248;248;242mcascade(delay: delay)[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m }[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m scheduleEntranceRelease([0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m ids: Set(delays[38;2;249;38;114m.[38;2;248;248;242mkeys),[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m after: ChatMessageEntrancePolicy[38;2;249;38;114m.[38;2;248;248;242mentranceCascadeDuration[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m )[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114mreturn[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m }[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m applyLaunch([0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114mfor[38;2;248;248;242m: newMessages,[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m ids: ChatMessageEntrancePolicy[38;2;249;38;114m.[38;2;248;248;242mappendedLaunchIDs([0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114min[38;2;248;248;242m: ids,[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m after: known[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m )[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m )[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m }[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114mprivate[38;2;248;248;242m [38;2;102;217;239mfunc[38;2;248;248;242m [38;2;166;226;46mapplyLaunch[38;2;248;248;242m([38;2;249;38;114mfor[38;2;248;248;242m messages: [ChatMessage], ids: [[38;2;166;226;46mString[38;2;248;248;242m]) {[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114mguard[38;2;248;248;242m [38;2;249;38;114m![38;2;248;248;242mids[38;2;249;38;114m.[38;2;248;248;242misEmpty [38;2;249;38;114melse[38;2;248;248;242m { [38;2;249;38;114mreturn[38;2;248;248;242m }[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;102;217;239mlet[38;2;248;248;242m launched [38;2;249;38;114m=[38;2;248;248;242m Set(ids)[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;102;217;239mvar[38;2;248;248;242m applied: Set[38;2;249;38;114m<[38;2;166;226;46mString[38;2;249;38;114m>[38;2;248;248;242m [38;2;249;38;114m=[38;2;248;248;242m [][0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114mfor[38;2;248;248;242m message [38;2;249;38;114min[38;2;248;248;242m messages [38;2;249;38;114mwhere[38;2;248;248;242m launched[38;2;249;38;114m.[38;2;248;248;242mcontains(message[38;2;249;38;114m.[38;2;248;248;242mclientID) {[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m entranceModes[message[38;2;249;38;114m.[38;2;248;248;242mclientID] [38;2;249;38;114m=[38;2;248;248;242m [38;2;249;38;114m.[38;2;248;248;242mlaunch([0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m outgoing: message[38;2;249;38;114m.[38;2;248;248;242mdirection [38;2;249;38;114m==[38;2;248;248;242m [38;2;249;38;114m.[38;2;248;248;242moutgoing[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m )[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m applied[38;2;249;38;114m.[38;2;248;248;242minsert(message[38;2;249;38;114m.[38;2;248;248;242mclientID)[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m }[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m scheduleEntranceRelease([0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m ids: applied,[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m after: ChatMessageEntrancePolicy[38;2;249;38;114m.[38;2;248;248;242mentranceAnimationDuration[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m )[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m }[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114mprivate[38;2;248;248;242m [38;2;102;217;239mfunc[38;2;248;248;242m [38;2;166;226;46mscheduleEntranceRelease[38;2;248;248;242m([0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m ids: Set[38;2;249;38;114m<[38;2;166;226;46mString[38;2;249;38;114m>[38;2;248;248;242m,[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m after delay: TimeInterval[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m ) {[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114mguard[38;2;248;248;242m [38;2;249;38;114m![38;2;248;248;242mids[38;2;249;38;114m.[38;2;248;248;242misEmpty [38;2;249;38;114melse[38;2;248;248;242m { [38;2;249;38;114mreturn[38;2;248;248;242m }[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;102;217;239mlet[38;2;248;248;242m token [38;2;249;38;114m=[38;2;248;248;242m entranceReleaseToken[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m Task { [38;2;249;38;114m@MainActor[38;2;248;248;242m [38;2;249;38;114min[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114mtry[38;2;248;248;242m? await Task[38;2;249;38;114m.[38;2;248;248;242msleep([0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m nanoseconds: [38;2;166;226;46mUInt64[38;2;248;248;242m(delay [38;2;249;38;114m*[38;2;248;248;242m [38;2;190;132;255m1_000_000_000[38;2;248;248;242m)[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m )[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114mguard[38;2;248;248;242m [38;2;249;38;114m![38;2;248;248;242mTask[38;2;249;38;114m.[38;2;248;248;242misCancelled, token [38;2;249;38;114m==[38;2;248;248;242m entranceReleaseToken [38;2;249;38;114melse[38;2;248;248;242m {[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114mreturn[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m }[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114mfor[38;2;248;248;242m id [38;2;249;38;114min[38;2;248;248;242m ids {[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m entranceModes[id] [38;2;249;38;114m=[38;2;248;248;242m nil[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m }[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m }[0m[48;2;0;40;0m[0K[0m
|
||||
[38;2;248;248;242m }[0m
|
||||
|
||||
[38;2;248;248;242m [38;2;249;38;114mprivate[38;2;248;248;242m [38;2;102;217;239mvar[38;2;248;248;242m isSelectingMessages: [38;2;166;226;46mBool[38;2;248;248;242m {[0m
|
||||
|
||||
[34m─────────────────────────────[0m[34m┐[0m
|
||||
[34m704[0m:[38;2;248;248;242m [38;2;102;217;239mstruct[38;2;248;248;242m ChatView: View { [0m[34m│[0m
|
||||
[34m─────────────────────────────[0m[34m┘[0m
|
||||
[38;2;248;248;242m )[0m
|
||||
[38;2;248;248;242m }[0m
|
||||
[38;2;248;248;242m )[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m [38;2;249;38;114m.[38;2;248;248;242mmodifier([0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m MessageBubbleEntrance([0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m mode: entranceModes[[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m message[38;2;249;38;114m.[38;2;248;248;242mclientID[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m ] ?? [38;2;249;38;114m.[38;2;248;248;242msettled[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m )[0m[48;2;0;40;0m[0K[0m
|
||||
[48;2;0;40;0;38;2;248;248;242m )[0m[48;2;0;40;0m[0K[0m
|
||||
[38;2;248;248;242m [38;2;249;38;114m.[38;2;248;248;242mid(message[38;2;249;38;114m.[38;2;248;248;242mclientID)[0m
|
||||
[38;2;248;248;242m }[0m
|
||||
[38;2;248;248;242m }[0m
|
||||
Reference in new issue
Block a user