改了一亿个东西,修了一亿个 BUG

This commit is contained in:
2021-10-19 17:42:18 +02:00
parent 5b907309e0
commit 888ddce4ef
40 changed files with 1870 additions and 1715 deletions

View File

@@ -1,14 +1,11 @@
using NPinyin;
using AnotherReplayReader.Utils;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Script.Serialization;
using System.Windows;
using static System.Text.Json.JsonSerializer;
namespace AnotherReplayReader
{
@@ -17,7 +14,7 @@ namespace AnotherReplayReader
/// </summary>
internal partial class Window1 : Window
{
private PlayerIdentity _identity;
private readonly PlayerIdentity _identity;
public Window1(PlayerIdentity identity)
{
@@ -28,115 +25,108 @@ namespace AnotherReplayReader
private async void Refresh()
{
Dispatcher.Invoke(() => _setIPButton.IsEnabled = false);
_setIPButton.IsEnabled = false;
try
{
Dispatcher.Invoke(() =>
{
_dataGrid.Items.Clear();
_dataGrid.Items.Add(new IPAndPlayer { IP = 0, ID = "正在加载..." });
});
_dataGrid.Items.Clear();
_dataGrid.Items.Add(new IpAndPlayer { Ip = 0, Id = "正在加载..." });
await _identity.Fetch();
Display();
await Display();
}
catch(Exception e)
catch (Exception e)
{
Dispatcher.Invoke(() => MessageBox.Show(this, $"无法加载IP表{e}"));
MessageBox.Show(this, $"无法加载IP表{e}");
}
finally
{
_setIPButton.IsEnabled = true;
}
Dispatcher.Invoke(() => _setIPButton.IsEnabled = true);
}
private void Display(string filter = "", string nameFilter = "")
private async Task Display(string filter = "", string nameFilter = "")
{
var pinyin = nameFilter.ToPinyin();
var newList = _identity
.AsSortedList()
.Where(x =>
{
if (!x.IPString.StartsWith(filter))
{
return false;
}
if (x.PinyinID?.ContainsIgnoreCase(pinyin) is true)
{
return true;
}
return x.ID.ContainsIgnoreCase(nameFilter);
})
.ToArray();
Dispatcher.Invoke(() =>
var newList = await Task.Run(() =>
{
_dataGrid.Items.Clear();
foreach (var item in newList)
{
_dataGrid.Items.Add(item);
}
var pinyin = nameFilter.ToPinyin();
return _identity
.AsSortedList()
.Where(x =>
{
if (!x.IpString.Contains(filter))
{
return false;
}
if (x.PinyinId?.ContainsIgnoreCase(pinyin) is true)
{
return true;
}
return x.Id.ContainsIgnoreCase(nameFilter);
})
.ToArray();
});
_dataGrid.Items.Clear();
_dataGrid.ItemsSource = newList;
_dataGrid.Items.Refresh();
}
private async void OnClick(object sender, RoutedEventArgs e)
{
Dispatcher.Invoke(() => _setIPButton.IsEnabled = false);
await Task.Run(() =>
_setIPButton.IsEnabled = false;
try
{
var ipText = Dispatcher.Invoke(() => _ipField.Text);
var ipText = _ipField.Text;
if (!IPAddress.TryParse(ipText, out var ip))
{
Dispatcher.Invoke(() => MessageBox.Show(this, "IP格式不正确"));
MessageBox.Show(this, "IP 格式不正确");
return;
}
var idText = Dispatcher.Invoke(() => _idField.Text);
var idText = _idField.Text;
if (string.IsNullOrWhiteSpace(idText))
{
var result = Dispatcher.Invoke(() => MessageBox.Show(this, "你没填输入任何说明,是否确认继续?", "注意", MessageBoxButton.OKCancel));
if(result != MessageBoxResult.OK)
var choice = MessageBox.Show(this, "没有输入任何关于该玩家的说明,是否继续?", "注意", MessageBoxButton.OKCancel);
if (choice != MessageBoxResult.OK)
{
return;
}
}
try
var result = await UpdateIpTable(ip, idText);
if (!result)
{
var bytes = ip.GetAddressBytes();
var ipNum = (uint)bytes[0] * 256 * 256 * 256 + bytes[1] * 256 * 256 + bytes[2] * 256 + bytes[3];
var text = HttpUtility.UrlEncode(idText);
var key = HttpUtility.UrlEncode(Auth.GetKey());
var request = WebRequest.Create($"https://lanyi.altervista.org/playertable/playertable.php?do=setIP&ip={ipNum}&id={text}&key={key}");
using (var stream = request.GetResponse().GetResponseStream())
using (var reader = new StreamReader(stream))
{
var response = reader.ReadToEnd();
var serializer = new JavaScriptSerializer();
var result = serializer.Deserialize<bool>(response);
if(!result)
{
Dispatcher.Invoke(() => MessageBox.Show(this, "设置IP表失败"));
}
}
}
catch (Exception exception)
{
Dispatcher.Invoke(() => MessageBox.Show(this, $"设置IP表时发生错误。\r\n{exception}"));
MessageBox.Show(this, "设置 IP 表失败");
}
});
Refresh();
Refresh();
}
catch (Exception exception)
{
MessageBox.Show(this, $"设置 IP 表时发生错误。\r\n{exception}");
}
finally
{
_setIPButton.IsEnabled = true;
}
}
private async void OnIPFieldChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
private static async Task<bool> UpdateIpTable(IPAddress ip, string idText)
{
var bytes = ip.GetAddressBytes();
var ipNum = (uint)bytes[0] * 256 * 256 * 256 + bytes[1] * 256 * 256 + bytes[2] * 256 + bytes[3];
var text = HttpUtility.UrlEncode(idText);
var key = HttpUtility.UrlEncode(Auth.GetKey());
var request = WebRequest.Create($"https://lanyi.altervista.org/playertable/playertable.php?do=setIP&ip={ipNum}&id={text}&key={key}");
using var response = await request.GetResponseAsync().ConfigureAwait(false);
using var stream = response.GetResponseStream();
return await DeserializeAsync<bool>(stream).ConfigureAwait(false);
}
private async void OnIpFieldChanged(object sender, System.Windows.Controls.TextChangedEventArgs e)
{
var ipText = _ipField.Text;
var idText = _idField.Text;
await Task.Run(() => Display(ipText, idText));
await Display(ipText, idText);
}
private void DataGrid_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)