Move projects to ./src
@@ -3,15 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
|||||||
# Visual Studio Version 17
|
# Visual Studio Version 17
|
||||||
VisualStudioVersion = 17.4.33205.214
|
VisualStudioVersion = 17.4.33205.214
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NebulaAuth", "NebulaAuth\NebulaAuth.csproj", "{0FD01700-6D5C-451B-93BA-0860647E8F13}"
|
|
||||||
ProjectSection(ProjectDependencies) = postProject
|
|
||||||
{09F02072-F91D-4DAA-87BC-A34D3E150570} = {09F02072-F91D-4DAA-87BC-A34D3E150570}
|
|
||||||
EndProjectSection
|
|
||||||
EndProject
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NebulaAuth.LegacyConverter", "NebulaAuth.LegacyConverter\NebulaAuth.LegacyConverter.csproj", "{2D78A7D9-986A-4890-8A91-7ABD57A91830}"
|
|
||||||
EndProject
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SteamLibForked", "SteamLibForked\SteamLibForked.csproj", "{09F02072-F91D-4DAA-87BC-A34D3E150570}"
|
|
||||||
EndProject
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "changelog", "changelog", "{161BFADE-FCF3-45D1-82EA-8A1B187529F7}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "changelog", "changelog", "{161BFADE-FCF3-45D1-82EA-8A1B187529F7}"
|
||||||
ProjectSection(SolutionItems) = preProject
|
ProjectSection(SolutionItems) = preProject
|
||||||
changelog\1.3.4.html = changelog\1.3.4.html
|
changelog\1.3.4.html = changelog\1.3.4.html
|
||||||
@@ -30,24 +21,30 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "changelog", "changelog", "{
|
|||||||
changelog\1.5.6.html = changelog\1.5.6.html
|
changelog\1.5.6.html = changelog\1.5.6.html
|
||||||
EndProjectSection
|
EndProjectSection
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SteamLibForked", "src\SteamLibForked\SteamLibForked.csproj", "{224F9DB0-3D20-A614-BA2A-12F22B13A2C6}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NebulaAuth.LegacyConverter", "src\NebulaAuth.LegacyConverter\NebulaAuth.LegacyConverter.csproj", "{C8235305-E5C4-155B-C718-C0F239CA3AB7}"
|
||||||
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NebulaAuth", "src\NebulaAuth\NebulaAuth.csproj", "{C42F63B6-32F7-ED08-5B86-CD51989761AD}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{0FD01700-6D5C-451B-93BA-0860647E8F13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{224F9DB0-3D20-A614-BA2A-12F22B13A2C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{0FD01700-6D5C-451B-93BA-0860647E8F13}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{224F9DB0-3D20-A614-BA2A-12F22B13A2C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{0FD01700-6D5C-451B-93BA-0860647E8F13}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{224F9DB0-3D20-A614-BA2A-12F22B13A2C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{0FD01700-6D5C-451B-93BA-0860647E8F13}.Release|Any CPU.Build.0 = Release|Any CPU
|
{224F9DB0-3D20-A614-BA2A-12F22B13A2C6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{2D78A7D9-986A-4890-8A91-7ABD57A91830}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{C8235305-E5C4-155B-C718-C0F239CA3AB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{2D78A7D9-986A-4890-8A91-7ABD57A91830}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{C8235305-E5C4-155B-C718-C0F239CA3AB7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{2D78A7D9-986A-4890-8A91-7ABD57A91830}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{C8235305-E5C4-155B-C718-C0F239CA3AB7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{2D78A7D9-986A-4890-8A91-7ABD57A91830}.Release|Any CPU.Build.0 = Release|Any CPU
|
{C8235305-E5C4-155B-C718-C0F239CA3AB7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{09F02072-F91D-4DAA-87BC-A34D3E150570}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{C42F63B6-32F7-ED08-5B86-CD51989761AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{09F02072-F91D-4DAA-87BC-A34D3E150570}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{C42F63B6-32F7-ED08-5B86-CD51989761AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{09F02072-F91D-4DAA-87BC-A34D3E150570}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{C42F63B6-32F7-ED08-5B86-CD51989761AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{09F02072-F91D-4DAA-87BC-A34D3E150570}.Release|Any CPU.Build.0 = Release|Any CPU
|
{C42F63B6-32F7-ED08-5B86-CD51989761AD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
@@ -1,90 +0,0 @@
|
|||||||
<UserControl x:Class="NebulaAuth.View.SettingsView"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
||||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
|
||||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
|
||||||
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
|
|
||||||
xmlns:other="clr-namespace:NebulaAuth.ViewModel.Other"
|
|
||||||
mc:Ignorable="d"
|
|
||||||
d:DesignHeight="650"
|
|
||||||
Foreground="WhiteSmoke"
|
|
||||||
FontFamily="{materialDesign:MaterialDesignFont}"
|
|
||||||
MinHeight="600"
|
|
||||||
MinWidth="400"
|
|
||||||
|
|
||||||
MaxWidth="200"
|
|
||||||
d:DataContext="{d:DesignInstance other:SettingsVM}"
|
|
||||||
Background="{DynamicResource WindowBackground}">
|
|
||||||
<Grid>
|
|
||||||
<Grid Margin="15,10,15,15">
|
|
||||||
<Grid.RowDefinitions>
|
|
||||||
<RowDefinition Height="Auto" />
|
|
||||||
<RowDefinition Height="Auto" />
|
|
||||||
<RowDefinition />
|
|
||||||
<RowDefinition Height="Auto" />
|
|
||||||
</Grid.RowDefinitions>
|
|
||||||
<Grid>
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition />
|
|
||||||
<ColumnDefinition />
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<TextBlock FontStyle="Normal" Foreground="DarkGray" HorizontalAlignment="Left"
|
|
||||||
VerticalAlignment="Center" FontSize="18" Text="{Tr SettingsDialog.Title}" />
|
|
||||||
<Button IsCancel="True" Grid.Column="1" Width="30" Height="30"
|
|
||||||
Style="{StaticResource MaterialDesignIconForegroundButton}" HorizontalAlignment="Right"
|
|
||||||
Command="{x:Static materialDesign:DialogHost.CloseDialogCommand}">
|
|
||||||
<materialDesign:PackIcon Kind="Close" Width="24" Height="24" Foreground="IndianRed" />
|
|
||||||
</Button>
|
|
||||||
</Grid>
|
|
||||||
<Separator Grid.Row="1" Margin="0,10,0,0" />
|
|
||||||
|
|
||||||
<StackPanel Grid.Row="2" Margin="10,30,10,10" Orientation="Vertical" HorizontalAlignment="Center">
|
|
||||||
<ComboBox Style="{StaticResource MaterialDesignOutlinedComboBox}" FontSize="16"
|
|
||||||
ItemsSource="{Binding BackgroundModes}" DisplayMemberPath="Value" SelectedValuePath="Key"
|
|
||||||
SelectedValue="{Binding BackgroundMode}"
|
|
||||||
materialDesign:HintAssist.Hint="{Tr SettingsDialog.BackgroundHint}" />
|
|
||||||
<ComboBox Style="{StaticResource MaterialDesignFloatingHintComboBox}" Margin="0,20,0,0" FontSize="16"
|
|
||||||
ItemsSource="{Binding Languages}" DisplayMemberPath="Value" SelectedValuePath="Key"
|
|
||||||
SelectedValue="{Binding Language}" materialDesign:HintAssist.Hint="{Tr LanguageWord}" />
|
|
||||||
<CheckBox Margin="0,10,0,0" FontSize="16" IsChecked="{Binding HideToTray}"
|
|
||||||
Content="{Tr SettingsDialog.MinimizeToTray}" />
|
|
||||||
<CheckBox Margin="0,10,0,0" FontSize="16" IsChecked="{Binding UseIcon}"
|
|
||||||
Content="{Tr SettingsDialog.UseIndicator}" ToolTip="{Tr SettingsDialog.UseIndicatorHint}" />
|
|
||||||
<materialDesign:ColorPicker IsEnabled="{Binding UseIcon}" Color="{Binding IconColor, Delay=50}" />
|
|
||||||
<CheckBox Margin="0,10,0,5" FontSize="16" IsChecked="{Binding UseBackground}"
|
|
||||||
Content="{Tr SettingsDialog.UseCustomColor}" />
|
|
||||||
|
|
||||||
<materialDesign:ColorPicker Height="100" IsEnabled="{Binding UseBackground}"
|
|
||||||
Color="{Binding BackgroundColor, Delay=50}" />
|
|
||||||
<Grid>
|
|
||||||
<Grid.ColumnDefinitions>
|
|
||||||
<ColumnDefinition />
|
|
||||||
<ColumnDefinition Width="Auto" />
|
|
||||||
</Grid.ColumnDefinitions>
|
|
||||||
<PasswordBox MinWidth="250" materialDesign:PasswordBoxAssist.Password="{Binding Password}"
|
|
||||||
Height="Auto" VerticalAlignment="Center" FontSize="16" Margin="0,10,0,0"
|
|
||||||
Style="{StaticResource MaterialDesignFloatingHintRevealPasswordBox}"
|
|
||||||
materialDesign:HintAssist.Hint="{Tr SettingsDialog.PasswordBox.CurrentCryptPassword}"
|
|
||||||
materialDesign:HintAssist.HelperText="{Tr SettingsDialog.PasswordBox.Hint}" />
|
|
||||||
<Button Command="{Binding SetPasswordCommand}" Margin="5,0,0,0" VerticalAlignment="Bottom"
|
|
||||||
Grid.Column="1">
|
|
||||||
<materialDesign:PackIcon Kind="ContentSave" />
|
|
||||||
</Button>
|
|
||||||
</Grid>
|
|
||||||
<CheckBox Margin="0,20,0,0" FontSize="16" IsChecked="{Binding LegacyMode}"
|
|
||||||
Content="{Tr SettingsDialog.LegacyMafileMode}"
|
|
||||||
ToolTip="{Tr SettingsDialog.LegacyMafileModeHint}" />
|
|
||||||
<!--<CheckBox IsEnabled="False" Margin="0,10,0,0" FontSize="16" IsChecked="{Binding AllowAutoUpdate}" Content="{Tr SettingsDialog.AllowAutoUpdate}"/>-->
|
|
||||||
<CheckBox Margin="0,10,0,0" FontSize="16" IsChecked="{Binding UseAccountNameAsMafileName}">
|
|
||||||
<TextBlock TextWrapping="WrapWithOverflow" Text="{Tr SettingsDialog.UseAccountName}" />
|
|
||||||
</CheckBox>
|
|
||||||
<CheckBox IsChecked="{Binding IgnorePatchTuesdayErrors}" Margin="0,10,0,0" FontSize="16"
|
|
||||||
ToolTip="{Tr SettingsDialog.IgnorePatchTuesdayErrorsHint}">
|
|
||||||
<TextBlock TextWrapping="WrapWithOverflow" Text="{Tr SettingsDialog.IgnorePatchTuesdayErrors}" />
|
|
||||||
</CheckBox>
|
|
||||||
</StackPanel>
|
|
||||||
|
|
||||||
|
|
||||||
</Grid>
|
|
||||||
</Grid>
|
|
||||||
</UserControl>
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
namespace SteamLib.Utility;
|
|
||||||
|
|
||||||
public readonly struct SocketsClientHandlerPair
|
|
||||||
{
|
|
||||||
public SocketsHttpHandler Handler { get; }
|
|
||||||
public HttpClient Client { get; }
|
|
||||||
|
|
||||||
public SocketsClientHandlerPair(HttpClient client, SocketsHttpHandler handler)
|
|
||||||
{
|
|
||||||
Handler = handler;
|
|
||||||
Client = client;
|
|
||||||
}
|
|
||||||
|
|
||||||
public (SocketsHttpHandler, HttpClient) Deconstruct()
|
|
||||||
{
|
|
||||||
return (Handler, Client);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -26,7 +26,6 @@
|
|||||||
<materialDesign:NullableToVisibilityConverter x:Key="NullableToVisibilityConverter" />
|
<materialDesign:NullableToVisibilityConverter x:Key="NullableToVisibilityConverter" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<system:Boolean x:Key="True">True</system:Boolean>
|
<system:Boolean x:Key="True">True</system:Boolean>
|
||||||
<system:Boolean x:Key="False">False</system:Boolean>
|
<system:Boolean x:Key="False">False</system:Boolean>
|
||||||
|
|
||||||
@@ -58,10 +57,15 @@
|
|||||||
<SolidColorBrush x:Key="MaterialDesign.Brush.Background" Color="{StaticResource BackgroundColor}" />
|
<SolidColorBrush x:Key="MaterialDesign.Brush.Background" Color="{StaticResource BackgroundColor}" />
|
||||||
<SolidColorBrush x:Key="MaterialDesign.Brush.Foreground" Color="{StaticResource BaseContentColor}" />
|
<SolidColorBrush x:Key="MaterialDesign.Brush.Foreground" Color="{StaticResource BaseContentColor}" />
|
||||||
<SolidColorBrush x:Key="MaterialDesign.Brush.ToolBar.Item.Background"
|
<SolidColorBrush x:Key="MaterialDesign.Brush.ToolBar.Item.Background"
|
||||||
Color="{StaticResource Base300Color}" />
|
Color="{StaticResource PrimaryColor}" />
|
||||||
<SolidColorBrush x:Key="MaterialDesign.Brush.ToolBar.Item.Foreground"
|
<SolidColorBrush x:Key="MaterialDesign.Brush.ToolBar.Item.Foreground"
|
||||||
Color="{StaticResource BaseContentColor}" />
|
Color="{StaticResource BaseContentColor}" />
|
||||||
|
|
||||||
|
<!--Unchecked checkbox uses it-->
|
||||||
|
<SolidColorBrush x:Key="MaterialDesign.Brush.ForegroundLight" Color="{DynamicResource PrimaryColor}"/>
|
||||||
|
|
||||||
|
<SolidColorBrush x:Key="MaterialDesign.Brush.SnackBar.Background" Color="{StaticResource BaseContentColor}"/>
|
||||||
|
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
||||||
<!--secondary colour-->
|
<!--secondary colour-->
|
||||||
@@ -97,7 +101,6 @@
|
|||||||
<ResourceDictionary Source="Theme/MaterialDesignThemes.Overrides.xaml" />
|
<ResourceDictionary Source="Theme/MaterialDesignThemes.Overrides.xaml" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</ResourceDictionary.MergedDictionaries>
|
</ResourceDictionary.MergedDictionaries>
|
||||||
|
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
@@ -18,7 +18,7 @@ public class BackgroundSourceConverter : IValueConverter
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return new BitmapImage(new Uri("pack://application:,,,/Theme/Background.jpg"));
|
return new BitmapImage(new Uri("pack://application:,,,/Theme/Background.png"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
|
public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture)
|
||||||
@@ -2,9 +2,7 @@
|
|||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Drawing.Drawing2D;
|
using System.Drawing.Drawing2D;
|
||||||
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Interop;
|
using System.Windows.Interop;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
@@ -81,7 +79,6 @@ public static class ThemeManager
|
|||||||
var color = (System.Windows.Media.Color) Application.Current.Resources[key];
|
var color = (System.Windows.Media.Color) Application.Current.Resources[key];
|
||||||
Application.Current.Resources[brushKey] = new SolidColorBrush(color);
|
Application.Current.Resources[brushKey] = new SolidColorBrush(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -347,20 +347,20 @@
|
|||||||
<MouseBinding Gesture="LeftClick" Command="{Binding CopyCodeCommand}" />
|
<MouseBinding Gesture="LeftClick" Command="{Binding CopyCodeCommand}" />
|
||||||
</TextBox.InputBindings>
|
</TextBox.InputBindings>
|
||||||
</TextBox>
|
</TextBox>
|
||||||
|
|
||||||
<controls:CodeProgressBar
|
<controls:CodeProgressBar
|
||||||
Visibility="{Binding SelectedMafile, Converter={StaticResource NullableToVisibilityConverter}}"
|
Visibility="{Binding SelectedMafile, Converter={StaticResource NullableToVisibilityConverter}}"
|
||||||
Grid.Row="1" Height="4" Style="{StaticResource MaterialDesignLinearProgressBar}"
|
Grid.Row="1" Height="4" Style="{StaticResource MaterialDesignLinearProgressBar}"
|
||||||
MaxTime="30" TimeRemaining="{Binding CodeProgress, Mode=OneWay}" />
|
MaxTime="30" TimeRemaining="{Binding CodeProgress, Mode=OneWay}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<Button IsEnabled="{Binding IsMafileSelected}" w:FontScaleWindow.Scale="0.7"
|
<Button IsEnabled="{Binding IsMafileSelected}" w:FontScaleWindow.Scale="0.7"
|
||||||
w:FontScaleWindow.ResizeFont="True" Grid.Row="1"
|
w:FontScaleWindow.ResizeFont="True" Grid.Row="1"
|
||||||
Style="{StaticResource MaterialDesignOutlinedButton}" Margin="82,10,82,10"
|
Style="{StaticResource MaterialDesignOutlinedButton}" Margin="0,10,0,10"
|
||||||
|
HorizontalAlignment="Center"
|
||||||
|
Content="{Tr MainWindow.RightPart.LoadConfirmations}"
|
||||||
Command="{Binding GetConfirmationsCommand}"
|
Command="{Binding GetConfirmationsCommand}"
|
||||||
Width="{Binding Path=ActualWidth, Converter={StaticResource CoefficientConverter}, ConverterParameter=0.6, RelativeSource={RelativeSource AncestorType=md:Card}}">
|
Width="{Binding Path=ActualWidth, Converter={StaticResource CoefficientConverter}, ConverterParameter=0.6, RelativeSource={RelativeSource AncestorType=md:Card}}">
|
||||||
<TextBlock TextWrapping="Wrap" TextTrimming="WordEllipsis"
|
|
||||||
Text="{Tr MainWindow.RightPart.LoadConfirmations}" />
|
|
||||||
</Button>
|
</Button>
|
||||||
<ItemsControl md:RippleAssist.IsDisabled="True" Focusable="False" Grid.Row="2"
|
<ItemsControl md:RippleAssist.IsDisabled="True" Focusable="False" Grid.Row="2"
|
||||||
w:FontScaleWindow.Scale="0.72" w:FontScaleWindow.ResizeFont="True"
|
w:FontScaleWindow.Scale="0.72" w:FontScaleWindow.ResizeFont="True"
|
||||||
@@ -409,7 +409,7 @@
|
|||||||
</TextBlock>
|
</TextBlock>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Border>
|
</Border>
|
||||||
<md:Snackbar Grid.Row="1" FontSize="20" MessageQueue="{Binding MessageQueue}" />
|
<md:Snackbar Grid.Row="1" MessageQueue="{Binding MessageQueue}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</md:DialogHost>
|
</md:DialogHost>
|
||||||
</Border>
|
</Border>
|
||||||
@@ -3,8 +3,11 @@ using System.Diagnostics;
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
|
using System.Windows.Media;
|
||||||
using System.Windows.Navigation;
|
using System.Windows.Navigation;
|
||||||
|
using System.Windows.Shapes;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
using MaterialDesignThemes.Wpf;
|
using MaterialDesignThemes.Wpf;
|
||||||
using NebulaAuth.Core;
|
using NebulaAuth.Core;
|
||||||
@@ -109,4 +112,5 @@ public partial class MainWindow
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -15,6 +15,8 @@ public static class MultiAccountAutoConfirmer
|
|||||||
{
|
{
|
||||||
private const string LOC_PATH = "MAAC";
|
private const string LOC_PATH = "MAAC";
|
||||||
private static readonly ReaderWriterLockSlim Lock = new();
|
private static readonly ReaderWriterLockSlim Lock = new();
|
||||||
|
|
||||||
|
private static readonly SemaphoreSlim ExecutionLock = new(1, 1);
|
||||||
public static ObservableCollection<Mafile> Clients { get; }
|
public static ObservableCollection<Mafile> Clients { get; }
|
||||||
private static Timer Timer { get; }
|
private static Timer Timer { get; }
|
||||||
|
|
||||||
@@ -26,12 +28,10 @@ public static class MultiAccountAutoConfirmer
|
|||||||
UpdateTimer();
|
UpdateTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static readonly SemaphoreSlim ExecutionLock = new(1, 1);
|
|
||||||
|
|
||||||
// ReSharper disable once AsyncVoidMethod //Already safe
|
// ReSharper disable once AsyncVoidMethod //Already safe
|
||||||
private static async void TimerConfirm(object? state)
|
private static async void TimerConfirm(object? state)
|
||||||
{
|
{
|
||||||
bool isHeld = false;
|
var isHeld = false;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
isHeld = await ExecutionLock.WaitAsync(0);
|
isHeld = await ExecutionLock.WaitAsync(0);
|
||||||
@@ -40,8 +40,8 @@ public static class MultiAccountAutoConfirmer
|
|||||||
SnackbarController.SendSnackbar(GetLocalization("TimerPreventedOverlap"));
|
SnackbarController.SendSnackbar(GetLocalization("TimerPreventedOverlap"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await TimerConfirmInternal();
|
|
||||||
|
|
||||||
|
await TimerConfirmInternal();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@@ -17,7 +17,6 @@ using SteamLib.Authentication;
|
|||||||
using SteamLib.Core.Interfaces;
|
using SteamLib.Core.Interfaces;
|
||||||
using SteamLib.Exceptions;
|
using SteamLib.Exceptions;
|
||||||
using SteamLib.SteamMobile.Confirmations;
|
using SteamLib.SteamMobile.Confirmations;
|
||||||
using SteamLib.Utility;
|
|
||||||
using SteamLib.Web;
|
using SteamLib.Web;
|
||||||
|
|
||||||
namespace NebulaAuth.Model.MAAC;
|
namespace NebulaAuth.Model.MAAC;
|
||||||
@@ -27,7 +26,7 @@ public partial class PortableMaClient : ObservableObject, IDisposable
|
|||||||
private const string LOC_PATH = "MAAC";
|
private const string LOC_PATH = "MAAC";
|
||||||
public Mafile Mafile { get; }
|
public Mafile Mafile { get; }
|
||||||
private HttpClient Client { get; }
|
private HttpClient Client { get; }
|
||||||
private SocketsHttpHandler ClientHandler { get; }
|
private HttpClientHandler ClientHandler { get; }
|
||||||
private DynamicProxy Proxy { get; }
|
private DynamicProxy Proxy { get; }
|
||||||
|
|
||||||
private readonly CancellationTokenSource _cts = new();
|
private readonly CancellationTokenSource _cts = new();
|
||||||
@@ -12,14 +12,13 @@ using SteamLib.Core.Interfaces;
|
|||||||
using SteamLib.Exceptions;
|
using SteamLib.Exceptions;
|
||||||
using SteamLib.ProtoCore.Services;
|
using SteamLib.ProtoCore.Services;
|
||||||
using SteamLib.SteamMobile.Confirmations;
|
using SteamLib.SteamMobile.Confirmations;
|
||||||
using SteamLib.Utility;
|
|
||||||
using SteamLib.Web;
|
using SteamLib.Web;
|
||||||
|
|
||||||
namespace NebulaAuth.Model;
|
namespace NebulaAuth.Model;
|
||||||
|
|
||||||
public static class MaClient
|
public static class MaClient
|
||||||
{
|
{
|
||||||
private static SocketsHttpHandler ClientHandler { get; }
|
private static HttpClientHandler ClientHandler { get; }
|
||||||
|
|
||||||
private static HttpClient Client { get; }
|
private static HttpClient Client { get; }
|
||||||
|
|
||||||
@@ -8,8 +8,6 @@ using NebulaAuth.Core;
|
|||||||
using NebulaAuth.Model.Entities;
|
using NebulaAuth.Model.Entities;
|
||||||
using NebulaAuth.View.Dialogs;
|
using NebulaAuth.View.Dialogs;
|
||||||
using SteamLib.Exceptions;
|
using SteamLib.Exceptions;
|
||||||
using SteamLib.Utility;
|
|
||||||
|
|
||||||
|
|
||||||
namespace NebulaAuth.Model;
|
namespace NebulaAuth.Model;
|
||||||
|
|
||||||
@@ -18,7 +16,7 @@ public static partial class SessionHandler
|
|||||||
private static readonly SemaphoreSlim Semaphore = new(1, 1);
|
private static readonly SemaphoreSlim Semaphore = new(1, 1);
|
||||||
|
|
||||||
public static async Task<T> Handle<T>(Func<Task<T>> func, Mafile mafile,
|
public static async Task<T> Handle<T>(Func<Task<T>> func, Mafile mafile,
|
||||||
SocketsClientHandlerPair? chp = null, string? snackbarPrefix = null)
|
HttpClientHandlerPair? chp = null, string? snackbarPrefix = null)
|
||||||
{
|
{
|
||||||
chp ??= MaClient.GetHttpClientHandlerPair(mafile);
|
chp ??= MaClient.GetHttpClientHandlerPair(mafile);
|
||||||
await Semaphore.WaitAsync();
|
await Semaphore.WaitAsync();
|
||||||
@@ -32,7 +30,7 @@ public static partial class SessionHandler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task<T> HandleInternal<T>(Func<Task<T>> func, SocketsClientHandlerPair chp, Mafile mafile,
|
private static async Task<T> HandleInternal<T>(Func<Task<T>> func, HttpClientHandlerPair chp, Mafile mafile,
|
||||||
string? snackbarPrefix = null)
|
string? snackbarPrefix = null)
|
||||||
{
|
{
|
||||||
using var scope = Shell.Logger.PushScopeProperty("Scope", "SessionHandler");
|
using var scope = Shell.Logger.PushScopeProperty("Scope", "SessionHandler");
|
||||||
@@ -137,7 +135,7 @@ public static partial class SessionHandler
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static async Task<bool> RefreshInternal(SocketsClientHandlerPair chp, Mafile mafile)
|
private static async Task<bool> RefreshInternal(HttpClientHandlerPair chp, Mafile mafile)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -152,7 +150,7 @@ public static partial class SessionHandler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task<bool> LoginAgainInternal(SocketsClientHandlerPair chp, Mafile mafile, string password,
|
private static async Task<bool> LoginAgainInternal(HttpClientHandlerPair chp, Mafile mafile, string password,
|
||||||
bool savePassword)
|
bool savePassword)
|
||||||
{
|
{
|
||||||
var t = Task.Run(OnLoginStarted);
|
var t = Task.Run(OnLoginStarted);
|
||||||
@@ -1,5 +1,4 @@
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using AchiesUtilities.Web.Models;
|
using AchiesUtilities.Web.Models;
|
||||||
using NebulaAuth.Model.Entities;
|
using NebulaAuth.Model.Entities;
|
||||||
using SteamLib.Account;
|
using SteamLib.Account;
|
||||||
@@ -8,14 +7,12 @@ using SteamLib.Authentication;
|
|||||||
using SteamLib.Authentication.LoginV2;
|
using SteamLib.Authentication.LoginV2;
|
||||||
using SteamLib.Exceptions;
|
using SteamLib.Exceptions;
|
||||||
using SteamLib.SteamMobile;
|
using SteamLib.SteamMobile;
|
||||||
using SteamLib.Utility;
|
|
||||||
|
|
||||||
|
|
||||||
namespace NebulaAuth.Model;
|
namespace NebulaAuth.Model;
|
||||||
|
|
||||||
public partial class SessionHandler //API
|
public partial class SessionHandler //API
|
||||||
{
|
{
|
||||||
public static async Task RefreshMobileToken(SocketsClientHandlerPair chp, Mafile mafile)
|
public static async Task RefreshMobileToken(HttpClientHandlerPair chp, Mafile mafile)
|
||||||
{
|
{
|
||||||
if (mafile.SessionData is not {RefreshToken.IsExpired: false})
|
if (mafile.SessionData is not {RefreshToken.IsExpired: false})
|
||||||
throw new SessionPermanentlyExpiredException(SessionInvalidException.SESSION_NULL_MSG);
|
throw new SessionPermanentlyExpiredException(SessionInvalidException.SESSION_NULL_MSG);
|
||||||
@@ -35,7 +32,7 @@ public partial class SessionHandler //API
|
|||||||
chp.Handler.CookieContainer.SetSteamMobileCookiesWithMobileToken(mafile.SessionData);
|
chp.Handler.CookieContainer.SetSteamMobileCookiesWithMobileToken(mafile.SessionData);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task LoginAgain(SocketsClientHandlerPair chp, Mafile mafile, string password, bool savePassword)
|
public static async Task LoginAgain(HttpClientHandlerPair chp, Mafile mafile, string password, bool savePassword)
|
||||||
{
|
{
|
||||||
var sgGenerator = new SteamGuardCodeGenerator(mafile.SharedSecret);
|
var sgGenerator = new SteamGuardCodeGenerator(mafile.SharedSecret);
|
||||||
var options = new LoginV2ExecutorOptions(LoginV2Executor.NullConsumer, chp.Client)
|
var options = new LoginV2ExecutorOptions(LoginV2Executor.NullConsumer, chp.Client)
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Remove="Theme\1140x641.jpg" />
|
<None Remove="Theme\1140x641.jpg" />
|
||||||
<None Remove="Theme\Background.jpg" />
|
<None Remove="Theme\Background.png" />
|
||||||
<None Remove="Theme\lock.ico" />
|
<None Remove="Theme\lock.ico" />
|
||||||
<None Remove="Theme\SplashScreen.png" />
|
<None Remove="Theme\SplashScreen.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@@ -35,7 +35,10 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Resource Include="Theme\Background.jpg">
|
<Resource Include="Theme\Background.png">
|
||||||
|
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
||||||
|
</Resource>
|
||||||
|
<Resource Include="Theme\Background_Old.jpg">
|
||||||
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
||||||
</Resource>
|
</Resource>
|
||||||
<Resource Include="Theme\lock.ico" />
|
<Resource Include="Theme\lock.ico" />
|
||||||
|
After Width: | Height: | Size: 3.4 MiB |
|
Before Width: | Height: | Size: 713 KiB After Width: | Height: | Size: 713 KiB |
@@ -39,15 +39,20 @@ public class CodeProgressBar : ProgressBar
|
|||||||
private void StartProgressAnimation(double timeRemaining)
|
private void StartProgressAnimation(double timeRemaining)
|
||||||
{
|
{
|
||||||
if (timeRemaining <= 0 || MaxTime <= 0) return;
|
if (timeRemaining <= 0 || MaxTime <= 0) return;
|
||||||
var progress = (1 - timeRemaining / MaxTime) * 100;
|
|
||||||
|
|
||||||
|
var progress = (1 - timeRemaining / MaxTime) * 100;
|
||||||
|
Value = 0;
|
||||||
|
Value = 100;
|
||||||
var animation = new DoubleAnimation
|
var animation = new DoubleAnimation
|
||||||
{
|
{
|
||||||
From = progress,
|
From = progress,
|
||||||
To = 100,
|
To = 100,
|
||||||
Duration = TimeSpan.FromSeconds(timeRemaining)
|
Duration = TimeSpan.FromSeconds(timeRemaining),
|
||||||
|
AccelerationRatio = 0,
|
||||||
|
DecelerationRatio = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
BeginAnimation(ValueProperty, animation);
|
BeginAnimation(ValueProperty, animation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
@@ -0,0 +1,28 @@
|
|||||||
|
using System.Windows.Media.Animation;
|
||||||
|
using System.Windows;
|
||||||
|
using System;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
|
||||||
|
namespace NebulaAuth.Theme;
|
||||||
|
|
||||||
|
public class ProgressBarSmoother
|
||||||
|
{
|
||||||
|
public static double GetSmoothValue(DependencyObject obj)
|
||||||
|
{
|
||||||
|
return (double)obj.GetValue(SmoothValueProperty);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetSmoothValue(DependencyObject obj, double value)
|
||||||
|
{
|
||||||
|
obj.SetValue(SmoothValueProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static readonly DependencyProperty SmoothValueProperty =
|
||||||
|
DependencyProperty.RegisterAttached("SmoothValue", typeof(double), typeof(ProgressBarSmoother), new PropertyMetadata(0.0, changing));
|
||||||
|
|
||||||
|
private static void changing(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||||
|
{
|
||||||
|
var anim = new DoubleAnimation((double)e.OldValue, (double)e.NewValue, new TimeSpan(0, 0, 0, 0, 250));
|
||||||
|
(d as ProgressBar).BeginAnimation(ProgressBar.ValueProperty, anim, HandoffBehavior.Compose);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 490 KiB After Width: | Height: | Size: 490 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 906 KiB After Width: | Height: | Size: 906 KiB |
@@ -136,7 +136,7 @@
|
|||||||
<TextBox Grid.Row="1" Padding="7" Text="{Binding PassFieldText}"
|
<TextBox Grid.Row="1" Padding="7" Text="{Binding PassFieldText}"
|
||||||
Visibility="{Binding IsPasswordFieldVisible, Converter={StaticResource BooleanToVisibilityConverter}}"
|
Visibility="{Binding IsPasswordFieldVisible, Converter={StaticResource BooleanToVisibilityConverter}}"
|
||||||
Style="{StaticResource MaterialDesignOutlinedTextBox}" FontSize="16" />
|
Style="{StaticResource MaterialDesignOutlinedTextBox}" FontSize="16" />
|
||||||
<GroupBox Grid.Row="2" MaxWidth="400" BorderBrush="{StaticResource PrimaryHueMidBrush}"
|
<GroupBox Grid.Row="2" MaxWidth="400" BorderBrush="{StaticResource PrimaryBrush}"
|
||||||
VerticalAlignment="Bottom" BorderThickness="1" Margin="0,10,0,0" Padding="5">
|
VerticalAlignment="Bottom" BorderThickness="1" Margin="0,10,0,0" Padding="5">
|
||||||
<GroupBox.HeaderTemplate>
|
<GroupBox.HeaderTemplate>
|
||||||
<DataTemplate>
|
<DataTemplate>
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
<UserControl x:Class="NebulaAuth.View.SettingsView"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
|
||||||
|
xmlns:other="clr-namespace:NebulaAuth.ViewModel.Other"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
d:DesignHeight="650"
|
||||||
|
FontFamily="{materialDesign:MaterialDesignFont}"
|
||||||
|
MinHeight="600"
|
||||||
|
MinWidth="400"
|
||||||
|
|
||||||
|
MaxWidth="200"
|
||||||
|
d:DataContext="{d:DesignInstance other:SettingsVM}"
|
||||||
|
Background="{DynamicResource WindowBackground}">
|
||||||
|
<Grid>
|
||||||
|
<Grid Margin="15,10,15,15">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="Auto" />
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition />
|
||||||
|
<ColumnDefinition />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<TextBlock FontStyle="Normal" Foreground="DarkGray" HorizontalAlignment="Left"
|
||||||
|
VerticalAlignment="Center" FontSize="18" Text="{Tr SettingsDialog.Title}" />
|
||||||
|
<Button IsCancel="True" Grid.Column="1" Width="30" Height="30"
|
||||||
|
Style="{StaticResource MaterialDesignIconForegroundButton}" HorizontalAlignment="Right"
|
||||||
|
Command="{x:Static materialDesign:DialogHost.CloseDialogCommand}">
|
||||||
|
<materialDesign:PackIcon Kind="Close" Width="24" Height="24" Foreground="IndianRed" />
|
||||||
|
</Button>
|
||||||
|
</Grid>
|
||||||
|
<Separator Grid.Row="1" Margin="0,10,0,0" />
|
||||||
|
|
||||||
|
<TabControl Grid.Row="2">
|
||||||
|
<TabItem Header="ОсновныеNTR">
|
||||||
|
<StackPanel Margin="10,30,10,10" Orientation="Vertical" HorizontalAlignment="Center">
|
||||||
|
<ComboBox Style="{StaticResource MaterialDesignOutlinedComboBox}" FontSize="16"
|
||||||
|
ItemsSource="{Binding BackgroundModes}" DisplayMemberPath="Value" SelectedValuePath="Key"
|
||||||
|
SelectedValue="{Binding BackgroundMode}"
|
||||||
|
materialDesign:HintAssist.Hint="{Tr SettingsDialog.BackgroundHint}" />
|
||||||
|
<ComboBox Style="{StaticResource MaterialDesignFloatingHintComboBox}" Margin="0,20,0,0" FontSize="16"
|
||||||
|
ItemsSource="{Binding Languages}" DisplayMemberPath="Value" SelectedValuePath="Key"
|
||||||
|
SelectedValue="{Binding Language}" materialDesign:HintAssist.Hint="{Tr LanguageWord}" />
|
||||||
|
<CheckBox Margin="0,10,0,0" FontSize="16" IsChecked="{Binding HideToTray}"
|
||||||
|
Content="{Tr SettingsDialog.MinimizeToTray}" />
|
||||||
|
<CheckBox Margin="0,10,0,0" FontSize="16" IsChecked="{Binding UseIcon}"
|
||||||
|
Content="{Tr SettingsDialog.UseIndicator}" ToolTip="{Tr SettingsDialog.UseIndicatorHint}" />
|
||||||
|
<materialDesign:ColorPicker IsEnabled="{Binding UseIcon}" Color="{Binding IconColor, Delay=50}" />
|
||||||
|
<CheckBox Margin="0,10,0,5" FontSize="16" IsChecked="{Binding UseBackground}"
|
||||||
|
Content="{Tr SettingsDialog.UseCustomColor}" />
|
||||||
|
|
||||||
|
<materialDesign:ColorPicker Height="100" IsEnabled="{Binding UseBackground}"
|
||||||
|
Color="{Binding BackgroundColor, Delay=50}" />
|
||||||
|
<Grid>
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition />
|
||||||
|
<ColumnDefinition Width="Auto" />
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<PasswordBox MinWidth="250" materialDesign:PasswordBoxAssist.Password="{Binding Password}"
|
||||||
|
Height="Auto" VerticalAlignment="Center" FontSize="16" Margin="0,10,0,0"
|
||||||
|
Style="{StaticResource MaterialDesignFloatingHintRevealPasswordBox}"
|
||||||
|
materialDesign:HintAssist.Hint="{Tr SettingsDialog.PasswordBox.CurrentCryptPassword}"
|
||||||
|
materialDesign:HintAssist.HelperText="{Tr SettingsDialog.PasswordBox.Hint}" />
|
||||||
|
<Button Command="{Binding SetPasswordCommand}" Margin="5,0,0,0" VerticalAlignment="Bottom"
|
||||||
|
Grid.Column="1">
|
||||||
|
<materialDesign:PackIcon Kind="ContentSave" />
|
||||||
|
</Button>
|
||||||
|
</Grid>
|
||||||
|
<CheckBox Margin="0,20,0,0" FontSize="16" IsChecked="{Binding LegacyMode}"
|
||||||
|
Content="{Tr SettingsDialog.LegacyMafileMode}"
|
||||||
|
ToolTip="{Tr SettingsDialog.LegacyMafileModeHint}" />
|
||||||
|
<!--<CheckBox IsEnabled="False" Margin="0,10,0,0" FontSize="16" IsChecked="{Binding AllowAutoUpdate}" Content="{Tr SettingsDialog.AllowAutoUpdate}"/>-->
|
||||||
|
<CheckBox Margin="0,10,0,0" FontSize="16" IsChecked="{Binding UseAccountNameAsMafileName}">
|
||||||
|
<TextBlock TextWrapping="WrapWithOverflow" Text="{Tr SettingsDialog.UseAccountName}" />
|
||||||
|
</CheckBox>
|
||||||
|
|
||||||
|
<CheckBox Style="{StaticResource MaterialDesignCheckBox}" BorderBrush="AliceBlue" BorderThickness="2" IsChecked="{Binding IgnorePatchTuesdayErrors}" Margin="0,10,0,0" FontSize="16"
|
||||||
|
ToolTip="{Tr SettingsDialog.IgnorePatchTuesdayErrorsHint}">
|
||||||
|
<TextBlock TextWrapping="WrapWithOverflow" Text="{Tr SettingsDialog.IgnorePatchTuesdayErrors}" />
|
||||||
|
</CheckBox>
|
||||||
|
</StackPanel>
|
||||||
|
|
||||||
|
</TabItem>
|
||||||
|
<TabItem IsEnabled="True" Header="ТулбарNTR">
|
||||||
|
<TextBlock>Coming soon</TextBlock>
|
||||||
|
</TabItem>
|
||||||
|
</TabControl>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</UserControl>
|
||||||
@@ -26,7 +26,6 @@ public partial class MainVM
|
|||||||
_codeTimer = new Timer(UpdateCode, null, 0, 1000);
|
_codeTimer = new Timer(UpdateCode, null, 0, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void UpdateCode(object? state = null)
|
private void UpdateCode(object? state = null)
|
||||||
{
|
{
|
||||||
var currentTime = TimeAligner.GetSteamTime();
|
var currentTime = TimeAligner.GetSteamTime();
|
||||||
@@ -41,7 +40,7 @@ public partial class MainVM
|
|||||||
if (Application.Current.MainWindow?.WindowState == WindowState.Minimized) return;
|
if (Application.Current.MainWindow?.WindowState == WindowState.Minimized) return;
|
||||||
if (SelectedMafile == null) return;
|
if (SelectedMafile == null) return;
|
||||||
Code = SteamGuardCodeGenerator.GenerateCode(SelectedMafile.SharedSecret);
|
Code = SteamGuardCodeGenerator.GenerateCode(SelectedMafile.SharedSecret);
|
||||||
}, DispatcherPriority.DataBind);
|
}, DispatcherPriority.Normal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||