module ParasitemiaUI.Utils open System.IO open Newtonsoft.Json open Newtonsoft.Json.Converters open Types 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 "" 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") 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 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 \"%s\": %O" predefinedPPIFilepath ex let private saveSensorSizesToFile (sensorSizes : SensorSize list) = try 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 \"%s\": %O" sensorSizesFilepath ex let predefinedPPI : PredefinedPPI list = try use file = new StreamReader (predefinedPPIFilepath) JsonConvert.DeserializeObject (file.ReadToEnd ()) with | ex -> savePredefinedPPIToFile defaultPredefinedPPI defaultPredefinedPPI let sensorSizes : SensorSize list = try use file = new StreamReader (sensorSizesFilepath) JsonConvert.DeserializeObject (file.ReadToEnd ()) with | ex -> saveSensorSizesToFile defaultSensorSizes defaultSensorSizes