Save predefined PPI and sensor sizes in JSON files.
[master-thesis.git] / Parasitemia / ParasitemiaUI / Utils.fs
index 324e5f0..6579cd6 100644 (file)
@@ -1,5 +1,12 @@
 module ParasitemiaUI.Utils
 
+open System.IO
+
+open Newtonsoft.Json
+open Newtonsoft.Json.Converters
+
+open Types
+
 let listAsStr (s: 'a seq) =
     s |> Seq.fold (fun acc obj -> acc + (if acc = "" then "" else ", ") + obj.ToString()) ""
 
@@ -9,4 +16,47 @@ let percentText (nbTotal: int, nb: int) : string =
         ""
     else
         let percent = 100. * (float nb) / (float nbTotal)
-        sprintf "%.1f %% (%d / %d)" percent nb nbTotal
\ No newline at end of file
+        sprintf "%.1f %% (%d / %d)" percent nb nbTotal
+
+let roamingDir =
+    Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), "Parasitemia")
+
+let predefinedPPIFilename = "predefined-ppi.json"
+let predefinedPPIFilepath = Path.Combine(roamingDir, predefinedPPIFilename)
+
+let sensorSizesFilename = "sensor-sizes.json"
+let sensorSizesFilepath = Path.Combine(roamingDir, sensorSizesFilename)
+
+let private savePredefinedPPIToFile (predefinedPPI: PredefinedPPI list) =
+    try
+        use file = new StreamWriter(predefinedPPIFilepath)
+        file.Write(JsonConvert.SerializeObject(predefinedPPI, JsonSerializerSettings(Formatting = Formatting.Indented)))
+    with
+        ex ->
+            Logger.Log.Error("Unable to save predefined PPI to file \"{0}\": {1}", predefinedPPIFilepath, ex)
+
+let private saveSensorSizesToFile (sensorSizes: SensorSize list) =
+    try
+        use file = new StreamWriter(sensorSizesFilepath)
+        file.Write(JsonConvert.SerializeObject(sensorSizes, JsonSerializerSettings(Formatting = Formatting.Indented)))
+    with
+        ex ->
+            Logger.Log.Error("Unable to save sensor sizes to file \"{0}\": {1}", sensorSizesFilepath, ex)
+
+let predefinedPPI : PredefinedPPI list =
+    try
+        use file = new StreamReader(predefinedPPIFilepath)
+        JsonConvert.DeserializeObject<PredefinedPPI list>(file.ReadToEnd())
+    with
+    | ex ->
+        savePredefinedPPIToFile defaultPredefinedPPI
+        defaultPredefinedPPI
+
+let sensorSizes : SensorSize list =
+    try
+        use file = new StreamReader(sensorSizesFilepath)
+        JsonConvert.DeserializeObject<SensorSize list>(file.ReadToEnd())
+    with
+    | ex ->
+        saveSensorSizesToFile defaultSensorSizes
+        defaultSensorSizes