on master help sign in
Simplify client: eliminate page-setter Msg variants, use SetPage directly

Remove redundant SetCompose, SetContactPubkey, SetContactNickname, SetProfileDisplayName, and SetProfileBio message types. These were boilerplate that matched on the current page, updated one field, and returned the new page. Since view functions already have all page fields in scope, they can construct the full SetPage value directly via closure. Also use Result.toOption for cleaner poll result processing.

commit6364cb2c75ce507ec1d7803552cc9548fe41c899 authoriko <mail@iko.soy> dateSat 11 Apr 2026, 15:11 (6 months ago) parentf4d37c2
27 files changed+42−47
client/App.fs+6−34 client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/Skrepka.dll client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/Skrepka.pdb client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/_CodeSignature/CodeResources+4−4 client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.dll client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.pdb client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/MonoBundle/Skrepka.dll client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/MonoBundle/Skrepka.pdb client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/_CodeSignature/CodeResources+2−2 client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.dll client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.pdb client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.AssemblyInfo.fs+1−1 client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.AssemblyInfoInputs.cache+1−1 client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.dll client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.fsproj.FileListAbsolute.txt+23 client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.pdb client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.sourcelink.json+1−1 client/obj/Debug/net10.0-ios/iossimulator-arm64/ref/Skrepka.dll client/obj/Debug/net10.0-ios/iossimulator-arm64/refint/Skrepka.dll client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.AssemblyInfo.fs+1−1 client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.AssemblyInfoInputs.cache+1−1 client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.dll client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.pdb client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.sourcelink.json+1−1 client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/ref/Skrepka.dll client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/refint/Skrepka.dll server.knot+1−1
client/App.fs+6−34
@@ -72,9 +72,6 @@ module App =
7272
7373 type Msg =
7474 | SetPage of Page
75− | SetCompose of string
76− | SetContactPubkey of string
77− | SetContactNickname of string
7875 | GenIdentity
7976 | SetServerUrl of string
8077 | DoConnect
@@ -89,8 +86,6 @@ module App =
8986 | CopyPubKey
9087 | DismissError
9188 | StateLoaded of StateLoadResult
92− | SetProfileDisplayName of string
93− | SetProfileBio of string
9489 | DoPickPhoto
9590 | PhotoPicked of string
9691 | DoSaveProfile
@@ -207,19 +202,6 @@ module App =
207202 match msg with
208203 | SetPage page -> { model with Page = page }, []
209204
210− | SetCompose text ->
211− match model.Page with
212− | Chat(pk, _) -> { model with Page = Chat(pk, text) }, []
213− | _ -> model, []
214− | SetContactPubkey pk ->
215− match model.Page with
216− | AddContact(_, nn) -> { model with Page = AddContact(pk, nn) }, []
217− | _ -> model, []
218− | SetContactNickname nn ->
219− match model.Page with
220− | AddContact(pk, _) -> { model with Page = AddContact(pk, nn) }, []
221− | _ -> model, []
222−
223205 | GenIdentity ->
224206 let identity = Crypto.generateIdentity ()
225207 { model with Auth = Identified(identity, Offline); Page = Settings },
@@ -310,16 +292,6 @@ module App =
310292
311293 | DismissError -> { model with Error = None }, []
312294
313− | SetProfileDisplayName name ->
314− match model.Page with
315− | EditProfile(_, bio, photo) -> { model with Page = EditProfile(name, bio, photo) }, []
316− | _ -> model, []
317−
318− | SetProfileBio bio ->
319− match model.Page with
320− | EditProfile(name, _, photo) -> { model with Page = EditProfile(name, bio, photo) }, []
321− | _ -> model, []
322−
323295 | DoPickPhoto -> model, [ CmdPickPhoto ]
324296
325297 | PhotoPicked photo ->
@@ -476,7 +448,7 @@ module App =
476448 | Message -> Some(decryptEvent session.Identity.PrivKey evt.Payload)
477449 | UnknownEvent _ -> None)
478450
479− let events = results |> Array.choose (function Ok e -> Some e | _ -> None) |> Array.toList
451+ let events = results |> Array.choose Result.toOption |> Array.toList
480452 let errors = results |> Array.choose (function Error e -> Some e | _ -> None) |> Array.toList
481453
482454 if not ackIds.IsEmpty then
@@ -690,7 +662,7 @@ module App =
690662 .font(size = 14.)
691663
692664 HStack(spacing = 8.) {
693− Entry(compose, SetCompose)
665+ Entry(compose, fun text -> SetPage(Chat(pk, text)))
694666 .placeholder("Message...")
695667
696668 Button("Send", DoSend)
@@ -712,11 +684,11 @@ module App =
712684 viewErrorBanner model.Error
713685
714686 Label("Public Key:")
715− Entry(cpk, SetContactPubkey)
687+ Entry(cpk, fun text -> SetPage(AddContact(text, cnn)))
716688 .placeholder("sampel-palnet-...")
717689
718690 Label("Nickname:")
719− Entry(cnn, SetContactNickname)
691+ Entry(cnn, fun text -> SetPage(AddContact(cpk, text)))
720692
721693 Button("Save Contact", DoSaveContact)
722694 .centerHorizontal()
@@ -749,11 +721,11 @@ module App =
749721 Button("Change Photo", DoPickPhoto).centerHorizontal()
750722
751723 Label("Display Name:")
752− Entry(displayName, SetProfileDisplayName)
724+ Entry(displayName, fun text -> SetPage(EditProfile(text, bio, photo)))
753725 .placeholder("Your name")
754726
755727 Label("Bio:")
756− Entry(bio, SetProfileBio)
728+ Entry(bio, fun text -> SetPage(EditProfile(displayName, text, photo)))
757729 .placeholder("Tell something about yourself")
758730
759731 Button("Save Profile", DoSaveProfile).centerHorizontal()
client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/Skrepka.dll

Binary file not shown.

client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/Skrepka.pdb

Binary file not shown.

client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.app/_CodeSignature/CodeResources+4−4
@@ -166,11 +166,11 @@
166166 </data>
167167 <key>Skrepka.dll</key>
168168 <data>
169− q+RBTy5zY6JI9PxhrcWbfRvoL18=
169+ c9k898gnYMQdWHhdAHoE6Fz59nI=
170170 </data>
171171 <key>Skrepka.pdb</key>
172172 <data>
173− NYWrt6DxlK+IUv/o6TjGg/EXk0I=
173+ LhHFBGciNjCwn3byqpt0UM3stjc=
174174 </data>
175175 <key>Sodium.Core.dll</key>
176176 <data>
@@ -1393,14 +1393,14 @@
13931393 <dict>
13941394 <key>hash2</key>
13951395 <data>
1396− zGao9cc9uvzxMlIB65ZxAxYwkb+5koDw9sBTW54bflw=
1396+ bWxl+IGnsw/NXLyjxBqYhs+LU+FYTOCHPAoXsPEfR6w=
13971397 </data>
13981398 </dict>
13991399 <key>Skrepka.pdb</key>
14001400 <dict>
14011401 <key>hash2</key>
14021402 <data>
1403− iNV/dAt3PmF/Vbjcomf5Qozaj2oQDkDdwcsenxrta+M=
1403+ TsmGxaRiClJJVFjrmZPl9EK0DTxasYWDClFY+GEdgCw=
14041404 </data>
14051405 </dict>
14061406 <key>Sodium.Core.dll</key>
client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.dll

Binary file not shown.

client/bin/Debug/net10.0-ios/iossimulator-arm64/Skrepka.pdb

Binary file not shown.

client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/MonoBundle/Skrepka.dll

Binary file not shown.

client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/MonoBundle/Skrepka.pdb

Binary file not shown.

client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.app/Contents/_CodeSignature/CodeResources+2−2
@@ -251,14 +251,14 @@
251251 <dict>
252252 <key>hash2</key>
253253 <data>
254− siIFHcakElVsJvGoDeaziJTyMHVboq2iWuRQU4ojFSs=
254+ 65gZOa6bguKqFrbqG66bXLi5mKgH6P58g1W2RBihBN8=
255255 </data>
256256 </dict>
257257 <key>MonoBundle/Skrepka.pdb</key>
258258 <dict>
259259 <key>hash2</key>
260260 <data>
261− oQAGpHBMs/0ySIEif7Oklne5RyNCSo42UIKWMeP3w5I=
261+ Zqn8PM92ySvTibkdxVFqryCishi0DoTg0qz8e/xc+AY=
262262 </data>
263263 </dict>
264264 <key>MonoBundle/Sodium.Core.dll</key>
client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.dll

Binary file not shown.

client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.pdb

Binary file not shown.

client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.AssemblyInfo.fs+1−1
@@ -10,7 +10,7 @@ open System.Reflection
1010[<assembly: System.Reflection.AssemblyCompanyAttribute("Skrepka")>]
1111[<assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")>]
1212[<assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")>]
13−[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0+dddd66f0bf97c47fa53d616a7c0df16842361244")>]
13+[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0+f4d37c22efe1c611f1e26330703855536736e15a")>]
1414[<assembly: System.Reflection.AssemblyProductAttribute("Skrepka")>]
1515[<assembly: System.Reflection.AssemblyTitleAttribute("Skrepka")>]
1616[<assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")>]
client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.AssemblyInfoInputs.cache+1−1
@@ -1 +1 @@
1−76de582629b12d03b2d9bbd1d57cf53dfb188fbf4e6496f51ba6519a0f83d3b2
1+5c7a8aee9ac955a94dfa896b7bc128b149d464c9238bf5df93509d4192198883
client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.dll

Binary file not shown.

client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.fsproj.FileListAbsolute.txt+23
@@ -334,3 +334,26 @@
334334/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.genruntimeconfig.cache
335335/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/ref/Skrepka.dll
336336/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-ios/iossimulator-arm64/LiteDB.dll
337+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Fabulous.stamp
338+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Fabulous.MauiControls.stamp
339+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/FSharp.Core.stamp
340+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/LiteDB.stamp
341+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Configuration.Abstractions.stamp
342+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Configuration.stamp
343+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.DependencyInjection.Abstractions.stamp
344+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.DependencyInjection.stamp
345+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Diagnostics.Abstractions.stamp
346+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.FileProviders.Abstractions.stamp
347+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Hosting.Abstractions.stamp
348+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Logging.Abstractions.stamp
349+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Logging.stamp
350+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Options.stamp
351+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Extensions.Primitives.stamp
352+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.Controls.Compatibility.stamp
353+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.Controls.stamp
354+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.Controls.Xaml.stamp
355+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.stamp
356+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.Essentials.stamp
357+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.Graphics.stamp
358+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Sodium.Core.stamp
359+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/unpack/Microsoft.Maui.Essentials/BundleResource/xml/microsoft_maui_essentials_fileprovider_file_paths.xml
client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.pdb

Binary file not shown.

client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.sourcelink.json+1−1
@@ -1 +1 @@
1−{"documents":{"/Users/iko/Developer/skrepka/*":"https://raw.githubusercontent.com/ilyakooo0/skrepka/dddd66f0bf97c47fa53d616a7c0df16842361244/*"}}
1+{"documents":{"/Users/iko/Developer/skrepka/*":"https://raw.githubusercontent.com/ilyakooo0/skrepka/f4d37c22efe1c611f1e26330703855536736e15a/*"}}
client/obj/Debug/net10.0-ios/iossimulator-arm64/ref/Skrepka.dll

Binary file not shown.

client/obj/Debug/net10.0-ios/iossimulator-arm64/refint/Skrepka.dll

Binary file not shown.

client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.AssemblyInfo.fs+1−1
@@ -10,7 +10,7 @@ open System.Reflection
1010[<assembly: System.Reflection.AssemblyCompanyAttribute("Skrepka")>]
1111[<assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")>]
1212[<assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")>]
13−[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0+dddd66f0bf97c47fa53d616a7c0df16842361244")>]
13+[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0+f4d37c22efe1c611f1e26330703855536736e15a")>]
1414[<assembly: System.Reflection.AssemblyProductAttribute("Skrepka")>]
1515[<assembly: System.Reflection.AssemblyTitleAttribute("Skrepka")>]
1616[<assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")>]
client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.AssemblyInfoInputs.cache+1−1
@@ -1 +1 @@
1−0ee050de77dfa27f84bf6e8bcff1935f31e0cbcc80fd35a7cd647eb5ffb919b9
1+12a7098dd6f75a7def1e52aafae4a8374e44122db6ad234a65ee12077bf114e2
client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.dll

Binary file not shown.

client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.pdb

Binary file not shown.

client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.sourcelink.json+1−1
@@ -1 +1 @@
1−{"documents":{"/Users/iko/Developer/skrepka/*":"https://raw.githubusercontent.com/ilyakooo0/skrepka/dddd66f0bf97c47fa53d616a7c0df16842361244/*"}}
1+{"documents":{"/Users/iko/Developer/skrepka/*":"https://raw.githubusercontent.com/ilyakooo0/skrepka/f4d37c22efe1c611f1e26330703855536736e15a/*"}}
client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/ref/Skrepka.dll

Binary file not shown.

client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/refint/Skrepka.dll

Binary file not shown.

server.knot+1−1
@@ -956,7 +956,7 @@ serve = \req -> case req of
956956 let trustedDeduped = do
957957 e <- deduped
958958 where e.server == fromServer || any presence (\p -> p.server == e.server && p.expiresAt > t)
959− yield e
959+ yield {expiresAt: e.expiresAt, pubkey: e.pubkey, server: e.server, timestamp: e.timestamp}
960960 let appliedOnline = do
961961 e <- trustedDeduped
962962 where none presence (\p -> samePubkeyServer p e && p.expiresAt >= e.expiresAt)