Files
mRemoteNG/mRemoteV1/UI/UI.Window.Update.vb

205 lines
9.0 KiB
VB.net

Imports System.ComponentModel
Imports mRemoteNG.My
Imports WeifenLuo.WinFormsUI.Docking
Imports System.IO
Imports mRemoteNG.App.Runtime
Namespace UI
Namespace Window
Public Class Update
Inherits Base
#Region "Public Methods"
Public Sub New(ByVal panel As DockContent)
WindowType = Type.Update
DockPnl = panel
InitializeComponent()
FontOverride(Me)
End Sub
#End Region
#Region "Form Stuff"
Private Sub Update_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
ApplyLanguage()
CheckForUpdate()
End Sub
Private Sub ApplyLanguage()
Text = Language.strMenuCheckForUpdates
TabText = Language.strMenuCheckForUpdates
btnCheckForUpdate.Text = Language.strCheckForUpdate
btnDownload.Text = Language.strDownloadAndInstall
lblChangeLogLabel.Text = Language.strLabelChangeLog
lblInstalledVersion.Text = Language.strVersion
lblInstalledVersionLabel.Text = String.Format("{0}:", Language.strCurrentVersion)
lblLatestVersion.Text = Language.strVersion
lblLatestVersionLabel.Text = String.Format("{0}:", Language.strAvailableVersion)
End Sub
Private Sub btnCheckForUpdate_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles btnCheckForUpdate.Click
CheckForUpdate()
End Sub
Private Sub btnDownload_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles btnDownload.Click
DownloadUpdate()
End Sub
Private Sub pbUpdateImage_Click(ByVal sender As System.Object, ByVal e As EventArgs) Handles pbUpdateImage.Click
Dim linkUri As Uri = TryCast(pbUpdateImage.Tag, Uri)
If linkUri Is Nothing OrElse linkUri.IsFile Or linkUri.IsUnc Or linkUri.IsLoopback Then Return
Process.Start(linkUri.ToString())
End Sub
#End Region
#Region "Private Fields"
Private _appUpdate As App.Update
Private _isUpdateDownloadHandlerDeclared As Boolean = False
#End Region
#Region "Private Methods"
Private Sub CheckForUpdate()
If _appUpdate Is Nothing Then
_appUpdate = New App.Update
ElseIf _appUpdate.IsGetUpdateInfoRunning Then
Return
End If
lblStatus.Text = Language.strUpdateCheckingLabel
lblStatus.ForeColor = SystemColors.WindowText
lblLatestVersionLabel.Visible = False
lblInstalledVersion.Visible = False
lblInstalledVersionLabel.Visible = False
lblLatestVersion.Visible = False
btnCheckForUpdate.Visible = False
pnlUpdate.Visible = False
AddHandler _appUpdate.GetUpdateInfoCompletedEvent, AddressOf GetUpdateInfoCompleted
_appUpdate.GetUpdateInfoAsync()
End Sub
Private Sub GetUpdateInfoCompleted(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
If InvokeRequired Then
Dim myDelegate As New AsyncCompletedEventHandler(AddressOf GetUpdateInfoCompleted)
Invoke(myDelegate, New Object() {sender, e})
Return
End If
Try
RemoveHandler _appUpdate.GetUpdateInfoCompletedEvent, AddressOf GetUpdateInfoCompleted
lblInstalledVersion.Text = Application.Info.Version.ToString
lblInstalledVersion.Visible = True
lblInstalledVersionLabel.Visible = True
btnCheckForUpdate.Visible = True
If e.Cancelled Then Return
If e.Error IsNot Nothing Then Throw e.Error
If _appUpdate.IsUpdateAvailable() Then
lblStatus.Text = Language.strUpdateAvailable
lblStatus.ForeColor = Color.OrangeRed
pnlUpdate.Visible = True
Dim updateInfo As App.Update.UpdateInfo = _appUpdate.CurrentUpdateInfo
lblLatestVersion.Text = updateInfo.Version.ToString
lblLatestVersionLabel.Visible = True
lblLatestVersion.Visible = True
If updateInfo.ImageAddress Is Nothing OrElse String.IsNullOrEmpty(updateInfo.ImageAddress.ToString()) Then
pbUpdateImage.Visible = False
Else
pbUpdateImage.ImageLocation = updateInfo.ImageAddress.ToString()
pbUpdateImage.Tag = updateInfo.ImageLinkAddress
pbUpdateImage.Visible = True
End If
AddHandler _appUpdate.GetChangeLogCompletedEvent, AddressOf GetChangeLogCompleted
_appUpdate.GetChangeLogAsync()
btnDownload.Focus()
Else
lblStatus.Text = Language.strNoUpdateAvailable
lblStatus.ForeColor = Color.ForestGreen
If _appUpdate.CurrentUpdateInfo IsNot Nothing Then
Dim updateInfo As App.Update.UpdateInfo = _appUpdate.CurrentUpdateInfo
If updateInfo.IsValid And updateInfo.Version IsNot Nothing Then
lblLatestVersion.Text = updateInfo.Version.ToString
lblLatestVersionLabel.Visible = True
lblLatestVersion.Visible = True
End If
End If
End If
Catch ex As Exception
lblStatus.Text = Language.strUpdateCheckFailedLabel
lblStatus.ForeColor = Color.OrangeRed
MessageCollector.AddExceptionMessage(Language.strUpdateCheckCompleteFailed, ex)
End Try
End Sub
Private Sub GetChangeLogCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
If InvokeRequired Then
Dim myDelegate As New AsyncCompletedEventHandler(AddressOf GetChangeLogCompleted)
Invoke(myDelegate, New Object() {sender, e})
Return
End If
Try
RemoveHandler _appUpdate.GetChangeLogCompletedEvent, AddressOf GetChangeLogCompleted
If e.Cancelled Then Return
If e.Error IsNot Nothing Then Throw e.Error
txtChangeLog.Text = _appUpdate.ChangeLog
Catch ex As Exception
MessageCollector.AddExceptionMessage(Language.strUpdateGetChangeLogFailed, ex)
End Try
End Sub
Private Sub DownloadUpdate()
Try
btnDownload.Enabled = False
prgbDownload.Visible = True
prgbDownload.Value = 0
If _isUpdateDownloadHandlerDeclared = False Then
AddHandler _appUpdate.DownloadUpdateProgressChangedEvent, AddressOf DownloadUpdateProgressChanged
AddHandler _appUpdate.DownloadUpdateCompletedEvent, AddressOf DownloadUpdateCompleted
_isUpdateDownloadHandlerDeclared = True
End If
_appUpdate.DownloadUpdateAsync()
Catch ex As Exception
MessageCollector.AddExceptionMessage(Language.strUpdateDownloadFailed, ex)
End Try
End Sub
#End Region
#Region "Events"
Private Sub DownloadUpdateProgressChanged(ByVal sender As Object, ByVal e As Net.DownloadProgressChangedEventArgs)
prgbDownload.Value = e.ProgressPercentage
End Sub
Private Sub DownloadUpdateCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs)
Try
btnDownload.Enabled = True
prgbDownload.Visible = False
If e.Cancelled Then Return
If e.Error IsNot Nothing Then Throw e.Error
If MessageBox.Show(Language.strUpdateDownloadComplete, Language.strMenuCheckForUpdates, MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) = System.Windows.Forms.DialogResult.OK Then
Shutdown.Quit(_appUpdate.CurrentUpdateInfo.UpdateFilePath)
Return
Else
File.Delete(_appUpdate.CurrentUpdateInfo.UpdateFilePath)
End If
Catch ex As Exception
MessageCollector.AddExceptionMessage(Language.strUpdateDownloadCompleteFailed, ex)
End Try
End Sub
#End Region
End Class
End Namespace
End Namespace