using Qwilight.NoteFile; using Qwilight.Utilities; using System.Collections.ObjectModel; using System.Windows.Media; namespace Qwilight.ViewModel { public sealed class VoteViewModel : BaseViewModel { public override double TargetLength => 0.9; VoteComputing _valueComputing; string _voteName; bool _isVoteGroupsLoading; bool _isVoteGroupLoading; string _www = string.Empty; public sealed class VoteComputing : Computing { public override BaseNoteFile.NoteVariety NoteVarietyValue => default; public Brush PointedPaint => Paints.DefaultPointedPaint; public string Www { get; set; } public bool IsFavorite { get; set; } public override void OnCompiled() { } public override void OnFault(Exception e) { } } public ObservableCollection<VoteComputing> ComputingValues { get; } = new(); public VoteComputing ComputingValue { get => _valueComputing; set { if (SetProperty(ref _valueComputing, value, nameof(ComputingValue)) && value != null) { Www = value.Www; } } } public bool IsVoteGroupLoading { get => _isVoteGroupLoading; set => SetProperty(ref _isVoteGroupLoading, value, nameof(IsVoteGroupLoading)); } public override bool OpeningCondition => ViewModels.Instance.MainValue.IsNoteFileMode; public ObservableCollection<string> VoteNameCollection { get; } = new(); public string VoteName { get => _voteName; set { if (SetProperty(ref _voteName, value, nameof(VoteName))) { IsVoteGroupLoading = true; TwilightSystem.Instance.GetWwwParallel<JSON.TwilightWwwVote[]>($"{QwilightComponent.QwilightAPI}/vote?voteName={value}").ContinueWith(async t => { var twilightWwwVotes = await t; if (twilightWwwVotes != null && VoteName == value) { Utility.SetUICollection(ComputingValues, twilightWwwVotes.Select(data => new VoteComputing { Www = data.www, IsFavorite = data.isFavorite, Title = data.title, Artist = data.artist, Genre = data.genre }).ToArray()); } IsVoteGroupLoading = false; }, TaskContinuationOptions.ExecuteSynchronously); } } } public string Www { get => _www; set => SetProperty(ref _www, value, nameof(Www)); } public bool IsVoteGroupsLoading { get => _isVoteGroupsLoading; set => SetProperty(ref _isVoteGroupsLoading, value, nameof(IsVoteGroupsLoading)); } public override void OnCollapsed() { base.OnCollapsed(); ViewModels.Instance.MainValue.HandleAutoComputer(); } public override void OnOpened() { base.OnOpened(); ViewModels.Instance.MainValue.CloseAutoComputer(); UIHandler.Instance.HandleParallel(async () => { IsVoteGroupsLoading = true; var voteNames = await TwilightSystem.Instance.GetWwwParallel<string[]>($"{QwilightComponent.QwilightAPI}/vote"); if (voteNames != null) { Utility.SetUICollection(VoteNameCollection, voteNames); VoteName ??= VoteNameCollection.FirstOrDefault(); } IsVoteGroupsLoading = false; }); } } }