using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using Livia.Models;
using Livia.Models.Data;
using Livia.Properties;
using Livia.Utility.DependencyInjection;
using Livia.ViewModels;
using Livia.Views.Utility;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace Livia.Views;
///
/// Interaction logic for SettingsWindow.xaml
///
public partial class SettingsWindow
{
private readonly ILogger _logger;
private readonly IIdleTimer _idleTimer;
private readonly SettingsWindowViewModel _viewModel;
public SettingsWindow()
{
InitializeComponent();
_logger = ActivatorUtilities.GetServiceOrCreateInstance(ServiceProviderFactory.ServiceProvider);
_idleTimer = ActivatorUtilities.GetServiceOrCreateInstance(ServiceProviderFactory.ServiceProvider);
_viewModel = ActivatorUtilities.GetServiceOrCreateInstance(ServiceProviderFactory.ServiceProvider);
InitializeComponent();
DataContext = _viewModel;
//TODO:: this is a temp solution
if (SettingsWindowViewModel.GeneralTabEnabled == false)
{
TabControl.SelectedIndex = 2;
}
}
private void TitleBarMouseLeftButtonDown(object sender, MouseEventArgs e)
{
try
{
DragMove();
}
catch (Exception exception)
{
_logger.LogError(exception, "Error dragging window, sender = {sender}, event = {event}", sender, e);
}
}
private async void CheckUpdateButtonClick(object sender, RoutedEventArgs e)
{
await _viewModel.CheckUpdate();
}
private async void InstallUpdateButtonClick(object sender, RoutedEventArgs e)
{
await _viewModel.InstallUpdate();
}
private void UserCloudServerButtonClick(object sender, RoutedEventArgs e)
{
Settings.Default.ServerAddress = "astroke.cereflow.cn";
Settings.Default.ServerPort = 443;
}
private void UserTestServerButtonClick(object sender, RoutedEventArgs e)
{
Settings.Default.ServerAddress = "develop.cereflow.cn";
Settings.Default.ServerPort = 443;
}
private void UserLocalhostButtonClick(object sender, RoutedEventArgs e)
{
Settings.Default.ServerAddress = "127.0.0.1";
Settings.Default.ServerPort = 8080;
}
private void OpenLogDirectoryButtonClick(object sender, RoutedEventArgs _)
{
try
{
Process.Start("explorer.exe", ServiceProviderFactory.LogFolder);
}
catch (Exception e)
{
_logger.LogError(e, "Error opening {folder}", ServiceProviderFactory.LogFolder);
}
}
private void OpenTempDirectoryButtonClick(object sender, RoutedEventArgs _)
{
try
{
Process.Start("explorer.exe", ServiceConfigurations.TempFolder);
}
catch (Exception e)
{
_logger.LogError(e, "Error opening {folder}", ServiceConfigurations.TempFolder);
}
}
private async void EditPasswordButtonClick(object sender, RoutedEventArgs e)
{
bool success = await _viewModel.EditPassword(OldPasswordBox.Password, NewPasswordBox.Password, ConfirmPasswordBox.Password).ConfigureAwait(true);
if (success)
{
Close();
}
}
private void LanguageSelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.Source is not ComboBox comboBox)
return;
//This is also fired when open settings window.ignore those calls.
if (!comboBox.IsLoaded)
return;
if (comboBox.SelectedValue is not string languageId)
return;
ViewUtility.SetDefaultFont(languageId);
}
private void ClearAuthenticationKeyButtonClick(object sender, RoutedEventArgs e)
{
Settings.Default.AuthenticationKey = string.Empty;
}
private void SettingsWindowOnPreviewMouseDown(object sender, MouseButtonEventArgs e)
{
_idleTimer.ResetTimer();
}
private void SettingsWindowOnPreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
_idleTimer.ResetTimer();
}
private void SettingsWindowOnPreviewMouseMove(object sender, MouseEventArgs e)
{
_idleTimer.ResetTimer();
}
}