diff --git a/TsinghuaNet/MainViewModel.vb b/TsinghuaNet/MainViewModel.vb index 30f0546..b442a2b 100644 --- a/TsinghuaNet/MainViewModel.vb +++ b/TsinghuaNet/MainViewModel.vb @@ -103,33 +103,29 @@ Class MainViewModel End Set End Property - Private auth4 As AuthHelper - Private auth6 As AuthHelper + Private auth4 As Auth4Helper + Private auth6 As Auth6Helper Private net As NetHelper + Private Function InitHelper(Of T As {New, NetHelperBase})(ByRef helper As T) As T + If helper Is Nothing Then + helper = New T() + End If + UpdateHelper(helper) + Return helper + End Function + Private Sub UpdateHelper(helper As NetHelperBase) + helper.Username = Username + helper.Password = Password + End Sub Public ReadOnly Property Helper As IConnect Get Select Case State Case NetState.Auth4 - If auth4 Is Nothing Then - auth4 = AuthHelper.CreateAuth4Helper(Username, Password) - Else - UpdateHelper(auth4) - End If - Return auth4 + Return InitHelper(auth4) Case NetState.Auth6 - If auth6 Is Nothing Then - auth6 = AuthHelper.CreateAuth6Helper(Username, Password) - Else - UpdateHelper(auth6) - End If - Return auth6 + Return InitHelper(auth6) Case NetState.Net - If net Is Nothing Then - net = New NetHelper(Username, Password) - Else - UpdateHelper(net) - End If - Return net + Return InitHelper(net) Case Else Return Nothing End Select @@ -178,11 +174,6 @@ Class MainViewModel End Get End Property - Private Sub UpdateHelper(helper As NetHelperBase) - helper.Username = Username - helper.Password = Password - End Sub - Public Sub DisposeHelpers() net?.Dispose() auth4?.Dispose() diff --git a/TsinghuaNet/Settings.vb b/TsinghuaNet/Settings.vb index 82e84d0..7cccb90 100644 --- a/TsinghuaNet/Settings.vb +++ b/TsinghuaNet/Settings.vb @@ -8,14 +8,65 @@ Class Settings Inherits XmlSettings Public Property Username As String - + Public Property Password As String - + Class PasswordConverter + Implements ISimpleConverter + Public Function Convert(value As Object) As Object Implements ISimpleConverter.Convert + Return Encoding.ASCII.GetString(System.Convert.FromBase64String(If(value, String.Empty))) + End Function + Public Function ConvertBack(value As Object) As Object Implements ISimpleConverter.ConvertBack + Return System.Convert.ToBase64String(Encoding.ASCII.GetBytes(value)) + End Function + End Class + Public Property State As NetState - + Class StateConverter + Implements ISimpleConverter + Public Function Convert(value As Object) As Object Implements ISimpleConverter.Convert + Dim temp As NetState + If [Enum].TryParse(value, temp) Then + Return temp + Else + Return NetState.Unknown + End If + End Function + Public Function ConvertBack(value As Object) As Object Implements ISimpleConverter.ConvertBack + Return value.ToString() + End Function + End Class + Public Property MoreInf As Boolean - + Class BoolConverter + Implements ISimpleConverter + Public Function Convert(value As Object) As Object Implements ISimpleConverter.Convert + Dim moreinfResult As Boolean + If Boolean.TryParse(value, moreinfResult) Then + Return moreinfResult + Else + Return False + End If + End Function + Public Function ConvertBack(value As Object) As Object Implements ISimpleConverter.ConvertBack + Return value.ToString() + End Function + End Class + Public Property Language As CultureInfo + Class LanguageConverter + Implements ISimpleConverter + Public Function Convert(value As Object) As Object Implements ISimpleConverter.Convert + Try + Return If(value Is Nothing, Nothing, New CultureInfo(value.ToString())) + Catch ex As Exception + WriteException(ex) + Return Nothing + End Try + End Function + Public Function ConvertBack(value As Object) As Object Implements ISimpleConverter.ConvertBack + Return CType(value, CultureInfo)?.Name + End Function + End Class Private Const logPath As String = "log.xml" Public Sub New() Username = String.Empty @@ -44,43 +95,4 @@ Class Settings Public Overloads Sub Save() Save(logPath) End Sub - Protected Overrides Function ChangeType(name As String, value As Object, conversionType As Type) As Object - Select Case name - Case "password" - Return Encoding.ASCII.GetString(Convert.FromBase64String(If(value, String.Empty))) - Case "state" - Dim temp As NetState - If [Enum].TryParse(value, temp) Then - Return temp - Else - Return NetState.Unknown - End If - Case "more" - Dim moreinfResult As Boolean - If Boolean.TryParse(value, moreinfResult) AndAlso moreinfResult Then - Return True - Else - Return False - End If - Case "language" - Try - Return If(value Is Nothing, Nothing, New CultureInfo(value.ToString())) - Catch ex As Exception - WriteException(ex) - Return Nothing - End Try - Case Else - Return value - End Select - End Function - Protected Overrides Function ChangeBackType(name As String, value As Object, conversionType As Type) As Object - Select Case name - Case "password" - Return Convert.ToBase64String(Encoding.ASCII.GetBytes(value)) - Case "language" - Return CType(value, CultureInfo)?.Name - Case Else - Return value.ToString() - End Select - End Function End Class diff --git a/TsinghuaNet/TsinghuaNet.vbproj b/TsinghuaNet/TsinghuaNet.vbproj index c77dbde..2c2160f 100644 --- a/TsinghuaNet/TsinghuaNet.vbproj +++ b/TsinghuaNet/TsinghuaNet.vbproj @@ -76,11 +76,11 @@ TsinghuaNet.Program - - ..\packages\Berrysoft.Console.1.0.112-preview2\lib\net472\Berrysoft.Console.dll + + ..\packages\Berrysoft.Console.1.0.140-preview3\lib\net472\Berrysoft.Console.dll - - ..\packages\Berrysoft.Tsinghua.Net.1.0.112-preview2\lib\net472\Berrysoft.Tsinghua.Net.dll + + ..\packages\Berrysoft.Tsinghua.Net.1.0.140-preview3\lib\net472\Berrysoft.Tsinghua.Net.dll diff --git a/TsinghuaNet/packages.config b/TsinghuaNet/packages.config index 1937bf2..cbd42c2 100644 --- a/TsinghuaNet/packages.config +++ b/TsinghuaNet/packages.config @@ -1,6 +1,6 @@  - - + + \ No newline at end of file