PageLoginMojangSkin.xaml.vb 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. Public Class PageLoginMojangSkin
  2. Public Sub New()
  3. InitializeComponent()
  4. Skin.Loader = PageLaunchLeft.SkinMojang
  5. End Sub
  6. Private Sub PageLoginLegacy_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
  7. Skin.Loader.Start()
  8. End Sub
  9. ''' <summary>
  10. ''' 刷新页面显示的所有信息。
  11. ''' </summary>
  12. Public Sub Reload(KeepInput As Boolean)
  13. TextName.Text = Setup.Get("CacheMojangName")
  14. TextEmail.Text = Setup.Get("CacheMojangUsername")
  15. TextEmail.Visibility = If(Setup.Get("UiLauncherEmail"), Visibility.Collapsed, Visibility.Visible)
  16. '皮肤在 Loaded 加载
  17. End Sub
  18. ''' <summary>
  19. ''' 获取当前页面的登录信息。
  20. ''' </summary>
  21. Public Shared Function GetLoginData() As McLoginServer
  22. Return New McLoginServer(McLoginType.Mojang) With {.BaseUrl = "https://authserver.mojang.com", .Token = "Mojang", .UserName = Setup.Get("CacheMojangUsername"), .Password = Setup.Get("CacheMojangPass"), .Description = "Mojang 正版", .Type = McLoginType.Mojang}
  23. End Function
  24. Private Sub PageLoginMojangSkin_MouseEnter(sender As Object, e As MouseEventArgs) Handles PanData.MouseEnter
  25. AniStart({
  26. AaOpacity(BtnEdit, 1 - BtnEdit.Opacity, 80),
  27. AaHeight(BtnEdit, 25.5 - BtnEdit.Height, 140,, New AniEaseOutFluent),
  28. AaHeight(BtnEdit, -1.5, 50, 140, New AniEaseInFluent),
  29. AaOpacity(BtnExit, 1 - BtnExit.Opacity, 80),
  30. AaHeight(BtnExit, 25.5 - BtnExit.Height, 140,, New AniEaseOutFluent),
  31. AaHeight(BtnExit, -1.5, 50, 140, New AniEaseInFluent)
  32. }, "PageLoginMojangSkin Button")
  33. End Sub
  34. Private Sub PageLoginMojangSkin_MouseLeave(sender As Object, e As MouseEventArgs) Handles PanData.MouseLeave
  35. AniStart({
  36. AaOpacity(BtnEdit, -BtnEdit.Opacity, 120,, New AniEaseOutFluent),
  37. AaHeight(BtnEdit, 14 - BtnEdit.Height, 120,, New AniEaseInFluent),
  38. AaOpacity(BtnExit, -BtnExit.Opacity, 120,, New AniEaseOutFluent),
  39. AaHeight(BtnExit, 14 - BtnExit.Height, 120,, New AniEaseInFluent)
  40. }, "PageLoginMojangSkin Button")
  41. End Sub
  42. Private Sub BtnEdit_Click(sender As Object, e As EventArgs) Handles BtnEdit.Click
  43. Select Case MyMsgBox("你希望通过哪种途径更改密码?" & vbCrLf & "首次通过个人档案修改密码可能需要验证你的密保问题。", "更改密码", "个人档案", "密保邮箱", "取消")
  44. Case 1
  45. '个人档案
  46. OpenWebsite("https://www.minecraft.net/zh-hans/msaprofile")
  47. Case 2
  48. '密保邮箱
  49. OpenWebsite("https://account.mojang.com/password")
  50. Case 3
  51. '取消
  52. End Select
  53. End Sub
  54. Private Sub BtnExit_Click() Handles BtnExit.Click
  55. Setup.Set("CacheMojangAccess", "")
  56. FrmLaunchLeft.RefreshPage(False, True)
  57. End Sub
  58. Private Sub Skin_Click(sender As Object, e As MouseButtonEventArgs) Handles Skin.Click
  59. If McLoginLoader.State = LoadState.Failed Then
  60. Hint("登录失败,无法更改皮肤!", HintType.Critical)
  61. Exit Sub
  62. End If
  63. Dim SkinInfo As McSkinInfo = McSkinSelect(False)
  64. If Not SkinInfo.IsVaild Then Exit Sub
  65. Hint("正在更改皮肤……")
  66. RunInNewThread(Async Sub()
  67. Try
  68. If McLoginLoader.State = LoadState.Loading Then McLoginLoader.WaitForExit() '等待登录结束
  69. Dim AccessToken As String = Setup.Get("CacheMojangAccess")
  70. Dim Uuid As String = Setup.Get("CacheMojangUuid")
  71. Dim Client As New Net.Http.HttpClient With {.Timeout = New TimeSpan(0, 0, 10)}
  72. Client.DefaultRequestHeaders.Authorization = New Net.Http.Headers.AuthenticationHeaderValue("Bearer", AccessToken)
  73. Client.DefaultRequestHeaders.Accept.Add(New Net.Http.Headers.MediaTypeWithQualityHeaderValue("*/*"))
  74. Client.DefaultRequestHeaders.UserAgent.Add(New Net.Http.Headers.ProductInfoHeaderValue("MojangSharp", "0.1"))
  75. Dim Contents As New Net.Http.MultipartFormDataContent From {
  76. {New Net.Http.StringContent(If(SkinInfo.IsSlim, "slim", "")), "model"},
  77. {New Net.Http.ByteArrayContent(File.ReadAllBytes(SkinInfo.LocalFile)), "file", GetFileNameFromPath(SkinInfo.LocalFile)}
  78. }
  79. Dim Result As String = Await (Await Client.PutAsync(New Uri("https://api.mojang.com/user/profile/" & Uuid & "/skin"), Contents)).Content.ReadAsStringAsync
  80. If RegexCheck(Result, "^[0-9a-f]{59,64}$") Then
  81. MySkin.ReloadCache("http://textures.minecraft.net/texture/" & Result, False)
  82. ElseIf Result.ToLower.Contains("ip not secured") Then
  83. If MyMsgBox("首次操作需要在官网验证密保问题。" & vbCrLf & "验证完成后,你即可使用 PCL 更改皮肤,且无需再次验证。", "验证密保问题", "开始验证", "取消") = 1 Then
  84. OpenWebsite("https://www.minecraft.net/zh-hans/profile/skin")
  85. End If
  86. ElseIf Result.Contains("request requires user authentication") Then
  87. Hint("正在重新登录,请稍后再次尝试更改皮肤!")
  88. RunInUi(Sub()
  89. BtnExit_Click()
  90. If String.IsNullOrEmpty(McLoginAble()) Then McLoginLoader.Start()
  91. End Sub)
  92. ElseIf Result.Contains("""errorMessage""") Then
  93. Hint("更改皮肤失败:" & GetJson(Result)("errorMessage"), HintType.Critical)
  94. Else
  95. Throw New Exception("未知错误(" & Result & ")")
  96. End If
  97. Catch ex As Exception
  98. If ex.GetType.Equals(GetType(Tasks.TaskCanceledException)) Then
  99. Hint("更改皮肤失败:与 Mojang 皮肤服务器的连接超时,请检查你的网络是否通畅!", HintType.Critical)
  100. Else
  101. Log(ex, "更改皮肤失败", LogLevel.Hint)
  102. End If
  103. End Try
  104. End Sub, "Mojang Skin Upload")
  105. End Sub
  106. Private Sub HintMigration_Click() Handles HintMigration.MouseLeftButtonUp
  107. PageLaunchRight.StartMigration()
  108. End Sub
  109. End Class