XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using CommunityToolkit.Mvvm.ComponentModel;
using Microsoft.UI.Xaml;
using XFEEDToolBox.Core.Presentation;

namespace XFEEDToolBox.ViewModels;

public partial class ToolboxViewModel
{
    private CancellationTokenSource? activeMarketRead;
    private string displayedMarketScope="全部缓存 · 保持列表顺序";
    [ObservableProperty,NotifyPropertyChangedFor(nameof(MarketQueryStatusVisibility))]
    public partial string MarketQueryStatus{get;set;}="";
    public Visibility MarketQueryStatusVisibility=>MarketQueryStatus.Length==0?Visibility.Collapsed:Visibility.Visible;
    [ObservableProperty] public partial int MarketTabIndex{get;set;}
    [ObservableProperty,NotifyPropertyChangedFor(nameof(MarketQuoteDetailVisibility),nameof(MarketQuotePromptVisibility))]
    public partial MarketLiveRow? SelectedMarketRow{get;set;}
    public Visibility MarketQuoteDetailVisibility=>SelectedMarketRow is null?Visibility.Collapsed:Visibility.Visible;
    public Visibility MarketQuotePromptVisibility=>SelectedMarketRow is null?Visibility.Visible:Visibility.Collapsed;
    public Visibility MarketEmptyVisibility=>MarketRows.Count==0?Visibility.Visible:Visibility.Collapsed;
    public Visibility InventoryEmptyVisibility=>InventoryRows.Count==0?Visibility.Visible:Visibility.Collapsed;
    public bool MarketCanPreviousPage=>marketPage>0;
    public bool MarketCanNextPage=>MarketRows.Count==150;
    public string MarketScopeDescription=>displayedMarketScope;
    public string MarketEmptyMessage=>OnlyCurrentStation&&CurrentPlayer.MarketId is null
        ?"尚未读取当前站点市场,可切换到全部缓存查看。"
        :string.IsNullOrWhiteSpace(MarketSearch)?"缓存中尚无商品报价,可在工具维护中导入行情。":"没有匹配的商品、星系或站点,请调整搜索词。";
    public string InventorySnapshotSource
    {
        get
        {
            var player=CurrentPlayer;
            var (source,at,reliable)=InventoryTab switch
            {
                1=>("Journal 材料快照",player.MaterialsAt,player.MaterialsReliable),
                2=>("ShipLocker.json / Journal",player.LockerAt,player.LockerReliable),
                3=>("Backpack.json / Journal",player.BackpackAt,player.BackpackReliable),
                _=>("Cargo.json / Journal",player.CargoAt,player.CargoReliable)
            };
            return source+(at is {} time?$" · {time.ToLocalTime():MM-dd HH:mm:ss}":" · 尚无采集时间")+(reliable?"":" · 等待完整记录");
        }
    }
    private void RefreshMarketPresentation()
    {
        MarketQueryStatus="";
        var scope=OnlyCurrentStation?CurrentPlayer.MarketId is null?"当前站点 · 尚未读取市场记录":"当前站点 · "+CurrentPlayer.StationName:"全部缓存";
        displayedMarketScope=scope+" · "+(MarketSortIndex switch{1=>"采集时间 · 新到旧",2=>"买价 · 高到低",3=>"卖价 · 高到低",4=>"供给 · 高到低",5=>"需求 · 高到低",_=>"保持列表顺序"});
        if(SelectedMarketRow is null||!MarketRows.Contains(SelectedMarketRow))SelectedMarketRow=MarketRows.FirstOrDefault();
        foreach(var name in new[]{nameof(MarketEmptyVisibility),nameof(MarketEmptyMessage),nameof(MarketCanPreviousPage),nameof(MarketCanNextPage),nameof(MarketScopeDescription)})OnPropertyChanged(name);
    }
    private CancellationToken BeginMarketRead()
    {
        activeMarketRead?.Dispose();
        activeMarketRead=CancellationTokenSource.CreateLinkedTokenSource(lifetime.Token);
        MarketQueryStatus="正在查询,结果更新前保留上次有效列表。";
        return activeMarketRead.Token;
    }
    private void CancelMarketRead()
    {
        activeMarketRead?.Cancel();
        MarketQueryStatus="正在查询,结果更新前保留上次有效列表。";
    }
    private void RefreshInventoryPresentation()
    {
        OnPropertyChanged(nameof(InventoryEmptyVisibility));OnPropertyChanged(nameof(InventorySnapshotSource));
        OnPropertyChanged(nameof(MarketScopeDescription));OnPropertyChanged(nameof(MarketEmptyMessage));
    }
}