├── CareLink ├── Images │ ├── Shield.png │ ├── MealImage .png │ ├── InsulinVial.png │ ├── SensorExpired.png │ ├── SensorLifeOK.png │ ├── CalibrationDot.png │ ├── MealImageLarge.png │ ├── PumpBatteryFull.png │ ├── PumpBatteryHigh.png │ ├── PumpBatteryLow.png │ ├── SensorLifeNotOK.png │ ├── Shield Disabled.png │ ├── CalibrationDotRed.png │ ├── InsulinVial Tiny.png │ ├── PumpBatteryMedium.png │ ├── PumpBatteryUnknown.png │ ├── ReservoirRemains0.png │ ├── ReservoirRemains1+.png │ ├── CalibrationNotReady.png │ ├── PumpBatteryCritical.png │ ├── ReservoirRemains15+.png │ ├── ReservoirRemains29+.png │ ├── ReservoirRemains43+.png │ ├── ReservoirRemains57+.png │ ├── ReservoirRemains71+.png │ ├── ReservoirRemains85+.png │ ├── TransmitterBatteryOK.png │ ├── CalibrationUnavailable.png │ ├── SensorCommunicationLost.png │ ├── SensorExpirationUnknown.png │ ├── TransmitterBatteryFull.png │ ├── TransmitterBatteryLow.png │ ├── TransmitterBatteryMedium.png │ ├── TransmitterBatteryUnknown.png │ ├── PumpConnectivityToPhoneNotOK.png │ ├── PumpConnicitivityToPhoneOK.png │ ├── TransmitterBatteryCritical.png │ ├── PumpConnicitivityToTransmitterOK.png │ ├── PumpConnicitivityToTransmitterNotOK.png │ └── PumpConnicitivityToTransmitterUnknown.png ├── img_e3917_4nK_icon.ico ├── obj │ ├── CareLink.vbproj.nuget.g.targets │ ├── CareLink.vbproj.nuget.g.props │ ├── project.nuget.cache │ ├── CareLink.vbproj.nuget.dgspec.json │ └── project.assets.json ├── CareLink.vbproj.DotSettings ├── My Project │ ├── Application.myapp │ ├── Settings.settings │ ├── Application.Designer.vb │ ├── Application.Designer.HighDpi.vb │ ├── Settings.Designer.vb │ ├── Resources.resx │ └── Resources.Designer.vb ├── ApplicationEvents.vb ├── IndexClass.vb ├── Extensions │ ├── ForEachExtensions.vb │ ├── ControlExtensions.vb │ ├── HttpClientExtensions.vb │ ├── SupportFunctions.vb │ ├── JsonExtension.vb │ └── UnicodeNewline.vb ├── Insulin.vb ├── LoginForm1.vb ├── App.config ├── CareLink.vbproj ├── LoginForm1.Designer.vb ├── carelink_client.vb └── LoginForm1.resx ├── Screenshot 2021-05-16 050718.png ├── CareLink.sln.DotSettings.user ├── .gitignore ├── README.md ├── CareLink.sln └── .editorconfig /CareLink/Images/Shield.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/Shield.png -------------------------------------------------------------------------------- /CareLink/Images/MealImage .png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/MealImage .png -------------------------------------------------------------------------------- /CareLink/Images/InsulinVial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/InsulinVial.png -------------------------------------------------------------------------------- /CareLink/Images/SensorExpired.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/SensorExpired.png -------------------------------------------------------------------------------- /CareLink/Images/SensorLifeOK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/SensorLifeOK.png -------------------------------------------------------------------------------- /CareLink/img_e3917_4nK_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/img_e3917_4nK_icon.ico -------------------------------------------------------------------------------- /Screenshot 2021-05-16 050718.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/Screenshot 2021-05-16 050718.png -------------------------------------------------------------------------------- /CareLink/Images/CalibrationDot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/CalibrationDot.png -------------------------------------------------------------------------------- /CareLink/Images/MealImageLarge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/MealImageLarge.png -------------------------------------------------------------------------------- /CareLink/Images/PumpBatteryFull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/PumpBatteryFull.png -------------------------------------------------------------------------------- /CareLink/Images/PumpBatteryHigh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/PumpBatteryHigh.png -------------------------------------------------------------------------------- /CareLink/Images/PumpBatteryLow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/PumpBatteryLow.png -------------------------------------------------------------------------------- /CareLink/Images/SensorLifeNotOK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/SensorLifeNotOK.png -------------------------------------------------------------------------------- /CareLink/Images/Shield Disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/Shield Disabled.png -------------------------------------------------------------------------------- /CareLink/Images/CalibrationDotRed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/CalibrationDotRed.png -------------------------------------------------------------------------------- /CareLink/Images/InsulinVial Tiny.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/InsulinVial Tiny.png -------------------------------------------------------------------------------- /CareLink/Images/PumpBatteryMedium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/PumpBatteryMedium.png -------------------------------------------------------------------------------- /CareLink/Images/PumpBatteryUnknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/PumpBatteryUnknown.png -------------------------------------------------------------------------------- /CareLink/Images/ReservoirRemains0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/ReservoirRemains0.png -------------------------------------------------------------------------------- /CareLink/Images/ReservoirRemains1+.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/ReservoirRemains1+.png -------------------------------------------------------------------------------- /CareLink/Images/CalibrationNotReady.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/CalibrationNotReady.png -------------------------------------------------------------------------------- /CareLink/Images/PumpBatteryCritical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/PumpBatteryCritical.png -------------------------------------------------------------------------------- /CareLink/Images/ReservoirRemains15+.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/ReservoirRemains15+.png -------------------------------------------------------------------------------- /CareLink/Images/ReservoirRemains29+.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/ReservoirRemains29+.png -------------------------------------------------------------------------------- /CareLink/Images/ReservoirRemains43+.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/ReservoirRemains43+.png -------------------------------------------------------------------------------- /CareLink/Images/ReservoirRemains57+.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/ReservoirRemains57+.png -------------------------------------------------------------------------------- /CareLink/Images/ReservoirRemains71+.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/ReservoirRemains71+.png -------------------------------------------------------------------------------- /CareLink/Images/ReservoirRemains85+.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/ReservoirRemains85+.png -------------------------------------------------------------------------------- /CareLink/Images/TransmitterBatteryOK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/TransmitterBatteryOK.png -------------------------------------------------------------------------------- /CareLink/Images/CalibrationUnavailable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/CalibrationUnavailable.png -------------------------------------------------------------------------------- /CareLink/Images/SensorCommunicationLost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/SensorCommunicationLost.png -------------------------------------------------------------------------------- /CareLink/Images/SensorExpirationUnknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/SensorExpirationUnknown.png -------------------------------------------------------------------------------- /CareLink/Images/TransmitterBatteryFull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/TransmitterBatteryFull.png -------------------------------------------------------------------------------- /CareLink/Images/TransmitterBatteryLow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/TransmitterBatteryLow.png -------------------------------------------------------------------------------- /CareLink/Images/TransmitterBatteryMedium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/TransmitterBatteryMedium.png -------------------------------------------------------------------------------- /CareLink/Images/TransmitterBatteryUnknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/TransmitterBatteryUnknown.png -------------------------------------------------------------------------------- /CareLink/Images/PumpConnectivityToPhoneNotOK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/PumpConnectivityToPhoneNotOK.png -------------------------------------------------------------------------------- /CareLink/Images/PumpConnicitivityToPhoneOK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/PumpConnicitivityToPhoneOK.png -------------------------------------------------------------------------------- /CareLink/Images/TransmitterBatteryCritical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/TransmitterBatteryCritical.png -------------------------------------------------------------------------------- /CareLink/Images/PumpConnicitivityToTransmitterOK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/PumpConnicitivityToTransmitterOK.png -------------------------------------------------------------------------------- /CareLink/Images/PumpConnicitivityToTransmitterNotOK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/PumpConnicitivityToTransmitterNotOK.png -------------------------------------------------------------------------------- /CareLink/Images/PumpConnicitivityToTransmitterUnknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shanselman/CareLink/master/CareLink/Images/PumpConnicitivityToTransmitterUnknown.png -------------------------------------------------------------------------------- /CareLink/obj/CareLink.vbproj.nuget.g.targets: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | $(MSBuildAllProjects);$(MSBuildThisFileFullPath) 5 | 6 | -------------------------------------------------------------------------------- /CareLink/CareLink.vbproj.DotSettings: -------------------------------------------------------------------------------- 1 | 2 | True -------------------------------------------------------------------------------- /CareLink.sln.DotSettings.user: -------------------------------------------------------------------------------- 1 | 2 | <Policy Inspect="True" Prefix="_" Suffix="" Style="AaBb_AaBb" /> -------------------------------------------------------------------------------- /CareLink/My Project/Application.myapp: -------------------------------------------------------------------------------- 1 | 2 | 3 | true 4 | Form1 5 | true 6 | 0 7 | true 8 | 0 9 | true 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # This .gitignore file was automatically created by Microsoft(R) Visual Studio. 3 | ################################################################################ 4 | 5 | /.vs/CareLink 6 | /CareLink/obj/Debug/net5.0-windows 7 | /CareLink/CareLink.vbproj.user 8 | /CareLink/bin/Debug/net5.0-windows 9 | /CareLink/Images/IMG_E4006.JPG 10 | /CareLink/Images/IMG_4011.PNG 11 | /CareLink/Images/IMG_4010.PNG 12 | /CareLink/Images/IMG_4009.PNG 13 | /CareLink/Images/IMG_4008.PNG 14 | /CareLink/Images/IMG_4007.PNG 15 | /CareLink/Images/ReservoirAll.png 16 | /CareLink/obj/Release/net5.0-windows 17 | /.vs 18 | /TestProject1 19 | /CareLink/obj/Debug/net5.0 20 | -------------------------------------------------------------------------------- /CareLink/My Project/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 03:00:00 13 | 14 | 15 | -------------------------------------------------------------------------------- /CareLink/ApplicationEvents.vb: -------------------------------------------------------------------------------- 1 | ' ReSharper disable once CheckNamespace 2 | Namespace My 3 | ' The following events are available for MyApplication: 4 | ' Startup: Raised when the application starts, before the startup form is created. 5 | ' Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally. 6 | ' UnhandledException: Raised if the application encounters an unhandled exception. 7 | ' StartupNextInstance: Raised when launching a single-instance application and the application is already active. 8 | ' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected. 9 | Partial Friend Class MyApplication 10 | End Class 11 | End Namespace 12 | -------------------------------------------------------------------------------- /CareLink/IndexClass.vb: -------------------------------------------------------------------------------- 1 | ' Licensed to the .NET Foundation under one or more agreements. 2 | ' The .NET Foundation licenses this file to you under the MIT license. 3 | ' See the LICENSE file in the project root for more information. 4 | 5 | Public Class IndexClass(Of T) 6 | Public Property Value As T 7 | Public Property Index As Integer ' first element has index = 0 8 | 9 | Public ReadOnly Property IsFirst As Boolean 10 | Get 11 | Return Me.Index = 0 12 | End Get 13 | End Property 14 | 15 | Public Property IsLast As Boolean 16 | Public Property Enumerator As IEnumerator(Of T) 17 | 18 | Public Sub MoveNext() 19 | Me.Value = Me.Enumerator.Current 20 | Me.IsLast = Not Me.Enumerator.MoveNext() 21 | ' may be called with .AsParallel 22 | Threading.Interlocked.Increment(Me.Index) 23 | End Sub 24 | 25 | End Class 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CareLink 2 | ## Requires 3 | - Visual Studio 2019 Version 16.9 4 | - .NET Core 5.0 5 | 6 | ## License 7 | - MIT 8 | 9 | ## Technologies 10 | - Windows Forms 11 | - dotnet-core 12 | 13 | ## Topics 14 | - Medtronic CareLink data display 15 | 16 | ## Updated 17 | - 5/21/2021 18 | 19 | ## Description 20 | 21 | Repo for CareLink Windows App 22 | This is a Visual Basic application that provides a UI to view Medtronic 670G and 770G (possibly 780G but that has not been tested). 23 | This shows all available data and is not in any way supported by Medtronic, it was created from publicly available data. 24 | Some data was filtered out because I could not see any use for it. You can turn off filters but performance will suffer. 25 | 26 | For the visualization layer I use the open source package by Angelo Cresta. 27 | https://github.com/AngeloCresta/winforms-datavisualization-net5 28 | 29 | Try it out and send feedback. 30 | This update has a simple UI to show all the available data and a visual version that mimics the one on iPhone. 31 | ![Same display](https://github.com/paul1956/CareLink/blob/master/Screenshot%202021-05-16%20050718.png?raw=true) 32 | -------------------------------------------------------------------------------- /CareLink/Extensions/ForEachExtensions.vb: -------------------------------------------------------------------------------- 1 | ' Licensed to the .NET Foundation under one or more agreements. 2 | ' The .NET Foundation licenses this file to you under the MIT license. 3 | ' See the LICENSE file in the project root for more information. 4 | 5 | Imports System.Runtime.CompilerServices 6 | 7 | Public Module ForEachExtensions 8 | 9 | 10 | Public Iterator Function WithIndex(Of T)( 11 | source As IEnumerable(Of T) 12 | ) As IEnumerable(Of IndexClass(Of T)) 13 | If source Is Nothing Then 14 | Throw New ArgumentNullException(NameOf(source)) 15 | End If 16 | 17 | Using enumerator As IEnumerator(Of T) = source.GetEnumerator 18 | Dim hasNext As Boolean = enumerator.MoveNext 19 | Dim index As Integer = -1 20 | While hasNext 21 | Dim wi As New IndexClass(Of T) With {.Index = index, .Enumerator = enumerator} 22 | wi.MoveNext() 23 | Yield wi 24 | hasNext = Not wi.IsLast 25 | index = wi.Index ' if .MoveNext was used 26 | End While 27 | End Using 28 | End Function 29 | 30 | End Module 31 | -------------------------------------------------------------------------------- /CareLink/obj/CareLink.vbproj.nuget.g.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | True 5 | NuGet 6 | $(MSBuildThisFileDirectory)project.assets.json 7 | $(UserProfile)\.nuget\packages\ 8 | C:\Users\PaulM\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files\dotnet\sdk\NuGetFallbackFolder 9 | PackageReference 10 | 5.10.0 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | $(MSBuildAllProjects);$(MSBuildThisFileFullPath) 19 | 20 | -------------------------------------------------------------------------------- /CareLink/My Project/Application.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | 15 | Namespace My 16 | 17 | 'NOTE: This file is auto-generated; do not modify it directly. To make changes, 18 | ' or if you encounter build errors in this file, go to the Project Designer 19 | ' (go to Project Properties or double-click the My Project node in 20 | ' Solution Explorer), and make changes on the Application tab. 21 | ' 22 | Partial Friend Class MyApplication 23 | 24 | _ 25 | Public Sub New() 26 | MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) 27 | Me.IsSingleInstance = true 28 | Me.EnableVisualStyles = true 29 | Me.SaveMySettingsOnExit = true 30 | Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses 31 | End Sub 32 | 33 | _ 34 | Protected Overrides Sub OnCreateMainForm() 35 | Me.MainForm = Global.CareLink.Form1 36 | End Sub 37 | End Class 38 | End Namespace 39 | -------------------------------------------------------------------------------- /CareLink/Insulin.vb: -------------------------------------------------------------------------------- 1 | ' Licensed to the .NET Foundation under one or more agreements. 2 | ' The .NET Foundation licenses this file to you under the MIT license. 3 | ' See the LICENSE file in the project root for more information. 4 | 5 | Friend Class Insulin 6 | Private ReadOnly _incrementDownCount As Integer 7 | Private _adjustmentValue As Double 8 | Private _incrementUpCount As Integer 9 | 10 | Public Sub New(oaTime As Double, initialInsulinLevel As Double, activeInsulinIncrements As Integer) 11 | Me.OaTime = oaTime 12 | Me.EventDate = Date.FromOADate(oaTime) 13 | _incrementUpCount = CInt(Math.Ceiling(activeInsulinIncrements * (1 / 3))) 14 | _incrementDownCount = activeInsulinIncrements - _incrementUpCount 15 | _adjustmentValue = initialInsulinLevel / activeInsulinIncrements 16 | Me.CurrentInsulinLevel = _adjustmentValue * _incrementDownCount 17 | End Sub 18 | 19 | Public Property CurrentInsulinLevel As Double 20 | 21 | Public Property EventDate As Date 22 | 23 | Public Property OaTime As Double 24 | 25 | Friend Function Adjust() As Insulin 26 | If Me.CurrentInsulinLevel > 0 Then 27 | If _incrementUpCount > 0 Then 28 | _incrementUpCount -= 1 29 | Me.CurrentInsulinLevel += _adjustmentValue 30 | If _incrementUpCount = 0 Then 31 | _adjustmentValue = Me.CurrentInsulinLevel / _incrementDownCount 32 | End If 33 | Else 34 | Me.CurrentInsulinLevel -= _adjustmentValue 35 | End If 36 | End If 37 | Return Me 38 | End Function 39 | 40 | Public Overrides Function ToString() As String 41 | Return $"{Me.EventDate.ToShortTimeString()} {Me.CurrentInsulinLevel.RoundDouble(3)}" 42 | End Function 43 | End Class 44 | -------------------------------------------------------------------------------- /CareLink.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.31129.286 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "CareLink", "CareLink\CareLink.vbproj", "{3DF0DB17-7515-4C29-916E-C6EF66A82672}" 7 | EndProject 8 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{C157782E-77AD-4CB6-8450-BC2908317F1F}" 9 | ProjectSection(SolutionItems) = preProject 10 | .editorconfig = .editorconfig 11 | README.md = README.md 12 | Screenshot 2021-05-16 050718.png = Screenshot 2021-05-16 050718.png 13 | EndProjectSection 14 | EndProject 15 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ChartWin", "..\winforms-datavisualization-net5\src\System.Windows.Forms.DataVisualization\ChartWin.csproj", "{DA066E4E-DB85-49DB-8481-B0D6C424DE1A}" 16 | EndProject 17 | Global 18 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 19 | Debug|Any CPU = Debug|Any CPU 20 | Release|Any CPU = Release|Any CPU 21 | EndGlobalSection 22 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 23 | {3DF0DB17-7515-4C29-916E-C6EF66A82672}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 24 | {3DF0DB17-7515-4C29-916E-C6EF66A82672}.Debug|Any CPU.Build.0 = Debug|Any CPU 25 | {3DF0DB17-7515-4C29-916E-C6EF66A82672}.Release|Any CPU.ActiveCfg = Release|Any CPU 26 | {3DF0DB17-7515-4C29-916E-C6EF66A82672}.Release|Any CPU.Build.0 = Release|Any CPU 27 | {DA066E4E-DB85-49DB-8481-B0D6C424DE1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 28 | {DA066E4E-DB85-49DB-8481-B0D6C424DE1A}.Debug|Any CPU.Build.0 = Debug|Any CPU 29 | {DA066E4E-DB85-49DB-8481-B0D6C424DE1A}.Release|Any CPU.ActiveCfg = Release|Any CPU 30 | {DA066E4E-DB85-49DB-8481-B0D6C424DE1A}.Release|Any CPU.Build.0 = Release|Any CPU 31 | EndGlobalSection 32 | GlobalSection(SolutionProperties) = preSolution 33 | HideSolutionNode = FALSE 34 | EndGlobalSection 35 | GlobalSection(ExtensibilityGlobals) = postSolution 36 | SolutionGuid = {13BF20DF-74A1-41DF-8198-566771A9AF00} 37 | EndGlobalSection 38 | EndGlobal 39 | -------------------------------------------------------------------------------- /CareLink/LoginForm1.vb: -------------------------------------------------------------------------------- 1 | ' Licensed to the .NET Foundation under one or more agreements. 2 | ' The .NET Foundation licenses this file to you under the MIT license. 3 | ' See the LICENSE file in the project root for more information. 4 | 5 | Public Class LoginForm1 6 | Public Property Client As CarelinkClient.CareLinkClient 7 | 8 | Private Sub Cancel_Click(sender As Object, e As EventArgs) Handles Cancel.Click 9 | Me.Close() 10 | End Sub 11 | 12 | Private Sub LoginForm1_Load(sender As Object, e As EventArgs) Handles Me.Load 13 | Me.UsernameTextBox.Text = My.Settings.username 14 | Me.PasswordTextBox.Text = My.Settings.password 15 | End Sub 16 | 17 | Private Sub OK_Click(sender As Object, e As EventArgs) Handles OK.Click 18 | Me.OK.Enabled = False 19 | Me.Cancel.Enabled = False 20 | If Me.Client Is Nothing Then 21 | Me.Client = New CarelinkClient.CareLinkClient(Me.UsernameTextBox.Text, Me.PasswordTextBox.Text, "us") 22 | End If 23 | If Not Me.Client.LoggedIn Then 24 | Dim recentData As Dictionary(Of String, String) = Me.Client.GetRecentData() 25 | If recentData IsNot Nothing AndAlso recentData.Count > 0 Then 26 | Me.OK.Enabled = True 27 | Me.Cancel.Enabled = True 28 | If Me.SaveCredentials.CheckState = CheckState.Checked Then 29 | My.Settings.username = Me.UsernameTextBox.Text 30 | My.Settings.password = Me.PasswordTextBox.Text 31 | End If 32 | 33 | My.Settings.Save() 34 | Me.Hide() 35 | Exit Sub 36 | End If 37 | Else 38 | Me.OK.Enabled = True 39 | Me.Cancel.Enabled = True 40 | Me.Hide() 41 | Exit Sub 42 | End If 43 | 44 | If MsgBox("Login Unsuccessful. try again? If no program will exit!", Buttons:=MsgBoxStyle.YesNo, Title:="Login Failed") = MsgBoxResult.No Then 45 | End 46 | End If 47 | Me.OK.Enabled = True 48 | Me.Cancel.Enabled = True 49 | End Sub 50 | 51 | End Class 52 | -------------------------------------------------------------------------------- /CareLink/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /CareLink/My Project/Application.Designer.HighDpi.vb: -------------------------------------------------------------------------------- 1 | Option Strict On 2 | Option Explicit On 3 | 4 | 'This constant indicates whether the Application Framework is in use. 5 | #Const APPLICATION_FRAMEWORK = True 6 | 7 | #If APPLICATION_FRAMEWORK Then 8 | 9 | #If NET5_0 And Not NET6_0 Then 10 | 11 | Imports System.Collections.ObjectModel 12 | 13 | Namespace My 14 | 15 | Partial Friend Class MyApplication 16 | 17 | Public Event ApplyHighDpiMode(sender As Object, e As ApplyHighDpiModeEventArgs) 18 | 19 | Private _highDpiMode As HighDpiMode? 20 | 21 | Friend Shadows Property HighDpiMode As HighDpiMode 22 | Get 23 | Return If( 24 | _highDpiMode Is Nothing, 25 | Application.HighDpiMode, 26 | _highDpiMode.Value) 27 | End Get 28 | Set(value As HighDpiMode) 29 | _highDpiMode = value 30 | End Set 31 | End Property 32 | 33 | ' IMPORTANT: 34 | ' If this method causes an compilation error after you've unchecked 'Application Framework' 35 | ' in the project properties, go to the top of this file and change the value to 'False' in this line: 36 | ' #Const APPLICATION_FRAMEWORK = False 37 | 38 | ' For more about using WinForms without the Application Framework 39 | ' see: https://aka.ms/visualbasic-appframework-net5 40 | Protected Overrides Function OnInitialize(commandLineArgs As ReadOnlyCollection(Of String)) As Boolean 41 | Dim eventArgs As New ApplyHighDpiModeEventArgs( 42 | If( 43 | _highDpiMode Is Nothing, 44 | HighDpiMode.SystemAware, 45 | _highDpiMode.Value)) 46 | 47 | RaiseEvent ApplyHighDpiMode(Me, eventArgs) 48 | 49 | Windows.Forms.Application.SetHighDpiMode(eventArgs.HighDpiMode) 50 | 51 | Return MyBase.OnInitialize(commandLineArgs) 52 | End Function 53 | 54 | End Class 55 | 56 | Public Class ApplyHighDpiModeEventArgs 57 | Inherits EventArgs 58 | 59 | Public Sub New(highDpiMode As HighDpiMode) 60 | Me.HighDpiMode = highDpiMode 61 | End Sub 62 | 63 | Public Property HighDpiMode As HighDpiMode 64 | 65 | End Class 66 | 67 | End Namespace 68 | 69 | #End If ' #If NET5_0 And Not NET6_0 70 | #End If ' #If APPLICATION_FRAMEWORK 71 | -------------------------------------------------------------------------------- /CareLink/Extensions/ControlExtensions.vb: -------------------------------------------------------------------------------- 1 | ' Licensed to the .NET Foundation under one or more agreements. 2 | ' The .NET Foundation licenses this file to you under the MIT license. 3 | ' See the LICENSE file in the project root for more information. 4 | 5 | Imports System.Runtime.CompilerServices 6 | Imports System.Windows.Forms.DataVisualization.Charting 7 | 8 | Public Module ControlExtensions 9 | 10 | 11 | Friend Function FindHorizontalMidpoint(ctrl As Control) As Integer 12 | Return ctrl.Left + (ctrl.Width \ 2) 13 | End Function 14 | 15 | 16 | Friend Function FindVerticalMidpoint(ctrl As Control) As Integer 17 | Return ctrl.Top + (ctrl.Height \ 2) 18 | End Function 19 | 20 | 21 | Friend Function HorizontalCenterOn(parentControl As Control, ParamArray childControls() As Control) As Integer 22 | Dim totalWidth As Integer = childControls.First.Right - childControls.Last.Left 23 | Return parentControl.FindHorizontalMidpoint - (totalWidth \ 2) 24 | End Function 25 | 26 | 27 | Friend Sub PaintMarker(e As ChartPaintEventArgs, markerImage As Bitmap, marketDictionary As Dictionary(Of Double, Integer), imageYOffset As Integer) 28 | ' Draw the cloned portion of the Bitmap object. 29 | Dim halfHeight As Single = CSng(markerImage.Height / 2) 30 | Dim halfWidth As Single = CSng(markerImage.Width / 2) 31 | For Each markerKvp As KeyValuePair(Of Double, Integer) In marketDictionary 32 | Dim imagePosition As RectangleF = RectangleF.Empty 33 | imagePosition.X = CSng(e.ChartGraphics.GetPositionFromAxis("Default", AxisName.X, markerKvp.Key)) 34 | imagePosition.Y = CSng(e.ChartGraphics.GetPositionFromAxis("Default", AxisName.Y, markerKvp.Value)) 35 | imagePosition = e.ChartGraphics.GetAbsoluteRectangle(imagePosition) 36 | imagePosition.Width = markerImage.Width 37 | imagePosition.Height = markerImage.Height 38 | imagePosition.Y -= halfHeight 39 | imagePosition.X -= halfWidth 40 | ' Draw image 41 | e.ChartGraphics.Graphics.DrawImage(markerImage, imagePosition.X, imagePosition.Y + imageYOffset) 42 | Next 43 | End Sub 44 | 45 | 46 | Friend Function PositionBelow(controlAbove As Control) As Integer 47 | Return controlAbove.Top + controlAbove.Height + 1 48 | End Function 49 | 50 | End Module 51 | -------------------------------------------------------------------------------- /CareLink/obj/project.nuget.cache: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "dgSpecHash": "gd8myr7EEZWw+uo3ea1JcS8o6vcCNo9hMd54ty0WB3NT+FeTjnnyYranYzrv6TD/NM47lNiUhra9Bn4bbdaOrA==", 4 | "success": true, 5 | "projectFilePath": "C:\\Users\\PaulM\\Source\\Repos\\CareLink\\CareLink\\CareLink.vbproj", 6 | "expectedPackageFiles": [ 7 | "C:\\Users\\PaulM\\.nuget\\packages\\microsoft.netcore.platforms\\5.0.2\\microsoft.netcore.platforms.5.0.2.nupkg.sha512", 8 | "C:\\Users\\PaulM\\.nuget\\packages\\microsoft.netcore.targets\\1.1.0\\microsoft.netcore.targets.1.1.0.nupkg.sha512", 9 | "C:\\Users\\PaulM\\.nuget\\packages\\microsoft.win32.registry\\4.7.0\\microsoft.win32.registry.4.7.0.nupkg.sha512", 10 | "C:\\Users\\PaulM\\.nuget\\packages\\microsoft.win32.systemevents\\5.0.0\\microsoft.win32.systemevents.5.0.0.nupkg.sha512", 11 | "C:\\Users\\PaulM\\.nuget\\packages\\runtime.native.system.data.sqlclient.sni\\4.7.0\\runtime.native.system.data.sqlclient.sni.4.7.0.nupkg.sha512", 12 | "C:\\Users\\PaulM\\.nuget\\packages\\runtime.win-arm64.runtime.native.system.data.sqlclient.sni\\4.4.0\\runtime.win-arm64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512", 13 | "C:\\Users\\PaulM\\.nuget\\packages\\runtime.win-x64.runtime.native.system.data.sqlclient.sni\\4.4.0\\runtime.win-x64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512", 14 | "C:\\Users\\PaulM\\.nuget\\packages\\runtime.win-x86.runtime.native.system.data.sqlclient.sni\\4.4.0\\runtime.win-x86.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512", 15 | "C:\\Users\\PaulM\\.nuget\\packages\\system.data.sqlclient\\4.8.2\\system.data.sqlclient.4.8.2.nupkg.sha512", 16 | "C:\\Users\\PaulM\\.nuget\\packages\\system.drawing.common\\5.0.2\\system.drawing.common.5.0.2.nupkg.sha512", 17 | "C:\\Users\\PaulM\\.nuget\\packages\\system.drawing.primitives\\4.3.0\\system.drawing.primitives.4.3.0.nupkg.sha512", 18 | "C:\\Users\\PaulM\\.nuget\\packages\\system.resources.extensions\\5.0.0\\system.resources.extensions.5.0.0.nupkg.sha512", 19 | "C:\\Users\\PaulM\\.nuget\\packages\\system.runtime\\4.3.0\\system.runtime.4.3.0.nupkg.sha512", 20 | "C:\\Users\\PaulM\\.nuget\\packages\\system.runtime.extensions\\4.3.0\\system.runtime.extensions.4.3.0.nupkg.sha512", 21 | "C:\\Users\\PaulM\\.nuget\\packages\\system.security.accesscontrol\\4.7.0\\system.security.accesscontrol.4.7.0.nupkg.sha512", 22 | "C:\\Users\\PaulM\\.nuget\\packages\\system.security.principal.windows\\4.7.0\\system.security.principal.windows.4.7.0.nupkg.sha512", 23 | "C:\\Users\\PaulM\\.nuget\\packages\\system.windows.extensions\\5.0.0\\system.windows.extensions.5.0.0.nupkg.sha512" 24 | ], 25 | "logs": [] 26 | } -------------------------------------------------------------------------------- /CareLink/Extensions/HttpClientExtensions.vb: -------------------------------------------------------------------------------- 1 | ' Licensed to the .NET Foundation under one or more agreements. 2 | ' The .NET Foundation licenses this file to you under the MIT license. 3 | ' See the LICENSE file in the project root for more information. 4 | 5 | Imports System.Net.Http 6 | Imports System.Runtime.CompilerServices 7 | 8 | Module HttpClientExtensions 9 | 10 | 11 | Public Function [Get](client As HttpClient, url As String, Optional headers As Dictionary(Of String, String) = Nothing, Optional params As Dictionary(Of String, String) = Nothing, Optional data As Dictionary(Of String, String) = Nothing) As HttpResponseMessage 12 | Dim formContent As HttpContent = Nothing 13 | If data IsNot Nothing Then 14 | formContent = New FormUrlEncodedContent(data.ToList()) 15 | End If 16 | If headers IsNot Nothing Then 17 | client.DefaultRequestHeaders.Clear() 18 | For Each header As KeyValuePair(Of String, String) In headers 19 | If header.Key = "Content-Type" Then 20 | If formContent IsNot Nothing Then 21 | formContent.Headers.ContentType.MediaType = header.Value 22 | End If 23 | Else 24 | client.DefaultRequestHeaders.Add(header.Key, header.Value) 25 | End If 26 | Next 27 | End If 28 | If params IsNot Nothing Then 29 | url &= "?" 30 | For Each param As KeyValuePair(Of String, String) In params 31 | url &= $"{param.Key}={param.Value}&" 32 | Next 33 | url = url.TrimEnd("&"c) 34 | End If 35 | If data Is Nothing Then 36 | Return client.GetAsync(url).Result 37 | End If 38 | Return client.PostAsync(url, formContent).Result 39 | End Function 40 | 41 | 42 | Public Function Post(client As HttpClient, url As String, Optional headers As Dictionary(Of String, String) = Nothing, Optional params As Dictionary(Of String, String) = Nothing, Optional data As Dictionary(Of String, String) = Nothing) As HttpResponseMessage 43 | If params IsNot Nothing Then 44 | url &= "?" 45 | For Each header As KeyValuePair(Of String, String) In params 46 | url &= $"{header.Key}={header.Value}&" 47 | Next 48 | url = url.TrimEnd("&"c) 49 | End If 50 | Dim formData As New FormUrlEncodedContent(data.ToList()) 51 | If headers IsNot Nothing Then 52 | client.DefaultRequestHeaders.Clear() 53 | For Each header As KeyValuePair(Of String, String) In headers 54 | If header.Key = "Content-Type" Then 55 | formData.Headers.ContentType.MediaType = header.Value 56 | Else 57 | client.DefaultRequestHeaders.Add(header.Key, header.Value) 58 | End If 59 | Next 60 | End If 61 | Return client.PostAsync(url, formData).Result 62 | End Function 63 | 64 | 65 | Public Function Text(client As HttpResponseMessage) As String 66 | Return client.Content.ReadAsStringAsync().Result 67 | End Function 68 | 69 | End Module 70 | -------------------------------------------------------------------------------- /CareLink/CareLink.vbproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | WinExe 5 | net5.0-windows 6 | CareLink 7 | Sub Main 8 | true 9 | WindowsForms 10 | en-US 11 | On 12 | Text 13 | Off 14 | img_e3917_4nK_icon.ico 15 | 16 | 17 | 18 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 19 | x64 20 | 21 | 22 | 23 | 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | tlbimp 37 | 0 38 | 4 39 | 3050f1c5-98b5-11cf-bb82-00aa00bdce0b 40 | 0 41 | false 42 | false 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | True 59 | True 60 | Application.myapp 61 | 62 | 63 | True 64 | True 65 | Resources.resx 66 | 67 | 68 | True 69 | True 70 | Settings.settings 71 | 72 | 73 | 74 | 75 | 76 | My.Resources 77 | VbMyResourcesResXFileCodeGenerator 78 | Resources.Designer.vb 79 | 80 | 81 | 82 | 83 | 84 | Never 85 | 86 | 87 | MyApplicationCodeGenerator 88 | Application.Designer.vb 89 | 90 | 91 | My 92 | SettingsSingleFileGenerator 93 | Settings.Designer.vb 94 | 95 | 96 | PreserveNewest 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /CareLink/My Project/Settings.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | 15 | Namespace My 16 | 17 | _ 20 | Partial Friend NotInheritable Class MySettings 21 | Inherits Global.System.Configuration.ApplicationSettingsBase 22 | 23 | Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) 24 | 25 | #Region "My.Settings Auto-Save Functionality" 26 | #If _MyType = "WindowsForms" Then 27 | Private Shared addedHandler As Boolean 28 | 29 | Private Shared addedHandlerLockObject As New Object 30 | 31 | _ 32 | Private Shared Sub AutoSaveSettings(sender As Global.System.Object, e As Global.System.EventArgs) 33 | If My.Application.SaveMySettingsOnExit Then 34 | My.Settings.Save() 35 | End If 36 | End Sub 37 | #End If 38 | #End Region 39 | 40 | Public Shared ReadOnly Property [Default]() As MySettings 41 | Get 42 | 43 | #If _MyType = "WindowsForms" Then 44 | If Not addedHandler Then 45 | SyncLock addedHandlerLockObject 46 | If Not addedHandler Then 47 | AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings 48 | addedHandler = True 49 | End If 50 | End SyncLock 51 | End If 52 | #End If 53 | Return defaultInstance 54 | End Get 55 | End Property 56 | 57 | _ 60 | Public Property username() As String 61 | Get 62 | Return CType(Me("username"),String) 63 | End Get 64 | Set 65 | Me("username") = value 66 | End Set 67 | End Property 68 | 69 | _ 72 | Public Property password() As String 73 | Get 74 | Return CType(Me("password"),String) 75 | End Get 76 | Set 77 | Me("password") = value 78 | End Set 79 | End Property 80 | 81 | _ 84 | Public Property AIT() As Global.System.TimeSpan 85 | Get 86 | Return CType(Me("AIT"),Global.System.TimeSpan) 87 | End Get 88 | Set 89 | Me("AIT") = value 90 | End Set 91 | End Property 92 | End Class 93 | End Namespace 94 | 95 | Namespace My 96 | 97 | _ 100 | Friend Module MySettingsProperty 101 | 102 | _ 103 | Friend ReadOnly Property Settings() As Global.CareLink.My.MySettings 104 | Get 105 | Return Global.CareLink.My.MySettings.Default 106 | End Get 107 | End Property 108 | End Module 109 | End Namespace 110 | -------------------------------------------------------------------------------- /CareLink/Extensions/SupportFunctions.vb: -------------------------------------------------------------------------------- 1 | ' Licensed to the .NET Foundation under one or more agreements. 2 | ' The .NET Foundation licenses this file to you under the MIT license. 3 | ' See the LICENSE file in the project root for more information. 4 | 5 | Imports System.Runtime.CompilerServices 6 | 7 | Public Module SupportFunctions 8 | 9 | Public Enum RoundTo 10 | Second 11 | Minute 12 | Hour 13 | Day 14 | End Enum 15 | 16 | 17 | Friend Sub Adjustlist(myList As List(Of Insulin), startIndex As Integer, count As Integer) 18 | For i As Integer = startIndex To startIndex + count 19 | If i >= myList.Count Then Exit Sub 20 | myList(i) = myList(i).Adjust() 21 | Next 22 | End Sub 23 | 24 | 25 | Friend Function ConditionalSum(myList As List(Of Insulin), start As Integer, length As Integer) As Double 26 | If start + length > myList.Count Then 27 | length = myList.Count - start 28 | End If 29 | Return myList.GetRange(start, length).Sum(Function(i As Insulin) i.CurrentInsulinLevel) 30 | End Function 31 | 32 | 33 | Friend Function GetDecimalValue(item As Dictionary(Of String, String), ParamArray values() As String) As Double 34 | Dim returnValueString As String = "" 35 | For Each value As String In values 36 | If item.TryGetValue(value, returnValueString) Then 37 | Return Double.Parse(returnValueString) 38 | End If 39 | Next 40 | Return Double.NaN 41 | End Function 42 | 43 | 44 | Friend Function GetMilitaryHour(selectedStartTime As String) As Integer 45 | Return CInt(Format(Date.Parse(selectedStartTime), "HH")) 46 | End Function 47 | 48 | 49 | Friend Function RoundDouble(value As Double, decimalDigits As Integer) As Double 50 | 51 | Return Math.Round(value, decimalDigits) 52 | End Function 53 | 54 | 55 | Friend Function RoundDouble(value As String, decimalDigits As Integer) As Double 56 | 57 | Return Math.Round(Double.Parse(value), decimalDigits) 58 | End Function 59 | 60 | 61 | Friend Function RoundSingle(value As Double, decimalDigits As Integer) As Single 62 | 63 | Return CSng(Math.Round(value, decimalDigits)) 64 | End Function 65 | 66 | Friend Sub SetValue(myList As List(Of KeyValuePair(Of Double, Double)), ByRef value As KeyValuePair(Of Double, Double)) 67 | For Each v As IndexClass(Of KeyValuePair(Of Double, Double)) In myList.WithIndex() 68 | If Not v.IsLast Then 69 | If myList(v.Index).Key >= value.Key Then 70 | Continue For 71 | End If 72 | End If 73 | myList(v.Index) = New KeyValuePair(Of Double, Double)(v.Value.Key, value.Value) 74 | value = myList(v.Index) 75 | Exit For 76 | Next 77 | End Sub 78 | 79 | 80 | Friend Function ToDisplay(d As SortedDictionary(Of Double, Double)) As Dictionary(Of String, Double) 81 | Dim result As New Dictionary(Of String, Double) 82 | For Each entry As KeyValuePair(Of Double, Double) In d 83 | result.Add(Date.FromOADate(entry.Key).ToLongTimeString(), Math.Round(entry.Value, 3)) 84 | Next 85 | Return result 86 | End Function 87 | 88 | 89 | Public Function RoundDown(d As Date, rt As RoundTo) As Date 90 | Dim dtRounded As New DateTime() 91 | 92 | Select Case rt 93 | Case RoundTo.Second 94 | dtRounded = New DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second) 95 | Case RoundTo.Minute 96 | dtRounded = New DateTime(d.Year, d.Month, d.Day, d.Hour, d.Minute, 0) 97 | Case RoundTo.Hour 98 | dtRounded = New DateTime(d.Year, d.Month, d.Day, d.Hour, 0, 0) 99 | Case RoundTo.Day 100 | dtRounded = New DateTime(d.Year, d.Month, d.Day, 0, 0, 0) 101 | End Select 102 | 103 | Return dtRounded 104 | End Function 105 | 106 | 107 | Public Function SafeGetSgDateTime(sgList As List(Of Dictionary(Of String, String)), index As Integer) As Date 108 | Dim sgDateTimeString As String = "" 109 | Dim sgDateTime As Date 110 | If sgList(index).Count < 7 Then 111 | index -= 1 112 | End If 113 | If sgList(index).TryGetValue("previousDateTime", sgDateTimeString) Then 114 | sgDateTime = Date.Parse(sgDateTimeString) 115 | ElseIf sgList(index).TryGetValue("datetime", sgDateTimeString) Then 116 | sgDateTime = Date.Parse(sgDateTimeString) 117 | ElseIf sgList(index).TryGetValue("dateTime", sgDateTimeString) Then 118 | sgDateTime = Date.Parse(sgDateTimeString.Split("-")(0)) 119 | Else 120 | sgDateTime = Now 121 | End If 122 | If sgDateTime.Year = 2000 Then 123 | sgDateTime = Date.Now - ((sgList.Count - index) * Form1._FiveMinutes) 124 | End If 125 | If sgList(index).Count < 7 Then 126 | sgDateTime = sgDateTime.AddMinutes(5) 127 | End If 128 | Return sgDateTime 129 | End Function 130 | 131 | End Module 132 | -------------------------------------------------------------------------------- /CareLink/LoginForm1.Designer.vb: -------------------------------------------------------------------------------- 1 | _ 2 | _ 3 | Partial Class LoginForm1 4 | Inherits System.Windows.Forms.Form 5 | 6 | 'Form overrides dispose to clean up the component list. 7 | _ 8 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 9 | Try 10 | If disposing AndAlso components IsNot Nothing Then 11 | components.Dispose() 12 | End If 13 | Finally 14 | MyBase.Dispose(disposing) 15 | End Try 16 | End Sub 17 | Friend WithEvents LogoPictureBox As System.Windows.Forms.PictureBox 18 | Friend WithEvents UsernameLabel As System.Windows.Forms.Label 19 | Friend WithEvents PasswordLabel As System.Windows.Forms.Label 20 | Friend WithEvents UsernameTextBox As System.Windows.Forms.TextBox 21 | Friend WithEvents PasswordTextBox As System.Windows.Forms.TextBox 22 | Friend WithEvents OK As System.Windows.Forms.Button 23 | Friend WithEvents Cancel As System.Windows.Forms.Button 24 | 25 | 'Required by the Windows Form Designer 26 | Private components As System.ComponentModel.IContainer 27 | 28 | 'NOTE: The following procedure is required by the Windows Form Designer 29 | 'It can be modified using the Windows Form Designer. 30 | 'Do not modify it using the code editor. 31 | _ 32 | Private Sub InitializeComponent() 33 | Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(LoginForm1)) 34 | Me.LogoPictureBox = New System.Windows.Forms.PictureBox() 35 | Me.UsernameLabel = New System.Windows.Forms.Label() 36 | Me.PasswordLabel = New System.Windows.Forms.Label() 37 | Me.UsernameTextBox = New System.Windows.Forms.TextBox() 38 | Me.PasswordTextBox = New System.Windows.Forms.TextBox() 39 | Me.OK = New System.Windows.Forms.Button() 40 | Me.Cancel = New System.Windows.Forms.Button() 41 | Me.SaveCredentials = New System.Windows.Forms.CheckBox() 42 | CType(Me.LogoPictureBox,System.ComponentModel.ISupportInitialize).BeginInit 43 | Me.SuspendLayout 44 | ' 45 | 'LogoPictureBox 46 | ' 47 | Me.LogoPictureBox.Image = CType(resources.GetObject("LogoPictureBox.Image"),System.Drawing.Image) 48 | Me.LogoPictureBox.Location = New System.Drawing.Point(0, 0) 49 | Me.LogoPictureBox.Name = "LogoPictureBox" 50 | Me.LogoPictureBox.Size = New System.Drawing.Size(165, 193) 51 | Me.LogoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom 52 | Me.LogoPictureBox.TabIndex = 0 53 | Me.LogoPictureBox.TabStop = false 54 | ' 55 | 'UsernameLabel 56 | ' 57 | Me.UsernameLabel.Location = New System.Drawing.Point(172, 8) 58 | Me.UsernameLabel.Name = "UsernameLabel" 59 | Me.UsernameLabel.Size = New System.Drawing.Size(220, 23) 60 | Me.UsernameLabel.TabIndex = 0 61 | Me.UsernameLabel.Text = "&User name" 62 | Me.UsernameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft 63 | ' 64 | 'PasswordLabel 65 | ' 66 | Me.PasswordLabel.Location = New System.Drawing.Point(172, 55) 67 | Me.PasswordLabel.Name = "PasswordLabel" 68 | Me.PasswordLabel.Size = New System.Drawing.Size(220, 23) 69 | Me.PasswordLabel.TabIndex = 2 70 | Me.PasswordLabel.Text = "&Password" 71 | Me.PasswordLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft 72 | ' 73 | 'UsernameTextBox 74 | ' 75 | Me.UsernameTextBox.Location = New System.Drawing.Point(174, 30) 76 | Me.UsernameTextBox.Name = "UsernameTextBox" 77 | Me.UsernameTextBox.Size = New System.Drawing.Size(220, 23) 78 | Me.UsernameTextBox.TabIndex = 1 79 | ' 80 | 'PasswordTextBox 81 | ' 82 | Me.PasswordTextBox.Location = New System.Drawing.Point(174, 78) 83 | Me.PasswordTextBox.Name = "PasswordTextBox" 84 | Me.PasswordTextBox.PasswordChar = Global.Microsoft.VisualBasic.ChrW(42) 85 | Me.PasswordTextBox.Size = New System.Drawing.Size(220, 23) 86 | Me.PasswordTextBox.TabIndex = 3 87 | ' 88 | 'OK 89 | ' 90 | Me.OK.Location = New System.Drawing.Point(197, 161) 91 | Me.OK.Name = "OK" 92 | Me.OK.Size = New System.Drawing.Size(94, 23) 93 | Me.OK.TabIndex = 4 94 | Me.OK.Text = "&OK" 95 | ' 96 | 'Cancel 97 | ' 98 | Me.Cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel 99 | Me.Cancel.Location = New System.Drawing.Point(300, 161) 100 | Me.Cancel.Name = "Cancel" 101 | Me.Cancel.Size = New System.Drawing.Size(94, 23) 102 | Me.Cancel.TabIndex = 5 103 | Me.Cancel.Text = "&Cancel" 104 | ' 105 | 'SaveCredentials 106 | ' 107 | Me.SaveCredentials.AutoSize = true 108 | Me.SaveCredentials.Location = New System.Drawing.Point(174, 126) 109 | Me.SaveCredentials.Name = "SaveCredentials" 110 | Me.SaveCredentials.Size = New System.Drawing.Size(187, 19) 111 | Me.SaveCredentials.TabIndex = 6 112 | Me.SaveCredentials.Text = "Save User Name and Password" 113 | Me.SaveCredentials.UseVisualStyleBackColor = true 114 | ' 115 | 'LoginForm1 116 | ' 117 | Me.AcceptButton = Me.OK 118 | Me.AutoScaleDimensions = New System.Drawing.SizeF(7!, 15!) 119 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font 120 | Me.CancelButton = Me.Cancel 121 | Me.ClientSize = New System.Drawing.Size(401, 192) 122 | Me.Controls.Add(Me.SaveCredentials) 123 | Me.Controls.Add(Me.Cancel) 124 | Me.Controls.Add(Me.OK) 125 | Me.Controls.Add(Me.PasswordTextBox) 126 | Me.Controls.Add(Me.UsernameTextBox) 127 | Me.Controls.Add(Me.PasswordLabel) 128 | Me.Controls.Add(Me.UsernameLabel) 129 | Me.Controls.Add(Me.LogoPictureBox) 130 | Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog 131 | Me.MaximizeBox = false 132 | Me.MinimizeBox = false 133 | Me.Name = "LoginForm1" 134 | Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide 135 | Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent 136 | Me.Text = "Login" 137 | CType(Me.LogoPictureBox,System.ComponentModel.ISupportInitialize).EndInit 138 | Me.ResumeLayout(false) 139 | Me.PerformLayout 140 | 141 | End Sub 142 | 143 | Friend WithEvents SaveCredentials As CheckBox 144 | End Class 145 | -------------------------------------------------------------------------------- /CareLink/Extensions/JsonExtension.vb: -------------------------------------------------------------------------------- 1 | ' Licensed to the .NET Foundation under one or more agreements. 2 | ' The .NET Foundation licenses this file to you under the MIT license. 3 | ' See the LICENSE file in the project root for more information. 4 | 5 | Imports System.Runtime.CompilerServices 6 | Imports System.Text.Json 7 | Imports System.Text.Json.Serialization 8 | 9 | Public Module Json 10 | 11 | Private Function GetItemAsString(item As KeyValuePair(Of String, Object)) As String 12 | Dim itemValue As JsonElement = CType(item.Value, JsonElement) 13 | Dim itemAsString As String = itemValue.ToString 14 | Dim result As String = itemAsString 15 | Select Case itemValue.ValueKind 16 | Case JsonValueKind.False 17 | result = "False" 18 | Case JsonValueKind.Null 19 | result = "" 20 | Case JsonValueKind.Number 21 | Case JsonValueKind.True 22 | result = "True" 23 | Case JsonValueKind.String 24 | Try 25 | If Char.IsDigit(result(0)) Then 26 | Dim dateSplit As String() = itemAsString.Split("T") 27 | If dateSplit.Length = 2 Then 28 | Dim zDateString As String() = dateSplit(0).Split("-"c) 29 | Dim zTimeString As String() = dateSplit(1).TrimEnd("Z"c).Replace("+", ".").Split(":") 30 | Select Case item.Key 31 | Case "techHours" 32 | Case "lastConduitDateTime", 33 | "medicalDeviceTimeAsString", 34 | "previousDateTime" ' "2021-05-17T01:02:22.307-07:00" 35 | result = $"{ New DateTime(CInt(zDateString(0)), 36 | CInt(zDateString(1)), 37 | CInt(zDateString(2)), 38 | CInt(zTimeString(0)), 39 | CInt(zTimeString(1)), 40 | CInt(zTimeString(2).Substring(0, 2)), 41 | CInt(zTimeString(2).Substring(3, 3)), DateTimeKind.Local)}{ _ 42 | itemAsString.Substring(itemAsString.Length - 6)}" 43 | Case "lastSensorTSAsString", 44 | "sLastSensorTime", 45 | "sMedicalDeviceTime", 46 | "triggeredDateTime" '2021-05-16T20:28:00.000Z 47 | result = New DateTime(CInt(zDateString(0)), CInt(zDateString(1)), CInt(zDateString(2)), CInt(zTimeString(0)), CInt(zTimeString(1)), CInt(zTimeString(2).Substring(0, 2)), DateTimeKind.Local).ToString() 48 | Case "loginDateUTC" ' UTC 2021-05-16T20:28:00.000Z 49 | result = New DateTime(CInt(zDateString(0)), CInt(zDateString(1)), CInt(zDateString(2)), CInt(zTimeString(0)), CInt(zTimeString(1)), CInt(zTimeString(2).Substring(0, 2)), DateTimeKind.Utc).ToString() 50 | Case "datetime" 51 | If item.Value.ToString().EndsWith("Z"c) Then 52 | result = New DateTime(CInt(zDateString(0)), CInt(zDateString(1)), CInt(zDateString(2)), CInt(zTimeString(0)), CInt(zTimeString(1)), CInt(zTimeString(2).Substring(0, 2)), DateTimeKind.Local).ToString() 53 | Else 54 | ' "2021-05-17T01:02:22.307-07:00" 55 | result = $"{ New DateTime(CInt(zDateString(0)), 56 | CInt(zDateString(1)), 57 | CInt(zDateString(2)), 58 | CInt(zTimeString(0)), 59 | CInt(zTimeString(1)), 60 | CInt(zTimeString(2).Substring(0, 2)), 61 | CInt(zTimeString(2).Substring(3, 3)), DateTimeKind.Local)}{ _ 62 | itemAsString.Substring(itemAsString.Length - 6)}" 63 | End If 64 | 65 | Case Else 66 | Stop 67 | End Select 68 | 69 | End If 70 | End If 71 | Catch ex As Exception 72 | Stop 73 | End Try 74 | End Select 75 | Return result 76 | End Function 77 | 78 | Public Function LoadList(value As String) As List(Of Dictionary(Of String, String)) 79 | Dim resultDictionaryArray As New List(Of Dictionary(Of String, String)) 80 | Dim options As New JsonSerializerOptions() With { 81 | .IgnoreNullValues = True, 82 | .NumberHandling = JsonNumberHandling.WriteAsString} 83 | 84 | Dim deserializeList As List(Of Dictionary(Of String, Object)) = JsonSerializer.Deserialize(Of List(Of Dictionary(Of String, Object)))(value, options) 85 | For Each deserializeItem As Dictionary(Of String, Object) In deserializeList 86 | Dim resultDictionary As New Dictionary(Of String, String) 87 | For Each item As KeyValuePair(Of String, Object) In deserializeItem 88 | If item.Value Is Nothing Then 89 | resultDictionary.Add(item.Key, Nothing) 90 | Else 91 | resultDictionary.Add(item.Key, GetItemAsString(item)) 92 | End If 93 | Next 94 | resultDictionaryArray.Add(resultDictionary) 95 | Next 96 | Return resultDictionaryArray 97 | End Function 98 | 99 | Public Function Loads(value As String) As Dictionary(Of String, String) 100 | Dim resultDictionary As New Dictionary(Of String, String) 101 | Dim options As New JsonSerializerOptions() With { 102 | .IgnoreNullValues = True, 103 | .NumberHandling = JsonNumberHandling.WriteAsString} 104 | 105 | For Each item As KeyValuePair(Of String, Object) In JsonSerializer.Deserialize(Of Dictionary(Of String, Object))(value, options).ToList() 106 | If item.Value Is Nothing Then 107 | resultDictionary.Add(item.Key, Nothing) 108 | Else 109 | resultDictionary.Add(item.Key, GetItemAsString(item)) 110 | End If 111 | Next 112 | Return resultDictionary 113 | End Function 114 | 115 | 116 | Public Function UtcToLocalTime(utcTime As String) As String 117 | Dim convertedDate As Date = Date.SpecifyKind(Date.Parse(utcTime), DateTimeKind.Utc) 118 | Return convertedDate.ToLocalTime.ToString 119 | End Function 120 | 121 | End Module 122 | -------------------------------------------------------------------------------- /CareLink/obj/CareLink.vbproj.nuget.dgspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "format": 1, 3 | "restore": { 4 | "C:\\Users\\PaulM\\Source\\Repos\\CareLink\\CareLink\\CareLink.vbproj": {} 5 | }, 6 | "projects": { 7 | "C:\\Users\\PaulM\\Source\\Repos\\CareLink\\CareLink\\CareLink.vbproj": { 8 | "version": "1.0.0", 9 | "restore": { 10 | "projectUniqueName": "C:\\Users\\PaulM\\Source\\Repos\\CareLink\\CareLink\\CareLink.vbproj", 11 | "projectName": "CareLink", 12 | "projectPath": "C:\\Users\\PaulM\\Source\\Repos\\CareLink\\CareLink\\CareLink.vbproj", 13 | "packagesPath": "C:\\Users\\PaulM\\.nuget\\packages\\", 14 | "outputPath": "C:\\Users\\PaulM\\Source\\Repos\\CareLink\\CareLink\\obj\\", 15 | "projectStyle": "PackageReference", 16 | "fallbackFolders": [ 17 | "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", 18 | "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" 19 | ], 20 | "configFilePaths": [ 21 | "C:\\Users\\PaulM\\AppData\\Roaming\\NuGet\\NuGet.Config", 22 | "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", 23 | "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" 24 | ], 25 | "originalTargetFrameworks": [ 26 | "net5.0-windows7.0" 27 | ], 28 | "sources": { 29 | "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, 30 | "https://api.nuget.org/v3/index.json": {}, 31 | "https://dotnet.myget.org/F/roslyn-analyzers/api/v3/index.json": {}, 32 | "https://dotnet.myget.org/F/roslyn/api/v3/index.json": {}, 33 | "https://dotnet.myget.org/F/system-commandline/api/v3/index.json": {}, 34 | "https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json": {} 35 | }, 36 | "frameworks": { 37 | "net5.0-windows7.0": { 38 | "targetAlias": "net5.0-windows", 39 | "projectReferences": { 40 | "C:\\Users\\PaulM\\Source\\Repos\\winforms-datavisualization-net5\\src\\System.Windows.Forms.DataVisualization\\ChartWin.csproj": { 41 | "projectPath": "C:\\Users\\PaulM\\Source\\Repos\\winforms-datavisualization-net5\\src\\System.Windows.Forms.DataVisualization\\ChartWin.csproj" 42 | } 43 | } 44 | } 45 | } 46 | }, 47 | "frameworks": { 48 | "net5.0-windows7.0": { 49 | "targetAlias": "net5.0-windows", 50 | "imports": [ 51 | "net461", 52 | "net462", 53 | "net47", 54 | "net471", 55 | "net472", 56 | "net48" 57 | ], 58 | "assetTargetFallback": true, 59 | "warn": true, 60 | "frameworkReferences": { 61 | "Microsoft.NETCore.App": { 62 | "privateAssets": "all" 63 | }, 64 | "Microsoft.WindowsDesktop.App.WindowsForms": { 65 | "privateAssets": "none" 66 | } 67 | }, 68 | "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.100-preview.2.21155.3\\RuntimeIdentifierGraph.json" 69 | } 70 | } 71 | }, 72 | "C:\\Users\\PaulM\\Source\\Repos\\winforms-datavisualization-net5\\src\\System.Windows.Forms.DataVisualization\\ChartWin.csproj": { 73 | "version": "1.0.0", 74 | "restore": { 75 | "projectUniqueName": "C:\\Users\\PaulM\\Source\\Repos\\winforms-datavisualization-net5\\src\\System.Windows.Forms.DataVisualization\\ChartWin.csproj", 76 | "projectName": "System.Windows.Forms.DataVisualization", 77 | "projectPath": "C:\\Users\\PaulM\\Source\\Repos\\winforms-datavisualization-net5\\src\\System.Windows.Forms.DataVisualization\\ChartWin.csproj", 78 | "packagesPath": "C:\\Users\\PaulM\\.nuget\\packages\\", 79 | "outputPath": "C:\\Users\\PaulM\\Source\\Repos\\winforms-datavisualization-net5\\src\\System.Windows.Forms.DataVisualization\\obj\\", 80 | "projectStyle": "PackageReference", 81 | "fallbackFolders": [ 82 | "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", 83 | "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" 84 | ], 85 | "configFilePaths": [ 86 | "C:\\Users\\PaulM\\AppData\\Roaming\\NuGet\\NuGet.Config", 87 | "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", 88 | "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" 89 | ], 90 | "originalTargetFrameworks": [ 91 | "net5.0-windows7.0" 92 | ], 93 | "sources": { 94 | "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, 95 | "https://api.nuget.org/v3/index.json": {}, 96 | "https://dotnet.myget.org/F/roslyn-analyzers/api/v3/index.json": {}, 97 | "https://dotnet.myget.org/F/roslyn/api/v3/index.json": {}, 98 | "https://dotnet.myget.org/F/system-commandline/api/v3/index.json": {}, 99 | "https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json": {} 100 | }, 101 | "frameworks": { 102 | "net5.0-windows7.0": { 103 | "targetAlias": "net5.0-windows", 104 | "projectReferences": {} 105 | } 106 | }, 107 | "warningProperties": { 108 | "warnAsError": [ 109 | "NU1605" 110 | ] 111 | } 112 | }, 113 | "frameworks": { 114 | "net5.0-windows7.0": { 115 | "targetAlias": "net5.0-windows", 116 | "dependencies": { 117 | "Microsoft.NETCore.Platforms": { 118 | "target": "Package", 119 | "version": "[5.0.2, )" 120 | }, 121 | "System.Data.SqlClient": { 122 | "target": "Package", 123 | "version": "[4.8.2, )" 124 | }, 125 | "System.Drawing.Common": { 126 | "target": "Package", 127 | "version": "[5.0.2, )" 128 | }, 129 | "System.Drawing.Primitives": { 130 | "target": "Package", 131 | "version": "[4.3.0, )" 132 | }, 133 | "System.Resources.Extensions": { 134 | "target": "Package", 135 | "version": "[5.0.0, )" 136 | }, 137 | "System.Windows.Extensions": { 138 | "target": "Package", 139 | "version": "[5.0.0, )" 140 | } 141 | }, 142 | "imports": [ 143 | "net461", 144 | "net462", 145 | "net47", 146 | "net471", 147 | "net472", 148 | "net48" 149 | ], 150 | "assetTargetFallback": true, 151 | "warn": true, 152 | "frameworkReferences": { 153 | "Microsoft.NETCore.App": { 154 | "privateAssets": "all" 155 | }, 156 | "Microsoft.WindowsDesktop.App.WindowsForms": { 157 | "privateAssets": "none" 158 | } 159 | }, 160 | "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.100-preview.2.21155.3\\RuntimeIdentifierGraph.json" 161 | } 162 | } 163 | } 164 | } 165 | } -------------------------------------------------------------------------------- /CareLink/Extensions/UnicodeNewline.vb: -------------------------------------------------------------------------------- 1 | ' Licensed to the .NET Foundation under one or more agreements. 2 | ' The .NET Foundation licenses this file to you under the MIT license. 3 | ' See the LICENSE file in the project root for more information. 4 | 5 | Imports System.Runtime.CompilerServices 6 | Imports System.Runtime.InteropServices 7 | Imports System.Text 8 | 9 | Public Enum UnicodeNewline 10 | Unknown 11 | 12 | ''' 13 | ''' Line Feed, U+000A 14 | ''' 15 | Lf = &HA 16 | 17 | CrLf = &HD0A 18 | 19 | ''' 20 | ''' Carriage Return, U+000D 21 | ''' 22 | Cr = &HD 23 | 24 | ''' 25 | ''' Next Line, U+0085 26 | ''' 27 | Nel = &H85 28 | 29 | ''' 30 | ''' Vertical Tab, U+000B 31 | ''' 32 | Vt = &HB 33 | 34 | ''' 35 | ''' Form Feed, U+000C 36 | ''' 37 | Ff = &HC 38 | 39 | ''' 40 | ''' Line Separator, U+2028 41 | ''' 42 | Ls = &H2028 43 | 44 | ''' 45 | ''' Paragraph Separator, U+2029 46 | ''' 47 | Ps = &H2029 48 | 49 | End Enum 50 | 51 | ''' 52 | ''' Defines Unicode new lines according to Unicode Technical Report #13 53 | ''' http://www.unicode.org/standard/reports/tr13/tr13-5.html 54 | ''' 55 | 56 | Public Module NewLine 57 | 58 | ''' 59 | ''' Carriage Return, U+000D 60 | ''' 61 | Public Const Cr As Char = ChrW(&HD) 62 | 63 | ''' 64 | ''' Line Feed, U+000A 65 | ''' 66 | Public Const Lf As Char = ChrW(&HA) 67 | 68 | ''' 69 | ''' Next Line, U+0085 70 | ''' 71 | Public Const Nel As Char = ChrW(&H85) 72 | 73 | ''' 74 | ''' Vertical Tab, U+000B 75 | ''' 76 | Public Const Vt As Char = ChrW(&HB) 77 | 78 | ''' 79 | ''' Form Feed, U+000C 80 | ''' 81 | Public Const Ff As Char = ChrW(&HC) 82 | 83 | ''' 84 | ''' Line Separator, U+2028 85 | ''' 86 | Public Const Ls As Char = ChrW(&H2028) 87 | 88 | ''' 89 | ''' Paragraph Separator, U+2029 90 | ''' 91 | Public Const Ps As Char = ChrW(&H2029) 92 | 93 | ''' 94 | ''' Determines if a char is a new line delimiter. 95 | ''' 96 | ''' 0 == no new line, otherwise it returns either 1 or 2 depending of the length of the delimiter. 97 | ''' The current character. 98 | ''' The next character (if != LF then length will always be 0 or 1). 99 | Public Function GetDelimiterLength(curChar As Char, nextChar As Char) As Integer 100 | If curChar = Cr Then 101 | If nextChar = Lf Then 102 | Return 2 103 | End If 104 | Return 1 105 | End If 106 | 107 | If curChar = Lf OrElse curChar = Nel OrElse curChar = Vt OrElse curChar = Ff OrElse curChar = Ls OrElse curChar = Ps Then 108 | Return 1 109 | End If 110 | Return 0 111 | End Function 112 | 113 | ''' 114 | ''' Determines if a char is a new line delimiter. 115 | ''' 116 | ''' 0 == no new line, otherwise it returns either 1 or 2 depending of the length of the delimiter. 117 | ''' The current character. 118 | ''' The length of the delimiter 119 | ''' The type of the delimiter 120 | ''' A callback getting the next character (may be null). 121 | Friend Function TryGetDelimiterLengthAndType(curChar As Char, ByRef length As Integer, ByRef type As UnicodeNewline, Optional nextChar As Func(Of Char) = Nothing) As Boolean 122 | If curChar = Cr Then 123 | If nextChar IsNot Nothing AndAlso nextChar() = Lf Then 124 | length = 2 125 | type = UnicodeNewline.CrLf 126 | Else 127 | length = 1 128 | type = UnicodeNewline.Cr 129 | 130 | End If 131 | Return True 132 | End If 133 | 134 | Select Case curChar 135 | Case Lf 136 | type = UnicodeNewline.Lf 137 | length = 1 138 | Return True 139 | Case Nel 140 | type = UnicodeNewline.Nel 141 | length = 1 142 | Return True 143 | Case Vt 144 | type = UnicodeNewline.Vt 145 | length = 1 146 | Return True 147 | Case Ff 148 | type = UnicodeNewline.Ff 149 | length = 1 150 | Return True 151 | Case Ls 152 | type = UnicodeNewline.Ls 153 | length = 1 154 | Return True 155 | Case Ps 156 | type = UnicodeNewline.Ps 157 | length = 1 158 | Return True 159 | End Select 160 | length = -1 161 | type = UnicodeNewline.Unknown 162 | Return False 163 | End Function 164 | 165 | ''' 166 | ''' Determines if a string is a new line delimiter. 167 | ''' 168 | ''' Note that the only 2 char wide new line is CR LF 169 | ''' 170 | 171 | Friend Function IsNewLine(str As String) As Boolean 172 | If String.IsNullOrEmpty(str) Then 173 | Return False 174 | End If 175 | Dim ch As Char = str.Chars(0) 176 | Select Case str.Length 177 | Case 0 178 | Return False 179 | Case 1, 2 180 | Return ch = Cr OrElse ch = Lf OrElse ch = Nel OrElse ch = Vt OrElse ch = Ff OrElse ch = Ls OrElse ch = Ps 181 | Case Else 182 | Return False 183 | End Select 184 | End Function 185 | 186 | 187 | Public Function SplitLines(text As String) As String() 188 | Dim result As New List(Of String)() 189 | If text Is Nothing Then 190 | Return result.ToArray 191 | End If 192 | Dim sb As New StringBuilder() 193 | 194 | Dim length As Integer = Nothing 195 | Dim type As UnicodeNewline = Nothing 196 | 197 | For index As Integer = 0 To text.Length - 1 198 | Dim ch As Char = text.Chars(index) 199 | ' Do not delete the next line 200 | Dim j As Integer = index 201 | If TryGetDelimiterLengthAndType(ch, length, type, Function() If(j < text.Length - 1, text.Chars(j + 1), ControlChars.NullChar)) Then 202 | result.Add(sb.ToString) 203 | sb.Length = 0 204 | ' ReSharper disable once RedundantAssignment 205 | index += length - 1 206 | Continue For 207 | End If 208 | sb.Append(ch) 209 | Next index 210 | If sb.Length > 0 Then 211 | result.Add(sb.ToString) 212 | End If 213 | 214 | Return result.ToArray 215 | End Function 216 | 217 | 218 | Friend Function JoinLines(lines As String(), delimiter As String) As String 219 | Return String.Join(separator:=delimiter, lines) 220 | End Function 221 | 222 | 223 | Friend Function NormalizeLineEndings(lines As String, Optional delimiter As String = vbCrLf) As String 224 | Return lines.SplitLines.JoinLines(delimiter) 225 | End Function 226 | 227 | ''' 228 | ''' Replace Unicode NewLines with ControlChars.NullChar or Specified Character 229 | ''' 230 | ''' Source Test 231 | ''' Default is vbNullChar 232 | ''' String with Unicode NewLines replaced with SubstituteChar 233 | 234 | Public Function WithoutNewLines(text As String, Optional substituteChar As Char = ControlChars.NullChar) As String 235 | If text Is Nothing Then 236 | Throw New ArgumentNullException(NameOf(text)) 237 | End If 238 | 239 | Dim sb As New StringBuilder() 240 | Dim length As Integer = Nothing 241 | Dim type As UnicodeNewline = Nothing 242 | 243 | For index As Integer = 0 To text.Length - 1 244 | Dim ch As Char = text.Chars(index) 245 | ' Do not delete the next line 246 | Dim j As Integer = index 247 | If TryGetDelimiterLengthAndType(ch, length, type, Function() If(j < text.Length - 1, text.Chars(j + 1), substituteChar)) Then 248 | ' ReSharper disable once RedundantAssignment 249 | index += length - 1 250 | Continue For 251 | End If 252 | sb.Append(ch) 253 | Next index 254 | Return sb.ToString 255 | End Function 256 | 257 | End Module 258 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | # editorconfig.org 3 | 4 | # top-most EditorConfig file 5 | 6 | # Default settings: 7 | # A newline ending every file 8 | # Use 4 spaces as indentation 9 | [*] 10 | indent_style = space 11 | indent_size = 4 12 | file_header_template = Licensed to the .NET Foundation under one or more agreements.\nThe .NET Foundation licenses this file to you under the MIT license.\nSee the LICENSE file in the project root for more information. 13 | 14 | # ReSharper properties 15 | resharper_vb_prefer_qualified_reference = true 16 | 17 | [*.json] 18 | indent_size = 2 19 | 20 | # C# and VB files 21 | [*.{cs,vb}] 22 | charset = utf-8-bom 23 | insert_final_newline = true 24 | trim_trailing_whitespace = true 25 | 26 | dotnet_separate_import_directive_groups = false 27 | dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:suggestion 28 | dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:suggestion 29 | dotnet_style_parentheses_in_other_operators = never_if_unnecessary:suggestion 30 | dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:suggestion 31 | dotnet_style_prefer_auto_properties = true:silent 32 | dotnet_style_prefer_conditional_expression_over_assignment = true 33 | dotnet_style_prefer_conditional_expression_over_return = true 34 | dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion 35 | dotnet_style_prefer_inferred_tuple_names = true:suggestion 36 | dotnet_style_prefer_is_null_check_over_reference_equality_method = true:silent 37 | dotnet_style_readonly_field = true:suggestion 38 | dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent 39 | 40 | # avoid this. unless absolutely necessary 41 | dotnet_style_qualification_for_field = false:suggestion 42 | dotnet_style_qualification_for_property = false:suggestion 43 | dotnet_style_qualification_for_event = false:suggestion 44 | # use language keywords instead of BCL types 45 | dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion 46 | dotnet_style_predefined_type_for_member_access = true:suggestion 47 | 48 | # name all constant fields using PascalCase 49 | dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion 50 | dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields 51 | dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style 52 | 53 | dotnet_naming_symbols.constant_fields.applicable_kinds = field 54 | dotnet_naming_symbols.constant_fields.required_modifiers = const 55 | 56 | dotnet_naming_style.pascal_case_style.capitalization = pascal_case 57 | 58 | # static fields should have s_ prefix 59 | dotnet_naming_rule.static_fields_should_have_prefix.severity = silent 60 | dotnet_naming_rule.static_fields_should_have_prefix.symbols = static_fields 61 | dotnet_naming_rule.static_fields_should_have_prefix.style = static_prefix_style 62 | 63 | dotnet_naming_symbols.static_fields.applicable_kinds = field 64 | dotnet_naming_symbols.static_fields.required_modifiers = static 65 | 66 | dotnet_naming_style.static_prefix_style.required_prefix = s_ 67 | dotnet_naming_style.static_prefix_style.capitalization = camel_case 68 | 69 | # internal and private fields should be _camelCase 70 | dotnet_naming_rule.camel_case_for_private_internal_fields.severity = suggestion 71 | dotnet_naming_rule.camel_case_for_private_internal_fields.symbols = private_internal_fields 72 | dotnet_naming_rule.camel_case_for_private_internal_fields.style = camel_case_underscore_style 73 | 74 | dotnet_naming_symbols.private_internal_fields.applicable_kinds = field 75 | dotnet_naming_symbols.private_internal_fields.applicable_accessibilities = private, internal 76 | 77 | dotnet_naming_style.camel_case_underscore_style.required_prefix = _ 78 | dotnet_naming_style.camel_case_underscore_style.capitalization = camel_case 79 | 80 | # Code style defaults 81 | dotnet_sort_system_directives_first = true 82 | 83 | # Expression-level preferences 84 | dotnet_style_object_initializer = true:suggestion 85 | dotnet_style_collection_initializer = true:suggestion 86 | dotnet_style_explicit_tuple_names = true:suggestion 87 | dotnet_style_coalesce_expression = true:suggestion 88 | dotnet_style_null_propagation = true:suggestion 89 | 90 | # C# files 91 | [*.cs] 92 | dotnet_style_qualification_for_method = false:suggestion 93 | csharp_indent_case_contents_when_block = true 94 | csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion 95 | csharp_prefer_braces = true:silent 96 | csharp_prefer_simple_default_expression = true:suggestion 97 | csharp_style_deconstructed_variable_declaration = true:suggestion 98 | csharp_style_pattern_local_over_anonymous_function = true:suggestion 99 | csharp_using_directive_placement = outside_namespace:silent 100 | 101 | # New line preferences 102 | csharp_new_line_before_open_brace = all 103 | csharp_new_line_before_else = true 104 | csharp_new_line_before_catch = true 105 | csharp_new_line_before_finally = true 106 | csharp_new_line_before_members_in_object_initializers = true 107 | csharp_new_line_before_members_in_anonymous_types = true 108 | csharp_new_line_between_query_expression_clauses = true 109 | 110 | # Indentation preferences 111 | csharp_indent_block_contents = true 112 | csharp_indent_braces = false 113 | csharp_indent_case_contents = true 114 | csharp_indent_switch_labels = true 115 | csharp_indent_labels = one_less_than_current 116 | 117 | # only use var when it's obvious what the variable type is 118 | csharp_style_var_for_built_in_types = false:none 119 | csharp_style_var_when_type_is_apparent = false:none 120 | csharp_style_var_elsewhere = false:suggestion 121 | 122 | # Code style defaults 123 | csharp_preserve_single_line_blocks = true 124 | csharp_preserve_single_line_statements = false 125 | 126 | # Expression-bodied members 127 | csharp_style_expression_bodied_methods = false:none 128 | csharp_style_expression_bodied_constructors = false:none 129 | csharp_style_expression_bodied_operators = false:none 130 | csharp_style_expression_bodied_properties = true:none 131 | csharp_style_expression_bodied_indexers = true:none 132 | csharp_style_expression_bodied_accessors = true:none 133 | 134 | # Pattern matching 135 | csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion 136 | csharp_style_pattern_matching_over_as_with_null_check = true:suggestion 137 | csharp_style_inlined_variable_declaration = true:suggestion 138 | 139 | # Null checking preferences 140 | csharp_style_throw_expression = true:suggestion 141 | csharp_style_conditional_delegate_call = true:suggestion 142 | 143 | # Space preferences 144 | csharp_space_after_cast = false 145 | csharp_space_after_colon_in_inheritance_clause = true 146 | csharp_space_after_comma = true 147 | csharp_space_after_dot = false 148 | csharp_space_after_keywords_in_control_flow_statements = true 149 | csharp_space_after_semicolon_in_for_statement = true 150 | csharp_space_around_binary_operators = before_and_after 151 | csharp_space_around_declaration_statements = do_not_ignore 152 | csharp_space_before_colon_in_inheritance_clause = true 153 | csharp_space_before_comma = false 154 | csharp_space_before_dot = false 155 | csharp_space_before_open_square_brackets = false 156 | csharp_space_before_semicolon_in_for_statement = false 157 | csharp_space_between_empty_square_brackets = false 158 | csharp_space_between_method_call_empty_parameter_list_parentheses = false 159 | csharp_space_between_method_call_name_and_opening_parenthesis = false 160 | csharp_space_between_method_call_parameter_list_parentheses = false 161 | csharp_space_between_method_declaration_empty_parameter_list_parentheses = false 162 | csharp_space_between_method_declaration_name_and_open_parenthesis = false 163 | csharp_space_between_method_declaration_parameter_list_parentheses = false 164 | csharp_space_between_parentheses = false 165 | csharp_space_between_square_brackets = false 166 | 167 | # Visual Basic files 168 | [*.vb] 169 | # Modifier preferences 170 | visual_basic_preferred_modifier_order = Partial,Default,Private,Protected,Public,Friend,NotOverridable,Overridable,MustOverride,Overloads,Overrides,MustInherit,NotInheritable,Static,Shared,Shadows,ReadOnly,WriteOnly,Dim,Const,WithEvents,Widening,Narrowing,Custom,Async:suggestion 171 | dotnet_style_qualification_for_method = true:warning 172 | dotnet_style_qualification_for_property = true:warning 173 | 174 | # locals should be camelCase 175 | dotnet_naming_symbols.locals.applicable_kinds = local 176 | dotnet_naming_style.camel_case_style.capitalization = camel_case 177 | dotnet_naming_rule.locals_must_have_camel_case.symbols = locals 178 | dotnet_naming_rule.locals_must_have_camel_case.severity = warning 179 | dotnet_naming_rule.locals_must_have_camel_case.style = camel_case_style 180 | 181 | # See https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-naming-conventions?view=vs-2019 182 | # Also see https://github.com/canton7/RestEase/blob/f7efb7684b96ce9da4f55d52f7abfa94eb7c0340/src/.editorconfig#L215 183 | 184 | # Symbols: async and method 185 | #dotnet_naming_symbols.async_methods.applicable_kinds = method 186 | #dotnet_naming_symbols.async_methods.required_modifiers = async 187 | 188 | # Style: must be Pascal case and end in Async 189 | #dotnet_naming_style.async_suffix.required_suffix = Async 190 | #dotnet_naming_style.async_suffix.capitalization = pascal_case 191 | 192 | # Rule: async methods must be pascal case and end with "Async" 193 | #dotnet_naming_rule.async_methods_must_have_async_suffix.symbols = async_methods 194 | #dotnet_naming_rule.async_methods_must_have_async_suffix.style = async_suffix 195 | #dotnet_naming_rule.async_methods_must_have_async_suffix.severity = warning 196 | 197 | # CA1031: Do not catch general exception types 198 | dotnet_diagnostic.ca1031.severity = silent 199 | 200 | # CA1050: Declare types in namespaces 201 | dotnet_diagnostic.CA1050.severity = none 202 | 203 | # CA1303: Do not pass literals as localized parameters 204 | dotnet_diagnostic.ca1303.severity = silent 205 | 206 | # CA1308: Do not pass literals as localized parameters 207 | dotnet_diagnostic.ca1308.severity = suggestion 208 | 209 | # CA1826: Do not use Enumerable methods on indexable collections. Instead use the collection directly 210 | dotnet_diagnostic.ca1826.severity = silent 211 | 212 | # Xml project files 213 | [*.{csproj,vcxproj,vcxproj.filters,proj,nativeproj,locproj,vbproj}] 214 | indent_size = 2 215 | 216 | # Xml config files 217 | [*.{props,targets,config,nuspec}] 218 | indent_size = 2 219 | 220 | # resx Files 221 | [*.{resx,xlf}] 222 | indent_size = 2 223 | charset = utf-8-bom 224 | insert_final_newline = true 225 | 226 | [*.{cmd,bat}] 227 | end_of_line = crlf 228 | -------------------------------------------------------------------------------- /CareLink/My Project/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Images\Shield.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | 125 | ..\Images\SensorCommunicationLost.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 126 | 127 | 128 | ..\Images\SensorExpirationUnknown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 129 | 130 | 131 | ..\Images\CalibrationDotRed.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 132 | 133 | 134 | ..\Images\PumpBatteryFull.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 135 | 136 | 137 | ..\Images\PumpBatteryHigh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 138 | 139 | 140 | ..\Images\InsulinVial.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 141 | 142 | 143 | ..\Images\PumpBatteryCritical.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 144 | 145 | 146 | ..\Images\SensorLifeNotOK.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 147 | 148 | 149 | ..\Images\TransmitterBatteryMedium.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 150 | 151 | 152 | ..\Images\Shield Disabled.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 153 | 154 | 155 | ..\Images\InsulinVial Tiny.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 156 | 157 | 158 | ..\Images\TransmitterBatteryLow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 159 | 160 | 161 | ..\Images\SensorExpired.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 162 | 163 | 164 | ..\Images\CalibrationDot.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 165 | 166 | 167 | ..\Images\TransmitterBatteryFull.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 168 | 169 | 170 | ..\Images\MealImage .png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 171 | 172 | 173 | ..\Images\TransmitterBatteryOK.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 174 | 175 | 176 | ..\Images\SensorLifeOK.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 177 | 178 | 179 | ..\Images\MealImageLarge.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 180 | 181 | 182 | ..\Images\PumpBatteryUnknown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 183 | 184 | 185 | ..\Images\PumpBatteryLow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 186 | 187 | 188 | ..\Images\PumpBatteryMedium.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 189 | 190 | 191 | ..\Images\TransmitterBatteryUnknown.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 192 | 193 | 194 | ..\Images\CalibrationNotReady.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 195 | 196 | 197 | ..\Images\CalibrationUnavailable.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 198 | 199 | -------------------------------------------------------------------------------- /CareLink/My Project/Resources.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.42000 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | Imports System 15 | 16 | Namespace My.Resources 17 | 18 | 'This class was auto-generated by the StronglyTypedResourceBuilder 19 | 'class via a tool like ResGen or Visual Studio. 20 | 'To add or remove a member, edit your .ResX file then rerun ResGen 21 | 'with the /str option, or rebuild your VS project. 22 | ''' 23 | ''' A strongly-typed resource class, for looking up localized strings, etc. 24 | ''' 25 | _ 29 | Friend Module Resources 30 | 31 | Private resourceMan As Global.System.Resources.ResourceManager 32 | 33 | Private resourceCulture As Global.System.Globalization.CultureInfo 34 | 35 | ''' 36 | ''' Returns the cached ResourceManager instance used by this class. 37 | ''' 38 | _ 39 | Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager 40 | Get 41 | If Object.ReferenceEquals(resourceMan, Nothing) Then 42 | Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("CareLink.Resources", GetType(Resources).Assembly) 43 | resourceMan = temp 44 | End If 45 | Return resourceMan 46 | End Get 47 | End Property 48 | 49 | ''' 50 | ''' Overrides the current thread's CurrentUICulture property for all 51 | ''' resource lookups using this strongly typed resource class. 52 | ''' 53 | _ 54 | Friend Property Culture() As Global.System.Globalization.CultureInfo 55 | Get 56 | Return resourceCulture 57 | End Get 58 | Set 59 | resourceCulture = value 60 | End Set 61 | End Property 62 | 63 | ''' 64 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 65 | ''' 66 | Friend ReadOnly Property CalibrationDot() As System.Drawing.Bitmap 67 | Get 68 | Dim obj As Object = ResourceManager.GetObject("CalibrationDot", resourceCulture) 69 | Return CType(obj,System.Drawing.Bitmap) 70 | End Get 71 | End Property 72 | 73 | ''' 74 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 75 | ''' 76 | Friend ReadOnly Property CalibrationDotRed() As System.Drawing.Bitmap 77 | Get 78 | Dim obj As Object = ResourceManager.GetObject("CalibrationDotRed", resourceCulture) 79 | Return CType(obj,System.Drawing.Bitmap) 80 | End Get 81 | End Property 82 | 83 | ''' 84 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 85 | ''' 86 | Friend ReadOnly Property CalibrationNotReady() As System.Drawing.Bitmap 87 | Get 88 | Dim obj As Object = ResourceManager.GetObject("CalibrationNotReady", resourceCulture) 89 | Return CType(obj,System.Drawing.Bitmap) 90 | End Get 91 | End Property 92 | 93 | ''' 94 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 95 | ''' 96 | Friend ReadOnly Property CalibrationUnavailable() As System.Drawing.Bitmap 97 | Get 98 | Dim obj As Object = ResourceManager.GetObject("CalibrationUnavailable", resourceCulture) 99 | Return CType(obj,System.Drawing.Bitmap) 100 | End Get 101 | End Property 102 | 103 | ''' 104 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 105 | ''' 106 | Friend ReadOnly Property InsulinVial() As System.Drawing.Bitmap 107 | Get 108 | Dim obj As Object = ResourceManager.GetObject("InsulinVial", resourceCulture) 109 | Return CType(obj,System.Drawing.Bitmap) 110 | End Get 111 | End Property 112 | 113 | ''' 114 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 115 | ''' 116 | Friend ReadOnly Property InsulinVial_Tiny() As System.Drawing.Bitmap 117 | Get 118 | Dim obj As Object = ResourceManager.GetObject("InsulinVial_Tiny", resourceCulture) 119 | Return CType(obj,System.Drawing.Bitmap) 120 | End Get 121 | End Property 122 | 123 | ''' 124 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 125 | ''' 126 | Friend ReadOnly Property MealImage() As System.Drawing.Bitmap 127 | Get 128 | Dim obj As Object = ResourceManager.GetObject("MealImage", resourceCulture) 129 | Return CType(obj,System.Drawing.Bitmap) 130 | End Get 131 | End Property 132 | 133 | ''' 134 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 135 | ''' 136 | Friend ReadOnly Property MealImageLarge() As System.Drawing.Bitmap 137 | Get 138 | Dim obj As Object = ResourceManager.GetObject("MealImageLarge", resourceCulture) 139 | Return CType(obj,System.Drawing.Bitmap) 140 | End Get 141 | End Property 142 | 143 | ''' 144 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 145 | ''' 146 | Friend ReadOnly Property PumpBatteryCritical() As System.Drawing.Bitmap 147 | Get 148 | Dim obj As Object = ResourceManager.GetObject("PumpBatteryCritical", resourceCulture) 149 | Return CType(obj,System.Drawing.Bitmap) 150 | End Get 151 | End Property 152 | 153 | ''' 154 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 155 | ''' 156 | Friend ReadOnly Property PumpBatteryFull() As System.Drawing.Bitmap 157 | Get 158 | Dim obj As Object = ResourceManager.GetObject("PumpBatteryFull", resourceCulture) 159 | Return CType(obj,System.Drawing.Bitmap) 160 | End Get 161 | End Property 162 | 163 | ''' 164 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 165 | ''' 166 | Friend ReadOnly Property PumpBatteryHigh() As System.Drawing.Bitmap 167 | Get 168 | Dim obj As Object = ResourceManager.GetObject("PumpBatteryHigh", resourceCulture) 169 | Return CType(obj,System.Drawing.Bitmap) 170 | End Get 171 | End Property 172 | 173 | ''' 174 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 175 | ''' 176 | Friend ReadOnly Property PumpBatteryLow() As System.Drawing.Bitmap 177 | Get 178 | Dim obj As Object = ResourceManager.GetObject("PumpBatteryLow", resourceCulture) 179 | Return CType(obj,System.Drawing.Bitmap) 180 | End Get 181 | End Property 182 | 183 | ''' 184 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 185 | ''' 186 | Friend ReadOnly Property PumpBatteryMedium() As System.Drawing.Bitmap 187 | Get 188 | Dim obj As Object = ResourceManager.GetObject("PumpBatteryMedium", resourceCulture) 189 | Return CType(obj,System.Drawing.Bitmap) 190 | End Get 191 | End Property 192 | 193 | ''' 194 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 195 | ''' 196 | Friend ReadOnly Property PumpBatteryUnknown() As System.Drawing.Bitmap 197 | Get 198 | Dim obj As Object = ResourceManager.GetObject("PumpBatteryUnknown", resourceCulture) 199 | Return CType(obj,System.Drawing.Bitmap) 200 | End Get 201 | End Property 202 | 203 | ''' 204 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 205 | ''' 206 | Friend ReadOnly Property SensorCommunicationLost() As System.Drawing.Bitmap 207 | Get 208 | Dim obj As Object = ResourceManager.GetObject("SensorCommunicationLost", resourceCulture) 209 | Return CType(obj,System.Drawing.Bitmap) 210 | End Get 211 | End Property 212 | 213 | ''' 214 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 215 | ''' 216 | Friend ReadOnly Property SensorExpirationUnknown() As System.Drawing.Bitmap 217 | Get 218 | Dim obj As Object = ResourceManager.GetObject("SensorExpirationUnknown", resourceCulture) 219 | Return CType(obj,System.Drawing.Bitmap) 220 | End Get 221 | End Property 222 | 223 | ''' 224 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 225 | ''' 226 | Friend ReadOnly Property SensorExpired() As System.Drawing.Bitmap 227 | Get 228 | Dim obj As Object = ResourceManager.GetObject("SensorExpired", resourceCulture) 229 | Return CType(obj,System.Drawing.Bitmap) 230 | End Get 231 | End Property 232 | 233 | ''' 234 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 235 | ''' 236 | Friend ReadOnly Property SensorLifeNotOK() As System.Drawing.Bitmap 237 | Get 238 | Dim obj As Object = ResourceManager.GetObject("SensorLifeNotOK", resourceCulture) 239 | Return CType(obj,System.Drawing.Bitmap) 240 | End Get 241 | End Property 242 | 243 | ''' 244 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 245 | ''' 246 | Friend ReadOnly Property SensorLifeOK() As System.Drawing.Bitmap 247 | Get 248 | Dim obj As Object = ResourceManager.GetObject("SensorLifeOK", resourceCulture) 249 | Return CType(obj,System.Drawing.Bitmap) 250 | End Get 251 | End Property 252 | 253 | ''' 254 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 255 | ''' 256 | Friend ReadOnly Property Shield() As System.Drawing.Bitmap 257 | Get 258 | Dim obj As Object = ResourceManager.GetObject("Shield", resourceCulture) 259 | Return CType(obj,System.Drawing.Bitmap) 260 | End Get 261 | End Property 262 | 263 | ''' 264 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 265 | ''' 266 | Friend ReadOnly Property Shield_Disabled() As System.Drawing.Bitmap 267 | Get 268 | Dim obj As Object = ResourceManager.GetObject("Shield_Disabled", resourceCulture) 269 | Return CType(obj,System.Drawing.Bitmap) 270 | End Get 271 | End Property 272 | 273 | ''' 274 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 275 | ''' 276 | Friend ReadOnly Property TransmitterBatteryFull() As System.Drawing.Bitmap 277 | Get 278 | Dim obj As Object = ResourceManager.GetObject("TransmitterBatteryFull", resourceCulture) 279 | Return CType(obj,System.Drawing.Bitmap) 280 | End Get 281 | End Property 282 | 283 | ''' 284 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 285 | ''' 286 | Friend ReadOnly Property TransmitterBatteryLow() As System.Drawing.Bitmap 287 | Get 288 | Dim obj As Object = ResourceManager.GetObject("TransmitterBatteryLow", resourceCulture) 289 | Return CType(obj,System.Drawing.Bitmap) 290 | End Get 291 | End Property 292 | 293 | ''' 294 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 295 | ''' 296 | Friend ReadOnly Property TransmitterBatteryMedium() As System.Drawing.Bitmap 297 | Get 298 | Dim obj As Object = ResourceManager.GetObject("TransmitterBatteryMedium", resourceCulture) 299 | Return CType(obj,System.Drawing.Bitmap) 300 | End Get 301 | End Property 302 | 303 | ''' 304 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 305 | ''' 306 | Friend ReadOnly Property TransmitterBatteryOK() As System.Drawing.Bitmap 307 | Get 308 | Dim obj As Object = ResourceManager.GetObject("TransmitterBatteryOK", resourceCulture) 309 | Return CType(obj,System.Drawing.Bitmap) 310 | End Get 311 | End Property 312 | 313 | ''' 314 | ''' Looks up a localized resource of type System.Drawing.Bitmap. 315 | ''' 316 | Friend ReadOnly Property TransmitterBatteryUnknown() As System.Drawing.Bitmap 317 | Get 318 | Dim obj As Object = ResourceManager.GetObject("TransmitterBatteryUnknown", resourceCulture) 319 | Return CType(obj,System.Drawing.Bitmap) 320 | End Get 321 | End Property 322 | End Module 323 | End Namespace 324 | -------------------------------------------------------------------------------- /CareLink/carelink_client.vb: -------------------------------------------------------------------------------- 1 | ' Licensed to the .NET Foundation under one or more agreements. 2 | ' The .NET Foundation licenses this file to you under the MIT license. 3 | ' See the LICENSE file in the project root for more information. 4 | 5 | Imports System.Net 6 | Imports System.Net.Http 7 | 8 | Public Module CarelinkClient 9 | Private Const CarelinkAuthTokenCookieName As String = "auth_tmp_token" 10 | Private Const CarelinkConnectServerEu As String = "carelink.minimed.eu" 11 | Private Const CarelinkConnectServerUs As String = "carelink.minimed.com" 12 | Private Const CarelinkLanguageEn As String = "en" 13 | Private Const CarelinkLocaleEn As String = "en" 14 | Private Const CarelinkTokenValidtoCookieName As String = "c_token_valid_to" 15 | 16 | Public Class CareLinkClient 17 | Inherits Object 18 | 19 | Private ReadOnly _carelinkCountry As String 20 | Private ReadOnly _carelinkPassword As String 21 | Private ReadOnly _carelinkUsername As String 22 | Private ReadOnly _commonHeaders As Dictionary(Of String, String) 23 | Private ReadOnly _httpClient As HttpClient 24 | Private ReadOnly _httpClientHandler As HttpClientHandler 25 | Private _lastDataSuccess As Boolean 26 | Private _lastResponseCode As HttpStatusCode 27 | Private _loginInProcess As Boolean 28 | Private _sessionCountrySettings As Dictionary(Of String, String) 29 | Private _sessionMonitorData As Dictionary(Of String, String) 30 | Private _sessionProfile As Dictionary(Of String, String) 31 | Private _sessionUser As Dictionary(Of String, String) 32 | 33 | Public Sub New(carelinkUsername As String, carelinkPassword As String, carelinkCountry As String) 34 | ' User info 35 | _carelinkUsername = carelinkUsername 36 | _carelinkPassword = carelinkPassword 37 | _carelinkCountry = carelinkCountry 38 | ' Session info 39 | _sessionUser = Nothing 40 | _sessionProfile = Nothing 41 | _sessionCountrySettings = Nothing 42 | _sessionMonitorData = Nothing 43 | ' State info 44 | _loginInProcess = False 45 | Me.LoggedIn = False 46 | _lastDataSuccess = False 47 | _lastResponseCode = Nothing 48 | Me.LastErrorMessage = Nothing 49 | _commonHeaders = New Dictionary(Of String, String) From { 50 | { 51 | "Accept-Language", 52 | "en;q=0.9, *;q=0.8"}, 53 | { 54 | "Connection", 55 | "keep-alive"}, 56 | { 57 | "sec-ch-ua", 58 | """Google Chrome"";v=""87"", "" Not;A Brand"";v=""99"", ""Chromium"";v=""87"""}, 59 | { 60 | "User-Agent", 61 | "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"}, 62 | { 63 | "Accept", 64 | "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"}} 65 | 66 | Dim cookieContainer As New CookieContainer() 67 | _httpClientHandler = New HttpClientHandler With {.CookieContainer = cookieContainer} 68 | _httpClient = New HttpClient(_httpClientHandler) 69 | End Sub 70 | 71 | Public Property LastErrorMessage As String 72 | Public Property LoggedIn As Boolean 73 | 74 | Private Shared Function Parse_qsl(loginSessionResponse As HttpResponseMessage) As Dictionary(Of String, String) 75 | Dim result As New Dictionary(Of String, String) 76 | Dim absoluteUri As String = loginSessionResponse.RequestMessage.RequestUri.AbsoluteUri 77 | Dim splitAbsoluteUri() As String = absoluteUri.Split("&") 78 | For Each item As String In splitAbsoluteUri 79 | Dim splitItem() As String 80 | If Not result.Any Then 81 | item = item.Split("?")(1) 82 | End If 83 | splitItem = item.Split("=") 84 | result.Add(splitItem(0), splitItem(1)) 85 | Next 86 | Return result 87 | End Function 88 | 89 | Private Function GetCookies(url As String) As CookieCollection 90 | If String.IsNullOrWhiteSpace(url) Then 91 | Return Nothing 92 | End If 93 | Return _httpClientHandler.CookieContainer.GetCookies(New Uri($"https://{url}")) 94 | End Function 95 | 96 | Private Function GetCookieValue(url As String, cookieName As String) As String 97 | If String.IsNullOrWhiteSpace(url) Then 98 | Return Nothing 99 | End If 100 | Dim cookie As Cookie = _httpClientHandler.CookieContainer.GetCookies(New Uri($"https://{url}")).Cast(Of Cookie)().FirstOrDefault(Function(c As Cookie) c.Name = cookieName) 101 | Return cookie?.Value 102 | End Function 103 | 104 | Public Shared Sub Printdbg(msg As String) 105 | Console.WriteLine(msg) 106 | Application.DoEvents() 107 | End Sub 108 | 109 | ' Get server URL 110 | Public Overridable Function __careLinkServer() As String 111 | Return If(_carelinkCountry = "us", CarelinkConnectServerUs, CarelinkConnectServerEu) 112 | End Function 113 | 114 | Public Overridable Function __correctTimeInRecentData(recentData As Dictionary(Of String, String)) As Boolean 115 | ' TODO 116 | Return True 117 | End Function 118 | 119 | Public Overridable Function __doConsent(doLoginResponse As HttpResponseMessage) As HttpResponseMessage 120 | 121 | ' Extract data for consent 122 | Dim doLoginRespBody As String = doLoginResponse.Text 123 | Dim url As String = Me.__extractResponseData(doLoginRespBody, "
") 125 | Dim sessionData As String = Me.__extractResponseData(doLoginRespBody, "") 126 | ' Send consent 127 | Dim form As New Dictionary(Of String, String) From { 128 | { 129 | "action", 130 | "consent"}, 131 | { 132 | "sessionID", 133 | sessionId}, 134 | { 135 | "sessionData", 136 | sessionData}, 137 | { 138 | "response_type", 139 | "code"}, 140 | { 141 | "response_mode", 142 | "query"}} 143 | ' Add header 144 | Dim consentHeaders As Dictionary(Of String, String) = _commonHeaders 145 | consentHeaders("Content-Type") = "application/x-www-form-urlencoded" 146 | 147 | Try 148 | Dim response As HttpResponseMessage = _httpClient.Post(url, headers:=consentHeaders, data:=form) 149 | If response.StatusCode = HttpStatusCode.OK Then 150 | Printdbg("__doConsent() success") 151 | Return response 152 | ElseIf response.StatusCode = HttpStatusCode.BadRequest Then 153 | Printdbg("Login Failure") 154 | Printdbg("__doConsent() failed") 155 | Return response 156 | Else 157 | Throw New Exception("session response is not OK") 158 | End If 159 | Catch e As Exception 160 | Printdbg(e.Message) 161 | Printdbg("__doConsent() failed") 162 | End Try 163 | 164 | Return Nothing 165 | End Function 166 | 167 | Public Overridable Function __doLogin(loginSessionResponse As HttpResponseMessage) As HttpResponseMessage 168 | 169 | Dim queryParameters As Dictionary(Of String, String) = Parse_qsl(loginSessionResponse) 170 | Const url As String = "https://mdtlogin.medtronic.com/mmcl/auth/oauth/v2/authorize/login" 171 | Dim payload As New Dictionary(Of String, String) From { 172 | { 173 | "country", 174 | _carelinkCountry}, 175 | { 176 | "locale", 177 | CarelinkLocaleEn}} 178 | Dim form As New Dictionary(Of String, String) From { 179 | { 180 | "sessionID", 181 | queryParameters("sessionID")}, 182 | { 183 | "sessionData", 184 | queryParameters("sessionData")}, 185 | { 186 | "locale", 187 | CarelinkLocaleEn}, 188 | { 189 | "action", 190 | "login"}, 191 | { 192 | "username", 193 | _carelinkUsername}, 194 | { 195 | "password", 196 | _carelinkPassword}, 197 | { 198 | "actionButton", 199 | "Log in"}} 200 | Try 201 | Dim response As HttpResponseMessage = _httpClient.Post(url, _commonHeaders, params:=payload, data:=form) 202 | If Not response.StatusCode = HttpStatusCode.OK Then 203 | Throw New Exception("session response is not OK") 204 | End If 205 | Printdbg("__doLogin() success") 206 | Return response 207 | Catch e As Exception 208 | Printdbg(e.Message) 209 | Printdbg("__doLogin() failed") 210 | End Try 211 | Return Nothing 212 | End Function 213 | 214 | Public Overridable Function __executeLoginProcedure() As Boolean 215 | Dim lastLoginSuccess As Boolean = False 216 | _loginInProcess = True 217 | Me.LastErrorMessage = Nothing 218 | Try 219 | ' Clear cookies 220 | _httpClient.DefaultRequestHeaders.Clear() 221 | 222 | ' Clear basic infos 223 | _sessionUser = Nothing 224 | _sessionProfile = Nothing 225 | _sessionCountrySettings = Nothing 226 | _sessionMonitorData = Nothing 227 | 228 | ' Open login(get SessionId And SessionData) 229 | Dim loginSessionResponse As HttpResponseMessage = Me.__getLoginSessionAsync() 230 | _lastResponseCode = loginSessionResponse.StatusCode 231 | 232 | ' Login 233 | Dim doLoginResponse As HttpResponseMessage = Me.__doLogin(loginSessionResponse) 234 | If doLoginResponse Is Nothing Then 235 | Me.LastErrorMessage = "Login Failure" 236 | Return lastLoginSuccess 237 | 238 | End If 239 | _lastResponseCode = doLoginResponse.StatusCode 240 | 241 | 'setLastResponseBody(loginSessionResponse) 242 | loginSessionResponse.Dispose() 243 | 244 | ' Consent 245 | Dim consentResponse As HttpResponseMessage = Me.__doConsent(doLoginResponse) 246 | _lastResponseCode = consentResponse.StatusCode 247 | If consentResponse.StatusCode = HttpStatusCode.BadRequest Then 248 | Me.LastErrorMessage = "Login Failure" 249 | Return lastLoginSuccess 250 | End If 251 | 'setLastResponseBody(consentResponse); 252 | doLoginResponse.Dispose() 253 | consentResponse.Dispose() 254 | 255 | ' Get sessions infos if required 256 | If _sessionUser Is Nothing Then 257 | _sessionUser = Me.__getMyUser() 258 | End If 259 | If _sessionProfile Is Nothing Then 260 | _sessionProfile = Me.__getMyProfile() 261 | End If 262 | If _sessionCountrySettings Is Nothing Then 263 | _sessionCountrySettings = Me.__getCountrySettings(_carelinkCountry, CarelinkLanguageEn) 264 | End If 265 | If _sessionMonitorData Is Nothing Then 266 | _sessionMonitorData = Me.__getMonitorData() 267 | End If 268 | 269 | ' Set login success if everything was OK: 270 | If _sessionUser IsNot Nothing AndAlso _sessionProfile IsNot Nothing AndAlso _sessionCountrySettings IsNot Nothing AndAlso _sessionMonitorData IsNot Nothing Then 271 | lastLoginSuccess = True 272 | End If 273 | Catch e As Exception 274 | Printdbg(e.Message) 275 | Me.LastErrorMessage = e.Message 276 | Finally 277 | _loginInProcess = False 278 | Me.LoggedIn = lastLoginSuccess 279 | End Try 280 | Return lastLoginSuccess 281 | 282 | End Function 283 | 284 | Public Overridable Function __extractResponseData(responseBody As String, begstr As String, endstr As String) As String 285 | Dim beg As Integer = responseBody.IndexOf(begstr, StringComparison.Ordinal) + begstr.Length 286 | Dim [end] As Integer = responseBody.IndexOf(endstr, beg, StringComparison.Ordinal) 287 | Return responseBody.Substring(beg, [end] - beg).Replace("""", "") 288 | End Function 289 | 290 | Public Overridable Function __getAuthorizationToken() As String 291 | Dim authToken As String = Me.GetCookieValue(Me.__careLinkServer, CarelinkAuthTokenCookieName) 292 | Dim authTokenValidto As String = Me.GetCookies(Me.__careLinkServer)?.Item(CarelinkTokenValidtoCookieName)?.Value 293 | ' New token is needed: 294 | ' a) no token or about to expire => execute authentication 295 | ' b) last response 401 296 | If authToken Is Nothing OrElse authTokenValidto Is Nothing OrElse New List(Of Object) From { 297 | 401, 298 | 403 299 | }.Contains(_lastResponseCode) Then 300 | ' TODO: add check for expired token 301 | ' execute new login process | null, if error OR already doing login 302 | 'if loginInProcess or not executeLoginProcedure(): 303 | If _loginInProcess Then 304 | Printdbg("loginInProcess") 305 | Return Nothing 306 | End If 307 | If Not Me.__executeLoginProcedure() Then 308 | Printdbg("__executeLoginProcedure failed") 309 | Return Nothing 310 | End If 311 | Printdbg($"auth_token_validto = {Me.GetCookies(Me.__careLinkServer).Item(CarelinkTokenValidtoCookieName).Value}") 312 | End If 313 | ' there can be only one 314 | Return $"Bearer {Me.GetCookieValue(Me.__careLinkServer, CarelinkAuthTokenCookieName)}" 315 | End Function 316 | 317 | ' Periodic data from CareLink Cloud 318 | Public Overridable Function __getConnectDisplayMessage(username As String, role As String, endpointUrl As String) As Dictionary(Of String, String) 319 | 320 | Printdbg("__getConnectDisplayMessage()") 321 | ' Build user json for request 322 | Dim userJson As New Dictionary(Of String, String) From { 323 | { 324 | "username", 325 | username}, 326 | { 327 | "role", 328 | role}} 329 | Dim recentData As Dictionary(Of String, String) = Me.__getData(Nothing, endpointUrl, Nothing, userJson) 330 | If recentData IsNot Nothing Then 331 | Me.__correctTimeInRecentData(recentData) 332 | End If 333 | 334 | Return recentData 335 | End Function 336 | 337 | Public Overridable Function __getCountrySettings(country As String, language As String) As Dictionary(Of String, String) 338 | Printdbg("__getCountrySettings()") 339 | Dim queryParams As New Dictionary(Of String, String) From { 340 | { 341 | "countryCode", 342 | country}, 343 | { 344 | "language", 345 | language}} 346 | Return Me.__getData(Me.__careLinkServer(), "patient/countries/settings", queryParams, Nothing) 347 | End Function 348 | 349 | Public Overridable Function __getData(host As String, path As String, queryParams As Dictionary(Of String, String), requestBody As Dictionary(Of String, String)) As Dictionary(Of String, String) 350 | Dim url As String 351 | Printdbg("__getData()") 352 | _lastDataSuccess = False 353 | If host Is Nothing Then 354 | url = path 355 | Else 356 | url = $"https://{host}/{path}" 357 | End If 358 | Dim payload As Dictionary(Of String, String) = queryParams 359 | 360 | Dim jsondata As Dictionary(Of String, String) = Nothing 361 | ' Get auth token 362 | Dim authToken As String = Me.__getAuthorizationToken() 363 | If authToken IsNot Nothing Then 364 | Try 365 | Dim response As HttpResponseMessage 366 | ' Add header 367 | Dim headers As Dictionary(Of String, String) = _commonHeaders 368 | headers("Authorization") = authToken 369 | If requestBody Is Nothing OrElse requestBody.Count = 0 Then 370 | headers("Accept") = "application/json, text/plain, */*" 371 | headers("Content-Type") = "application/json; charset=utf-8" 372 | response = _httpClient.Get(url, headers, params:=payload) 373 | _lastResponseCode = response.StatusCode 374 | If Not response.StatusCode = HttpStatusCode.OK Then 375 | Throw New Exception("session get response is not OK") 376 | End If 377 | Else 378 | headers("Accept") = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" 379 | 'headers("Content-Type") = "application/x-www-form-urlencoded" 380 | _httpClient.DefaultRequestHeaders.Clear() 381 | For Each header As KeyValuePair(Of String, String) In headers 382 | If header.Key <> "Content-Type" Then 383 | _httpClient.DefaultRequestHeaders.Add(header.Key, header.Value) 384 | End If 385 | Next 386 | Dim postRequest As New HttpRequestMessage(HttpMethod.Post, New Uri(url)) With {.Content = Http.Json.JsonContent.Create(requestBody)} 387 | response = _httpClient.SendAsync(postRequest).Result ' Post(url, headers, data:=requestBody) 388 | If Not response.StatusCode = HttpStatusCode.OK Then 389 | Throw New Exception("session get response is not OK") 390 | End If 391 | End If 392 | jsondata = Loads(response.Text) 393 | _lastDataSuccess = True 394 | Catch e As Exception 395 | Printdbg(e.Message) 396 | Printdbg("__getData() failed") 397 | End Try 398 | End If 399 | Return jsondata 400 | End Function 401 | 402 | Public Overridable Function __getLoginSessionAsync() As HttpResponseMessage 403 | ' https://carelink.minimed.com/patient/sso/login?country=us&lang=en 404 | Dim url As String = "https://" & Me.__careLinkServer() & "/patient/sso/login" 405 | Dim payload As New Dictionary(Of String, String) From { 406 | { 407 | "country", 408 | _carelinkCountry}, 409 | { 410 | "lang", 411 | CarelinkLanguageEn} 412 | } 413 | Dim response As HttpResponseMessage = Nothing 414 | 415 | Try 416 | response = _httpClient.Get(url, headers:=_commonHeaders, params:=payload) 417 | If Not response.StatusCode = HttpStatusCode.OK Then 418 | Throw New Exception($"session response is not OK, {response.ReasonPhrase}") 419 | End If 420 | Catch e As Exception 421 | Printdbg(e.Message) 422 | Printdbg("__getLoginSession() failed") 423 | End Try 424 | 425 | Printdbg("__getLoginSession() success") 426 | Return response 427 | End Function 428 | 429 | Public Overridable Function __getMonitorData() As Dictionary(Of String, String) 430 | Printdbg("__getMonitorData()") 431 | Return Me.__getData(Me.__careLinkServer(), "patient/monitor/data", Nothing, Nothing) 432 | End Function 433 | 434 | Public Overridable Function __getMyProfile() As Dictionary(Of String, String) 435 | Printdbg("__getMyProfile()") 436 | Return Me.__getData(Me.__careLinkServer(), "patient/users/me/profile", Nothing, Nothing) 437 | End Function 438 | 439 | Public Overridable Function __getMyUser() As Dictionary(Of String, String) 440 | Printdbg("__getMyUser()") 441 | Return Me.__getData(Me.__careLinkServer(), "patient/users/me", Nothing, Nothing) 442 | End Function 443 | 444 | Public Overridable Function GetLastDataSuccess() As Object 445 | Return _lastDataSuccess 446 | End Function 447 | 448 | Public Overridable Function GetLastErrorMessage() As String 449 | Return Me.LastErrorMessage 450 | End Function 451 | 452 | Public Overridable Function GetLastResponseCode() As HttpStatusCode 453 | Return _lastResponseCode 454 | End Function 455 | 456 | ' Wrapper for data retrieval methods 457 | Public Overridable Function GetRecentData() As Dictionary(Of String, String) 458 | ' Force login to get basic info 459 | If Me.__getAuthorizationToken() IsNot Nothing Then 460 | If _carelinkCountry = "us" OrElse _sessionMonitorData("deviceFamily") = "BLE_X" Then 461 | Dim role As String = If(New List(Of Object) From { 462 | "CARE_PARTNER", 463 | "CARE_PARTNER_OUS" 464 | }.Contains(_sessionUser("role")), "carepartner", "patient") 465 | Return Me.__getConnectDisplayMessage(_sessionProfile("username").ToString(), role, _sessionCountrySettings("blePereodicDataEndpoint")) 466 | End If 467 | End If 468 | Return Nothing 469 | End Function 470 | 471 | ' Authentication methods 472 | Public Overridable Function Login() As Boolean 473 | If Not Me.LoggedIn Then 474 | Me.__executeLoginProcedure() 475 | End If 476 | 477 | Return Me.LoggedIn 478 | End Function 479 | 480 | End Class 481 | 482 | End Module 483 | -------------------------------------------------------------------------------- /CareLink/LoginForm1.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | text/microsoft-resx 50 | 51 | 52 | 2.0 53 | 54 | 55 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 56 | 57 | 58 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 59 | 60 | 61 | 62 | 63 | /9j/4AAQSkZJRgABAQEA2ADYAAD/4QEGRXhpZgAATU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAAB 64 | AAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAADYAAAAAQAAANgAAAAB 65 | AAiQAAAHAAAABDAyMjGRAQAHAAAABAECAwCSfAAHAAAAPgAAAMCgAAAHAAAABDAxMDCgAgAEAAAAAQAA 66 | AQigAwAEAAAAAQAAASakBgADAAAAAQAAAADqHQAJAAAAAQAAAAAAAAAAQXBwbGUgaU9TAAABTU0AAQAY 67 | AAIAAAAdAAAAIAAAAABBVzlGdC9FWG9iZnF5djg1bnV0ejB1SUFYMFNUAAD/4gI0SUNDX1BST0ZJTEUA 68 | AQEAAAIkYXBwbAQAAABtbnRyUkdCIFhZWiAH4QAHAAcADQAWACBhY3NwQVBQTAAAAABBUFBMAAAAAAAA 69 | AAAAAAAAAAAAAAAA9tYAAQAAAADTLWFwcGzKGpWCJX8QTTiZE9XR6hWCAAAAAAAAAAAAAAAAAAAAAAAA 70 | AAAAAAAAAAAAAAAAAApkZXNjAAAA/AAAAGVjcHJ0AAABZAAAACN3dHB0AAABiAAAABRyWFlaAAABnAAA 71 | ABRnWFlaAAABsAAAABRiWFlaAAABxAAAABRyVFJDAAAB2AAAACBjaGFkAAAB+AAAACxiVFJDAAAB2AAA 72 | ACBnVFJDAAAB2AAAACBkZXNjAAAAAAAAAAtEaXNwbGF5IFAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 73 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHRl 74 | eHQAAAAAQ29weXJpZ2h0IEFwcGxlIEluYy4sIDIwMTcAAFhZWiAAAAAAAADzUQABAAAAARbMWFlaIAAA 75 | AAAAAIPfAAA9v////7tYWVogAAAAAAAASr8AALE3AAAKuVhZWiAAAAAAAAAoOAAAEQsAAMi5cGFyYQAA 76 | AAAAAwAAAAJmZgAA8qcAAA1ZAAAT0AAACltzZjMyAAAAAAABDEIAAAXe///zJgAAB5MAAP2Q///7ov// 77 | /aMAAAPcAADAbv/bAEMAAgICAgICAwICAwUDAwMFBgUFBQUGCAYGBgYGCAoICAgICAgKCgoKCgoKCgwM 78 | DAwMDA4ODg4ODw8PDw8PDw8PD//bAEMBAgMDBAQEBwQEBxALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ 79 | EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/AABEIASYBCAMBEQACEQEDEQH/xAAfAAABBQEBAQEB 80 | AQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEU 81 | MoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdo 82 | aWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX 83 | 2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1 84 | EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXx 85 | FxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SV 86 | lpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/ 87 | 3QAEACH/2gAMAwEAAhEDEQA/AOpYH7ua/pEyY5E4OapCQ7aCOaBgVPRelCEkKqGRT7dKbY2OZfu54x1F 88 | JDDqaZDEGMHHBpiGjqSaBWFztpCBOpIOCaAHgkAjGSe9A7DSGI56UDsIysRgetAyXYEG2gQqqdox+VMA 89 | ZjjGKBoU/dD/AMXcUhsQ4jHI60E2GDJ6cGnYTARsW69aQrDzGVO4fNSuOw9gduccimIEz/8AWpCCNQzM 90 | QenamVcfswM5p3AFAYFj2qmxgF3ZwcYqADcVGQM0xDBg/e+tMVyQbTSuIaQNvoSaq4xSg6dqVxn/0OuK 91 | hV45Nf0lYyYqZDcjHrTYh4+9tbnNIaBcxnGN2aT1HYCdoJPH9KEAoCH585z3qgGiNgDtOc0E2EWPaMn8 92 | qdxpCquCd3ehu4McfQ/lSTIFdRgMFpk2YArjnrQXFCbsj+lBTHbSwJHFNPUSQudoA+8aBNC7ScY4pCsO 93 | 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 423 | 424 | 425 | -------------------------------------------------------------------------------- /CareLink/obj/project.assets.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "targets": { 4 | "net5.0-windows7.0": { 5 | "Microsoft.NETCore.Platforms/5.0.2": { 6 | "type": "package", 7 | "compile": { 8 | "lib/netstandard1.0/_._": {} 9 | }, 10 | "runtime": { 11 | "lib/netstandard1.0/_._": {} 12 | } 13 | }, 14 | "Microsoft.NETCore.Targets/1.1.0": { 15 | "type": "package", 16 | "compile": { 17 | "lib/netstandard1.0/_._": {} 18 | }, 19 | "runtime": { 20 | "lib/netstandard1.0/_._": {} 21 | } 22 | }, 23 | "Microsoft.Win32.Registry/4.7.0": { 24 | "type": "package", 25 | "dependencies": { 26 | "System.Security.AccessControl": "4.7.0", 27 | "System.Security.Principal.Windows": "4.7.0" 28 | }, 29 | "compile": { 30 | "ref/netstandard2.0/_._": {} 31 | }, 32 | "runtime": { 33 | "lib/netstandard2.0/Microsoft.Win32.Registry.dll": {} 34 | }, 35 | "runtimeTargets": { 36 | "runtimes/unix/lib/netstandard2.0/Microsoft.Win32.Registry.dll": { 37 | "assetType": "runtime", 38 | "rid": "unix" 39 | }, 40 | "runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll": { 41 | "assetType": "runtime", 42 | "rid": "win" 43 | } 44 | } 45 | }, 46 | "Microsoft.Win32.SystemEvents/5.0.0": { 47 | "type": "package", 48 | "dependencies": { 49 | "Microsoft.NETCore.Platforms": "5.0.0" 50 | }, 51 | "compile": { 52 | "ref/netstandard2.0/_._": {} 53 | }, 54 | "runtime": { 55 | "lib/netstandard2.0/Microsoft.Win32.SystemEvents.dll": {} 56 | }, 57 | "runtimeTargets": { 58 | "runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.dll": { 59 | "assetType": "runtime", 60 | "rid": "win" 61 | } 62 | } 63 | }, 64 | "runtime.native.System.Data.SqlClient.sni/4.7.0": { 65 | "type": "package", 66 | "dependencies": { 67 | "runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": "4.4.0", 68 | "runtime.win-x64.runtime.native.System.Data.SqlClient.sni": "4.4.0", 69 | "runtime.win-x86.runtime.native.System.Data.SqlClient.sni": "4.4.0" 70 | } 71 | }, 72 | "runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0": { 73 | "type": "package", 74 | "runtimeTargets": { 75 | "runtimes/win-arm64/native/sni.dll": { 76 | "assetType": "native", 77 | "rid": "win-arm64" 78 | } 79 | } 80 | }, 81 | "runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0": { 82 | "type": "package", 83 | "runtimeTargets": { 84 | "runtimes/win-x64/native/sni.dll": { 85 | "assetType": "native", 86 | "rid": "win-x64" 87 | } 88 | } 89 | }, 90 | "runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": { 91 | "type": "package", 92 | "runtimeTargets": { 93 | "runtimes/win-x86/native/sni.dll": { 94 | "assetType": "native", 95 | "rid": "win-x86" 96 | } 97 | } 98 | }, 99 | "System.Data.SqlClient/4.8.2": { 100 | "type": "package", 101 | "dependencies": { 102 | "Microsoft.Win32.Registry": "4.7.0", 103 | "System.Security.Principal.Windows": "4.7.0", 104 | "runtime.native.System.Data.SqlClient.sni": "4.7.0" 105 | }, 106 | "compile": { 107 | "ref/netcoreapp2.1/System.Data.SqlClient.dll": {} 108 | }, 109 | "runtime": { 110 | "lib/netcoreapp2.1/System.Data.SqlClient.dll": {} 111 | }, 112 | "runtimeTargets": { 113 | "runtimes/unix/lib/netcoreapp2.1/System.Data.SqlClient.dll": { 114 | "assetType": "runtime", 115 | "rid": "unix" 116 | }, 117 | "runtimes/win/lib/netcoreapp2.1/System.Data.SqlClient.dll": { 118 | "assetType": "runtime", 119 | "rid": "win" 120 | } 121 | } 122 | }, 123 | "System.Drawing.Common/5.0.2": { 124 | "type": "package", 125 | "dependencies": { 126 | "Microsoft.Win32.SystemEvents": "5.0.0" 127 | }, 128 | "compile": { 129 | "ref/netcoreapp3.0/System.Drawing.Common.dll": {} 130 | }, 131 | "runtime": { 132 | "lib/netcoreapp3.0/System.Drawing.Common.dll": {} 133 | }, 134 | "runtimeTargets": { 135 | "runtimes/unix/lib/netcoreapp3.0/System.Drawing.Common.dll": { 136 | "assetType": "runtime", 137 | "rid": "unix" 138 | }, 139 | "runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.dll": { 140 | "assetType": "runtime", 141 | "rid": "win" 142 | } 143 | } 144 | }, 145 | "System.Drawing.Primitives/4.3.0": { 146 | "type": "package", 147 | "dependencies": { 148 | "System.Runtime": "4.3.0", 149 | "System.Runtime.Extensions": "4.3.0" 150 | }, 151 | "compile": { 152 | "ref/netstandard1.1/System.Drawing.Primitives.dll": {} 153 | }, 154 | "runtime": { 155 | "lib/netstandard1.1/System.Drawing.Primitives.dll": {} 156 | } 157 | }, 158 | "System.Resources.Extensions/5.0.0": { 159 | "type": "package", 160 | "compile": { 161 | "lib/netstandard2.0/System.Resources.Extensions.dll": {} 162 | }, 163 | "runtime": { 164 | "lib/netstandard2.0/System.Resources.Extensions.dll": {} 165 | } 166 | }, 167 | "System.Runtime/4.3.0": { 168 | "type": "package", 169 | "dependencies": { 170 | "Microsoft.NETCore.Platforms": "1.1.0", 171 | "Microsoft.NETCore.Targets": "1.1.0" 172 | }, 173 | "compile": { 174 | "ref/netstandard1.5/System.Runtime.dll": {} 175 | } 176 | }, 177 | "System.Runtime.Extensions/4.3.0": { 178 | "type": "package", 179 | "dependencies": { 180 | "Microsoft.NETCore.Platforms": "1.1.0", 181 | "Microsoft.NETCore.Targets": "1.1.0", 182 | "System.Runtime": "4.3.0" 183 | }, 184 | "compile": { 185 | "ref/netstandard1.5/_._": {} 186 | } 187 | }, 188 | "System.Security.AccessControl/4.7.0": { 189 | "type": "package", 190 | "dependencies": { 191 | "Microsoft.NETCore.Platforms": "3.1.0", 192 | "System.Security.Principal.Windows": "4.7.0" 193 | }, 194 | "compile": { 195 | "ref/netstandard2.0/_._": {} 196 | }, 197 | "runtime": { 198 | "lib/netstandard2.0/System.Security.AccessControl.dll": {} 199 | }, 200 | "runtimeTargets": { 201 | "runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll": { 202 | "assetType": "runtime", 203 | "rid": "win" 204 | } 205 | } 206 | }, 207 | "System.Security.Principal.Windows/4.7.0": { 208 | "type": "package", 209 | "compile": { 210 | "ref/netcoreapp3.0/_._": {} 211 | }, 212 | "runtime": { 213 | "lib/netstandard2.0/System.Security.Principal.Windows.dll": {} 214 | }, 215 | "runtimeTargets": { 216 | "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { 217 | "assetType": "runtime", 218 | "rid": "unix" 219 | }, 220 | "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { 221 | "assetType": "runtime", 222 | "rid": "win" 223 | } 224 | } 225 | }, 226 | "System.Windows.Extensions/5.0.0": { 227 | "type": "package", 228 | "dependencies": { 229 | "System.Drawing.Common": "5.0.0" 230 | }, 231 | "compile": { 232 | "ref/netcoreapp3.0/System.Windows.Extensions.dll": {} 233 | }, 234 | "runtime": { 235 | "lib/netcoreapp3.0/System.Windows.Extensions.dll": {} 236 | }, 237 | "runtimeTargets": { 238 | "runtimes/win/lib/netcoreapp3.0/System.Windows.Extensions.dll": { 239 | "assetType": "runtime", 240 | "rid": "win" 241 | } 242 | } 243 | }, 244 | "System.Windows.Forms.DataVisualization/1.0.0": { 245 | "type": "project", 246 | "framework": ".NETCoreApp,Version=v5.0", 247 | "dependencies": { 248 | "Microsoft.NETCore.Platforms": "5.0.2", 249 | "System.Data.SqlClient": "4.8.2", 250 | "System.Drawing.Common": "5.0.2", 251 | "System.Drawing.Primitives": "4.3.0", 252 | "System.Resources.Extensions": "5.0.0", 253 | "System.Windows.Extensions": "5.0.0" 254 | }, 255 | "compile": { 256 | "bin/placeholder/System.Windows.Forms.DataVisualization.dll": {} 257 | }, 258 | "runtime": { 259 | "bin/placeholder/System.Windows.Forms.DataVisualization.dll": {} 260 | }, 261 | "frameworkReferences": [ 262 | "Microsoft.WindowsDesktop.App.WindowsForms" 263 | ] 264 | } 265 | } 266 | }, 267 | "libraries": { 268 | "Microsoft.NETCore.Platforms/5.0.2": { 269 | "sha512": "T8Lu7xWbcLFrficw7eOcX1NqDiIvqhyzJ7OA9KyZ/9hfU5zmYGddTyiD6HfYfYkjiPSeYgVsIZt1WxZ8YbI8Cw==", 270 | "type": "package", 271 | "path": "microsoft.netcore.platforms/5.0.2", 272 | "files": [ 273 | ".nupkg.metadata", 274 | ".signature.p7s", 275 | "Icon.png", 276 | "LICENSE.TXT", 277 | "THIRD-PARTY-NOTICES.TXT", 278 | "lib/netstandard1.0/_._", 279 | "microsoft.netcore.platforms.5.0.2.nupkg.sha512", 280 | "microsoft.netcore.platforms.nuspec", 281 | "runtime.json", 282 | "useSharedDesignerContext.txt", 283 | "version.txt" 284 | ] 285 | }, 286 | "Microsoft.NETCore.Targets/1.1.0": { 287 | "sha512": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==", 288 | "type": "package", 289 | "path": "microsoft.netcore.targets/1.1.0", 290 | "files": [ 291 | ".nupkg.metadata", 292 | "ThirdPartyNotices.txt", 293 | "dotnet_library_license.txt", 294 | "lib/netstandard1.0/_._", 295 | "microsoft.netcore.targets.1.1.0.nupkg.sha512", 296 | "microsoft.netcore.targets.nuspec", 297 | "runtime.json" 298 | ] 299 | }, 300 | "Microsoft.Win32.Registry/4.7.0": { 301 | "sha512": "KSrRMb5vNi0CWSGG1++id2ZOs/1QhRqROt+qgbEAdQuGjGrFcl4AOl4/exGPUYz2wUnU42nvJqon1T3U0kPXLA==", 302 | "type": "package", 303 | "path": "microsoft.win32.registry/4.7.0", 304 | "files": [ 305 | ".nupkg.metadata", 306 | ".signature.p7s", 307 | "LICENSE.TXT", 308 | "THIRD-PARTY-NOTICES.TXT", 309 | "lib/net46/Microsoft.Win32.Registry.dll", 310 | "lib/net461/Microsoft.Win32.Registry.dll", 311 | "lib/net461/Microsoft.Win32.Registry.xml", 312 | "lib/netstandard1.3/Microsoft.Win32.Registry.dll", 313 | "lib/netstandard2.0/Microsoft.Win32.Registry.dll", 314 | "lib/netstandard2.0/Microsoft.Win32.Registry.xml", 315 | "microsoft.win32.registry.4.7.0.nupkg.sha512", 316 | "microsoft.win32.registry.nuspec", 317 | "ref/net46/Microsoft.Win32.Registry.dll", 318 | "ref/net461/Microsoft.Win32.Registry.dll", 319 | "ref/net461/Microsoft.Win32.Registry.xml", 320 | "ref/net472/Microsoft.Win32.Registry.dll", 321 | "ref/net472/Microsoft.Win32.Registry.xml", 322 | "ref/netstandard1.3/Microsoft.Win32.Registry.dll", 323 | "ref/netstandard1.3/Microsoft.Win32.Registry.xml", 324 | "ref/netstandard1.3/de/Microsoft.Win32.Registry.xml", 325 | "ref/netstandard1.3/es/Microsoft.Win32.Registry.xml", 326 | "ref/netstandard1.3/fr/Microsoft.Win32.Registry.xml", 327 | "ref/netstandard1.3/it/Microsoft.Win32.Registry.xml", 328 | "ref/netstandard1.3/ja/Microsoft.Win32.Registry.xml", 329 | "ref/netstandard1.3/ko/Microsoft.Win32.Registry.xml", 330 | "ref/netstandard1.3/ru/Microsoft.Win32.Registry.xml", 331 | "ref/netstandard1.3/zh-hans/Microsoft.Win32.Registry.xml", 332 | "ref/netstandard1.3/zh-hant/Microsoft.Win32.Registry.xml", 333 | "ref/netstandard2.0/Microsoft.Win32.Registry.dll", 334 | "ref/netstandard2.0/Microsoft.Win32.Registry.xml", 335 | "runtimes/unix/lib/netstandard2.0/Microsoft.Win32.Registry.dll", 336 | "runtimes/unix/lib/netstandard2.0/Microsoft.Win32.Registry.xml", 337 | "runtimes/win/lib/net46/Microsoft.Win32.Registry.dll", 338 | "runtimes/win/lib/net461/Microsoft.Win32.Registry.dll", 339 | "runtimes/win/lib/net461/Microsoft.Win32.Registry.xml", 340 | "runtimes/win/lib/netstandard1.3/Microsoft.Win32.Registry.dll", 341 | "runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.dll", 342 | "runtimes/win/lib/netstandard2.0/Microsoft.Win32.Registry.xml", 343 | "useSharedDesignerContext.txt", 344 | "version.txt" 345 | ] 346 | }, 347 | "Microsoft.Win32.SystemEvents/5.0.0": { 348 | "sha512": "Bh6blKG8VAKvXiLe2L+sEsn62nc1Ij34MrNxepD2OCrS5cpCwQa9MeLyhVQPQ/R4Wlzwuy6wMK8hLb11QPDRsQ==", 349 | "type": "package", 350 | "path": "microsoft.win32.systemevents/5.0.0", 351 | "files": [ 352 | ".nupkg.metadata", 353 | ".signature.p7s", 354 | "Icon.png", 355 | "LICENSE.TXT", 356 | "THIRD-PARTY-NOTICES.TXT", 357 | "lib/net461/Microsoft.Win32.SystemEvents.dll", 358 | "lib/net461/Microsoft.Win32.SystemEvents.xml", 359 | "lib/netstandard2.0/Microsoft.Win32.SystemEvents.dll", 360 | "lib/netstandard2.0/Microsoft.Win32.SystemEvents.xml", 361 | "microsoft.win32.systemevents.5.0.0.nupkg.sha512", 362 | "microsoft.win32.systemevents.nuspec", 363 | "ref/net461/Microsoft.Win32.SystemEvents.dll", 364 | "ref/net461/Microsoft.Win32.SystemEvents.xml", 365 | "ref/netstandard2.0/Microsoft.Win32.SystemEvents.dll", 366 | "ref/netstandard2.0/Microsoft.Win32.SystemEvents.xml", 367 | "runtimes/win/lib/netcoreapp2.0/Microsoft.Win32.SystemEvents.dll", 368 | "runtimes/win/lib/netcoreapp2.0/Microsoft.Win32.SystemEvents.xml", 369 | "runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.dll", 370 | "runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.xml", 371 | "useSharedDesignerContext.txt", 372 | "version.txt" 373 | ] 374 | }, 375 | "runtime.native.System.Data.SqlClient.sni/4.7.0": { 376 | "sha512": "9kyFSIdN3T0qjDQ2R0HRXYIhS3l5psBzQi6qqhdLz+SzFyEy4sVxNOke+yyYv8Cu8rPER12c3RDjLT8wF3WBYQ==", 377 | "type": "package", 378 | "path": "runtime.native.system.data.sqlclient.sni/4.7.0", 379 | "files": [ 380 | ".nupkg.metadata", 381 | ".signature.p7s", 382 | "LICENSE.TXT", 383 | "THIRD-PARTY-NOTICES.TXT", 384 | "runtime.native.system.data.sqlclient.sni.4.7.0.nupkg.sha512", 385 | "runtime.native.system.data.sqlclient.sni.nuspec", 386 | "useSharedDesignerContext.txt", 387 | "version.txt" 388 | ] 389 | }, 390 | "runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0": { 391 | "sha512": "LbrynESTp3bm5O/+jGL8v0Qg5SJlTV08lpIpFesXjF6uGNMWqFnUQbYBJwZTeua6E/Y7FIM1C54Ey1btLWupdg==", 392 | "type": "package", 393 | "path": "runtime.win-arm64.runtime.native.system.data.sqlclient.sni/4.4.0", 394 | "files": [ 395 | ".nupkg.metadata", 396 | "ThirdPartyNotices.txt", 397 | "dotnet_library_license.txt", 398 | "runtime.win-arm64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512", 399 | "runtime.win-arm64.runtime.native.system.data.sqlclient.sni.nuspec", 400 | "runtimes/win-arm64/native/sni.dll", 401 | "useSharedDesignerContext.txt", 402 | "version.txt" 403 | ] 404 | }, 405 | "runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0": { 406 | "sha512": "38ugOfkYJqJoX9g6EYRlZB5U2ZJH51UP8ptxZgdpS07FgOEToV+lS11ouNK2PM12Pr6X/PpT5jK82G3DwH/SxQ==", 407 | "type": "package", 408 | "path": "runtime.win-x64.runtime.native.system.data.sqlclient.sni/4.4.0", 409 | "files": [ 410 | ".nupkg.metadata", 411 | "ThirdPartyNotices.txt", 412 | "dotnet_library_license.txt", 413 | "runtime.win-x64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512", 414 | "runtime.win-x64.runtime.native.system.data.sqlclient.sni.nuspec", 415 | "runtimes/win-x64/native/sni.dll", 416 | "useSharedDesignerContext.txt", 417 | "version.txt" 418 | ] 419 | }, 420 | "runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": { 421 | "sha512": "YhEdSQUsTx+C8m8Bw7ar5/VesXvCFMItyZF7G1AUY+OM0VPZUOeAVpJ4Wl6fydBGUYZxojTDR3I6Bj/+BPkJNA==", 422 | "type": "package", 423 | "path": "runtime.win-x86.runtime.native.system.data.sqlclient.sni/4.4.0", 424 | "files": [ 425 | ".nupkg.metadata", 426 | "ThirdPartyNotices.txt", 427 | "dotnet_library_license.txt", 428 | "runtime.win-x86.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512", 429 | "runtime.win-x86.runtime.native.system.data.sqlclient.sni.nuspec", 430 | "runtimes/win-x86/native/sni.dll", 431 | "useSharedDesignerContext.txt", 432 | "version.txt" 433 | ] 434 | }, 435 | "System.Data.SqlClient/4.8.2": { 436 | "sha512": "80vGtW6uLB4AkyrdVuKTXYUyuXDPAsSKbTVfvjndZaRAYxzFzWhJbvUfeAKrN+128ycWZjLIAl61dFUwWHOOTw==", 437 | "type": "package", 438 | "path": "system.data.sqlclient/4.8.2", 439 | "files": [ 440 | ".nupkg.metadata", 441 | ".signature.p7s", 442 | "Icon.png", 443 | "LICENSE.TXT", 444 | "THIRD-PARTY-NOTICES.TXT", 445 | "lib/MonoAndroid10/_._", 446 | "lib/MonoTouch10/_._", 447 | "lib/net451/System.Data.SqlClient.dll", 448 | "lib/net46/System.Data.SqlClient.dll", 449 | "lib/net461/System.Data.SqlClient.dll", 450 | "lib/net461/System.Data.SqlClient.xml", 451 | "lib/netcoreapp2.1/System.Data.SqlClient.dll", 452 | "lib/netcoreapp2.1/System.Data.SqlClient.xml", 453 | "lib/netstandard1.2/System.Data.SqlClient.dll", 454 | "lib/netstandard1.2/System.Data.SqlClient.xml", 455 | "lib/netstandard1.3/System.Data.SqlClient.dll", 456 | "lib/netstandard1.3/System.Data.SqlClient.xml", 457 | "lib/netstandard2.0/System.Data.SqlClient.dll", 458 | "lib/netstandard2.0/System.Data.SqlClient.xml", 459 | "lib/xamarinios10/_._", 460 | "lib/xamarinmac20/_._", 461 | "lib/xamarintvos10/_._", 462 | "lib/xamarinwatchos10/_._", 463 | "ref/MonoAndroid10/_._", 464 | "ref/MonoTouch10/_._", 465 | "ref/net451/System.Data.SqlClient.dll", 466 | "ref/net46/System.Data.SqlClient.dll", 467 | "ref/net461/System.Data.SqlClient.dll", 468 | "ref/net461/System.Data.SqlClient.xml", 469 | "ref/netcoreapp2.1/System.Data.SqlClient.dll", 470 | "ref/netcoreapp2.1/System.Data.SqlClient.xml", 471 | "ref/netstandard1.2/System.Data.SqlClient.dll", 472 | "ref/netstandard1.2/System.Data.SqlClient.xml", 473 | "ref/netstandard1.2/de/System.Data.SqlClient.xml", 474 | "ref/netstandard1.2/es/System.Data.SqlClient.xml", 475 | "ref/netstandard1.2/fr/System.Data.SqlClient.xml", 476 | "ref/netstandard1.2/it/System.Data.SqlClient.xml", 477 | "ref/netstandard1.2/ja/System.Data.SqlClient.xml", 478 | "ref/netstandard1.2/ko/System.Data.SqlClient.xml", 479 | "ref/netstandard1.2/ru/System.Data.SqlClient.xml", 480 | "ref/netstandard1.2/zh-hans/System.Data.SqlClient.xml", 481 | "ref/netstandard1.2/zh-hant/System.Data.SqlClient.xml", 482 | "ref/netstandard1.3/System.Data.SqlClient.dll", 483 | "ref/netstandard1.3/System.Data.SqlClient.xml", 484 | "ref/netstandard1.3/de/System.Data.SqlClient.xml", 485 | "ref/netstandard1.3/es/System.Data.SqlClient.xml", 486 | "ref/netstandard1.3/fr/System.Data.SqlClient.xml", 487 | "ref/netstandard1.3/it/System.Data.SqlClient.xml", 488 | "ref/netstandard1.3/ja/System.Data.SqlClient.xml", 489 | "ref/netstandard1.3/ko/System.Data.SqlClient.xml", 490 | "ref/netstandard1.3/ru/System.Data.SqlClient.xml", 491 | "ref/netstandard1.3/zh-hans/System.Data.SqlClient.xml", 492 | "ref/netstandard1.3/zh-hant/System.Data.SqlClient.xml", 493 | "ref/netstandard2.0/System.Data.SqlClient.dll", 494 | "ref/netstandard2.0/System.Data.SqlClient.xml", 495 | "ref/xamarinios10/_._", 496 | "ref/xamarinmac20/_._", 497 | "ref/xamarintvos10/_._", 498 | "ref/xamarinwatchos10/_._", 499 | "runtimes/unix/lib/netcoreapp2.1/System.Data.SqlClient.dll", 500 | "runtimes/unix/lib/netcoreapp2.1/System.Data.SqlClient.xml", 501 | "runtimes/unix/lib/netstandard1.3/System.Data.SqlClient.dll", 502 | "runtimes/unix/lib/netstandard2.0/System.Data.SqlClient.dll", 503 | "runtimes/unix/lib/netstandard2.0/System.Data.SqlClient.xml", 504 | "runtimes/win/lib/net451/System.Data.SqlClient.dll", 505 | "runtimes/win/lib/net46/System.Data.SqlClient.dll", 506 | "runtimes/win/lib/net461/System.Data.SqlClient.dll", 507 | "runtimes/win/lib/net461/System.Data.SqlClient.xml", 508 | "runtimes/win/lib/netcoreapp2.1/System.Data.SqlClient.dll", 509 | "runtimes/win/lib/netcoreapp2.1/System.Data.SqlClient.xml", 510 | "runtimes/win/lib/netstandard1.3/System.Data.SqlClient.dll", 511 | "runtimes/win/lib/netstandard2.0/System.Data.SqlClient.dll", 512 | "runtimes/win/lib/netstandard2.0/System.Data.SqlClient.xml", 513 | "runtimes/win/lib/uap10.0.16299/System.Data.SqlClient.dll", 514 | "runtimes/win/lib/uap10.0.16299/System.Data.SqlClient.xml", 515 | "system.data.sqlclient.4.8.2.nupkg.sha512", 516 | "system.data.sqlclient.nuspec", 517 | "useSharedDesignerContext.txt", 518 | "version.txt" 519 | ] 520 | }, 521 | "System.Drawing.Common/5.0.2": { 522 | "sha512": "rvr/M1WPf24ljpvvrVd74+NdjRUJu1bBkspkZcnzSZnmAUQWSvanlQ0k/hVHk+cHufZbZfu7vOh/vYc0q5Uu/A==", 523 | "type": "package", 524 | "path": "system.drawing.common/5.0.2", 525 | "files": [ 526 | ".nupkg.metadata", 527 | ".signature.p7s", 528 | "Icon.png", 529 | "LICENSE.TXT", 530 | "THIRD-PARTY-NOTICES.TXT", 531 | "lib/MonoAndroid10/_._", 532 | "lib/MonoTouch10/_._", 533 | "lib/net461/System.Drawing.Common.dll", 534 | "lib/netcoreapp3.0/System.Drawing.Common.dll", 535 | "lib/netcoreapp3.0/System.Drawing.Common.xml", 536 | "lib/netstandard2.0/System.Drawing.Common.dll", 537 | "lib/xamarinios10/_._", 538 | "lib/xamarinmac20/_._", 539 | "lib/xamarintvos10/_._", 540 | "lib/xamarinwatchos10/_._", 541 | "ref/MonoAndroid10/_._", 542 | "ref/MonoTouch10/_._", 543 | "ref/net461/System.Drawing.Common.dll", 544 | "ref/netcoreapp3.0/System.Drawing.Common.dll", 545 | "ref/netcoreapp3.0/System.Drawing.Common.xml", 546 | "ref/netstandard2.0/System.Drawing.Common.dll", 547 | "ref/xamarinios10/_._", 548 | "ref/xamarinmac20/_._", 549 | "ref/xamarintvos10/_._", 550 | "ref/xamarinwatchos10/_._", 551 | "runtimes/unix/lib/netcoreapp2.0/System.Drawing.Common.dll", 552 | "runtimes/unix/lib/netcoreapp3.0/System.Drawing.Common.dll", 553 | "runtimes/unix/lib/netcoreapp3.0/System.Drawing.Common.xml", 554 | "runtimes/win/lib/netcoreapp2.0/System.Drawing.Common.dll", 555 | "runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.dll", 556 | "runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.xml", 557 | "system.drawing.common.5.0.2.nupkg.sha512", 558 | "system.drawing.common.nuspec", 559 | "useSharedDesignerContext.txt", 560 | "version.txt" 561 | ] 562 | }, 563 | "System.Drawing.Primitives/4.3.0": { 564 | "sha512": "1QU/c35gwdhvj77fkScXQQbjiVAqIL3fEYn/19NE0CV/ic5TN5PyWAft8HsrbRd4SBLEoErNCkWSzMDc0MmbRw==", 565 | "type": "package", 566 | "path": "system.drawing.primitives/4.3.0", 567 | "files": [ 568 | ".nupkg.metadata", 569 | "ThirdPartyNotices.txt", 570 | "dotnet_library_license.txt", 571 | "lib/MonoAndroid10/_._", 572 | "lib/MonoTouch10/_._", 573 | "lib/net45/System.Drawing.Primitives.dll", 574 | "lib/netstandard1.1/System.Drawing.Primitives.dll", 575 | "lib/xamarinios10/_._", 576 | "lib/xamarinmac20/_._", 577 | "lib/xamarintvos10/_._", 578 | "lib/xamarinwatchos10/_._", 579 | "ref/MonoAndroid10/_._", 580 | "ref/MonoTouch10/_._", 581 | "ref/net45/System.Drawing.Primitives.dll", 582 | "ref/netstandard1.1/System.Drawing.Primitives.dll", 583 | "ref/xamarinios10/_._", 584 | "ref/xamarinmac20/_._", 585 | "ref/xamarintvos10/_._", 586 | "ref/xamarinwatchos10/_._", 587 | "system.drawing.primitives.4.3.0.nupkg.sha512", 588 | "system.drawing.primitives.nuspec" 589 | ] 590 | }, 591 | "System.Resources.Extensions/5.0.0": { 592 | "sha512": "KBiqY/+W6hWVwucHBHO76JkgBGyawlxCcP946MhK8dNjalaBgZkyHaux8ko58PENTqQHHjoDa7cfIkAchfJPPA==", 593 | "type": "package", 594 | "path": "system.resources.extensions/5.0.0", 595 | "files": [ 596 | ".nupkg.metadata", 597 | ".signature.p7s", 598 | "Icon.png", 599 | "LICENSE.TXT", 600 | "THIRD-PARTY-NOTICES.TXT", 601 | "build/net461/System.Resources.Extensions.targets", 602 | "lib/net461/System.Resources.Extensions.dll", 603 | "lib/net461/System.Resources.Extensions.xml", 604 | "lib/netstandard2.0/System.Resources.Extensions.dll", 605 | "lib/netstandard2.0/System.Resources.Extensions.xml", 606 | "system.resources.extensions.5.0.0.nupkg.sha512", 607 | "system.resources.extensions.nuspec", 608 | "useSharedDesignerContext.txt", 609 | "version.txt" 610 | ] 611 | }, 612 | "System.Runtime/4.3.0": { 613 | "sha512": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", 614 | "type": "package", 615 | "path": "system.runtime/4.3.0", 616 | "files": [ 617 | ".nupkg.metadata", 618 | ".signature.p7s", 619 | "ThirdPartyNotices.txt", 620 | "dotnet_library_license.txt", 621 | "lib/MonoAndroid10/_._", 622 | "lib/MonoTouch10/_._", 623 | "lib/net45/_._", 624 | "lib/net462/System.Runtime.dll", 625 | "lib/portable-net45+win8+wp80+wpa81/_._", 626 | "lib/win8/_._", 627 | "lib/wp80/_._", 628 | "lib/wpa81/_._", 629 | "lib/xamarinios10/_._", 630 | "lib/xamarinmac20/_._", 631 | "lib/xamarintvos10/_._", 632 | "lib/xamarinwatchos10/_._", 633 | "ref/MonoAndroid10/_._", 634 | "ref/MonoTouch10/_._", 635 | "ref/net45/_._", 636 | "ref/net462/System.Runtime.dll", 637 | "ref/netcore50/System.Runtime.dll", 638 | "ref/netcore50/System.Runtime.xml", 639 | "ref/netcore50/de/System.Runtime.xml", 640 | "ref/netcore50/es/System.Runtime.xml", 641 | "ref/netcore50/fr/System.Runtime.xml", 642 | "ref/netcore50/it/System.Runtime.xml", 643 | "ref/netcore50/ja/System.Runtime.xml", 644 | "ref/netcore50/ko/System.Runtime.xml", 645 | "ref/netcore50/ru/System.Runtime.xml", 646 | "ref/netcore50/zh-hans/System.Runtime.xml", 647 | "ref/netcore50/zh-hant/System.Runtime.xml", 648 | "ref/netstandard1.0/System.Runtime.dll", 649 | "ref/netstandard1.0/System.Runtime.xml", 650 | "ref/netstandard1.0/de/System.Runtime.xml", 651 | "ref/netstandard1.0/es/System.Runtime.xml", 652 | "ref/netstandard1.0/fr/System.Runtime.xml", 653 | "ref/netstandard1.0/it/System.Runtime.xml", 654 | "ref/netstandard1.0/ja/System.Runtime.xml", 655 | "ref/netstandard1.0/ko/System.Runtime.xml", 656 | "ref/netstandard1.0/ru/System.Runtime.xml", 657 | "ref/netstandard1.0/zh-hans/System.Runtime.xml", 658 | "ref/netstandard1.0/zh-hant/System.Runtime.xml", 659 | "ref/netstandard1.2/System.Runtime.dll", 660 | "ref/netstandard1.2/System.Runtime.xml", 661 | "ref/netstandard1.2/de/System.Runtime.xml", 662 | "ref/netstandard1.2/es/System.Runtime.xml", 663 | "ref/netstandard1.2/fr/System.Runtime.xml", 664 | "ref/netstandard1.2/it/System.Runtime.xml", 665 | "ref/netstandard1.2/ja/System.Runtime.xml", 666 | "ref/netstandard1.2/ko/System.Runtime.xml", 667 | "ref/netstandard1.2/ru/System.Runtime.xml", 668 | "ref/netstandard1.2/zh-hans/System.Runtime.xml", 669 | "ref/netstandard1.2/zh-hant/System.Runtime.xml", 670 | "ref/netstandard1.3/System.Runtime.dll", 671 | "ref/netstandard1.3/System.Runtime.xml", 672 | "ref/netstandard1.3/de/System.Runtime.xml", 673 | "ref/netstandard1.3/es/System.Runtime.xml", 674 | "ref/netstandard1.3/fr/System.Runtime.xml", 675 | "ref/netstandard1.3/it/System.Runtime.xml", 676 | "ref/netstandard1.3/ja/System.Runtime.xml", 677 | "ref/netstandard1.3/ko/System.Runtime.xml", 678 | "ref/netstandard1.3/ru/System.Runtime.xml", 679 | "ref/netstandard1.3/zh-hans/System.Runtime.xml", 680 | "ref/netstandard1.3/zh-hant/System.Runtime.xml", 681 | "ref/netstandard1.5/System.Runtime.dll", 682 | "ref/netstandard1.5/System.Runtime.xml", 683 | "ref/netstandard1.5/de/System.Runtime.xml", 684 | "ref/netstandard1.5/es/System.Runtime.xml", 685 | "ref/netstandard1.5/fr/System.Runtime.xml", 686 | "ref/netstandard1.5/it/System.Runtime.xml", 687 | "ref/netstandard1.5/ja/System.Runtime.xml", 688 | "ref/netstandard1.5/ko/System.Runtime.xml", 689 | "ref/netstandard1.5/ru/System.Runtime.xml", 690 | "ref/netstandard1.5/zh-hans/System.Runtime.xml", 691 | "ref/netstandard1.5/zh-hant/System.Runtime.xml", 692 | "ref/portable-net45+win8+wp80+wpa81/_._", 693 | "ref/win8/_._", 694 | "ref/wp80/_._", 695 | "ref/wpa81/_._", 696 | "ref/xamarinios10/_._", 697 | "ref/xamarinmac20/_._", 698 | "ref/xamarintvos10/_._", 699 | "ref/xamarinwatchos10/_._", 700 | "system.runtime.4.3.0.nupkg.sha512", 701 | "system.runtime.nuspec" 702 | ] 703 | }, 704 | "System.Runtime.Extensions/4.3.0": { 705 | "sha512": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", 706 | "type": "package", 707 | "path": "system.runtime.extensions/4.3.0", 708 | "files": [ 709 | ".nupkg.metadata", 710 | ".signature.p7s", 711 | "ThirdPartyNotices.txt", 712 | "dotnet_library_license.txt", 713 | "lib/MonoAndroid10/_._", 714 | "lib/MonoTouch10/_._", 715 | "lib/net45/_._", 716 | "lib/net462/System.Runtime.Extensions.dll", 717 | "lib/portable-net45+win8+wp8+wpa81/_._", 718 | "lib/win8/_._", 719 | "lib/wp80/_._", 720 | "lib/wpa81/_._", 721 | "lib/xamarinios10/_._", 722 | "lib/xamarinmac20/_._", 723 | "lib/xamarintvos10/_._", 724 | "lib/xamarinwatchos10/_._", 725 | "ref/MonoAndroid10/_._", 726 | "ref/MonoTouch10/_._", 727 | "ref/net45/_._", 728 | "ref/net462/System.Runtime.Extensions.dll", 729 | "ref/netcore50/System.Runtime.Extensions.dll", 730 | "ref/netcore50/System.Runtime.Extensions.xml", 731 | "ref/netcore50/de/System.Runtime.Extensions.xml", 732 | "ref/netcore50/es/System.Runtime.Extensions.xml", 733 | "ref/netcore50/fr/System.Runtime.Extensions.xml", 734 | "ref/netcore50/it/System.Runtime.Extensions.xml", 735 | "ref/netcore50/ja/System.Runtime.Extensions.xml", 736 | "ref/netcore50/ko/System.Runtime.Extensions.xml", 737 | "ref/netcore50/ru/System.Runtime.Extensions.xml", 738 | "ref/netcore50/zh-hans/System.Runtime.Extensions.xml", 739 | "ref/netcore50/zh-hant/System.Runtime.Extensions.xml", 740 | "ref/netstandard1.0/System.Runtime.Extensions.dll", 741 | "ref/netstandard1.0/System.Runtime.Extensions.xml", 742 | "ref/netstandard1.0/de/System.Runtime.Extensions.xml", 743 | "ref/netstandard1.0/es/System.Runtime.Extensions.xml", 744 | "ref/netstandard1.0/fr/System.Runtime.Extensions.xml", 745 | "ref/netstandard1.0/it/System.Runtime.Extensions.xml", 746 | "ref/netstandard1.0/ja/System.Runtime.Extensions.xml", 747 | "ref/netstandard1.0/ko/System.Runtime.Extensions.xml", 748 | "ref/netstandard1.0/ru/System.Runtime.Extensions.xml", 749 | "ref/netstandard1.0/zh-hans/System.Runtime.Extensions.xml", 750 | "ref/netstandard1.0/zh-hant/System.Runtime.Extensions.xml", 751 | "ref/netstandard1.3/System.Runtime.Extensions.dll", 752 | "ref/netstandard1.3/System.Runtime.Extensions.xml", 753 | "ref/netstandard1.3/de/System.Runtime.Extensions.xml", 754 | "ref/netstandard1.3/es/System.Runtime.Extensions.xml", 755 | "ref/netstandard1.3/fr/System.Runtime.Extensions.xml", 756 | "ref/netstandard1.3/it/System.Runtime.Extensions.xml", 757 | "ref/netstandard1.3/ja/System.Runtime.Extensions.xml", 758 | "ref/netstandard1.3/ko/System.Runtime.Extensions.xml", 759 | "ref/netstandard1.3/ru/System.Runtime.Extensions.xml", 760 | "ref/netstandard1.3/zh-hans/System.Runtime.Extensions.xml", 761 | "ref/netstandard1.3/zh-hant/System.Runtime.Extensions.xml", 762 | "ref/netstandard1.5/System.Runtime.Extensions.dll", 763 | "ref/netstandard1.5/System.Runtime.Extensions.xml", 764 | "ref/netstandard1.5/de/System.Runtime.Extensions.xml", 765 | "ref/netstandard1.5/es/System.Runtime.Extensions.xml", 766 | "ref/netstandard1.5/fr/System.Runtime.Extensions.xml", 767 | "ref/netstandard1.5/it/System.Runtime.Extensions.xml", 768 | "ref/netstandard1.5/ja/System.Runtime.Extensions.xml", 769 | "ref/netstandard1.5/ko/System.Runtime.Extensions.xml", 770 | "ref/netstandard1.5/ru/System.Runtime.Extensions.xml", 771 | "ref/netstandard1.5/zh-hans/System.Runtime.Extensions.xml", 772 | "ref/netstandard1.5/zh-hant/System.Runtime.Extensions.xml", 773 | "ref/portable-net45+win8+wp8+wpa81/_._", 774 | "ref/win8/_._", 775 | "ref/wp80/_._", 776 | "ref/wpa81/_._", 777 | "ref/xamarinios10/_._", 778 | "ref/xamarinmac20/_._", 779 | "ref/xamarintvos10/_._", 780 | "ref/xamarinwatchos10/_._", 781 | "system.runtime.extensions.4.3.0.nupkg.sha512", 782 | "system.runtime.extensions.nuspec" 783 | ] 784 | }, 785 | "System.Security.AccessControl/4.7.0": { 786 | "sha512": "JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==", 787 | "type": "package", 788 | "path": "system.security.accesscontrol/4.7.0", 789 | "files": [ 790 | ".nupkg.metadata", 791 | ".signature.p7s", 792 | "LICENSE.TXT", 793 | "THIRD-PARTY-NOTICES.TXT", 794 | "lib/net46/System.Security.AccessControl.dll", 795 | "lib/net461/System.Security.AccessControl.dll", 796 | "lib/net461/System.Security.AccessControl.xml", 797 | "lib/netstandard1.3/System.Security.AccessControl.dll", 798 | "lib/netstandard2.0/System.Security.AccessControl.dll", 799 | "lib/netstandard2.0/System.Security.AccessControl.xml", 800 | "lib/uap10.0.16299/_._", 801 | "ref/net46/System.Security.AccessControl.dll", 802 | "ref/net461/System.Security.AccessControl.dll", 803 | "ref/net461/System.Security.AccessControl.xml", 804 | "ref/netstandard1.3/System.Security.AccessControl.dll", 805 | "ref/netstandard1.3/System.Security.AccessControl.xml", 806 | "ref/netstandard1.3/de/System.Security.AccessControl.xml", 807 | "ref/netstandard1.3/es/System.Security.AccessControl.xml", 808 | "ref/netstandard1.3/fr/System.Security.AccessControl.xml", 809 | "ref/netstandard1.3/it/System.Security.AccessControl.xml", 810 | "ref/netstandard1.3/ja/System.Security.AccessControl.xml", 811 | "ref/netstandard1.3/ko/System.Security.AccessControl.xml", 812 | "ref/netstandard1.3/ru/System.Security.AccessControl.xml", 813 | "ref/netstandard1.3/zh-hans/System.Security.AccessControl.xml", 814 | "ref/netstandard1.3/zh-hant/System.Security.AccessControl.xml", 815 | "ref/netstandard2.0/System.Security.AccessControl.dll", 816 | "ref/netstandard2.0/System.Security.AccessControl.xml", 817 | "ref/uap10.0.16299/_._", 818 | "runtimes/win/lib/net46/System.Security.AccessControl.dll", 819 | "runtimes/win/lib/net461/System.Security.AccessControl.dll", 820 | "runtimes/win/lib/net461/System.Security.AccessControl.xml", 821 | "runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll", 822 | "runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.xml", 823 | "runtimes/win/lib/netstandard1.3/System.Security.AccessControl.dll", 824 | "runtimes/win/lib/uap10.0.16299/_._", 825 | "system.security.accesscontrol.4.7.0.nupkg.sha512", 826 | "system.security.accesscontrol.nuspec", 827 | "useSharedDesignerContext.txt", 828 | "version.txt" 829 | ] 830 | }, 831 | "System.Security.Principal.Windows/4.7.0": { 832 | "sha512": "ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==", 833 | "type": "package", 834 | "path": "system.security.principal.windows/4.7.0", 835 | "files": [ 836 | ".nupkg.metadata", 837 | ".signature.p7s", 838 | "LICENSE.TXT", 839 | "THIRD-PARTY-NOTICES.TXT", 840 | "lib/net46/System.Security.Principal.Windows.dll", 841 | "lib/net461/System.Security.Principal.Windows.dll", 842 | "lib/net461/System.Security.Principal.Windows.xml", 843 | "lib/netstandard1.3/System.Security.Principal.Windows.dll", 844 | "lib/netstandard2.0/System.Security.Principal.Windows.dll", 845 | "lib/netstandard2.0/System.Security.Principal.Windows.xml", 846 | "lib/uap10.0.16299/_._", 847 | "ref/net46/System.Security.Principal.Windows.dll", 848 | "ref/net461/System.Security.Principal.Windows.dll", 849 | "ref/net461/System.Security.Principal.Windows.xml", 850 | "ref/netcoreapp3.0/System.Security.Principal.Windows.dll", 851 | "ref/netcoreapp3.0/System.Security.Principal.Windows.xml", 852 | "ref/netstandard1.3/System.Security.Principal.Windows.dll", 853 | "ref/netstandard1.3/System.Security.Principal.Windows.xml", 854 | "ref/netstandard1.3/de/System.Security.Principal.Windows.xml", 855 | "ref/netstandard1.3/es/System.Security.Principal.Windows.xml", 856 | "ref/netstandard1.3/fr/System.Security.Principal.Windows.xml", 857 | "ref/netstandard1.3/it/System.Security.Principal.Windows.xml", 858 | "ref/netstandard1.3/ja/System.Security.Principal.Windows.xml", 859 | "ref/netstandard1.3/ko/System.Security.Principal.Windows.xml", 860 | "ref/netstandard1.3/ru/System.Security.Principal.Windows.xml", 861 | "ref/netstandard1.3/zh-hans/System.Security.Principal.Windows.xml", 862 | "ref/netstandard1.3/zh-hant/System.Security.Principal.Windows.xml", 863 | "ref/netstandard2.0/System.Security.Principal.Windows.dll", 864 | "ref/netstandard2.0/System.Security.Principal.Windows.xml", 865 | "ref/uap10.0.16299/_._", 866 | "runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.dll", 867 | "runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.xml", 868 | "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll", 869 | "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.xml", 870 | "runtimes/win/lib/net46/System.Security.Principal.Windows.dll", 871 | "runtimes/win/lib/net461/System.Security.Principal.Windows.dll", 872 | "runtimes/win/lib/net461/System.Security.Principal.Windows.xml", 873 | "runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.dll", 874 | "runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.xml", 875 | "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll", 876 | "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.xml", 877 | "runtimes/win/lib/netstandard1.3/System.Security.Principal.Windows.dll", 878 | "runtimes/win/lib/uap10.0.16299/_._", 879 | "system.security.principal.windows.4.7.0.nupkg.sha512", 880 | "system.security.principal.windows.nuspec", 881 | "useSharedDesignerContext.txt", 882 | "version.txt" 883 | ] 884 | }, 885 | "System.Windows.Extensions/5.0.0": { 886 | "sha512": "c1ho9WU9ZxMZawML+ssPKZfdnrg/OjR3pe0m9v8230z3acqphwvPJqzAkH54xRYm5ntZHGG1EPP3sux9H3qSPg==", 887 | "type": "package", 888 | "path": "system.windows.extensions/5.0.0", 889 | "files": [ 890 | ".nupkg.metadata", 891 | ".signature.p7s", 892 | "Icon.png", 893 | "LICENSE.TXT", 894 | "THIRD-PARTY-NOTICES.TXT", 895 | "lib/netcoreapp3.0/System.Windows.Extensions.dll", 896 | "lib/netcoreapp3.0/System.Windows.Extensions.xml", 897 | "ref/netcoreapp3.0/System.Windows.Extensions.dll", 898 | "ref/netcoreapp3.0/System.Windows.Extensions.xml", 899 | "runtimes/win/lib/netcoreapp3.0/System.Windows.Extensions.dll", 900 | "runtimes/win/lib/netcoreapp3.0/System.Windows.Extensions.xml", 901 | "system.windows.extensions.5.0.0.nupkg.sha512", 902 | "system.windows.extensions.nuspec", 903 | "useSharedDesignerContext.txt", 904 | "version.txt" 905 | ] 906 | }, 907 | "System.Windows.Forms.DataVisualization/1.0.0": { 908 | "type": "project", 909 | "path": "../../winforms-datavisualization-net5/src/System.Windows.Forms.DataVisualization/ChartWin.csproj", 910 | "msbuildProject": "../../winforms-datavisualization-net5/src/System.Windows.Forms.DataVisualization/ChartWin.csproj" 911 | } 912 | }, 913 | "projectFileDependencyGroups": { 914 | "net5.0-windows7.0": [ 915 | "System.Windows.Forms.DataVisualization >= 1.0.0" 916 | ] 917 | }, 918 | "packageFolders": { 919 | "C:\\Users\\PaulM\\.nuget\\packages\\": {}, 920 | "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}, 921 | "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder": {} 922 | }, 923 | "project": { 924 | "version": "1.0.0", 925 | "restore": { 926 | "projectUniqueName": "C:\\Users\\PaulM\\Source\\Repos\\CareLink\\CareLink\\CareLink.vbproj", 927 | "projectName": "CareLink", 928 | "projectPath": "C:\\Users\\PaulM\\Source\\Repos\\CareLink\\CareLink\\CareLink.vbproj", 929 | "packagesPath": "C:\\Users\\PaulM\\.nuget\\packages\\", 930 | "outputPath": "C:\\Users\\PaulM\\Source\\Repos\\CareLink\\CareLink\\obj\\", 931 | "projectStyle": "PackageReference", 932 | "fallbackFolders": [ 933 | "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", 934 | "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" 935 | ], 936 | "configFilePaths": [ 937 | "C:\\Users\\PaulM\\AppData\\Roaming\\NuGet\\NuGet.Config", 938 | "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", 939 | "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" 940 | ], 941 | "originalTargetFrameworks": [ 942 | "net5.0-windows7.0" 943 | ], 944 | "sources": { 945 | "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, 946 | "https://api.nuget.org/v3/index.json": {}, 947 | "https://dotnet.myget.org/F/roslyn-analyzers/api/v3/index.json": {}, 948 | "https://dotnet.myget.org/F/roslyn/api/v3/index.json": {}, 949 | "https://dotnet.myget.org/F/system-commandline/api/v3/index.json": {}, 950 | "https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json": {} 951 | }, 952 | "frameworks": { 953 | "net5.0-windows7.0": { 954 | "targetAlias": "net5.0-windows", 955 | "projectReferences": { 956 | "C:\\Users\\PaulM\\Source\\Repos\\winforms-datavisualization-net5\\src\\System.Windows.Forms.DataVisualization\\ChartWin.csproj": { 957 | "projectPath": "C:\\Users\\PaulM\\Source\\Repos\\winforms-datavisualization-net5\\src\\System.Windows.Forms.DataVisualization\\ChartWin.csproj" 958 | } 959 | } 960 | } 961 | } 962 | }, 963 | "frameworks": { 964 | "net5.0-windows7.0": { 965 | "targetAlias": "net5.0-windows", 966 | "imports": [ 967 | "net461", 968 | "net462", 969 | "net47", 970 | "net471", 971 | "net472", 972 | "net48" 973 | ], 974 | "assetTargetFallback": true, 975 | "warn": true, 976 | "frameworkReferences": { 977 | "Microsoft.NETCore.App": { 978 | "privateAssets": "all" 979 | }, 980 | "Microsoft.WindowsDesktop.App.WindowsForms": { 981 | "privateAssets": "none" 982 | } 983 | }, 984 | "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.100-preview.2.21155.3\\RuntimeIdentifierGraph.json" 985 | } 986 | } 987 | } 988 | } --------------------------------------------------------------------------------