using System;
using System.ComponentModel;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using Serilog;
using SteamAutoCrack.Core.Utils;
using SteamAutoCrack.ViewModels;
namespace SteamAutoCrack.Views;
///
/// AppIDFinder.xaml 的交互逻辑
///
public delegate void AppIDFinderClosingHandler();
public delegate void AppIDFinderOKHandler(uint appid);
public partial class AppIDFinder : Window
{
private readonly ILogger _log;
private readonly AppIDFinderViewModel viewModel = new();
public AppIDFinder(string appname)
{
InitializeComponent();
DataContext = viewModel;
viewModel.AppName = appname;
viewModel.SearchBtnString = Properties.Resources.Loading;
Search.IsEnabled = false;
AppName.IsEnabled = false;
_log = Log.ForContext();
Task.Run(async () =>
{
try
{
await SteamAppList.WaitForReady().ConfigureAwait(false);
Dispatcher.Invoke(() =>
{
if (viewModel.AppName != string.Empty)
{
Search_Click(new object(), new RoutedEventArgs());
}
else
{
Search.IsEnabled = true;
AppName.IsEnabled = true;
viewModel.SearchBtnString = Properties.Resources.Search;
}
});
}
catch (Exception ex)
{
_log.Error(ex, Properties.Resources.FailedToLoadAppListPleaseRestartSteamAutoCrackToTryAgain);
Dispatcher.Invoke(() => { viewModel.SearchBtnString = Properties.Resources.Failed; });
}
});
}
public event AppIDFinderClosingHandler ClosingEvent;
public event AppIDFinderOKHandler OKEvent;
protected override void OnClosing(CancelEventArgs e)
{
StrikeEvent();
}
private void StrikeEvent()
{
ClosingEvent?.Invoke();
}
private void OK_Click(object sender, RoutedEventArgs e)
{
var apps = Apps.SelectedCells.ToList();
if (apps.Count != 0)
{
var app = (SteamApp)apps[0].Item;
if (app.AppId.HasValue)
OKEvent?.Invoke(app.AppId.Value);
else
OKEvent?.Invoke(0);
Close();
}
}
private void Cancel_Click(object sender, RoutedEventArgs e)
{
ClosingEvent?.Invoke();
Close();
}
private void Apps_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
var apps = Apps.SelectedCells.ToList();
if (apps.Count != 0)
{
var app = (SteamApp)apps[0].Item;
if (app.AppId.HasValue)
{
OKEvent?.Invoke(app.AppId.Value);
Close();
}
}
}
private async void Search_Click(object sender, RoutedEventArgs e)
{
viewModel.SearchBtnString = Properties.Resources.Searching;
Search.IsEnabled = false;
AppName.IsEnabled = false;
if (Fuzzy.IsChecked == true)
viewModel.Apps = await SteamAppList.GetListOfAppsByNameFuzzy(AppName.Text).ConfigureAwait(false);
else
viewModel.Apps = await SteamAppList.GetListOfAppsByName(AppName.Text).ConfigureAwait(false);
Dispatcher.Invoke(() =>
{
Search.IsEnabled = true;
AppName.IsEnabled = true;
});
viewModel.SearchBtnString = Properties.Resources.Search;
}
}