分离玩家信息插件,以及更新检测

This commit is contained in:
2021-10-22 08:54:04 +02:00
parent 2a96f8efac
commit 08700abd4f
25 changed files with 860 additions and 234 deletions

View File

@@ -125,17 +125,54 @@ namespace AnotherReplayReader
InitializeComponent();
Closing += (sender, eventArgs) =>
{
_cache.Save();
_cache.Save().Wait();
Application.Current.Shutdown();
};
}
private async void OnMainWindowLoaded(object sender, EventArgs e)
private async void OnMainWindowLoaded(object sender, EventArgs eventArgs)
{
Debug.Initialize();
await _cache.Initialization;
ReplayAutoSaver.SpawnAutoSaveReplaysTask(_properties.RA3ReplayFolderPath);
var token = _cancelLoadReplays.ResetAndGetToken(CancellationToken.None);
await _taskQueue.Enqueue(() => LoadReplays(null, token), token);
_ = _taskQueue.Enqueue(() => LoadReplays(null, token), token);
var wantUsePlugin = true;
try
{
wantUsePlugin = await Plugin.LoadPlayerIdentityPlugin(_playerIdentity);
}
catch (Exception e)
{
Debug.Instance.DebugMessage += $"Failed to load plugin: {e}";
MessageBox.Show(this, $"插件加载失败:{e.Message}");
}
const string permissionKey = "questionAsked";
if (!wantUsePlugin && _cache.GetOrDefault(permissionKey, false) is not true)
{
_cache.Set(permissionKey, true);
var sb = new StringWriter();
sb.WriteLine("要不要自动检查更新呢?");
sb.WriteLine("之后也可以在“关于”窗口里,设置自动更新的选项");
var choice = MessageBox.Show(this, sb.ToString(), App.Name, MessageBoxButton.YesNo);
_cache.Set(UpdateChecker.CheckForUpdatesKey, choice is MessageBoxResult.Yes);
await _cache.Save();
}
_ = UpdateChecker.CheckForUpdates(_cache).ContinueWith(t => Dispatcher.InvokeAsync(() =>
{
var updateData = t.Result;
if (updateData.IsNewVersion())
{
var about = new About(_cache, updateData)
{
Owner = this
};
about.ShowDialog();
}
}));
}
private async Task LoadReplays(string? nextSelected, CancellationToken cancelToken)
@@ -318,6 +355,22 @@ namespace AnotherReplayReader
{
var token = _cancelLoadReplays.ResetAndGetToken(CancellationToken.None);
await _taskQueue.Enqueue(() => LoadReplays(null, token), token);
var text = _replayFolderPathBox.Text;
const string assemblyMagic = "!DreamSign";
const string jsonMagic = "!FantasySeal";
switch (_replayFolderPathBox.Text)
{
case "!SpellCard":
_replayDetailsBox.Text = $"{assemblyMagic}\r\n";
_replayDetailsBox.Text += $"{jsonMagic}\r\n";
break;
case assemblyMagic:
Plugin.Sign();
break;
case jsonMagic:
UpdateChecker.Sign();
break;
}
}
private async void OnReplaySelectionChanged(object sender, EventArgs e)
@@ -334,7 +387,10 @@ namespace AnotherReplayReader
private void OnAboutButtonClick(object sender, RoutedEventArgs e)
{
var aboutWindow = new About();
var aboutWindow = new About(_cache)
{
Owner = this
};
aboutWindow.ShowDialog();
}
@@ -348,7 +404,7 @@ namespace AnotherReplayReader
InitialDirectory = _properties.ReplayFolderPath,
};
var result = openFileDialog.ShowDialog();
var result = openFileDialog.ShowDialog(this);
if (result == true)
{
var fileName = openFileDialog.FileName;
@@ -364,7 +420,10 @@ namespace AnotherReplayReader
private void OnDetailsButtonClick(object sender, RoutedEventArgs e)
{
var detailsWindow = new ApmWindow(_properties.CurrentReplay!, _playerIdentity);
var detailsWindow = new ApmWindow(_properties.CurrentReplay!, _playerIdentity)
{
Owner = this
};
detailsWindow.ShowDialog();
}
@@ -399,7 +458,7 @@ namespace AnotherReplayReader
}
catch (Exception exception)
{
MessageBox.Show($"无法修复录像:\r\n{exception}");
MessageBox.Show(this, $"无法修复录像:\r\n{exception}");
}
var token = _cancelLoadReplays.ResetAndGetToken(CancellationToken.None);