Newer
Older
Qwilight / Qwilight / ViewModel / AvatarEdgeViewModel.cs
@Taehui Taehui on 15 Nov 2 KB 2023-11-15 오후 9:55
using Qwilight.UIComponent;
using Qwilight.Utilities;
using System.Collections.ObjectModel;
using System.Windows;

namespace Qwilight.ViewModel
{
    public sealed class AvatarEdgeViewModel : BaseViewModel
    {
        bool _isAvatarEdgeLoading;
        AvatarEdgeItem _avatarEdgeItem;

        public override double TargetLength => 0.4;

        public override double TargetHeight => 0.6;

        public override HorizontalAlignment LengthSystem => HorizontalAlignment.Center;

        public override VerticalAlignment HeightSystem => VerticalAlignment.Bottom;

        public ObservableCollection<AvatarEdgeItem> AvatarEdgeItemCollection { get; } = new();

        public AvatarEdgeItem AvatarEdgeItemValue
        {
            get => _avatarEdgeItem;

            set => SetProperty(ref _avatarEdgeItem, value, nameof(AvatarEdgeItemValue));
        }

        public bool IsAvatarEdgeLoading
        {
            get => _isAvatarEdgeLoading;

            set => SetProperty(ref _isAvatarEdgeLoading, value, nameof(IsAvatarEdgeLoading));
        }

        public void OnPointLower() => Close();

        public override async void OnOpened()
        {
            base.OnOpened();
            IsAvatarEdgeLoading = true;

            var edgeIDs = await TwilightSystem.Instance.GetWwwParallel<string[]>($"{QwilightComponent.QwilightAPI}/edges?avatarID={TwilightSystem.Instance.AvatarID}").ConfigureAwait(false);
            if (edgeIDs != null)
            {
                Utility.SetUICollection(AvatarEdgeItemCollection, edgeIDs.Select(edgeID => new AvatarEdgeItem
                {
                    EdgeID = edgeID,
                }).ToArray());
            }

            IsAvatarEdgeLoading = false;
        }

        public override void OnCollasped()
        {
            base.OnCollasped();
            var avatarEdgeItemValue = AvatarEdgeItemValue;
            if (avatarEdgeItemValue != null)
            {
                TwilightSystem.Instance.SendParallel(Event.Types.EventID.AvatarEdge, avatarEdgeItemValue.EdgeID);
                ViewModels.Instance.AvatarValue.InitAvatarWwwValue(TwilightSystem.Instance.AvatarID, null, avatarEdgeItemValue.Drawing);
            }
        }
    }
}