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;}}
}
}
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;}}
}
}