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