From 623f8928107300a89dd6edef1cfba1cce5f8ec20 Mon Sep 17 00:00:00 2001 From: "john.jiang" <572164008@qq.com> Date: Mon, 28 Aug 2023 17:36:55 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20Idle=20Fixs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UI/ViewModels/IdleAppsPageViewModel.cs | 97 ++++++------------- .../ViewModels/IdleAppsPageViewModel.props.cs | 70 +++++++++++++ 2 files changed, 97 insertions(+), 70 deletions(-) create mode 100644 src/BD.WTTS.Client.Plugins.SteamIdleCard/UI/ViewModels/IdleAppsPageViewModel.props.cs diff --git a/src/BD.WTTS.Client.Plugins.SteamIdleCard/UI/ViewModels/IdleAppsPageViewModel.cs b/src/BD.WTTS.Client.Plugins.SteamIdleCard/UI/ViewModels/IdleAppsPageViewModel.cs index e81ad426f..af59e78ce 100644 --- a/src/BD.WTTS.Client.Plugins.SteamIdleCard/UI/ViewModels/IdleAppsPageViewModel.cs +++ b/src/BD.WTTS.Client.Plugins.SteamIdleCard/UI/ViewModels/IdleAppsPageViewModel.cs @@ -6,11 +6,13 @@ using System.Linq; namespace BD.WTTS.UI.ViewModels; -public sealed class IdleAppsPageViewModel : ViewModelBase +public sealed partial class IdleAppsPageViewModel : ViewModelBase { readonly ISteamService SteamTool = ISteamService.Instance; readonly ISteamIdleCardService IdleCard = ISteamIdleCardService.Instance; + readonly SteamLoginState steamLoginState = new SteamLoginState(); + public IdleAppsPageViewModel() { this.WhenPropertyChanged(x => x.IsAutoNextOn) @@ -19,65 +21,11 @@ public sealed class IdleAppsPageViewModel : ViewModelBase RunOrStopAutoNext(x.Value); this.IsAutoNextOnTxt = x.Value ? Strings.Idle_StopAutoNext : Strings.Idle_OpenAutoNext; }); + + this.IdleRunStartOrStop = ReactiveCommand.Create(IdleRunStartOrStop_Click); + this.IdleManualRunNext = ReactiveCommand.Create(ManualRunNext); } - [Reactive] - public bool RunLoaingState { get; set; } - - [Reactive] - public bool RunState { get; set; } - - [Reactive] - public string? RuningCountTxt { get; set; } - - [Reactive] - public ObservableCollection IdleGameList { get; set; } = new(); - - /// - /// 当前挂卡游戏 - /// - [Reactive] - public SteamApp? CurrentIdle { get; set; } - - /// - /// 挂卡规则 - /// - [Reactive] - public IdleRule IdleRule { get; set; } - - /// - /// 挂卡顺序 - /// - [Reactive] - public IdleSequentital IdleSequentital { get; set; } - - /// - /// 自动运行下一个游戏 - /// - [Reactive] - public bool IsAutoNextOn { get; set; } - - /// - /// 自动运行下一个游戏文本展示 - /// - [Reactive] - public string? IsAutoNextOnTxt { get; set; } - - #region 魔改 - - /// - /// 最少游戏时间 hours - /// - [Reactive] - private double MinRunTime { get; set; } = 2; - - /// - /// 自动切换游戏时间间隔 ms - /// - [Reactive] - private double SwitchTime { get; set; } = 500; - #endregion - public override void Activation() { base.Activation(); @@ -101,6 +49,7 @@ public sealed class IdleAppsPageViewModel : ViewModelBase if (RunState) { + await SteamConnectService.Current.RefreshGamesListAsync(); await ReadyToGoIdle(); } else @@ -168,13 +117,17 @@ public sealed class IdleAppsPageViewModel : ViewModelBase private async Task SteamAppsSort() { + if (IdleSequentital == IdleSequentital.Mostvalue) + Badges = await IdleCard.GetBadgesAsync(SteamConnectService.Current.CurrentSteamUser!.SteamId64.ToString(), true); + else + Badges = await IdleCard.GetBadgesAsync(SteamConnectService.Current.CurrentSteamUser!.SteamId64.ToString()); + Badges = Badges.Where(x => x.CardsRemaining != 0); // 过滤可掉落卡片的游戏 + + var appid_sorts = Enumerable.Empty(); if (IdleSequentital == IdleSequentital.Default) - IdleGameList.Add(SteamConnectService.Current.SteamApps.Items); + appid_sorts = Badges.Select(s => s.AppId); else { - Badges = await IdleCard.GetBadgesAsync(SteamConnectService.Current.CurrentSteamUser!.SteamId64.ToString()); - Badges = Badges.Where(x => x.CardsRemaining != 0); // 过滤可掉落卡片的游戏 - var appid_sorts = Enumerable.Empty(); switch (IdleSequentital) { case IdleSequentital.LeastCards: @@ -189,10 +142,12 @@ public sealed class IdleAppsPageViewModel : ViewModelBase default: break; } - var apps = SteamConnectService.Current.SteamApps.Items.OrderBy(o => appid_sorts.ToList().FindIndex(x => x == o.AppId)).ToList(); - IdleGameList.Add(apps); } - + var apps = SteamConnectService.Current.SteamApps.Items + .Where(x => appid_sorts.Contains((int)x.AppId)) + .OrderBy(o => appid_sorts.ToList().FindIndex(x => x == o.AppId)) + .ToList(); + IdleGameList.Add(apps); } private async Task ReadyToGoIdle() @@ -238,13 +193,13 @@ public sealed class IdleAppsPageViewModel : ViewModelBase var multi = IdleGameList.Where(x => canIdles.Contains((int)x.AppId)); if (multi.Count() >= 2) { - PauseAutoNext(false); - StartSoloIdle(multi.First()); + PauseAutoNext(true); + StartMultipleIdle(); } else { - PauseAutoNext(true); - StartMultipleIdle(); + PauseAutoNext(false); + StartSoloIdle(multi.First()); } } } @@ -259,7 +214,6 @@ public sealed class IdleAppsPageViewModel : ViewModelBase IdleGameList.Remove(CurrentIdle); StartIdle(); } - } /// @@ -382,6 +336,9 @@ public sealed class IdleAppsPageViewModel : ViewModelBase await AutoNextTask(); await Task.Delay(TimeSpan.FromSeconds(SwitchTime), CancellationTokenSource.Token); } + catch (OperationCanceledException) + { + } catch (Exception ex) { Toast.LogAndShowT(ex); diff --git a/src/BD.WTTS.Client.Plugins.SteamIdleCard/UI/ViewModels/IdleAppsPageViewModel.props.cs b/src/BD.WTTS.Client.Plugins.SteamIdleCard/UI/ViewModels/IdleAppsPageViewModel.props.cs new file mode 100644 index 000000000..1a9a4148f --- /dev/null +++ b/src/BD.WTTS.Client.Plugins.SteamIdleCard/UI/ViewModels/IdleAppsPageViewModel.props.cs @@ -0,0 +1,70 @@ +using BD.SteamClient.Models; +using BD.SteamClient.Models.Idle; +using BD.SteamClient.Services; + +namespace BD.WTTS.UI.ViewModels; + +public sealed partial class IdleAppsPageViewModel +{ + + public ICommand IdleRunStartOrStop { get; } + + public ICommand IdleManualRunNext { get; } + + [Reactive] + public bool RunLoaingState { get; set; } + + [Reactive] + public bool RunState { get; set; } + + [Reactive] + public string? RuningCountTxt { get; set; } + + [Reactive] + public ObservableCollection IdleGameList { get; set; } = new(); + + /// + /// 当前挂卡游戏 + /// + [Reactive] + public SteamApp? CurrentIdle { get; set; } + + /// + /// 挂卡规则 + /// + [Reactive] + public IdleRule IdleRule { get; set; } + + /// + /// 挂卡顺序 + /// + [Reactive] + public IdleSequentital IdleSequentital { get; set; } + + /// + /// 自动运行下一个游戏 + /// + [Reactive] + public bool IsAutoNextOn { get; set; } + + /// + /// 自动运行下一个游戏文本展示 + /// + [Reactive] + public string? IsAutoNextOnTxt { get; set; } + + #region 魔改 + + /// + /// 最少游戏时间 hours + /// + [Reactive] + private double MinRunTime { get; set; } = 2; + + /// + /// 自动切换游戏时间间隔 ms + /// + [Reactive] + private double SwitchTime { get; set; } = 500; + #endregion +}