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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using XFEEDToolBox.Core.Galaxy;
using XFEEDToolBox.Core.Navigation;

namespace XFEEDToolBox.ViewModels;

public partial class ToolboxViewModel
{
    private string galaxyCommodityOptionsContext="";
    private DateTimeOffset galaxyCommodityOptionsReadAt;
    private string galaxyCommodityOptionsStatus="原商品UID定义源尚未连接;不会用市场编号恢复原选择。";
    private void SetGalaxyCommodityOptions(IReadOnlyList<GalaxyNativeCommodityOption> options)
    {
        var filter=GalaxyOriginalCommodities.WithOptions(GalaxyFilter,options);if(!ReferenceEquals(filter,GalaxyFilter))GalaxyFilter=filter;
    }
    private async Task ReadGalaxyCommodityOptionsAsync(CancellationToken token)
    {
        if(GalaxyFilter.Category!=GalaxyFilterCategory.Commodity&&GalaxyFilter.SizeCategory!=GalaxyFilterCategory.Commodity&&GalaxyFilter.OriginalCommodityUid is null&&GalaxyFilter.OriginalCommodityOptions.Count==0)return;
        var context=ThargoidContext();
        if(galaxyCommodityOptionsContext.Length>0&&galaxyCommodityOptionsContext!=context){SetGalaxyCommodityOptions([]);galaxyCommodityOptionsContext="";galaxyCommodityOptionsReadAt=default;}
        if(DateTimeOffset.UtcNow-galaxyCommodityOptionsReadAt<TimeSpan.FromSeconds(2))return;galaxyCommodityOptionsReadAt=DateTimeOffset.UtcNow;
        if(context.Length==0||runtime.FlightDriver is not NativeFlightControlDriver{SupportsGalaxyCommodityOptions:true} driver)
        {SetGalaxyCommodityOptions([]);galaxyCommodityOptionsContext="";galaxyCommodityOptionsStatus="原商品UID定义源尚未连接;不会用市场编号恢复原选择。";return;}
        bool Latest()=>context==ThargoidContext();
        try
        {
            var snapshot=await new NativeGalaxyAccountCatalog(driver.ProcessId).ReadCommodityOptionsAsync(token);token.ThrowIfCancellationRequested();if(!Latest())return;
            galaxyCommodityOptionsContext=snapshot.Available?context:"";SetGalaxyCommodityOptions(snapshot.Available?snapshot.Options:[]);
            galaxyCommodityOptionsStatus=snapshot.Available?$"原商品定义已观察 {snapshot.Options.Count:N0} 项 · {snapshot.UnresolvedCount:N0} 个UID缺定义 · {snapshot.Options.Count(o=>o.PublisherEligible==false):N0} 项库存条件不满足,{snapshot.Options.Count(o=>o.PublisherEligible is null):N0} 项未确认;不是完整原过滤列表。":"原商品枚举或定义尚未就绪;保持未知。";
        }
        catch(OperationCanceledException)when(!token.IsCancellationRequested)
        {if(Latest()){SetGalaxyCommodityOptions([]);galaxyCommodityOptionsContext="";galaxyCommodityOptionsStatus="原商品定义读取超时;旧运行时定义已清除。";}}
        catch(Exception error)when(error is IOException or TimeoutException or InvalidDataException or InvalidOperationException or System.Text.Json.JsonException or FormatException)
        {if(Latest()){SetGalaxyCommodityOptions([]);galaxyCommodityOptionsContext="";galaxyCommodityOptionsStatus="原商品UID定义尚未确认:"+error.Message;}}
    }
}