161 lines
21 KiB
Plaintext
161 lines
21 KiB
Plaintext
|
|
[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
|