on master help sign in
Replace JSON file persistence with LiteDB: use embedded database for contacts, messages, and settings
2f625d9iko
client/Skrepka.fsproj+1
@@ -58,6 +58,7 @@
58 <ItemGroup>
58 <ItemGroup>
59 <PackageReference Include="Fabulous.MauiControls" Version="9.0.0-pre9" />
59 <PackageReference Include="Fabulous.MauiControls" Version="9.0.0-pre9" />
60 <PackageReference Include="Microsoft.Maui.Controls" Version="10.0.0" />
60 <PackageReference Include="Microsoft.Maui.Controls" Version="10.0.0" />
61+ <PackageReference Include="LiteDB" Version="5.0.21" />
61 <PackageReference Include="Sodium.Core" Version="1.4.0" />
62 <PackageReference Include="Sodium.Core" Version="1.4.0" />
62 <PackageReference Include="FSharp.Core" Version="9.0.100" />
63 <PackageReference Include="FSharp.Core" Version="9.0.100" />
63 </ItemGroup>
64 </ItemGroup>
client/Store.fs+66−53
@@ -1,31 +1,21 @@
1namespace Skrepka
1namespace Skrepka
2
2
3open System
3open System
4−open System.Collections.Generic
5open System.IO
4open System.IO
6−open System.Text.Json
5+open LiteDB
7−open System.Text.Json.Serialization
8open Microsoft.Maui.Storage
6open Microsoft.Maui.Storage
9
7
10module Store =
8module Store =
11
9
12 [<CLIMutable>]
10 [<CLIMutable>]
13 type Contact =
11 type Contact =
14− { Pubkey: string
12+ { [<BsonId>] Pubkey: string
15 Nickname: string }
13 Nickname: string }
16
14
17− type private UnixDateTimeOffsetConverter() =
18− inherit JsonConverter<DateTimeOffset>()
19− override _.Read(reader, _, _) =
20− DateTimeOffset.FromUnixTimeSeconds(reader.GetInt64())
21− override _.Write(writer, value, _) =
22− writer.WriteNumberValue(value.ToUnixTimeSeconds())
23−
24− [<CLIMutable>]
25 type ChatMessage =
15 type ChatMessage =
26 { Id: string
16 { Id: string
27 Body: string
17 Body: string
28− [<JsonPropertyName("TimestampUnix")>] Timestamp: DateTimeOffset
18+ Timestamp: DateTimeOffset
29 IsOutgoing: bool }
19 IsOutgoing: bool }
30
20
31 type Data =
21 type Data =
@@ -35,19 +25,21 @@ module Store =
35 PollCursor: uint64 }
25 PollCursor: uint64 }
36
26
37 [<CLIMutable>]
27 [<CLIMutable>]
38− type private DataDto =
28+ type private MessageDoc =
39− { Contacts: Contact array
29+ { [<BsonId>] Id: string
40− Messages: Dictionary<string, ChatMessage array>
30+ ConversationId: string
41− ServerUrl: string
31+ Body: string
42− PollCursor: uint64 }
32+ TimestampUnix: int64
33+ IsOutgoing: bool }
43
34
44− let private jsonOpts =
35+ [<CLIMutable>]
45− let opts = JsonSerializerOptions(WriteIndented = true, PropertyNameCaseInsensitive = true)
36+ type private SettingsDoc =
46− opts.Converters.Add(UnixDateTimeOffsetConverter())
37+ { [<BsonId>] Id: string
47− opts
38+ ServerUrl: string
39+ PollCursor: int64 }
48
40
49− let private dataPath () =
41+ let private openDb () =
50− Path.Combine(FileSystem.AppDataDirectory, "data.json")
42+ new LiteDatabase(Path.Combine(FileSystem.AppDataDirectory, "skrepka.db"))
51
43
52 let loadIdentity () =
44 let loadIdentity () =
53 async {
45 async {
@@ -75,42 +67,63 @@ module Store =
75 }
67 }
76
68
77 let loadData () : Data option =
69 let loadData () : Data option =
78− let path = dataPath ()
70+ try
71+ use db = openDb ()
72+ let settings = db.GetCollection<SettingsDoc>("settings").FindById(BsonValue "settings")
79
73
80− if File.Exists path then
74+ if box settings |> isNull then
81− try
75+ None
82− let json = File.ReadAllText path
76+ else
83− let dto = JsonSerializer.Deserialize<DataDto>(json, jsonOpts)
77+ let contacts = db.GetCollection<Contact>("contacts").FindAll() |> Seq.toList
78+
79+ let messages =
80+ db.GetCollection<MessageDoc>("messages").FindAll()
81+ |> Seq.groupBy _.ConversationId
82+ |> Seq.map (fun (convId, docs) ->
83+ convId,
84+ docs
85+ |> Seq.map (fun d ->
86+ { ChatMessage.Id = d.Id
87+ Body = d.Body
88+ Timestamp = DateTimeOffset.FromUnixTimeSeconds d.TimestampUnix
89+ IsOutgoing = d.IsOutgoing })
90+ |> Seq.sortBy _.Timestamp
91+ |> Seq.toList)
92+ |> Map.ofSeq
84
93
85 Some
94 Some
86− { Contacts =
95+ { Contacts = contacts
87− if isNull dto.Contacts then [] else dto.Contacts |> Array.toList
88− Messages =
96+ Messages = messages
89− if isNull dto.Messages then
90− Map.empty
91− else
92− dto.Messages
93− |> Seq.map (fun (KeyValue(pk, msgs)) -> pk, msgs |> Array.toList)
94− |> Map.ofSeq
95− ServerUrl = if isNull dto.ServerUrl then "" else dto.ServerUrl
97+ ServerUrl = settings.ServerUrl
96− PollCursor = dto.PollCursor }
98+ PollCursor = uint64 settings.PollCursor }
97− with _ ->
99+ with _ ->
98− None
99− else
100 None
100 None
101
101
102 let saveData (data: Data) =
102 let saveData (data: Data) =
103 try
103 try
104− let messageDtos = Dictionary<string, ChatMessage array>()
104+ use db = openDb ()
105− data.Messages |> Map.iter (fun pk msgs -> messageDtos[pk] <- msgs |> Array.ofList)
105+ let contacts = db.GetCollection<Contact>("contacts")
106−
106+ let messages = db.GetCollection<MessageDoc>("messages")
107− let dto: DataDto =
107+ let settings = db.GetCollection<SettingsDoc>("settings")
108− { Contacts = data.Contacts |> Array.ofList
108+
109− Messages = messageDtos
109+ for c in data.Contacts do
110+ contacts.Upsert c |> ignore
111+
112+ data.Messages
113+ |> Map.iter (fun convId msgs ->
114+ for m in msgs do
115+ messages.Upsert
116+ { Id = m.Id
117+ ConversationId = convId
118+ Body = m.Body
119+ TimestampUnix = m.Timestamp.ToUnixTimeSeconds()
120+ IsOutgoing = m.IsOutgoing }
121+ |> ignore)
122+
123+ settings.Upsert
124+ { Id = "settings"
110 ServerUrl = data.ServerUrl
125 ServerUrl = data.ServerUrl
111− PollCursor = data.PollCursor }
126+ PollCursor = int64 data.PollCursor }
112−
127+ |> ignore
113− let json = JsonSerializer.Serialize(dto, jsonOpts)
114− File.WriteAllText(dataPath (), json)
115 with _ ->
128 with _ ->
116 ()
129 ()
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+15−4
@@ -28,6 +28,10 @@
28 <data>
28 <data>
29 m96ofwll7AgsnmJ6k8Mhg6rEh+k=
29 m96ofwll7AgsnmJ6k8Mhg6rEh+k=
30 </data>
30 </data>
31+ <key>LiteDB.dll</key>
32+ <data>
33+ vxA0uDp+BuUEE5Xf1wcoVCW/EYs=
34+ </data>
31 <key>MauiSplash.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib</key>
35 <key>MauiSplash.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib</key>
32 <data>
36 <data>
33 Y78DTyz7+rkuDbhphGJe+YK2rLQ=
37 Y78DTyz7+rkuDbhphGJe+YK2rLQ=
@@ -158,11 +162,11 @@
158 </data>
162 </data>
159 <key>Skrepka.dll</key>
163 <key>Skrepka.dll</key>
160 <data>
164 <data>
161− m/JtNDTwXk9X/g1/AaE5Vwl4W2M=
165+ fWgnzhQubQm/pXCMxdaeASe90IU=
162 </data>
166 </data>
163 <key>Skrepka.pdb</key>
167 <key>Skrepka.pdb</key>
164 <data>
168 <data>
165− 73CrYxr59vU0P2RRGGZKrbhrupU=
169+ EreX5kfzNb2S+VnlrBsyMswiGnM=
166 </data>
170 </data>
167 <key>Sodium.Core.dll</key>
171 <key>Sodium.Core.dll</key>
168 <data>
172 <data>
@@ -1150,6 +1154,13 @@
1150 qpZJG5sHLu7WLZdd3Hp9GLV8v5gqy7cr5m0iSkYjBXc=
1154 qpZJG5sHLu7WLZdd3Hp9GLV8v5gqy7cr5m0iSkYjBXc=
1151 </data>
1155 </data>
1152 </dict>
1156 </dict>
1157+ <key>LiteDB.dll</key>
1158+ <dict>
1159+ <key>hash2</key>
1160+ <data>
1161+ rjGsapNUkhe56LgUl9HugxZYrebfnh7iDyg48i3l4hg=
1162+ </data>
1163+ </dict>
1153 <key>MauiSplash.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib</key>
1164 <key>MauiSplash.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib</key>
1154 <dict>
1165 <dict>
1155 <key>hash2</key>
1166 <key>hash2</key>
@@ -1371,14 +1382,14 @@
1371 <dict>
1382 <dict>
1372 <key>hash2</key>
1383 <key>hash2</key>
1373 <data>
1384 <data>
1374− ZF4F2VwuJgNcoxdnMOVcFjYX5wbJbSBws4JgwK9hrXc=
1385+ kLMnGG+nlD35s66fyt9JcYg7ILRHQOazpZrn0F9ecAs=
1375 </data>
1386 </data>
1376 </dict>
1387 </dict>
1377 <key>Skrepka.pdb</key>
1388 <key>Skrepka.pdb</key>
1378 <dict>
1389 <dict>
1379 <key>hash2</key>
1390 <key>hash2</key>
1380 <data>
1391 <data>
1381− V7wCsBDqyaA4e02MG2zYiouDtDEgDU3uuJzwQbBfAgY=
1392+ SO6AxLeTTGVHAEWR0d25BmHOxy5yz4NIYe7juescHjM=
1382 </data>
1393 </data>
1383 </dict>
1394 </dict>
1384 <key>Sodium.Core.dll</key>
1395 <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+9−2
@@ -68,6 +68,13 @@
68 qpZJG5sHLu7WLZdd3Hp9GLV8v5gqy7cr5m0iSkYjBXc=
68 qpZJG5sHLu7WLZdd3Hp9GLV8v5gqy7cr5m0iSkYjBXc=
69 </data>
69 </data>
70 </dict>
70 </dict>
71+ <key>MonoBundle/LiteDB.dll</key>
72+ <dict>
73+ <key>hash2</key>
74+ <data>
75+ rjGsapNUkhe56LgUl9HugxZYrebfnh7iDyg48i3l4hg=
76+ </data>
77+ </dict>
71 <key>MonoBundle/Microsoft.CSharp.dll</key>
78 <key>MonoBundle/Microsoft.CSharp.dll</key>
72 <dict>
79 <dict>
73 <key>hash2</key>
80 <key>hash2</key>
@@ -240,14 +247,14 @@
240 <dict>
247 <dict>
241 <key>hash2</key>
248 <key>hash2</key>
242 <data>
249 <data>
243− XU+yAt7vNt9BpnKXVtjK7OrVVcCx0NV5yVFk70jDuKA=
250+ Ll855YGoZZ4EHbGdnm7YJ2/UrFtklAGRlFW9NlLbdXI=
244 </data>
251 </data>
245 </dict>
252 </dict>
246 <key>MonoBundle/Skrepka.pdb</key>
253 <key>MonoBundle/Skrepka.pdb</key>
247 <dict>
254 <dict>
248 <key>hash2</key>
255 <key>hash2</key>
249 <data>
256 <data>
250− 1rsqlbs6EGxpr47/dseRdpvX9mqCbc9lJ7fOrIUjaqs=
257+ J4e+LdQyWbJGoueMWBhlFQg9tI6hYFwkIT6qA3pNgNU=
251 </data>
258 </data>
252 </dict>
259 </dict>
253 <key>MonoBundle/Sodium.Core.dll</key>
260 <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/PublishOutputs.42f28df682.txt+1
@@ -49,6 +49,7 @@
49/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-ios/iossimulator-arm64/publish/../Skrepka.app/Fabulous.dll
49/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-ios/iossimulator-arm64/publish/../Skrepka.app/Fabulous.dll
50/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-ios/iossimulator-arm64/publish/../Skrepka.app/Fabulous.MauiControls.dll
50/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-ios/iossimulator-arm64/publish/../Skrepka.app/Fabulous.MauiControls.dll
51/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-ios/iossimulator-arm64/publish/../Skrepka.app/FSharp.Core.dll
51/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-ios/iossimulator-arm64/publish/../Skrepka.app/FSharp.Core.dll
52+/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-ios/iossimulator-arm64/publish/../Skrepka.app/LiteDB.dll
52/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-ios/iossimulator-arm64/publish/../Skrepka.app/Microsoft.Extensions.Configuration.dll
53/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-ios/iossimulator-arm64/publish/../Skrepka.app/Microsoft.Extensions.Configuration.dll
53/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-ios/iossimulator-arm64/publish/../Skrepka.app/Microsoft.Extensions.Configuration.Abstractions.dll
54/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-ios/iossimulator-arm64/publish/../Skrepka.app/Microsoft.Extensions.Configuration.Abstractions.dll
54/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-ios/iossimulator-arm64/publish/../Skrepka.app/Microsoft.Extensions.DependencyInjection.dll
55/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-ios/iossimulator-arm64/publish/../Skrepka.app/Microsoft.Extensions.DependencyInjection.dll
client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.AssemblyInfo.fs+1−1
@@ -10,7 +10,7 @@ open System.Reflection
10[<assembly: System.Reflection.AssemblyCompanyAttribute("Skrepka")>]
10[<assembly: System.Reflection.AssemblyCompanyAttribute("Skrepka")>]
11[<assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")>]
11[<assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")>]
12[<assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")>]
12[<assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")>]
13−[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0+76838374041f6fc059855075419f13397f59e5a7")>]
13+[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0+64e0fdcd67fd42117a3538c089bb99c276931127")>]
14[<assembly: System.Reflection.AssemblyProductAttribute("Skrepka")>]
14[<assembly: System.Reflection.AssemblyProductAttribute("Skrepka")>]
15[<assembly: System.Reflection.AssemblyTitleAttribute("Skrepka")>]
15[<assembly: System.Reflection.AssemblyTitleAttribute("Skrepka")>]
16[<assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")>]
16[<assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")>]
client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.AssemblyInfoInputs.cache+1−1
@@ -1 +1 @@
1−dd20f702ea45de2b35fefe109126bb1926d11d2ae1a444ce530a8ae2250bc38e
1+e50f958afa3607e0c2176340e354fd0c5d565507a4ce35d8cd858d8feeb3f6a1
client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.dll

Binary file not shown.

client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.fsproj.AssemblyReference.cache

Binary file not shown.

client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.fsproj.CoreCompileInputs.cache+1−1
@@ -1 +1 @@
1−2216f8a345100d0cead52a75571b23423658891765293a7281aed4c708bdb260
1+69642e04cc9acf8f904dc028dba9bb2fb594ca3a355cba1325fba75dad676d69
client/obj/Debug/net10.0-ios/iossimulator-arm64/Skrepka.fsproj.FileListAbsolute.txt+2
@@ -355,3 +355,5 @@
355/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.Graphics.stamp
355/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Microsoft.Maui.Graphics.stamp
356/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Sodium.Core.stamp
356/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/Sodium.Core.stamp
357/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
357/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
358+/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-ios/iossimulator-arm64/LiteDB.dll
359+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-ios/iossimulator-arm64/resourcestamps/LiteDB.stamp
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/76838374041f6fc059855075419f13397f59e5a7/*"}}
1+{"documents":{"/Users/iko/Developer/skrepka/*":"https://raw.githubusercontent.com/ilyakooo0/skrepka/64e0fdcd67fd42117a3538c089bb99c276931127/*"}}
client/obj/Debug/net10.0-ios/iossimulator-arm64/nativelibraries/aot-output/arm64/System.Private.CoreLib.dll.o

Binary file not shown.

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/PublishOutputs.efd59590f0.txt+1
@@ -49,6 +49,7 @@
49/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/publish/../Skrepka.app/Contents/MonoBundle/Fabulous.dll
49/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/publish/../Skrepka.app/Contents/MonoBundle/Fabulous.dll
50/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/publish/../Skrepka.app/Contents/MonoBundle/Fabulous.MauiControls.dll
50/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/publish/../Skrepka.app/Contents/MonoBundle/Fabulous.MauiControls.dll
51/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/publish/../Skrepka.app/Contents/MonoBundle/FSharp.Core.dll
51/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/publish/../Skrepka.app/Contents/MonoBundle/FSharp.Core.dll
52+/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/publish/../Skrepka.app/Contents/MonoBundle/LiteDB.dll
52/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/publish/../Skrepka.app/Contents/MonoBundle/Microsoft.Extensions.Configuration.dll
53/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/publish/../Skrepka.app/Contents/MonoBundle/Microsoft.Extensions.Configuration.dll
53/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/publish/../Skrepka.app/Contents/MonoBundle/Microsoft.Extensions.Configuration.Abstractions.dll
54/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/publish/../Skrepka.app/Contents/MonoBundle/Microsoft.Extensions.Configuration.Abstractions.dll
54/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/publish/../Skrepka.app/Contents/MonoBundle/Microsoft.Extensions.DependencyInjection.dll
55/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/publish/../Skrepka.app/Contents/MonoBundle/Microsoft.Extensions.DependencyInjection.dll
client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.AssemblyInfo.fs+1−1
@@ -10,7 +10,7 @@ open System.Reflection
10[<assembly: System.Reflection.AssemblyCompanyAttribute("Skrepka")>]
10[<assembly: System.Reflection.AssemblyCompanyAttribute("Skrepka")>]
11[<assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")>]
11[<assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")>]
12[<assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")>]
12[<assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")>]
13−[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0+76838374041f6fc059855075419f13397f59e5a7")>]
13+[<assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0+64e0fdcd67fd42117a3538c089bb99c276931127")>]
14[<assembly: System.Reflection.AssemblyProductAttribute("Skrepka")>]
14[<assembly: System.Reflection.AssemblyProductAttribute("Skrepka")>]
15[<assembly: System.Reflection.AssemblyTitleAttribute("Skrepka")>]
15[<assembly: System.Reflection.AssemblyTitleAttribute("Skrepka")>]
16[<assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")>]
16[<assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")>]
client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.AssemblyInfoInputs.cache+1−1
@@ -1 +1 @@
1−62969b024266df7d019288251e98d3dfefb398a7f9289e5449cd17e5adb6c704
1+be435fd044969cb8957c158b5e1a656e1e9260e869cd5e4059efeccf555209e5
client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.dll

Binary file not shown.

client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.fsproj.AssemblyReference.cache

Binary file not shown.

client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.fsproj.CoreCompileInputs.cache+1−1
@@ -1 +1 @@
1−6b4f2ff0c8a36db93ba0242efaacfe4c365d973eced5156b3c65b39c8c644b10
1+6202acc233295b7d078b1e7cc174d976ebb69fcd5075adc57d9dd3761c9e9f75
client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/Skrepka.fsproj.FileListAbsolute.txt+2
@@ -344,3 +344,5 @@
344/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/resourcestamps/Microsoft.Maui.Graphics.stamp
344/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/resourcestamps/Microsoft.Maui.Graphics.stamp
345/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/resourcestamps/Sodium.Core.stamp
345/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/resourcestamps/Sodium.Core.stamp
346/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/unpack/Microsoft.Maui.Essentials/BundleResource/xml/microsoft_maui_essentials_fileprovider_file_paths.xml
346/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/unpack/Microsoft.Maui.Essentials/BundleResource/xml/microsoft_maui_essentials_fileprovider_file_paths.xml
347+/Users/iko/Developer/skrepka/client/bin/Debug/net10.0-maccatalyst/maccatalyst-arm64/LiteDB.dll
348+/Users/iko/Developer/skrepka/client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/resourcestamps/LiteDB.stamp
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/76838374041f6fc059855075419f13397f59e5a7/*"}}
1+{"documents":{"/Users/iko/Developer/skrepka/*":"https://raw.githubusercontent.com/ilyakooo0/skrepka/64e0fdcd67fd42117a3538c089bb99c276931127/*"}}
client/obj/Debug/net10.0-maccatalyst/maccatalyst-arm64/nativelibraries/aot-output/arm64/System.Private.CoreLib.dll.o

Binary file not shown.

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.

client/obj/Skrepka.fsproj.nuget.dgspec.json+10
@@ -57,6 +57,11 @@
57 "version": "[9.0.0-pre9, )",
57 "version": "[9.0.0-pre9, )",
58 "generatePathProperty": true
58 "generatePathProperty": true
59 },
59 },
60+ "LiteDB": {
61+ "target": "Package",
62+ "version": "[5.0.21, )",
63+ "generatePathProperty": true
64+ },
60 "Microsoft.Maui.Controls": {
65 "Microsoft.Maui.Controls": {
61 "target": "Package",
66 "target": "Package",
62 "version": "[10.0.0, )",
67 "version": "[10.0.0, )",
@@ -386,6 +391,11 @@
386 "version": "[9.0.0-pre9, )",
391 "version": "[9.0.0-pre9, )",
387 "generatePathProperty": true
392 "generatePathProperty": true
388 },
393 },
394+ "LiteDB": {
395+ "target": "Package",
396+ "version": "[5.0.21, )",
397+ "generatePathProperty": true
398+ },
389 "Microsoft.Maui.Controls": {
399 "Microsoft.Maui.Controls": {
390 "target": "Package",
400 "target": "Package",
391 "version": "[10.0.0, )",
401 "version": "[10.0.0, )",
client/obj/Skrepka.fsproj.nuget.g.props+2
@@ -28,6 +28,7 @@
28 <PkgSodium_Core Condition=" '$(PkgSodium_Core)' == '' ">/Users/iko/.nuget/packages/sodium.core/1.4.0</PkgSodium_Core>
28 <PkgSodium_Core Condition=" '$(PkgSodium_Core)' == '' ">/Users/iko/.nuget/packages/sodium.core/1.4.0</PkgSodium_Core>
29 <PkgMicrosoft_NET_ILLink_Tasks Condition=" '$(PkgMicrosoft_NET_ILLink_Tasks)' == '' ">/Users/iko/.nuget/packages/microsoft.net.illink.tasks/10.0.5</PkgMicrosoft_NET_ILLink_Tasks>
29 <PkgMicrosoft_NET_ILLink_Tasks Condition=" '$(PkgMicrosoft_NET_ILLink_Tasks)' == '' ">/Users/iko/.nuget/packages/microsoft.net.illink.tasks/10.0.5</PkgMicrosoft_NET_ILLink_Tasks>
30 <PkgMicrosoft_Maui_Controls Condition=" '$(PkgMicrosoft_Maui_Controls)' == '' ">/Users/iko/.nuget/packages/microsoft.maui.controls/10.0.0</PkgMicrosoft_Maui_Controls>
30 <PkgMicrosoft_Maui_Controls Condition=" '$(PkgMicrosoft_Maui_Controls)' == '' ">/Users/iko/.nuget/packages/microsoft.maui.controls/10.0.0</PkgMicrosoft_Maui_Controls>
31+ <PkgLiteDB Condition=" '$(PkgLiteDB)' == '' ">/Users/iko/.nuget/packages/litedb/5.0.21</PkgLiteDB>
31 <PkgFSharp_Core Condition=" '$(PkgFSharp_Core)' == '' ">/Users/iko/.nuget/packages/fsharp.core/9.0.100</PkgFSharp_Core>
32 <PkgFSharp_Core Condition=" '$(PkgFSharp_Core)' == '' ">/Users/iko/.nuget/packages/fsharp.core/9.0.100</PkgFSharp_Core>
32 <PkgFabulous_MauiControls Condition=" '$(PkgFabulous_MauiControls)' == '' ">/Users/iko/.nuget/packages/fabulous.mauicontrols/9.0.0-pre9</PkgFabulous_MauiControls>
33 <PkgFabulous_MauiControls Condition=" '$(PkgFabulous_MauiControls)' == '' ">/Users/iko/.nuget/packages/fabulous.mauicontrols/9.0.0-pre9</PkgFabulous_MauiControls>
33 </PropertyGroup>
34 </PropertyGroup>
@@ -35,6 +36,7 @@
35 <PkgSodium_Core Condition=" '$(PkgSodium_Core)' == '' ">/Users/iko/.nuget/packages/sodium.core/1.4.0</PkgSodium_Core>
36 <PkgSodium_Core Condition=" '$(PkgSodium_Core)' == '' ">/Users/iko/.nuget/packages/sodium.core/1.4.0</PkgSodium_Core>
36 <PkgMicrosoft_NET_ILLink_Tasks Condition=" '$(PkgMicrosoft_NET_ILLink_Tasks)' == '' ">/Users/iko/.nuget/packages/microsoft.net.illink.tasks/10.0.5</PkgMicrosoft_NET_ILLink_Tasks>
37 <PkgMicrosoft_NET_ILLink_Tasks Condition=" '$(PkgMicrosoft_NET_ILLink_Tasks)' == '' ">/Users/iko/.nuget/packages/microsoft.net.illink.tasks/10.0.5</PkgMicrosoft_NET_ILLink_Tasks>
37 <PkgMicrosoft_Maui_Controls Condition=" '$(PkgMicrosoft_Maui_Controls)' == '' ">/Users/iko/.nuget/packages/microsoft.maui.controls/10.0.0</PkgMicrosoft_Maui_Controls>
38 <PkgMicrosoft_Maui_Controls Condition=" '$(PkgMicrosoft_Maui_Controls)' == '' ">/Users/iko/.nuget/packages/microsoft.maui.controls/10.0.0</PkgMicrosoft_Maui_Controls>
39+ <PkgLiteDB Condition=" '$(PkgLiteDB)' == '' ">/Users/iko/.nuget/packages/litedb/5.0.21</PkgLiteDB>
38 <PkgFSharp_Core Condition=" '$(PkgFSharp_Core)' == '' ">/Users/iko/.nuget/packages/fsharp.core/9.0.100</PkgFSharp_Core>
40 <PkgFSharp_Core Condition=" '$(PkgFSharp_Core)' == '' ">/Users/iko/.nuget/packages/fsharp.core/9.0.100</PkgFSharp_Core>
39 <PkgFabulous_MauiControls Condition=" '$(PkgFabulous_MauiControls)' == '' ">/Users/iko/.nuget/packages/fabulous.mauicontrols/9.0.0-pre9</PkgFabulous_MauiControls>
41 <PkgFabulous_MauiControls Condition=" '$(PkgFabulous_MauiControls)' == '' ">/Users/iko/.nuget/packages/fabulous.mauicontrols/9.0.0-pre9</PkgFabulous_MauiControls>
40 </PropertyGroup>
42 </PropertyGroup>
client/obj/project.assets.json+110
@@ -155,6 +155,19 @@
155 }
155 }
156 }
156 }
157 },
157 },
158+ "LiteDB/5.0.21": {
159+ "type": "package",
160+ "compile": {
161+ "lib/netstandard2.0/LiteDB.dll": {
162+ "related": ".xml"
163+ }
164+ },
165+ "runtime": {
166+ "lib/netstandard2.0/LiteDB.dll": {
167+ "related": ".xml"
168+ }
169+ }
170+ },
158 "Microsoft.Extensions.Configuration/10.0.0": {
171 "Microsoft.Extensions.Configuration/10.0.0": {
159 "type": "package",
172 "type": "package",
160 "dependencies": {
173 "dependencies": {
@@ -728,6 +741,19 @@
728 "runtimes/ios-arm64/native/libsodium.a": {}
741 "runtimes/ios-arm64/native/libsodium.a": {}
729 }
742 }
730 },
743 },
744+ "LiteDB/5.0.21": {
745+ "type": "package",
746+ "compile": {
747+ "lib/netstandard2.0/LiteDB.dll": {
748+ "related": ".xml"
749+ }
750+ },
751+ "runtime": {
752+ "lib/netstandard2.0/LiteDB.dll": {
753+ "related": ".xml"
754+ }
755+ }
756+ },
731 "Microsoft.Extensions.Configuration/10.0.0": {
757 "Microsoft.Extensions.Configuration/10.0.0": {
732 "type": "package",
758 "type": "package",
733 "dependencies": {
759 "dependencies": {
@@ -1301,6 +1327,19 @@
1301 "runtimes/maccatalyst-arm64/native/libsodium.a": {}
1327 "runtimes/maccatalyst-arm64/native/libsodium.a": {}
1302 }
1328 }
1303 },
1329 },
1330+ "LiteDB/5.0.21": {
1331+ "type": "package",
1332+ "compile": {
1333+ "lib/netstandard2.0/LiteDB.dll": {
1334+ "related": ".xml"
1335+ }
1336+ },
1337+ "runtime": {
1338+ "lib/netstandard2.0/LiteDB.dll": {
1339+ "related": ".xml"
1340+ }
1341+ }
1342+ },
1304 "Microsoft.Extensions.Configuration/10.0.0": {
1343 "Microsoft.Extensions.Configuration/10.0.0": {
1305 "type": "package",
1344 "type": "package",
1306 "dependencies": {
1345 "dependencies": {
@@ -1933,6 +1972,19 @@
1933 }
1972 }
1934 }
1973 }
1935 },
1974 },
1975+ "LiteDB/5.0.21": {
1976+ "type": "package",
1977+ "compile": {
1978+ "lib/netstandard2.0/LiteDB.dll": {
1979+ "related": ".xml"
1980+ }
1981+ },
1982+ "runtime": {
1983+ "lib/netstandard2.0/LiteDB.dll": {
1984+ "related": ".xml"
1985+ }
1986+ }
1987+ },
1936 "Microsoft.Extensions.Configuration/10.0.0": {
1988 "Microsoft.Extensions.Configuration/10.0.0": {
1937 "type": "package",
1989 "type": "package",
1938 "dependencies": {
1990 "dependencies": {
@@ -2506,6 +2558,19 @@
2506 "runtimes/ios-arm64/native/libsodium.a": {}
2558 "runtimes/ios-arm64/native/libsodium.a": {}
2507 }
2559 }
2508 },
2560 },
2561+ "LiteDB/5.0.21": {
2562+ "type": "package",
2563+ "compile": {
2564+ "lib/netstandard2.0/LiteDB.dll": {
2565+ "related": ".xml"
2566+ }
2567+ },
2568+ "runtime": {
2569+ "lib/netstandard2.0/LiteDB.dll": {
2570+ "related": ".xml"
2571+ }
2572+ }
2573+ },
2509 "Microsoft.Extensions.Configuration/10.0.0": {
2574 "Microsoft.Extensions.Configuration/10.0.0": {
2510 "type": "package",
2575 "type": "package",
2511 "dependencies": {
2576 "dependencies": {
@@ -3079,6 +3144,19 @@
3079 "runtimes/maccatalyst-arm64/native/libsodium.a": {}
3144 "runtimes/maccatalyst-arm64/native/libsodium.a": {}
3080 }
3145 }
3081 },
3146 },
3147+ "LiteDB/5.0.21": {
3148+ "type": "package",
3149+ "compile": {
3150+ "lib/netstandard2.0/LiteDB.dll": {
3151+ "related": ".xml"
3152+ }
3153+ },
3154+ "runtime": {
3155+ "lib/netstandard2.0/LiteDB.dll": {
3156+ "related": ".xml"
3157+ }
3158+ }
3159+ },
3082 "Microsoft.Extensions.Configuration/10.0.0": {
3160 "Microsoft.Extensions.Configuration/10.0.0": {
3083 "type": "package",
3161 "type": "package",
3084 "dependencies": {
3162 "dependencies": {
@@ -3662,6 +3740,26 @@
3662 "runtimes/win-x86/native/libsodium.dll"
3740 "runtimes/win-x86/native/libsodium.dll"
3663 ]
3741 ]
3664 },
3742 },
3743+ "LiteDB/5.0.21": {
3744+ "sha512": "ykJ7ffFl7P9YQKR/PLci6zupiLrsSCNkOTiw6OtzntH7d2kCYp5L1+3a/pksKgTEHcJBoPXFtg7VZSGVBseN9w==",
3745+ "type": "package",
3746+ "path": "litedb/5.0.21",
3747+ "files": [
3748+ ".nupkg.metadata",
3749+ ".signature.p7s",
3750+ "AppVeyorSettings.json",
3751+ "LICENSE",
3752+ "icon_64x64.png",
3753+ "lib/net45/LiteDB.dll",
3754+ "lib/net45/LiteDB.xml",
3755+ "lib/netstandard1.3/LiteDB.dll",
3756+ "lib/netstandard1.3/LiteDB.xml",
3757+ "lib/netstandard2.0/LiteDB.dll",
3758+ "lib/netstandard2.0/LiteDB.xml",
3759+ "litedb.5.0.21.nupkg.sha512",
3760+ "litedb.nuspec"
3761+ ]
3762+ },
3665 "Microsoft.Extensions.Configuration/10.0.0": {
3763 "Microsoft.Extensions.Configuration/10.0.0": {
3666 "sha512": "H4SWETCh/cC5L1WtWchHR6LntGk3rDTTznZMssr4cL8IbDmMWBxY+MOGDc/ASnqNolLKPIWHWeuC1ddiL/iNPw==",
3764 "sha512": "H4SWETCh/cC5L1WtWchHR6LntGk3rDTTznZMssr4cL8IbDmMWBxY+MOGDc/ASnqNolLKPIWHWeuC1ddiL/iNPw==",
3667 "type": "package",
3765 "type": "package",
@@ -4834,6 +4932,7 @@
4834 "net10.0-ios26.2": [
4932 "net10.0-ios26.2": [
4835 "FSharp.Core >= 9.0.100",
4933 "FSharp.Core >= 9.0.100",
4836 "Fabulous.MauiControls >= 9.0.0-pre9",
4934 "Fabulous.MauiControls >= 9.0.0-pre9",
4935+ "LiteDB >= 5.0.21",
4837 "Microsoft.Maui.Controls >= 10.0.0",
4936 "Microsoft.Maui.Controls >= 10.0.0",
4838 "Microsoft.NET.ILLink.Tasks >= 10.0.5",
4937 "Microsoft.NET.ILLink.Tasks >= 10.0.5",
4839 "Sodium.Core >= 1.4.0"
4938 "Sodium.Core >= 1.4.0"
@@ -4841,6 +4940,7 @@
4841 "net10.0-maccatalyst26.2": [
4940 "net10.0-maccatalyst26.2": [
4842 "FSharp.Core >= 9.0.100",
4941 "FSharp.Core >= 9.0.100",
4843 "Fabulous.MauiControls >= 9.0.0-pre9",
4942 "Fabulous.MauiControls >= 9.0.0-pre9",
4943+ "LiteDB >= 5.0.21",
4844 "Microsoft.Maui.Controls >= 10.0.0",
4944 "Microsoft.Maui.Controls >= 10.0.0",
4845 "Microsoft.NET.ILLink.Tasks >= 10.0.5",
4945 "Microsoft.NET.ILLink.Tasks >= 10.0.5",
4846 "Sodium.Core >= 1.4.0"
4946 "Sodium.Core >= 1.4.0"
@@ -4902,6 +5002,11 @@
4902 "version": "[9.0.0-pre9, )",
5002 "version": "[9.0.0-pre9, )",
4903 "generatePathProperty": true
5003 "generatePathProperty": true
4904 },
5004 },
5005+ "LiteDB": {
5006+ "target": "Package",
5007+ "version": "[5.0.21, )",
5008+ "generatePathProperty": true
5009+ },
4905 "Microsoft.Maui.Controls": {
5010 "Microsoft.Maui.Controls": {
4906 "target": "Package",
5011 "target": "Package",
4907 "version": "[10.0.0, )",
5012 "version": "[10.0.0, )",
@@ -5231,6 +5336,11 @@
5231 "version": "[9.0.0-pre9, )",
5336 "version": "[9.0.0-pre9, )",
5232 "generatePathProperty": true
5337 "generatePathProperty": true
5233 },
5338 },
5339+ "LiteDB": {
5340+ "target": "Package",
5341+ "version": "[5.0.21, )",
5342+ "generatePathProperty": true
5343+ },
5234 "Microsoft.Maui.Controls": {
5344 "Microsoft.Maui.Controls": {
5235 "target": "Package",
5345 "target": "Package",
5236 "version": "[10.0.0, )",
5346 "version": "[10.0.0, )",
client/obj/project.nuget.cache+2−1
@@ -1,6 +1,6 @@
1{
1{
2 "version": 2,
2 "version": 2,
3− "dgSpecHash": "p3N3d4zcPQg=",
3+ "dgSpecHash": "VeBMJNb5HXc=",
4 "success": true,
4 "success": true,
5 "projectFilePath": "/Users/iko/Developer/skrepka/client/Skrepka.fsproj",
5 "projectFilePath": "/Users/iko/Developer/skrepka/client/Skrepka.fsproj",
6 "expectedPackageFiles": [
6 "expectedPackageFiles": [
@@ -8,6 +8,7 @@
8 "/Users/iko/.nuget/packages/fabulous.mauicontrols/9.0.0-pre9/fabulous.mauicontrols.9.0.0-pre9.nupkg.sha512",
8 "/Users/iko/.nuget/packages/fabulous.mauicontrols/9.0.0-pre9/fabulous.mauicontrols.9.0.0-pre9.nupkg.sha512",
9 "/Users/iko/.nuget/packages/fsharp.core/9.0.100/fsharp.core.9.0.100.nupkg.sha512",
9 "/Users/iko/.nuget/packages/fsharp.core/9.0.100/fsharp.core.9.0.100.nupkg.sha512",
10 "/Users/iko/.nuget/packages/libsodium/1.0.20.1/libsodium.1.0.20.1.nupkg.sha512",
10 "/Users/iko/.nuget/packages/libsodium/1.0.20.1/libsodium.1.0.20.1.nupkg.sha512",
11+ "/Users/iko/.nuget/packages/litedb/5.0.21/litedb.5.0.21.nupkg.sha512",
11 "/Users/iko/.nuget/packages/microsoft.extensions.configuration/10.0.0/microsoft.extensions.configuration.10.0.0.nupkg.sha512",
12 "/Users/iko/.nuget/packages/microsoft.extensions.configuration/10.0.0/microsoft.extensions.configuration.10.0.0.nupkg.sha512",
12 "/Users/iko/.nuget/packages/microsoft.extensions.configuration.abstractions/10.0.0/microsoft.extensions.configuration.abstractions.10.0.0.nupkg.sha512",
13 "/Users/iko/.nuget/packages/microsoft.extensions.configuration.abstractions/10.0.0/microsoft.extensions.configuration.abstractions.10.0.0.nupkg.sha512",
13 "/Users/iko/.nuget/packages/microsoft.extensions.dependencyinjection/10.0.0/microsoft.extensions.dependencyinjection.10.0.0.nupkg.sha512",
14 "/Users/iko/.nuget/packages/microsoft.extensions.dependencyinjection/10.0.0/microsoft.extensions.dependencyinjection.10.0.0.nupkg.sha512",