on master help sign in
Fix ackedIds eviction and domain validation bugs; refactor delivery animation
0d03f1biko
client/ViewChat.fs+6−9
@@ -55,8 +55,8 @@ module ViewChat =
55 | None -> ()
55 | None -> ()
56 , Avalonia.Threading.DispatcherPriority.Background) |> ignore
56 , Avalonia.Threading.DispatcherPriority.Background) |> ignore
57
57
58− let private opacityTransition =
58+ let private strokeTransition =
59− DoubleTransition(Avalonia.Visual.OpacityProperty, System.TimeSpan.FromMilliseconds 500.)
59+ DoubleTransition(Avalonia.Controls.Shapes.Shape.StrokeThicknessProperty, System.TimeSpan.FromMilliseconds 800.)
60
60
61 let private messageItem m =
61 let private messageItem m =
62 let align, cols, col =
62 let align, cols, col =
@@ -82,18 +82,15 @@ module ViewChat =
82 Rectangle()
82 Rectangle()
83 .stroke(Avalonia.Media.Colors.Black)
83 .stroke(Avalonia.Media.Colors.Black)
84 .strokeThickness(4.)
84 .strokeThickness(4.)
85+ .strokeDashArray([ 4.; 2. ])
85 .isHitTestVisible(false)
86 .isHitTestVisible(false)
86− .opacity(if isSent then 0. else 1.)
87+ .classes("marching")
87− .transition (opacityTransition)
88
88
89 Rectangle()
89 Rectangle()
90 .stroke(Avalonia.Media.Colors.Black)
90 .stroke(Avalonia.Media.Colors.Black)
91− .strokeThickness(4.)
91+ .strokeThickness(if isSent then 0. else 4.)
92− .strokeDashArray([ 4.; 2. ])
93 .isHitTestVisible(false)
92 .isHitTestVisible(false)
94− .opacity(if isSent then 1. else 0.)
93+ .transition (strokeTransition)
95− .classes("marching")
96− .transition (opacityTransition)
97 | Incoming ->
94 | Incoming ->
98 Rectangle()
95 Rectangle()
99 .stroke(Avalonia.Media.Colors.Black)
96 .stroke(Avalonia.Media.Colors.Black)
server.knot+2−3
@@ -350,6 +350,7 @@ isHighOctetPrefix = \sn ->
350 && let d2 = take 1 (drop 1 sn) in
350 && let d2 = take 1 (drop 1 sn) in
351 let d3 = take 1 (drop 2 sn) in
351 let d3 = take 1 (drop 2 sn) in
352 take 1 (drop 3 sn) == "."
352 take 1 (drop 3 sn) == "."
353+ && isDigitChar (take 1 (drop 4 sn))
353 && ((d2 == "2" && contains d3 "456789")
354 && ((d2 == "2" && contains d3 "456789")
354 || (contains d2 "34" && isDigitChar d3)
355 || (contains d2 "34" && isDigitChar d3)
355 || (d2 == "5" && contains d3 "012345"))
356 || (d2 == "5" && contains d3 "012345"))
@@ -447,9 +448,7 @@ dedupMessageIds = \messageIds ->
447
448
448evictOldestAckedIds = \items n ->
449evictOldestAckedIds = \items n ->
449 if n <= 0 then items
450 if n <= 0 then items
450− else do
451− ii <- items
452− diff items (takeRelation n ( sortBy (\a -> a.ackedAt) items))
451+ else diff items (takeRelation n (sortBy (\a -> a.ackedAt) items))
453
452
454safeCompareLoop : Text -> Text -> Int -> Int -> Int
453safeCompareLoop : Text -> Text -> Int -> Int -> Int
455safeCompareLoop = \s1 s2 n result ->
454safeCompareLoop = \s1 s2 n result ->