|
| 1 | +Imports System.Net.Http |
| 2 | +Imports System.Text.Json |
| 3 | +Public Class UpdateHandler |
| 4 | + |
| 5 | + Public Shared CurrentVersion As New SemVersion(3, 0, 0, "alpha", 3) |
| 6 | + Public Shared NewVersion As SemVersion |
| 7 | + Shared UpdateURL As String = "https://raw.githubusercontent.com/IridiumIO/CompactGUI/database/version.json" |
| 8 | + Shared Async Function CheckForUpdate(includePrerelease As Boolean) As Task(Of Boolean) |
| 9 | + |
| 10 | + Using httpclient As New HttpClient |
| 11 | + Dim ret = Await httpclient.GetStringAsync(UpdateURL) |
| 12 | + Dim jVer = JsonSerializer.Deserialize(Of Dictionary(Of String, SemVersion))(ret) |
| 13 | + Dim newV As SemVersion = If(includePrerelease, jVer("Latest"), jVer("LatestNonPreRelease")) |
| 14 | + NewVersion = newV |
| 15 | + If newV > CurrentVersion Then Return True |
| 16 | + End Using |
| 17 | + Return False |
| 18 | + |
| 19 | + End Function |
| 20 | + |
| 21 | + |
| 22 | + Class SemVersion : Implements IComparable(Of SemVersion) |
| 23 | + Property Major As Integer |
| 24 | + Property Minor As Integer |
| 25 | + Property Patch As Integer |
| 26 | + Property PreRelease As String |
| 27 | + Property PreReleaseMinor As Integer |
| 28 | + |
| 29 | + Sub New() |
| 30 | + End Sub |
| 31 | + |
| 32 | + Sub New(major As Integer, minor As Integer, patch As Integer) |
| 33 | + Me.Major = major |
| 34 | + Me.Minor = minor |
| 35 | + Me.Patch = patch |
| 36 | + End Sub |
| 37 | + |
| 38 | + Sub New(major As Integer, minor As Integer, patch As Integer, prerelease As String, prereleaseminor As Integer) |
| 39 | + Me.Major = major |
| 40 | + Me.Minor = minor |
| 41 | + Me.Patch = patch |
| 42 | + Me.PreRelease = prerelease.ToLower |
| 43 | + Me.PreReleaseMinor = prereleaseminor |
| 44 | + End Sub |
| 45 | + |
| 46 | + Public Function CompareTo(other As SemVersion) As Integer Implements IComparable(Of SemVersion).CompareTo |
| 47 | + If other.Major - Me.Major <> 0 Then Return other.Major - Me.Major |
| 48 | + If other.Minor - Me.Minor <> 0 Then Return other.Minor - Me.Minor |
| 49 | + If other.Patch - Me.Patch <> 0 Then Return other.Patch - Me.Patch |
| 50 | + If Not String.Equals(Me.PreRelease, other.PreRelease) Then |
| 51 | + If Me.PreRelease = "" Then Return -1 |
| 52 | + If other.PreRelease = "" Then Return 1 |
| 53 | + Return String.Compare(other.PreRelease, Me.PreRelease) |
| 54 | + End If |
| 55 | + If other.PreReleaseMinor - Me.PreReleaseMinor <> 0 Then Return other.PreReleaseMinor - Me.PreReleaseMinor |
| 56 | + Return 0 |
| 57 | + |
| 58 | + End Function |
| 59 | + |
| 60 | + Public Shared Operator <(ByVal lhs As SemVersion, ByVal rhs As SemVersion) As Boolean |
| 61 | + Dim comparer = lhs.CompareTo(rhs) |
| 62 | + If comparer <= 0 Then Return False |
| 63 | + Return True |
| 64 | + End Operator |
| 65 | + |
| 66 | + Public Shared Operator >(ByVal lhs As SemVersion, ByVal rhs As SemVersion) As Boolean |
| 67 | + Dim comparer = lhs.CompareTo(rhs) |
| 68 | + If comparer >= 0 Then Return False |
| 69 | + Return True |
| 70 | + End Operator |
| 71 | + |
| 72 | + Public Overrides Function ToString() As String |
| 73 | + Return $"{Major}.{Minor}.{Patch}-{PreRelease}.{PreReleaseMinor}" |
| 74 | + End Function |
| 75 | + |
| 76 | + Public Function IsPreRelease() As Boolean |
| 77 | + If PreRelease = "" Then Return True |
| 78 | + Return False |
| 79 | + End Function |
| 80 | + |
| 81 | + End Class |
| 82 | + |
| 83 | +End Class |
0 commit comments