改了一亿个东西,修了一亿个 BUG
This commit is contained in:
150
Window1.xaml.cs
150
Window1.xaml.cs
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user