Fix an error where the json files can't be created.
[master-thesis.git] / Parasitemia / ParasitemiaUI / Utils.fs
index 6579cd6..97c7425 100644 (file)
@@ -7,46 +7,47 @@ open Newtonsoft.Json.Converters
 
 open Types
 
-let listAsStr (s: 'a seq) =
-    s |> Seq.fold (fun acc obj -> acc + (if acc = "" then "" else ", ") + obj.ToString()) ""
+let inline listAsStr (s : 'a seq) =
+    s |> Seq.fold (fun acc obj -> acc + (if acc = "" then "" else ", ") + string obj) ""
 
-let percentText (nbTotal: int, nb: int) : string =
-    if nbTotal = 0
-    then
+let percentText (nbTotal : int, nb : int) : string =
+    if nbTotal = 0 then
         ""
     else
         let percent = 100. * (float nb) / (float nbTotal)
         sprintf "%.1f %% (%d / %d)" percent nb nbTotal
 
 let roamingDir =
-    Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData), "Parasitemia")
+    Path.Combine (System.Environment.GetFolderPath (System.Environment.SpecialFolder.ApplicationData), "Parasitemia")
 
 let predefinedPPIFilename = "predefined-ppi.json"
-let predefinedPPIFilepath = Path.Combine(roamingDir, predefinedPPIFilename)
+let predefinedPPIFilepath = Path.Combine (roamingDir, predefinedPPIFilename)
 
 let sensorSizesFilename = "sensor-sizes.json"
-let sensorSizesFilepath = Path.Combine(roamingDir, sensorSizesFilename)
+let sensorSizesFilepath = Path.Combine (roamingDir, sensorSizesFilename)
 
-let private savePredefinedPPIToFile (predefinedPPI: PredefinedPPI list) =
+let private savePredefinedPPIToFile (predefinedPPI : PredefinedPPI list) =
     try
-        use file = new StreamWriter(predefinedPPIFilepath)
-        file.Write(JsonConvert.SerializeObject(predefinedPPI, JsonSerializerSettings(Formatting = Formatting.Indented)))
+        Directory.CreateDirectory roamingDir |> ignore
+        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)
+            Logger.Log.Error "Unable to save predefined PPI to file \"%s\": %O" predefinedPPIFilepath ex
 
-let private saveSensorSizesToFile (sensorSizes: SensorSize list) =
+let private saveSensorSizesToFile (sensorSizes : SensorSize list) =
     try
-        use file = new StreamWriter(sensorSizesFilepath)
-        file.Write(JsonConvert.SerializeObject(sensorSizes, JsonSerializerSettings(Formatting = Formatting.Indented)))
+        Directory.CreateDirectory roamingDir |> ignore
+        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)
+            Logger.Log.Error "Unable to save sensor sizes to file \"%s\": %O" sensorSizesFilepath ex
 
 let predefinedPPI : PredefinedPPI list =
     try
-        use file = new StreamReader(predefinedPPIFilepath)
-        JsonConvert.DeserializeObject<PredefinedPPI list>(file.ReadToEnd())
+        use file = new StreamReader (predefinedPPIFilepath)
+        JsonConvert.DeserializeObject<PredefinedPPI list> (file.ReadToEnd ())
     with
     | ex ->
         savePredefinedPPIToFile defaultPredefinedPPI
@@ -54,8 +55,8 @@ let predefinedPPI : PredefinedPPI list =
 
 let sensorSizes : SensorSize list =
     try
-        use file = new StreamReader(sensorSizesFilepath)
-        JsonConvert.DeserializeObject<SensorSize list>(file.ReadToEnd())
+        use file = new StreamReader (sensorSizesFilepath)
+        JsonConvert.DeserializeObject<SensorSize list> (file.ReadToEnd ())
     with
     | ex ->
         saveSensorSizesToFile defaultSensorSizes