Files
Nebula-Auth/NebulaAuth/ViewModel/MainVM_Code.cs
T
achiez 8ff960189e 1.5.6 Bug fixes and code clean-ups
- Update: Added "Copy Password" to Mafile context menu (if available)
- Update: "Save Password" now pre-fills the current password in the "Login Again" dialog when encryption is enabled
- Fix: Prevented overlapping confirmation cycles in AutoConfirmer
- Fix: Added a Snackbar notification when a confirmation cycle is skipped due to a too frequent timer interval
- Fix: Fixed a rare bug where the previous proxy was used instead of the current one during session refresh
- Fix: Corrected "Session Permanently Expired" message showing on unrelated errors (e.g. network issues)
- UI-Fix: Fixed visual glitch where proxy input appeared non-empty when switching to a mafile-specific proxy
- Cleanup: Refactored and cleaned up codebase, improved styling and formatting via ReSharper
2025-05-02 23:29:24 +03:00

73 lines
2.1 KiB
C#

using System;
using System.Diagnostics.CodeAnalysis;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Threading;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using NebulaAuth.Core;
using NebulaAuth.Model;
using SteamLib.SteamMobile;
namespace NebulaAuth.ViewModel;
public partial class MainVM
{
[ObservableProperty] private string _code = "Code";
[ObservableProperty] private double _codeProgress;
private Timer _codeTimer;
[MemberNotNull(nameof(_codeTimer))]
private void CreateCodeTimer()
{
_codeTimer = new Timer(UpdateCode, null, 0, 1000);
}
private void UpdateCode(object? state = null)
{
var currentTime = TimeAligner.GetSteamTime();
var untilChange = currentTime % 30;
var codeProgress = untilChange / 30D * 100;
string? code = null;
if (untilChange == 0 && SelectedMafile != null)
{
code = SteamGuardCodeGenerator.GenerateCode(SelectedMafile!.SharedSecret);
}
if (Application.Current == null) return;
Application.Current.Dispatcher.BeginInvoke((string? c) =>
{
if (Application.Current.MainWindow?.WindowState == WindowState.Minimized) return;
CodeProgress = codeProgress;
if (c != null) Code = c;
}, DispatcherPriority.DataBind, code);
}
[RelayCommand(AllowConcurrentExecutions = false)]
private async Task CopyCode()
{
var selectedMafile = SelectedMafile;
if (selectedMafile == null) return;
try
{
Clipboard.SetText(Code);
Code = LocManager.GetOrDefault("CodeCopied", "MainWindow", "CodeCopied");
}
catch (Exception ex)
{
Shell.Logger.Error(ex);
}
finally
{
await Task.Delay(200);
selectedMafile = SelectedMafile;
if (selectedMafile != null)
Code = SteamGuardCodeGenerator.GenerateCode(selectedMafile.SharedSecret);
}
}
}